xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/doc/gcc.info (revision 796c32c94f6e154afc9de0f63da35c91bb739b45)
1This is doc/gcc.info, produced by makeinfo version 4.8 from
2/usr/src8/tools/gcc/../../external/gpl3/gcc/dist/gcc/doc/gcc.texi.
3
4 Copyright (C) 1988-2015 Free Software Foundation, Inc.
5
6 Permission is granted to copy, distribute and/or modify this document
7under the terms of the GNU Free Documentation License, Version 1.3 or
8any later version published by the Free Software Foundation; with the
9Invariant Sections being "Funding Free Software", the Front-Cover Texts
10being (a) (see below), and with the Back-Cover Texts being (b) (see
11below).  A copy of the license is included in the section entitled "GNU
12Free Documentation License".
13
14 (a) The FSF's Front-Cover Text is:
15
16 A GNU Manual
17
18 (b) The FSF's Back-Cover Text is:
19
20 You have freedom to copy and modify this GNU Manual, like GNU
21software.  Copies published by the Free Software Foundation raise
22funds for GNU development.
23
24INFO-DIR-SECTION Software development
25START-INFO-DIR-ENTRY
26* gcc: (gcc).                  The GNU Compiler Collection.
27* g++: (gcc).                  The GNU C++ compiler.
28* gcov: (gcc) Gcov.            `gcov'--a test coverage program.
29* gcov-tool: (gcc) Gcov-tool.  `gcov-tool'--an offline gcda profile processing program.
30END-INFO-DIR-ENTRY
31 This file documents the use of the GNU compilers.
32
33 Copyright (C) 1988-2015 Free Software Foundation, Inc.
34
35 Permission is granted to copy, distribute and/or modify this document
36under the terms of the GNU Free Documentation License, Version 1.3 or
37any later version published by the Free Software Foundation; with the
38Invariant Sections being "Funding Free Software", the Front-Cover Texts
39being (a) (see below), and with the Back-Cover Texts being (b) (see
40below).  A copy of the license is included in the section entitled "GNU
41Free Documentation License".
42
43 (a) The FSF's Front-Cover Text is:
44
45 A GNU Manual
46
47 (b) The FSF's Back-Cover Text is:
48
49 You have freedom to copy and modify this GNU Manual, like GNU
50software.  Copies published by the Free Software Foundation raise
51funds for GNU development.
52
53
54
55File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
56
57Introduction
58************
59
60This manual documents how to use the GNU compilers, as well as their
61features and incompatibilities, and how to report bugs.  It corresponds
62to the compilers (NetBSD nb1 20160606) version 5.4.0.  The internals of
63the GNU compilers, including how to port them to new targets and some
64information about how to write front ends for new languages, are
65documented in a separate manual.  *Note Introduction: (gccint)Top.
66
67* Menu:
68
69* G++ and GCC::     You can compile C or C++ programs.
70* Standards::       Language standards supported by GCC.
71* Invoking GCC::    Command options supported by `gcc'.
72* C Implementation:: How GCC implements the ISO C specification.
73* C++ Implementation:: How GCC implements the ISO C++ specification.
74* C Extensions::    GNU extensions to the C language family.
75* C++ Extensions::  GNU extensions to the C++ language.
76* Objective-C::     GNU Objective-C runtime features.
77* Compatibility::   Binary Compatibility
78* Gcov::            `gcov'---a test coverage program.
79* Gcov-tool::       `gcov-tool'---an offline gcda profile processing program.
80* Trouble::         If you have trouble using GCC.
81* Bugs::            How, why and where to report bugs.
82* Service::         How To Get Help with GCC
83* Contributing::    How to contribute to testing and developing GCC.
84
85* Funding::         How to help assure funding for free software.
86* GNU Project::     The GNU Project and GNU/Linux.
87
88* Copying::         GNU General Public License says
89                    how you can copy and share GCC.
90* GNU Free Documentation License:: How you can copy and share this manual.
91* Contributors::    People who have contributed to GCC.
92
93* Option Index::    Index to command line options.
94* Keyword Index::   Index of concepts and symbol names.
95
96
97File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Prev: Top,  Up: Top
98
991 Programming Languages Supported by GCC
100****************************************
101
102GCC stands for "GNU Compiler Collection".  GCC is an integrated
103distribution of compilers for several major programming languages.
104These languages currently include C, C++, Objective-C, Objective-C++,
105Java, Fortran, Ada, and Go.
106
107 The abbreviation "GCC" has multiple meanings in common use.  The
108current official meaning is "GNU Compiler Collection", which refers
109generically to the complete suite of tools.  The name historically stood
110for "GNU C Compiler", and this usage is still common when the emphasis
111is on compiling C programs.  Finally, the name is also used when
112speaking of the "language-independent" component of GCC: code shared
113among the compilers for all supported languages.
114
115 The language-independent component of GCC includes the majority of the
116optimizers, as well as the "back ends" that generate machine code for
117various processors.
118
119 The part of a compiler that is specific to a particular language is
120called the "front end".  In addition to the front ends that are
121integrated components of GCC, there are several other front ends that
122are maintained separately.  These support languages such as Pascal,
123Mercury, and COBOL.  To use these, they must be built together with GCC
124proper.
125
126 Most of the compilers for languages other than C have their own names.
127The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
128talk about compiling one of those languages, we might refer to that
129compiler by its own name, or as GCC.  Either is correct.
130
131 Historically, compilers for many languages, including C++ and Fortran,
132have been implemented as "preprocessors" which emit another high level
133language such as C.  None of the compilers included in GCC are
134implemented this way; they all generate machine code directly.  This
135sort of preprocessor should not be confused with the "C preprocessor",
136which is an integral feature of the C, C++, Objective-C and
137Objective-C++ languages.
138
139
140File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
141
1422 Language Standards Supported by GCC
143*************************************
144
145For each language compiled by GCC for which there is a standard, GCC
146attempts to follow one or more versions of that standard, possibly with
147some exceptions, and possibly with some extensions.
148
1492.1 C Language
150==============
151
152GCC supports three versions of the C standard, although support for the
153most recent version is not yet complete.
154
155 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
156published in 1990.  This standard was ratified as an ISO standard
157(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
158between these publications, although the sections of the ANSI standard
159were renumbered and became clauses in the ISO standard.  This standard,
160in both its forms, is commonly known as "C89", or occasionally as
161"C90", from the dates of ratification.  The ANSI standard, but not the
162ISO standard, also came with a Rationale document.  To select this
163standard in GCC, use one of the options `-ansi', `-std=c90' or
164`-std=iso9899:1990'; to obtain all the diagnostics required by the
165standard, you should also specify `-pedantic' (or `-pedantic-errors' if
166you want them to be errors rather than warnings).  *Note Options
167Controlling C Dialect: C Dialect Options.
168
169 Errors in the 1990 ISO C standard were corrected in two Technical
170Corrigenda published in 1994 and 1996.  GCC does not support the
171uncorrected version.
172
173 An amendment to the 1990 standard was published in 1995.  This
174amendment added digraphs and `__STDC_VERSION__' to the language, but
175otherwise concerned the library.  This amendment is commonly known as
176"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
177select this standard in GCC, use the option `-std=iso9899:199409'
178(with, as for other standard versions, `-pedantic' to receive all
179required diagnostics).
180
181 A new edition of the ISO C standard was published in 1999 as ISO/IEC
1829899:1999, and is commonly known as "C99".  GCC has substantially
183complete support for this standard version; see
184`http://gcc.gnu.org/c99status.html' for details.  To select this
185standard, use `-std=c99' or `-std=iso9899:1999'.  (While in
186development, drafts of this standard version were referred to as "C9X".)
187
188 Errors in the 1999 ISO C standard were corrected in three Technical
189Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
190uncorrected version.
191
192 A fourth version of the C standard, known as "C11", was published in
1932011 as ISO/IEC 9899:2011.  GCC has substantially complete support for
194this standard, enabled with `-std=c11' or `-std=iso9899:2011'.  (While
195in development, drafts of this standard version were referred to as
196"C1X".)
197
198 By default, GCC provides some extensions to the C language that on
199rare occasions conflict with the C standard.  *Note Extensions to the C
200Language Family: C Extensions.  Use of the `-std' options listed above
201will disable these extensions where they conflict with the C standard
202version selected.  You may also select an extended version of the C
203language explicitly with `-std=gnu90' (for C90 with GNU extensions),
204`-std=gnu99' (for C99 with GNU extensions) or `-std=gnu11' (for C11
205with GNU extensions).  The default, if no C language dialect options
206are given, is `-std=gnu11'.  Some features that are part of the C99
207standard are accepted as extensions in C90 mode, and some features that
208are part of the C11 standard are accepted as extensions in C90 and C99
209modes.
210
211 The ISO C standard defines (in clause 4) two classes of conforming
212implementation.  A "conforming hosted implementation" supports the
213whole standard including all the library facilities; a "conforming
214freestanding implementation" is only required to provide certain
215library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
216and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; since C99,
217also those in `<stdbool.h>' and `<stdint.h>'; and since C11, also those
218in `<stdalign.h>' and `<stdnoreturn.h>'.  In addition, complex types,
219added in C99, are not required for freestanding implementations.  The
220standard also defines two environments for programs, a "freestanding
221environment", required of all implementations and which may not have
222library facilities beyond those required of freestanding
223implementations, where the handling of program startup and termination
224are implementation-defined, and a "hosted environment", which is not
225required, in which all the library facilities are provided and startup
226is through a function `int main (void)' or `int main (int, char *[])'.
227An OS kernel would be a freestanding environment; a program using the
228facilities of an operating system would normally be in a hosted
229implementation.
230
231 GCC aims towards being usable as a conforming freestanding
232implementation, or as the compiler for a conforming hosted
233implementation.  By default, it will act as the compiler for a hosted
234implementation, defining `__STDC_HOSTED__' as `1' and presuming that
235when the names of ISO C functions are used, they have the semantics
236defined in the standard.  To make it act as a conforming freestanding
237implementation for a freestanding environment, use the option
238`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
239make assumptions about the meanings of function names from the standard
240library, with exceptions noted below.  To build an OS kernel, you may
241well still need to make your own arrangements for linking and startup.
242*Note Options Controlling C Dialect: C Dialect Options.
243
244 GCC does not provide the library facilities required only of hosted
245implementations, nor yet all the facilities required by C99 of
246freestanding implementations on all platforms; to use the facilities of
247a hosted environment, you will need to find them elsewhere (for
248example, in the GNU C library).  *Note Standard Libraries: Standard
249Libraries.
250
251 Most of the compiler support routines used by GCC are present in
252`libgcc', but there are a few exceptions.  GCC requires the
253freestanding environment provide `memcpy', `memmove', `memset' and
254`memcmp'.  Finally, if `__builtin_trap' is used, and the target does
255not implement the `trap' pattern, then GCC will emit a call to `abort'.
256
257 For references to Technical Corrigenda, Rationale documents and
258information concerning the history of C that is available online, see
259`http://gcc.gnu.org/readings.html'
260
2612.2 C++ Language
262================
263
264GCC supports the original ISO C++ standard (1998) and contains
265experimental support for the second ISO C++ standard (2011).
266
267 The original ISO C++ standard was published as the ISO standard
268(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
2692003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and
270C++03, respectively. GCC implements the majority of C++98 (`export' is
271a notable exception) and most of the changes in C++03.  To select this
272standard in GCC, use one of the options `-ansi', `-std=c++98', or
273`-std=c++03'; to obtain all the diagnostics required by the standard,
274you should also specify `-pedantic' (or `-pedantic-errors' if you want
275them to be errors rather than warnings).
276
277 A revised ISO C++ standard was published in 2011 as ISO/IEC
27814882:2011, and is referred to as C++11; before its publication it was
279commonly referred to as C++0x.  C++11 contains several changes to the
280C++ language, most of which have been implemented in an experimental
281C++11 mode in GCC.  For information regarding the C++11 features
282available in the experimental C++11 mode, see
283`http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in
284GCC, use the option `-std=c++11'; to obtain all the diagnostics
285required by the standard, you should also specify `-pedantic' (or
286`-pedantic-errors' if you want them to be errors rather than warnings).
287
288 More information about the C++ standards is available on the ISO C++
289committee's web site at `http://www.open-std.org/jtc1/sc22/wg21/'.
290
291 By default, GCC provides some extensions to the C++ language; *Note
292Options Controlling C++ Dialect: C++ Dialect Options.  Use of the
293`-std' option listed above will disable these extensions.  You may also
294select an extended version of the C++ language explicitly with
295`-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++11' (for
296C++11 with GNU extensions).  The default, if no C++ language dialect
297options are given, is `-std=gnu++98'.
298
2992.3 Objective-C and Objective-C++ Languages
300===========================================
301
302GCC supports "traditional" Objective-C (also known as "Objective-C
3031.0") and contains support for the Objective-C exception and
304synchronization syntax.  It has also support for a number of
305"Objective-C 2.0" language extensions, including properties, fast
306enumeration (only for Objective-C), method attributes and the @optional
307and @required keywords in protocols.  GCC supports Objective-C++ and
308features available in Objective-C are also available in Objective-C++.
309
310 GCC by default uses the GNU Objective-C runtime library, which is part
311of GCC and is not the same as the Apple/NeXT Objective-C runtime
312library used on Apple systems.  There are a number of differences
313documented in this manual.  The options `-fgnu-runtime' and
314`-fnext-runtime' allow you to switch between producing output that
315works with the GNU Objective-C runtime library and output that works
316with the Apple/NeXT Objective-C runtime library.
317
318 There is no formal written standard for Objective-C or Objective-C++.
319The authoritative manual on traditional Objective-C (1.0) is
320"Object-Oriented Programming and the Objective-C Language", available
321at a number of web sites:
322   * `http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf'
323     is the original NeXTstep document;
324
325   * `http://objc.toodarkpark.net' is the same document in another
326     format;
327
328   *
329     `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
330     has an updated version but make sure you search for "Object
331     Oriented Programming and the Objective-C Programming Language 1.0",
332     not documentation on the newer "Objective-C 2.0" language
333
334 The Objective-C exception and synchronization syntax (that is, the
335keywords @try, @throw, @catch, @finally and @synchronized) is supported
336by GCC and is enabled with the option `-fobjc-exceptions'.  The syntax
337is briefly documented in this manual and in the Objective-C 2.0 manuals
338from Apple.
339
340 The Objective-C 2.0 language extensions and features are automatically
341enabled; they include properties (via the @property, @synthesize and
342@dynamic keywords), fast enumeration (not available in Objective-C++),
343attributes for methods (such as deprecated, noreturn, sentinel,
344format), the unused attribute for method arguments, the @package
345keyword for instance variables and the @optional and @required keywords
346in protocols.  You can disable all these Objective-C 2.0 language
347extensions with the option `-fobjc-std=objc1', which causes the
348compiler to recognize the same Objective-C language syntax recognized
349by GCC 4.0, and to produce an error if one of the new features is used.
350
351 GCC has currently no support for non-fragile instance variables.
352
353 The authoritative manual on Objective-C 2.0 is available from Apple:
354   *
355     `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/'
356
357 For more information concerning the history of Objective-C that is
358available online, see `http://gcc.gnu.org/readings.html'
359
3602.4 Go Language
361===============
362
363As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
364described at `http://golang.org/doc/go1.html'.
365
3662.5 References for Other Languages
367==================================
368
369*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
370conformance and compatibility of the Ada compiler.
371
372 *Note Standards: (gfortran)Standards, for details of standards
373supported by GNU Fortran.
374
375 *Note Compatibility with the Java Platform: (gcj)Compatibility, for
376details of compatibility between `gcj' and the Java Platform.
377
378
379File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
380
3813 GCC Command Options
382*********************
383
384When you invoke GCC, it normally does preprocessing, compilation,
385assembly and linking.  The "overall options" allow you to stop this
386process at an intermediate stage.  For example, the `-c' option says
387not to run the linker.  Then the output consists of object files output
388by the assembler.
389
390 Other options are passed on to one stage of processing.  Some options
391control the preprocessor and others the compiler itself.  Yet other
392options control the assembler and linker; most of these are not
393documented here, since you rarely need to use any of them.
394
395 Most of the command-line options that you can use with GCC are useful
396for C programs; when an option is only useful with another language
397(usually C++), the explanation says so explicitly.  If the description
398for a particular option does not mention a source language, you can use
399that option with all supported languages.
400
401 *Note Compiling C++ Programs: Invoking G++, for a summary of special
402options for compiling C++ programs.
403
404 The `gcc' program accepts options and file names as operands.  Many
405options have multi-letter names; therefore multiple single-letter
406options may _not_ be grouped: `-dv' is very different from `-d -v'.
407
408 You can mix options and other arguments.  For the most part, the order
409you use doesn't matter.  Order does matter when you use several options
410of the same kind; for example, if you specify `-L' more than once, the
411directories are searched in the order specified.  Also, the placement
412of the `-l' option is significant.
413
414 Many options have long names starting with `-f' or with `-W'--for
415example, `-fmove-loop-invariants', `-Wformat' and so on.  Most of these
416have both positive and negative forms; the negative form of `-ffoo' is
417`-fno-foo'.  This manual documents only one of these two forms,
418whichever one is not the default.
419
420 *Note Option Index::, for an index to GCC's options.
421
422* Menu:
423
424* Option Summary::      Brief list of all options, without explanations.
425* Overall Options::     Controlling the kind of output:
426                        an executable, object files, assembler files,
427                        or preprocessed source.
428* Invoking G++::        Compiling C++ programs.
429* C Dialect Options::   Controlling the variant of C language compiled.
430* C++ Dialect Options:: Variations on C++.
431* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
432                        and Objective-C++.
433* Language Independent Options:: Controlling how diagnostics should be
434                        formatted.
435* Warning Options::     How picky should the compiler be?
436* Debugging Options::   Symbol tables, measurements, and debugging dumps.
437* Optimize Options::    How much optimization?
438* Preprocessor Options:: Controlling header files and macro definitions.
439                         Also, getting dependency information for Make.
440* Assembler Options::   Passing options to the assembler.
441* Link Options::        Specifying libraries and so on.
442* Directory Options::   Where to find header files and libraries.
443                        Where to find the compiler executable files.
444* Spec Files::          How to pass switches to sub-processes.
445* Target Options::      Running a cross-compiler, or an old version of GCC.
446* Submodel Options::    Specifying minor hardware or convention variations,
447                        such as 68010 vs 68020.
448* Code Gen Options::    Specifying conventions for function calls, data layout
449                        and register usage.
450* Environment Variables:: Env vars that affect GCC.
451* Precompiled Headers:: Compiling a header once, and using it many times.
452
453
454File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
455
4563.1 Option Summary
457==================
458
459Here is a summary of all the options, grouped by type.  Explanations are
460in the following sections.
461
462_Overall Options_
463     *Note Options Controlling the Kind of Output: Overall Options.
464          -c  -S  -E  -o FILE  -no-canonical-prefixes
465          -pipe  -pass-exit-codes
466          -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
467          --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
468          -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE
469
470_C Language Options_
471     *Note Options Controlling C Dialect: C Dialect Options.
472          -ansi  -std=STANDARD  -fgnu89-inline
473          -aux-info FILENAME -fallow-parameterless-variadic-functions
474          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
475          -fhosted  -ffreestanding -fopenacc -fopenmp -fopenmp-simd
476          -fms-extensions -fplan9-extensions -trigraphs -traditional -traditional-cpp
477          -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
478          -fsigned-bitfields  -fsigned-char
479          -funsigned-bitfields  -funsigned-char
480
481_C++ Language Options_
482     *Note Options Controlling C++ Dialect: C++ Dialect Options.
483          -fabi-version=N  -fno-access-control  -fcheck-new
484          -fconstexpr-depth=N  -ffriend-injection
485          -fno-elide-constructors
486          -fno-enforce-eh-specs
487          -ffor-scope  -fno-for-scope  -fno-gnu-keywords
488          -fno-implicit-templates
489          -fno-implicit-inline-templates
490          -fno-implement-inlines  -fms-extensions
491          -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
492          -fno-optional-diags  -fpermissive
493          -fno-pretty-templates
494          -frepo  -fno-rtti -fsized-deallocation
495          -fstats  -ftemplate-backtrace-limit=N
496          -ftemplate-depth=N
497          -fno-threadsafe-statics  -fuse-cxa-atexit
498          -fno-weak  -nostdinc++
499          -fvisibility-inlines-hidden
500          -fvtable-verify=[std|preinit|none]
501          -fvtv-counts -fvtv-debug
502          -fvisibility-ms-compat
503          -fext-numeric-literals
504          -Wabi=N  -Wabi-tag  -Wconversion-null  -Wctor-dtor-privacy
505          -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing
506          -Wnoexcept -Wnon-virtual-dtor  -Wreorder
507          -Weffc++  -Wstrict-null-sentinel
508          -Wno-non-template-friend  -Wold-style-cast
509          -Woverloaded-virtual  -Wno-pmf-conversions
510          -Wsign-promo
511
512_Objective-C and Objective-C++ Language Options_
513     *Note Options Controlling Objective-C and Objective-C++ Dialects:
514     Objective-C and Objective-C++ Dialect Options.
515          -fconstant-string-class=CLASS-NAME
516          -fgnu-runtime  -fnext-runtime
517          -fno-nil-receivers
518          -fobjc-abi-version=N
519          -fobjc-call-cxx-cdtors
520          -fobjc-direct-dispatch
521          -fobjc-exceptions
522          -fobjc-gc
523          -fobjc-nilcheck
524          -fobjc-std=objc1
525          -fno-local-ivars
526          -fivar-visibility=[public|protected|private|package]
527          -freplace-objc-classes
528          -fzero-link
529          -gen-decls
530          -Wassign-intercept
531          -Wno-protocol  -Wselector
532          -Wstrict-selector-match
533          -Wundeclared-selector
534
535_Language Independent Options_
536     *Note Options to Control Diagnostic Messages Formatting: Language
537     Independent Options.
538          -fmessage-length=N
539          -fdiagnostics-show-location=[once|every-line]
540          -fdiagnostics-color=[auto|never|always]
541          -fno-diagnostics-show-option -fno-diagnostics-show-caret
542
543_Warning Options_
544     *Note Options to Request or Suppress Warnings: Warning Options.
545          -fsyntax-only  -fmax-errors=N  -Wpedantic
546          -pedantic-errors
547          -w  -Wextra  -Wall  -Waddress  -Waggregate-return
548          -Waggressive-loop-optimizations -Warray-bounds -Warray-bounds=N
549          -Wbool-compare
550          -Wno-attributes -Wno-builtin-macro-redefined
551          -Wc90-c99-compat -Wc99-c11-compat
552          -Wc++-compat -Wc++11-compat -Wc++14-compat -Wcast-align  -Wcast-qual
553          -Wchar-subscripts -Wclobbered  -Wcomment -Wconditionally-supported
554          -Wconversion -Wcoverage-mismatch -Wdate-time -Wdelete-incomplete -Wno-cpp
555          -Wno-deprecated -Wno-deprecated-declarations -Wno-designated-init
556          -Wdisabled-optimization
557          -Wno-discarded-qualifiers -Wno-discarded-array-qualifiers
558          -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
559          -Wno-endif-labels -Werror  -Werror=*
560          -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
561          -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
562          -Wformat-security  -Wformat-signedness  -Wformat-y2k
563          -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init
564          -Wignored-qualifiers  -Wincompatible-pointer-types
565          -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
566          -Winit-self  -Winline  -Wno-int-conversion
567          -Wno-int-to-pointer-cast -Wno-invalid-offsetof
568          -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
569          -Wlogical-op -Wlogical-not-parentheses -Wlong-long
570          -Wmain -Wmaybe-uninitialized -Wmemset-transposed-args -Wmissing-braces
571          -Wmissing-field-initializers -Wmissing-include-dirs
572          -Wno-multichar  -Wnonnull  -Wnormalized=[none|id|nfc|nfkc]
573           -Wodr  -Wno-overflow  -Wopenmp-simd
574          -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
575          -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
576          -Wpointer-arith  -Wno-pointer-to-int-cast
577          -Wredundant-decls  -Wno-return-local-addr
578          -Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar
579          -Wshift-count-negative -Wshift-count-overflow
580          -Wsign-compare  -Wsign-conversion -Wfloat-conversion
581          -Wsizeof-pointer-memaccess  -Wsizeof-array-argument
582          -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing
583          -Wstrict-aliasing=n  -Wstrict-overflow -Wstrict-overflow=N
584          -Wsuggest-attribute=[pure|const|noreturn|format]
585          -Wsuggest-final-types  -Wsuggest-final-methods  -Wsuggest-override
586          -Wmissing-format-attribute
587          -Wswitch  -Wswitch-default  -Wswitch-enum -Wswitch-bool -Wsync-nand
588          -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
589          -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
590          -Wunsuffixed-float-constants  -Wunused  -Wunused-function
591          -Wunused-label  -Wunused-local-typedefs -Wunused-parameter
592          -Wno-unused-result -Wunused-value  -Wunused-variable
593          -Wunused-but-set-parameter -Wunused-but-set-variable
594          -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance
595          -Wvla -Wvolatile-register-var  -Wwrite-strings
596          -Wzero-as-null-pointer-constant
597
598_C and Objective-C-only Warning Options_
599          -Wbad-function-cast  -Wmissing-declarations
600          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
601          -Wold-style-declaration  -Wold-style-definition
602          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
603          -Wdeclaration-after-statement -Wpointer-sign
604
605_Debugging Options_
606     *Note Options for Debugging Your Program or GCC: Debugging Options.
607          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
608          -fsanitize=STYLE -fsanitize-recover -fsanitize-recover=STYLE
609          -fasan-shadow-offset=NUMBER -fsanitize-undefined-trap-on-error
610          -fcheck-pointer-bounds -fchkp-check-incomplete-type
611          -fchkp-first-field-has-own-bounds -fchkp-narrow-bounds
612          -fchkp-narrow-to-innermost-array -fchkp-optimize
613          -fchkp-use-fast-string-functions -fchkp-use-nochk-string-functions
614          -fchkp-use-static-bounds -fchkp-use-static-const-bounds
615          -fchkp-treat-zero-dynamic-size-as-infinite -fchkp-check-read
616          -fchkp-check-read -fchkp-check-write -fchkp-store-bounds
617          -fchkp-instrument-calls -fchkp-instrument-marked-only
618          -fchkp-use-wrappers
619          -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
620          -fdisable-ipa-PASS_NAME
621          -fdisable-rtl-PASS_NAME
622          -fdisable-rtl-PASS-NAME=RANGE-LIST
623          -fdisable-tree-PASS_NAME
624          -fdisable-tree-PASS-NAME=RANGE-LIST
625          -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
626          -fdump-translation-unit[-N]
627          -fdump-class-hierarchy[-N]
628          -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
629          -fdump-passes
630          -fdump-statistics
631          -fdump-tree-all
632          -fdump-tree-original[-N]
633          -fdump-tree-optimized[-N]
634          -fdump-tree-cfg -fdump-tree-alias
635          -fdump-tree-ch
636          -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
637          -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
638          -fdump-tree-gimple[-raw]
639          -fdump-tree-dom[-N]
640          -fdump-tree-dse[-N]
641          -fdump-tree-phiprop[-N]
642          -fdump-tree-phiopt[-N]
643          -fdump-tree-forwprop[-N]
644          -fdump-tree-copyrename[-N]
645          -fdump-tree-nrv -fdump-tree-vect
646          -fdump-tree-sink
647          -fdump-tree-sra[-N]
648          -fdump-tree-forwprop[-N]
649          -fdump-tree-fre[-N]
650          -fdump-tree-vtable-verify
651          -fdump-tree-vrp[-N]
652          -fdump-tree-storeccp[-N]
653          -fdump-final-insns=FILE
654          -fcompare-debug[=OPTS]  -fcompare-debug-second
655          -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
656          -feliminate-unused-debug-symbols -femit-class-debug-always
657          -fenable-KIND-PASS
658          -fenable-KIND-PASS=RANGE-LIST
659          -fdebug-types-section -fmem-report-wpa
660          -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
661          -fopt-info
662          -fopt-info-OPTIONS[=FILE]
663          -frandom-seed=STRING -fsched-verbose=N
664          -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
665          -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking
666          -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
667          -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
668          -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
669          -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
670          -gvms  -gxcoff  -gxcoff+ -gz[=TYPE]
671          -fno-merge-debug-strings -fno-dwarf2-cfi-asm
672          -fdebug-prefix-map=OLD=NEW
673          -femit-struct-debug-baseonly -femit-struct-debug-reduced
674          -femit-struct-debug-detailed[=SPEC-LIST]
675          -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
676          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
677          -print-prog-name=PROGRAM  -print-search-dirs  -Q
678          -print-sysroot -print-sysroot-headers-suffix
679          -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]
680
681_Optimization Options_
682     *Note Options that Control Optimization: Optimize Options.
683          -faggressive-loop-optimizations -falign-functions[=N]
684          -falign-jumps[=N]
685          -falign-labels[=N] -falign-loops[=N]
686          -fassociative-math -fauto-profile -fauto-profile[=PATH]
687          -fauto-inc-dec -fbranch-probabilities
688          -fbranch-target-load-optimize -fbranch-target-load-optimize2
689          -fbtr-bb-exclusive -fcaller-saves
690          -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
691          -fcompare-elim -fcprop-registers -fcrossjumping
692          -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
693          -fcx-limited-range
694          -fdata-sections -fdce -fdelayed-branch
695          -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively
696          -fdevirtualize-at-ltrans -fdse
697          -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects
698          -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE
699          -fforward-propagate -ffp-contract=STYLE -ffunction-sections
700          -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
701          -fgcse-sm -fhoist-adjacent-loads -fif-conversion
702          -fif-conversion2 -findirect-inlining
703          -finline-functions -finline-functions-called-once -finline-limit=N
704          -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-cp-alignment
705          -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference -fipa-icf
706          -fira-algorithm=ALGORITHM
707          -fira-region=REGION -fira-hoist-pressure
708          -fira-loop-pressure -fno-ira-share-save-slots
709          -fno-ira-share-spill-slots -fira-verbose=N
710          -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute
711          -fivopts -fkeep-inline-functions -fkeep-static-consts
712          -flive-range-shrinkage
713          -floop-block -floop-interchange -floop-strip-mine
714          -floop-unroll-and-jam -floop-nest-optimize
715          -floop-parallelize-all -flra-remat -flto -flto-compression-level
716          -flto-partition=ALG -flto-report -flto-report-wpa -fmerge-all-constants
717          -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
718          -fmove-loop-invariants -fno-branch-count-reg
719          -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
720          -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
721          -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
722          -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
723          -fomit-frame-pointer -foptimize-sibling-calls
724          -fpartial-inlining -fpeel-loops -fpredictive-commoning
725          -fprefetch-loop-arrays -fprofile-report
726          -fprofile-correction -fprofile-dir=PATH -fprofile-generate
727          -fprofile-generate=PATH
728          -fprofile-use -fprofile-use=PATH -fprofile-values
729          -fprofile-reorder-functions
730          -freciprocal-math -free -frename-registers -freorder-blocks
731          -freorder-blocks-and-partition -freorder-functions
732          -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
733          -frounding-math -fsched2-use-superblocks -fsched-pressure
734          -fsched-spec-load -fsched-spec-load-dangerous
735          -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
736          -fsched-group-heuristic -fsched-critical-path-heuristic
737          -fsched-spec-insn-heuristic -fsched-rank-heuristic
738          -fsched-last-insn-heuristic -fsched-dep-count-heuristic
739          -fschedule-fusion
740          -fschedule-insns -fschedule-insns2 -fsection-anchors
741          -fselective-scheduling -fselective-scheduling2
742          -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
743          -fsemantic-interposition
744          -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
745          -fsplit-ivs-in-unroller -fsplit-wide-types -fssa-phiopt
746          -fstack-protector -fstack-protector-all -fstack-protector-strong
747          -fstack-protector-explicit -fstdarg-opt -fstrict-aliasing
748          -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp
749          -ftree-builtin-call-dce -ftree-ccp -ftree-ch
750          -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
751          -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
752          -ftree-forwprop -ftree-fre -ftree-loop-if-convert
753          -ftree-loop-if-convert-stores -ftree-loop-im
754          -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
755          -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
756          -ftree-loop-vectorize
757          -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta
758          -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
759          -ftree-switch-conversion -ftree-tail-merge -ftree-ter
760          -ftree-vectorize -ftree-vrp
761          -funit-at-a-time -funroll-all-loops -funroll-loops
762          -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
763          -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt
764          -fweb -fwhole-program -fwpa -fuse-linker-plugin
765          --param NAME=VALUE
766          -O  -O0  -O1  -O2  -O3  -Os -Ofast -Og
767
768_Preprocessor Options_
769     *Note Options Controlling the Preprocessor: Preprocessor Options.
770          -AQUESTION=ANSWER
771          -A-QUESTION[=ANSWER]
772          -C  -dD  -dI  -dM  -dN
773          -DMACRO[=DEFN]  -E  -H
774          -idirafter DIR
775          -include FILE  -imacros FILE
776          -iprefix FILE  -iwithprefix DIR
777          -iwithprefixbefore DIR  -isystem DIR
778          -cxx-isystem DIR
779          -imultilib DIR -isysroot DIR
780          -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
781          -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory
782          -remap -trigraphs  -undef  -UMACRO
783          -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp
784
785_Assembler Option_
786     *Note Passing Options to the Assembler: Assembler Options.
787          -Wa,OPTION  -Xassembler OPTION
788
789_Linker Options_
790     *Note Options for Linking: Link Options.
791          OBJECT-FILE-NAME  -fuse-ld=LINKER -lLIBRARY
792          -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
793          -s  -static -static-libgcc -static-libstdc++
794          -static-libasan -static-libtsan -static-liblsan -static-libubsan
795          -static-libmpx -static-libmpxwrappers
796          -shared -shared-libgcc  -symbolic
797          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
798          -u SYMBOL -z KEYWORD
799
800_Directory Options_
801     *Note Options for Directory Search: Directory Options.
802          -BPREFIX  -IDIR  -iquoteDIR
803          -iremapSRC:DST  -LDIR
804          -specs=FILE  -I- --sysroot=DIR
805
806_Target Options_
807     *Note Target Options::.
808          -V VERSION  -b MACHINE
809
810          -BPREFIX -IDIR -iplugindir=DIR
811          -iquoteDIR -LDIR -specs=FILE -I-
812          --sysroot=DIR --no-sysroot-suffix
813
814_Machine Dependent Options_
815     *Note Hardware Models and Configurations: Submodel Options.
816
817     _AArch64 Options_
818          -mabi=NAME  -mbig-endian  -mlittle-endian
819          -mgeneral-regs-only
820          -mcmodel=tiny  -mcmodel=small  -mcmodel=large
821          -mstrict-align
822          -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
823          -mtls-dialect=desc  -mtls-dialect=traditional
824          -mfix-cortex-a53-835769  -mno-fix-cortex-a53-835769
825          -mfix-cortex-a53-843419  -mno-fix-cortex-a53-843419
826          -march=NAME  -mcpu=NAME  -mtune=NAME
827
828     _Adapteva Epiphany Options_
829          -mhalf-reg-file -mprefer-short-insn-regs
830          -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf
831          -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM
832          -mround-nearest -mlong-calls -mshort-calls -msmall16
833          -mfp-mode=MODE -mvect-double -max-vect-align=NUM
834          -msplit-vecmove-early -m1reg-REG
835
836     _ARC Options_
837          -mbarrel-shifter
838          -mcpu=CPU -mA6 -mARC600 -mA7 -mARC700
839          -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr
840          -mea -mno-mpy -mmul32x16 -mmul64
841          -mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap
842          -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape
843          -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof
844          -mepilogue-cfi -mlong-calls -mmedium-calls -msdata
845          -mucb-mcount -mvolatile-cache
846          -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc
847          -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi
848          -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none
849          -mlra-priority-compact mlra-priority-noncompact -mno-millicode
850          -mmixed-code -mq-class -mRcq -mRcw -msize-level=LEVEL
851          -mtune=CPU -mmultcost=NUM -munalign-prob-threshold=PROBABILITY
852
853     _ARM Options_
854          -mapcs-frame  -mno-apcs-frame
855          -mabi=NAME
856          -mapcs-stack-check  -mno-apcs-stack-check
857          -mapcs-float  -mno-apcs-float
858          -mapcs-reentrant  -mno-apcs-reentrant
859          -msched-prolog  -mno-sched-prolog
860          -mlittle-endian  -mbig-endian
861          -mfloat-abi=NAME
862          -mfp16-format=NAME
863          -mthumb-interwork  -mno-thumb-interwork
864          -mcpu=NAME  -march=NAME  -mfpu=NAME
865          -mtune=NAME -mprint-tune-info
866          -mstructure-size-boundary=N
867          -mabort-on-noreturn
868          -mlong-calls  -mno-long-calls
869          -msingle-pic-base  -mno-single-pic-base
870          -mpic-register=REG
871          -mnop-fun-dllimport
872          -mpoke-function-name
873          -mthumb  -marm
874          -mtpcs-frame  -mtpcs-leaf-frame
875          -mcaller-super-interworking  -mcallee-super-interworking
876          -mtp=NAME -mtls-dialect=DIALECT
877          -mword-relocations
878          -mfix-cortex-m3-ldrd
879          -munaligned-access
880          -mneon-for-64bits
881          -mslow-flash-data
882          -masm-syntax-unified
883          -mrestrict-it
884
885     _AVR Options_
886          -mmcu=MCU -maccumulate-args -mbranch-cost=COST
887          -mcall-prologues -mint8 -mn_flash=SIZE -mno-interrupts
888          -mrelax -mrmw -mstrict-X -mtiny-stack -nodevicelib -Waddr-space-convert
889
890     _Blackfin Options_
891          -mcpu=CPU[-SIREVISION]
892          -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
893          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
894          -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
895          -mno-id-shared-library  -mshared-library-id=N
896          -mleaf-id-shared-library  -mno-leaf-id-shared-library
897          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
898          -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
899          -micplb
900
901     _C6X Options_
902          -mbig-endian  -mlittle-endian -march=CPU
903          -msim -msdata=SDATA-TYPE
904
905     _CRIS Options_
906          -mcpu=CPU  -march=CPU  -mtune=CPU
907          -mmax-stack-frame=N  -melinux-stacksize=N
908          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
909          -mstack-align  -mdata-align  -mconst-align
910          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
911          -melf  -maout  -melinux  -mlinux  -sim  -sim2
912          -mmul-bug-workaround  -mno-mul-bug-workaround
913
914     _CR16 Options_
915          -mmac
916          -mcr16cplus -mcr16c
917          -msim -mint32 -mbit-ops
918          -mdata-model=MODEL
919
920     _Darwin Options_
921          -all_load  -allowable_client  -arch  -arch_errors_fatal
922          -arch_only  -bind_at_load  -bundle  -bundle_loader
923          -client_name  -compatibility_version  -current_version
924          -dead_strip
925          -dependency-file  -dylib_file  -dylinker_install_name
926          -dynamic  -dynamiclib  -exported_symbols_list
927          -filelist  -flat_namespace  -force_cpusubtype_ALL
928          -force_flat_namespace  -headerpad_max_install_names
929          -iframework
930          -image_base  -init  -install_name  -keep_private_externs
931          -multi_module  -multiply_defined  -multiply_defined_unused
932          -noall_load   -no_dead_strip_inits_and_terms
933          -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
934          -pagezero_size  -prebind  -prebind_all_twolevel_modules
935          -private_bundle  -read_only_relocs  -sectalign
936          -sectobjectsymbols  -whyload  -seg1addr
937          -sectcreate  -sectobjectsymbols  -sectorder
938          -segaddr -segs_read_only_addr -segs_read_write_addr
939          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
940          -segprot  -segs_read_only_addr  -segs_read_write_addr
941          -single_module  -static  -sub_library  -sub_umbrella
942          -twolevel_namespace  -umbrella  -undefined
943          -unexported_symbols_list  -weak_reference_mismatches
944          -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
945          -mkernel -mone-byte-bool
946
947     _DEC Alpha Options_
948          -mno-fp-regs  -msoft-float
949          -mieee  -mieee-with-inexact  -mieee-conformant
950          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
951          -mtrap-precision=MODE  -mbuild-constants
952          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
953          -mbwx  -mmax  -mfix  -mcix
954          -mfloat-vax  -mfloat-ieee
955          -mexplicit-relocs  -msmall-data  -mlarge-data
956          -msmall-text  -mlarge-text
957          -mmemory-latency=TIME
958
959     _FR30 Options_
960          -msmall-model -mno-lsim
961
962     _FRV Options_
963          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
964          -mhard-float  -msoft-float
965          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
966          -mdouble  -mno-double
967          -mmedia  -mno-media  -mmuladd  -mno-muladd
968          -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
969          -mlinked-fp  -mlong-calls  -malign-labels
970          -mlibrary-pic  -macc-4  -macc-8
971          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
972          -moptimize-membar -mno-optimize-membar
973          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
974          -mvliw-branch  -mno-vliw-branch
975          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
976          -mno-nested-cond-exec  -mtomcat-stats
977          -mTLS -mtls
978          -mcpu=CPU
979
980     _GNU/Linux Options_
981          -mglibc -muclibc -mbionic -mandroid
982          -tno-android-cc -tno-android-ld
983
984     _H8/300 Options_
985          -mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300
986
987     _HPPA Options_
988          -march=ARCHITECTURE-TYPE
989          -mdisable-fpregs  -mdisable-indexing
990          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
991          -mfixed-range=REGISTER-RANGE
992          -mjump-in-delay -mlinker-opt -mlong-calls
993          -mlong-load-store  -mno-disable-fpregs
994          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
995          -mno-jump-in-delay  -mno-long-load-store
996          -mno-portable-runtime  -mno-soft-float
997          -mno-space-regs  -msoft-float  -mpa-risc-1-0
998          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
999          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
1000          -munix=UNIX-STD  -nolibdld  -static  -threads
1001
1002     _IA-64 Options_
1003          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
1004          -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
1005          -mconstant-gp  -mauto-pic  -mfused-madd
1006          -minline-float-divide-min-latency
1007          -minline-float-divide-max-throughput
1008          -mno-inline-float-divide
1009          -minline-int-divide-min-latency
1010          -minline-int-divide-max-throughput
1011          -mno-inline-int-divide
1012          -minline-sqrt-min-latency -minline-sqrt-max-throughput
1013          -mno-inline-sqrt
1014          -mdwarf2-asm -mearly-stop-bits
1015          -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
1016          -mtune=CPU-TYPE -milp32 -mlp64
1017          -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
1018          -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
1019          -msched-spec-ldc -msched-spec-control-ldc
1020          -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
1021          -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
1022          -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
1023          -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS
1024
1025     _LM32 Options_
1026          -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
1027          -msign-extend-enabled -muser-enabled
1028
1029     _M32R/D Options_
1030          -m32r2 -m32rx -m32r
1031          -mdebug
1032          -malign-loops -mno-align-loops
1033          -missue-rate=NUMBER
1034          -mbranch-cost=NUMBER
1035          -mmodel=CODE-SIZE-MODEL-TYPE
1036          -msdata=SDATA-TYPE
1037          -mno-flush-func -mflush-func=NAME
1038          -mno-flush-trap -mflush-trap=NUMBER
1039          -G NUM
1040
1041     _M32C Options_
1042          -mcpu=CPU -msim -memregs=NUMBER
1043
1044     _M680x0 Options_
1045          -march=ARCH  -mcpu=CPU  -mtune=TUNE
1046          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
1047          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
1048          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
1049          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
1050          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
1051          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
1052          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
1053          -mxgot -mno-xgot
1054
1055     _MCore Options_
1056          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
1057          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
1058          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
1059          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
1060          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
1061
1062     _MeP Options_
1063          -mabsdiff -mall-opts -maverage -mbased=N -mbitops
1064          -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
1065          -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
1066          -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
1067          -mtiny=N
1068
1069     _MicroBlaze Options_
1070          -msoft-float -mhard-float -msmall-divides -mcpu=CPU
1071          -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
1072          -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
1073          -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
1074          -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL
1075
1076     _MIPS Options_
1077          -EL  -EB  -march=ARCH  -mtune=ARCH
1078          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5
1079          -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6
1080          -mips16  -mno-mips16  -mflip-mips16
1081          -minterlink-compressed -mno-interlink-compressed
1082          -minterlink-mips16  -mno-interlink-mips16
1083          -mabi=ABI  -mabicalls  -mno-abicalls
1084          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
1085          -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float
1086          -mno-float  -msingle-float  -mdouble-float
1087          -modd-spreg -mno-odd-spreg
1088          -mabs=MODE  -mnan=ENCODING
1089          -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
1090          -mmcu -mmno-mcu
1091          -meva -mno-eva
1092          -mvirt -mno-virt
1093          -mxpa -mno-xpa
1094          -mmicromips -mno-micromips
1095          -mfpu=FPU-TYPE
1096          -msmartmips  -mno-smartmips
1097          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
1098          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
1099          -mlong64  -mlong32  -msym32  -mno-sym32
1100          -GNUM  -mlocal-sdata  -mno-local-sdata
1101          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
1102          -membedded-data  -mno-embedded-data
1103          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
1104          -mcode-readable=SETTING
1105          -msplit-addresses  -mno-split-addresses
1106          -mexplicit-relocs  -mno-explicit-relocs
1107          -mcheck-zero-division  -mno-check-zero-division
1108          -mdivide-traps  -mdivide-breaks
1109          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
1110          -mmad -mno-mad -mimadd -mno-imadd -mfused-madd  -mno-fused-madd  -nocpp
1111          -mfix-24k -mno-fix-24k
1112          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
1113          -mfix-r10000 -mno-fix-r10000  -mfix-rm7000 -mno-fix-rm7000
1114          -mfix-vr4120  -mno-fix-vr4120
1115          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
1116          -mflush-func=FUNC  -mno-flush-func
1117          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
1118          -mfp-exceptions -mno-fp-exceptions
1119          -mvr4130-align -mno-vr4130-align -msynci -mno-synci
1120          -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address
1121
1122     _MMIX Options_
1123          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
1124          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
1125          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
1126          -mno-base-addresses  -msingle-exit  -mno-single-exit
1127
1128     _MN10300 Options_
1129          -mmult-bug  -mno-mult-bug
1130          -mno-am33 -mam33 -mam33-2 -mam34
1131          -mtune=CPU-TYPE
1132          -mreturn-pointer-on-d0
1133          -mno-crt0  -mrelax -mliw -msetlb
1134
1135     _Moxie Options_
1136          -meb -mel -mmul.x -mno-crt0
1137
1138     _MSP430 Options_
1139          -msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax
1140          -mhwmult= -minrt
1141
1142     _NDS32 Options_
1143          -mbig-endian -mlittle-endian
1144          -mreduced-regs -mfull-regs
1145          -mcmov -mno-cmov
1146          -mperf-ext -mno-perf-ext
1147          -mv3push -mno-v3push
1148          -m16bit -mno-16bit
1149          -misr-vector-size=NUM
1150          -mcache-block-size=NUM
1151          -march=ARCH
1152          -mcmodel=CODE-MODEL
1153          -mctor-dtor -mrelax
1154
1155     _Nios II Options_
1156          -G NUM -mgpopt=OPTION -mgpopt -mno-gpopt
1157          -mel -meb
1158          -mno-bypass-cache -mbypass-cache
1159          -mno-cache-volatile -mcache-volatile
1160          -mno-fast-sw-div -mfast-sw-div
1161          -mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div
1162          -mcustom-INSN=N -mno-custom-INSN
1163          -mcustom-fpu-cfg=NAME
1164          -mhal -msmallc -msys-crt0=NAME -msys-lib=NAME
1165
1166     _Nvidia PTX Options_
1167          -m32 -m64 -mmainkernel
1168
1169     _PDP-11 Options_
1170          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
1171          -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
1172          -mint16  -mno-int32  -mfloat32  -mno-float64
1173          -mfloat64  -mno-float32  -mabshi  -mno-abshi
1174          -mbranch-expensive  -mbranch-cheap
1175          -munix-asm  -mdec-asm
1176
1177     _picoChip Options_
1178          -mae=AE_TYPE -mvliw-lookahead=N
1179          -msymbol-as-address -mno-inefficient-warnings
1180
1181     _PowerPC Options_ See RS/6000 and PowerPC Options.
1182
1183     _RL78 Options_
1184          -msim -mmul=none -mmul=g13 -mmul=rl78
1185          -m64bit-doubles -m32bit-doubles
1186
1187     _RS/6000 and PowerPC Options_
1188          -mcpu=CPU-TYPE
1189          -mtune=CPU-TYPE
1190          -mcmodel=CODE-MODEL
1191          -mpowerpc64
1192          -maltivec  -mno-altivec
1193          -mpowerpc-gpopt  -mno-powerpc-gpopt
1194          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
1195          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
1196          -mfprnd  -mno-fprnd
1197          -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
1198          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
1199          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
1200          -malign-power  -malign-natural
1201          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
1202          -msingle-float -mdouble-float -msimple-fpu
1203          -mstring  -mno-string  -mupdate  -mno-update
1204          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
1205          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
1206          -mstrict-align  -mno-strict-align  -mrelocatable
1207          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
1208          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
1209          -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base
1210          -mprioritize-restricted-insns=PRIORITY
1211          -msched-costly-dep=DEPENDENCE_TYPE
1212          -minsert-sched-nops=SCHEME
1213          -mcall-sysv  -mcall-netbsd
1214          -maix-struct-return  -msvr4-struct-return
1215          -mabi=ABI-TYPE -msecure-plt -mbss-plt
1216          -mblock-move-inline-limit=NUM
1217          -misel -mno-isel
1218          -misel=yes  -misel=no
1219          -mspe -mno-spe
1220          -mspe=yes  -mspe=no
1221          -mpaired
1222          -mgen-cell-microcode -mwarn-cell-microcode
1223          -mvrsave -mno-vrsave
1224          -mmulhw -mno-mulhw
1225          -mdlmzb -mno-dlmzb
1226          -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
1227          -mprototype  -mno-prototype
1228          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
1229          -msdata=OPT  -mvxworks  -G NUM  -pthread
1230          -mrecip -mrecip=OPT -mno-recip -mrecip-precision
1231          -mno-recip-precision
1232          -mveclibabi=TYPE -mfriz -mno-friz
1233          -mpointers-to-nested-functions -mno-pointers-to-nested-functions
1234          -msave-toc-indirect -mno-save-toc-indirect
1235          -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector
1236          -mcrypto -mno-crypto -mdirect-move -mno-direct-move
1237          -mquad-memory -mno-quad-memory
1238          -mquad-memory-atomic -mno-quad-memory-atomic
1239          -mcompat-align-parm -mno-compat-align-parm
1240          -mupper-regs-df -mno-upper-regs-df -mupper-regs-sf -mno-upper-regs-sf
1241          -mupper-regs -mno-upper-regs
1242
1243     _RX Options_
1244          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
1245          -mcpu=
1246          -mbig-endian-data -mlittle-endian-data
1247          -msmall-data
1248          -msim  -mno-sim
1249          -mas100-syntax -mno-as100-syntax
1250          -mrelax
1251          -mmax-constant-size=
1252          -mint-register=
1253          -mpid
1254          -mno-warn-multiple-fast-interrupts
1255          -msave-acc-in-interrupts
1256
1257     _S/390 and zSeries Options_
1258          -mtune=CPU-TYPE  -march=CPU-TYPE
1259          -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
1260          -mlong-double-64 -mlong-double-128
1261          -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
1262          -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
1263          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
1264          -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
1265          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
1266          -mhotpatch=HALFWORDS,HALFWORDS
1267
1268     _Score Options_
1269          -meb -mel
1270          -mnhwloop
1271          -muls
1272          -mmac
1273          -mscore5 -mscore5u -mscore7 -mscore7d
1274
1275     _SH Options_
1276          -m1  -m2  -m2e
1277          -m2a-nofpu -m2a-single-only -m2a-single -m2a
1278          -m3  -m3e
1279          -m4-nofpu  -m4-single-only  -m4-single  -m4
1280          -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
1281          -m5-64media  -m5-64media-nofpu
1282          -m5-32media  -m5-32media-nofpu
1283          -m5-compact  -m5-compact-nofpu
1284          -mb  -ml  -mdalign  -mrelax
1285          -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
1286          -mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct
1287          -mspace -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
1288          -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
1289          -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
1290          -maccumulate-outgoing-args -minvalid-symbols
1291          -matomic-model=ATOMIC-MODEL
1292          -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch
1293          -mcbranch-force-delay-slot
1294          -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
1295          -mpretend-cmove -mtas
1296
1297     _Solaris 2 Options_
1298          -mclear-hwcap -mno-clear-hwcap -mimpure-text  -mno-impure-text
1299          -pthreads -pthread
1300
1301     _SPARC Options_
1302          -mcpu=CPU-TYPE
1303          -mtune=CPU-TYPE
1304          -mcmodel=CODE-MODEL
1305          -mmemory-model=MEM-MODEL
1306          -m32  -m64  -mapp-regs  -mno-app-regs
1307          -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
1308          -mfpu  -mno-fpu  -mhard-float  -msoft-float
1309          -mhard-quad-float  -msoft-quad-float
1310          -mstack-bias  -mno-stack-bias
1311          -munaligned-doubles  -mno-unaligned-doubles
1312          -muser-mode  -mno-user-mode
1313          -mv8plus  -mno-v8plus  -mvis  -mno-vis
1314          -mvis2  -mno-vis2  -mvis3  -mno-vis3
1315          -mcbcond -mno-cbcond
1316          -mfmaf  -mno-fmaf  -mpopc  -mno-popc
1317          -mfix-at697f -mfix-ut699
1318
1319     _SPU Options_
1320          -mwarn-reloc -merror-reloc
1321          -msafe-dma -munsafe-dma
1322          -mbranch-hints
1323          -msmall-mem -mlarge-mem -mstdmain
1324          -mfixed-range=REGISTER-RANGE
1325          -mea32 -mea64
1326          -maddress-space-conversion -mno-address-space-conversion
1327          -mcache-size=CACHE-SIZE
1328          -matomic-updates -mno-atomic-updates
1329
1330     _System V Options_
1331          -Qy  -Qn  -YP,PATHS  -Ym,DIR
1332
1333     _TILE-Gx Options_
1334          -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian
1335          -mcmodel=CODE-MODEL
1336
1337     _TILEPro Options_
1338          -mcpu=CPU -m32
1339
1340     _V850 Options_
1341          -mlong-calls  -mno-long-calls  -mep  -mno-ep
1342          -mprolog-function  -mno-prolog-function  -mspace
1343          -mtda=N  -msda=N  -mzda=N
1344          -mapp-regs  -mno-app-regs
1345          -mdisable-callt  -mno-disable-callt
1346          -mv850e2v3 -mv850e2 -mv850e1 -mv850es
1347          -mv850e -mv850 -mv850e3v5
1348          -mloop
1349          -mrelax
1350          -mlong-jumps
1351          -msoft-float
1352          -mhard-float
1353          -mgcc-abi
1354          -mrh850-abi
1355          -mbig-switch
1356
1357     _VAX Options_
1358          -mg  -mgnu  -munix
1359
1360     _Visium Options_
1361          -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float
1362          -mcpu=CPU-TYPE -mtune=CPU-TYPE -msv-mode -muser-mode
1363
1364     _VMS Options_
1365          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
1366          -mpointer-size=SIZE
1367
1368     _VxWorks Options_
1369          -mrtp  -non-static  -Bstatic  -Bdynamic
1370          -Xbind-lazy  -Xbind-now
1371
1372     _x86 Options_
1373          -mtune=CPU-TYPE  -march=CPU-TYPE
1374          -mtune-ctrl=FEATURE-LIST -mdump-tune-features -mno-default
1375          -mfpmath=UNIT
1376          -masm=DIALECT  -mno-fancy-math-387
1377          -mno-fp-ret-in-387  -msoft-float
1378          -mno-wide-multiply  -mrtd  -malign-double
1379          -mpreferred-stack-boundary=NUM
1380          -mincoming-stack-boundary=NUM
1381          -mcld -mcx16 -msahf -mmovbe -mcrc32
1382          -mrecip -mrecip=OPT
1383          -mvzeroupper -mprefer-avx128
1384          -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
1385          -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha
1386          -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
1387          -mclflushopt -mxsavec -mxsaves
1388          -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt
1389          -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads
1390          -mno-align-stringops  -minline-all-stringops
1391          -minline-stringops-dynamically -mstringop-strategy=ALG
1392          -mmemcpy-strategy=STRATEGY -mmemset-strategy=STRATEGY
1393          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
1394          -m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128
1395          -mregparm=NUM  -msseregparm
1396          -mveclibabi=TYPE -mvect8-ret-in-mem
1397          -mpc32 -mpc64 -mpc80 -mstackrealign
1398          -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
1399          -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE
1400          -m32 -m64 -mx32 -m16 -mlarge-data-threshold=NUM
1401          -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
1402          -mavx256-split-unaligned-load -mavx256-split-unaligned-store
1403          -malign-data=TYPE -mstack-protector-guard=GUARD
1404
1405     _x86 Windows Options_
1406          -mconsole -mcygwin -mno-cygwin -mdll
1407          -mnop-fun-dllimport -mthread
1408          -municode -mwin32 -mwindows -fno-set-stack-executable
1409
1410     _Xstormy16 Options_
1411          -msim
1412
1413     _Xtensa Options_
1414          -mconst16 -mno-const16
1415          -mfused-madd  -mno-fused-madd
1416          -mforce-no-pic
1417          -mserialize-volatile  -mno-serialize-volatile
1418          -mtext-section-literals  -mno-text-section-literals
1419          -mtarget-align  -mno-target-align
1420          -mlongcalls  -mno-longcalls
1421
1422     _zSeries Options_ See S/390 and zSeries Options.
1423
1424_Code Generation Options_
1425     *Note Options for Code Generation Conventions: Code Gen Options.
1426          -fcall-saved-REG  -fcall-used-REG
1427          -ffixed-REG  -fexceptions
1428          -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
1429          -fasynchronous-unwind-tables
1430          -fno-gnu-unique
1431          -finhibit-size-directive  -finstrument-functions
1432          -finstrument-functions-exclude-function-list=SYM,SYM,...
1433          -finstrument-functions-exclude-file-list=FILE,FILE,...
1434          -fno-common  -fno-ident
1435          -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
1436          -fno-jump-tables
1437          -frecord-gcc-switches
1438          -freg-struct-return  -fshort-enums
1439          -fshort-double  -fshort-wchar
1440          -fverbose-asm  -fpack-struct[=N]  -fstack-check
1441          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
1442          -fno-stack-limit -fsplit-stack
1443          -fleading-underscore  -ftls-model=MODEL
1444          -fstack-reuse=REUSE_LEVEL
1445          -ftrapv  -fwrapv  -fbounds-check
1446          -fvisibility=[default|internal|hidden|protected]
1447          -fstrict-volatile-bitfields -fsync-libcalls
1448
1449
1450
1451File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1452
14533.2 Options Controlling the Kind of Output
1454==========================================
1455
1456Compilation can involve up to four stages: preprocessing, compilation
1457proper, assembly and linking, always in that order.  GCC is capable of
1458preprocessing and compiling several files either into several assembler
1459input files, or into one assembler input file; then each assembler
1460input file produces an object file, and linking combines all the object
1461files (those newly compiled, and those specified as input) into an
1462executable file.
1463
1464 For any given input file, the file name suffix determines what kind of
1465compilation is done:
1466
1467`FILE.c'
1468     C source code that must be preprocessed.
1469
1470`FILE.i'
1471     C source code that should not be preprocessed.
1472
1473`FILE.ii'
1474     C++ source code that should not be preprocessed.
1475
1476`FILE.m'
1477     Objective-C source code.  Note that you must link with the
1478     `libobjc' library to make an Objective-C program work.
1479
1480`FILE.mi'
1481     Objective-C source code that should not be preprocessed.
1482
1483`FILE.mm'
1484`FILE.M'
1485     Objective-C++ source code.  Note that you must link with the
1486     `libobjc' library to make an Objective-C++ program work.  Note
1487     that `.M' refers to a literal capital M.
1488
1489`FILE.mii'
1490     Objective-C++ source code that should not be preprocessed.
1491
1492`FILE.h'
1493     C, C++, Objective-C or Objective-C++ header file to be turned into
1494     a precompiled header (default), or C, C++ header file to be turned
1495     into an Ada spec (via the `-fdump-ada-spec' switch).
1496
1497`FILE.cc'
1498`FILE.cp'
1499`FILE.cxx'
1500`FILE.cpp'
1501`FILE.CPP'
1502`FILE.c++'
1503`FILE.C'
1504     C++ source code that must be preprocessed.  Note that in `.cxx',
1505     the last two letters must both be literally `x'.  Likewise, `.C'
1506     refers to a literal capital C.
1507
1508`FILE.mm'
1509`FILE.M'
1510     Objective-C++ source code that must be preprocessed.
1511
1512`FILE.mii'
1513     Objective-C++ source code that should not be preprocessed.
1514
1515`FILE.hh'
1516`FILE.H'
1517`FILE.hp'
1518`FILE.hxx'
1519`FILE.hpp'
1520`FILE.HPP'
1521`FILE.h++'
1522`FILE.tcc'
1523     C++ header file to be turned into a precompiled header or Ada spec.
1524
1525`FILE.f'
1526`FILE.for'
1527`FILE.ftn'
1528     Fixed form Fortran source code that should not be preprocessed.
1529
1530`FILE.F'
1531`FILE.FOR'
1532`FILE.fpp'
1533`FILE.FPP'
1534`FILE.FTN'
1535     Fixed form Fortran source code that must be preprocessed (with the
1536     traditional preprocessor).
1537
1538`FILE.f90'
1539`FILE.f95'
1540`FILE.f03'
1541`FILE.f08'
1542     Free form Fortran source code that should not be preprocessed.
1543
1544`FILE.F90'
1545`FILE.F95'
1546`FILE.F03'
1547`FILE.F08'
1548     Free form Fortran source code that must be preprocessed (with the
1549     traditional preprocessor).
1550
1551`FILE.go'
1552     Go source code.
1553
1554`FILE.ads'
1555     Ada source code file that contains a library unit declaration (a
1556     declaration of a package, subprogram, or generic, or a generic
1557     instantiation), or a library unit renaming declaration (a package,
1558     generic, or subprogram renaming declaration).  Such files are also
1559     called "specs".
1560
1561`FILE.adb'
1562     Ada source code file containing a library unit body (a subprogram
1563     or package body).  Such files are also called "bodies".
1564
1565`FILE.s'
1566     Assembler code.
1567
1568`FILE.S'
1569`FILE.sx'
1570     Assembler code that must be preprocessed.
1571
1572`OTHER'
1573     An object file to be fed straight into linking.  Any file name
1574     with no recognized suffix is treated this way.
1575
1576 You can specify the input language explicitly with the `-x' option:
1577
1578`-x LANGUAGE'
1579     Specify explicitly the LANGUAGE for the following input files
1580     (rather than letting the compiler choose a default based on the
1581     file name suffix).  This option applies to all following input
1582     files until the next `-x' option.  Possible values for LANGUAGE
1583     are:
1584          c  c-header  cpp-output
1585          c++  c++-header  c++-cpp-output
1586          objective-c  objective-c-header  objective-c-cpp-output
1587          objective-c++ objective-c++-header objective-c++-cpp-output
1588          assembler  assembler-with-cpp
1589          ada
1590          f77  f77-cpp-input f95  f95-cpp-input
1591          go
1592          java
1593
1594`-x none'
1595     Turn off any specification of a language, so that subsequent files
1596     are handled according to their file name suffixes (as they are if
1597     `-x' has not been used at all).
1598
1599`-pass-exit-codes'
1600     Normally the `gcc' program exits with the code of 1 if any phase
1601     of the compiler returns a non-success return code.  If you specify
1602     `-pass-exit-codes', the `gcc' program instead returns with the
1603     numerically highest error produced by any phase returning an error
1604     indication.  The C, C++, and Fortran front ends return 4 if an
1605     internal compiler error is encountered.
1606
1607 If you only want some of the stages of compilation, you can use `-x'
1608(or filename suffixes) to tell `gcc' where to start, and one of the
1609options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
1610some combinations (for example, `-x cpp-output -E') instruct `gcc' to
1611do nothing at all.
1612
1613`-c'
1614     Compile or assemble the source files, but do not link.  The linking
1615     stage simply is not done.  The ultimate output is in the form of an
1616     object file for each source file.
1617
1618     By default, the object file name for a source file is made by
1619     replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1620
1621     Unrecognized input files, not requiring compilation or assembly,
1622     are ignored.
1623
1624`-S'
1625     Stop after the stage of compilation proper; do not assemble.  The
1626     output is in the form of an assembler code file for each
1627     non-assembler input file specified.
1628
1629     By default, the assembler file name for a source file is made by
1630     replacing the suffix `.c', `.i', etc., with `.s'.
1631
1632     Input files that don't require compilation are ignored.
1633
1634`-E'
1635     Stop after the preprocessing stage; do not run the compiler
1636     proper.  The output is in the form of preprocessed source code,
1637     which is sent to the standard output.
1638
1639     Input files that don't require preprocessing are ignored.
1640
1641`-o FILE'
1642     Place output in file FILE.  This applies to whatever sort of
1643     output is being produced, whether it be an executable file, an
1644     object file, an assembler file or preprocessed C code.
1645
1646     If `-o' is not specified, the default is to put an executable file
1647     in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
1648     assembler file in `SOURCE.s', a precompiled header file in
1649     `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1650     output.
1651
1652`-v'
1653     Print (on standard error output) the commands executed to run the
1654     stages of compilation.  Also print the version number of the
1655     compiler driver program and of the preprocessor and the compiler
1656     proper.
1657
1658`-###'
1659     Like `-v' except the commands are not executed and arguments are
1660     quoted unless they contain only alphanumeric characters or `./-_'.
1661     This is useful for shell scripts to capture the driver-generated
1662     command lines.
1663
1664`-pipe'
1665     Use pipes rather than temporary files for communication between the
1666     various stages of compilation.  This fails to work on some systems
1667     where the assembler is unable to read from a pipe; but the GNU
1668     assembler has no trouble.
1669
1670`--help'
1671     Print (on the standard output) a description of the command-line
1672     options understood by `gcc'.  If the `-v' option is also specified
1673     then `--help' is also passed on to the various processes invoked
1674     by `gcc', so that they can display the command-line options they
1675     accept.  If the `-Wextra' option has also been specified (prior to
1676     the `--help' option), then command-line options that have no
1677     documentation associated with them are also displayed.
1678
1679`--target-help'
1680     Print (on the standard output) a description of target-specific
1681     command-line options for each tool.  For some targets extra
1682     target-specific information may also be printed.
1683
1684`--help={CLASS|[^]QUALIFIER}[,...]'
1685     Print (on the standard output) a description of the command-line
1686     options understood by the compiler that fit into all specified
1687     classes and qualifiers.  These are the supported classes:
1688
1689    `optimizers'
1690          Display all of the optimization options supported by the
1691          compiler.
1692
1693    `warnings'
1694          Display all of the options controlling warning messages
1695          produced by the compiler.
1696
1697    `target'
1698          Display target-specific options.  Unlike the `--target-help'
1699          option however, target-specific options of the linker and
1700          assembler are not displayed.  This is because those tools do
1701          not currently support the extended `--help=' syntax.
1702
1703    `params'
1704          Display the values recognized by the `--param' option.
1705
1706    LANGUAGE
1707          Display the options supported for LANGUAGE, where LANGUAGE is
1708          the name of one of the languages supported in this version of
1709          GCC.
1710
1711    `common'
1712          Display the options that are common to all languages.
1713
1714     These are the supported qualifiers:
1715
1716    `undocumented'
1717          Display only those options that are undocumented.
1718
1719    `joined'
1720          Display options taking an argument that appears after an equal
1721          sign in the same continuous piece of text, such as:
1722          `--help=target'.
1723
1724    `separate'
1725          Display options taking an argument that appears as a separate
1726          word following the original option, such as: `-o output-file'.
1727
1728     Thus for example to display all the undocumented target-specific
1729     switches supported by the compiler, use:
1730
1731          --help=target,undocumented
1732
1733     The sense of a qualifier can be inverted by prefixing it with the
1734     `^' character, so for example to display all binary warning
1735     options (i.e., ones that are either on or off and that do not take
1736     an argument) that have a description, use:
1737
1738          --help=warnings,^joined,^undocumented
1739
1740     The argument to `--help=' should not consist solely of inverted
1741     qualifiers.
1742
1743     Combining several classes is possible, although this usually
1744     restricts the output so much that there is nothing to display.  One
1745     case where it does work, however, is when one of the classes is
1746     TARGET.  For example, to display all the target-specific
1747     optimization options, use:
1748
1749          --help=target,optimizers
1750
1751     The `--help=' option can be repeated on the command line.  Each
1752     successive use displays its requested class of options, skipping
1753     those that have already been displayed.
1754
1755     If the `-Q' option appears on the command line before the
1756     `--help=' option, then the descriptive text displayed by `--help='
1757     is changed.  Instead of describing the displayed options, an
1758     indication is given as to whether the option is enabled, disabled
1759     or set to a specific value (assuming that the compiler knows this
1760     at the point where the `--help=' option is used).
1761
1762     Here is a truncated example from the ARM port of `gcc':
1763
1764            % gcc -Q -mabi=2 --help=target -c
1765            The following options are target specific:
1766            -mabi=                                2
1767            -mabort-on-noreturn                   [disabled]
1768            -mapcs                                [disabled]
1769
1770     The output is sensitive to the effects of previous command-line
1771     options, so for example it is possible to find out which
1772     optimizations are enabled at `-O2' by using:
1773
1774          -Q -O2 --help=optimizers
1775
1776     Alternatively you can discover which binary optimizations are
1777     enabled by `-O3' by using:
1778
1779          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1780          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1781          diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1782
1783`-no-canonical-prefixes'
1784     Do not expand any symbolic links, resolve references to `/../' or
1785     `/./', or make the path absolute when generating a relative prefix.
1786
1787`--version'
1788     Display the version number and copyrights of the invoked GCC.
1789
1790`-wrapper'
1791     Invoke all subcommands under a wrapper program.  The name of the
1792     wrapper program and its parameters are passed as a comma separated
1793     list.
1794
1795          gcc -c t.c -wrapper gdb,--args
1796
1797     This invokes all subprograms of `gcc' under `gdb --args', thus the
1798     invocation of `cc1' is `gdb --args cc1 ...'.
1799
1800`-fplugin=NAME.so'
1801     Load the plugin code in file NAME.so, assumed to be a shared
1802     object to be dlopen'd by the compiler.  The base name of the
1803     shared object file is used to identify the plugin for the purposes
1804     of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below).
1805     Each plugin should define the callback functions specified in the
1806     Plugins API.
1807
1808`-fplugin-arg-NAME-KEY=VALUE'
1809     Define an argument called KEY with a value of VALUE for the plugin
1810     called NAME.
1811
1812`-fdump-ada-spec[-slim]'
1813     For C and C++ source and include files, generate corresponding Ada
1814     specs.  *Note Generating Ada Bindings for C and C++ headers:
1815     (gnat_ugn)Generating Ada Bindings for C and C++ headers, which
1816     provides detailed documentation on this feature.
1817
1818`-fada-spec-parent=UNIT'
1819     In conjunction with `-fdump-ada-spec[-slim]' above, generate Ada
1820     specs as child units of parent UNIT.
1821
1822`-fdump-go-spec=FILE'
1823     For input files in any language, generate corresponding Go
1824     declarations in FILE.  This generates Go `const', `type', `var',
1825     and `func' declarations which may be a useful way to start writing
1826     a Go interface to code written in some other language.
1827
1828`@FILE'
1829     Read command-line options from FILE.  The options read are
1830     inserted in place of the original @FILE option.  If FILE does not
1831     exist, or cannot be read, then the option will be treated
1832     literally, and not removed.
1833
1834     Options in FILE are separated by whitespace.  A whitespace
1835     character may be included in an option by surrounding the entire
1836     option in either single or double quotes.  Any character
1837     (including a backslash) may be included by prefixing the character
1838     to be included with a backslash.  The FILE may itself contain
1839     additional @FILE options; any such options will be processed
1840     recursively.
1841
1842
1843File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1844
18453.3 Compiling C++ Programs
1846==========================
1847
1848C++ source files conventionally use one of the suffixes `.C', `.cc',
1849`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
1850`.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and
1851preprocessed C++ files use the suffix `.ii'.  GCC recognizes files with
1852these names and compiles them as C++ programs even if you call the
1853compiler the same way as for compiling C programs (usually with the
1854name `gcc').
1855
1856 However, the use of `gcc' does not add the C++ library.  `g++' is a
1857program that calls GCC and automatically specifies linking against the
1858C++ library.  It treats `.c', `.h' and `.i' files as C++ source files
1859instead of C source files unless `-x' is used.  This program is also
1860useful when precompiling a C header file with a `.h' extension for use
1861in C++ compilations.  On many systems, `g++' is also installed with the
1862name `c++'.
1863
1864 When you compile C++ programs, you may specify many of the same
1865command-line options that you use for compiling programs in any
1866language; or command-line options meaningful for C and related
1867languages; or options that are meaningful only for C++ programs.  *Note
1868Options Controlling C Dialect: C Dialect Options, for explanations of
1869options for languages related to C.  *Note Options Controlling C++
1870Dialect: C++ Dialect Options, for explanations of options that are
1871meaningful only for C++ programs.
1872
1873
1874File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1875
18763.4 Options Controlling C Dialect
1877=================================
1878
1879The following options control the dialect of C (or languages derived
1880from C, such as C++, Objective-C and Objective-C++) that the compiler
1881accepts:
1882
1883`-ansi'
1884     In C mode, this is equivalent to `-std=c90'. In C++ mode, it is
1885     equivalent to `-std=c++98'.
1886
1887     This turns off certain features of GCC that are incompatible with
1888     ISO C90 (when compiling C code), or of standard C++ (when
1889     compiling C++ code), such as the `asm' and `typeof' keywords, and
1890     predefined macros such as `unix' and `vax' that identify the type
1891     of system you are using.  It also enables the undesirable and
1892     rarely used ISO trigraph feature.  For the C compiler, it disables
1893     recognition of C++ style `//' comments as well as the `inline'
1894     keyword.
1895
1896     The alternate keywords `__asm__', `__extension__', `__inline__'
1897     and `__typeof__' continue to work despite `-ansi'.  You would not
1898     want to use them in an ISO C program, of course, but it is useful
1899     to put them in header files that might be included in compilations
1900     done with `-ansi'.  Alternate predefined macros such as `__unix__'
1901     and `__vax__' are also available, with or without `-ansi'.
1902
1903     The `-ansi' option does not cause non-ISO programs to be rejected
1904     gratuitously.  For that, `-Wpedantic' is required in addition to
1905     `-ansi'.  *Note Warning Options::.
1906
1907     The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
1908     is used.  Some header files may notice this macro and refrain from
1909     declaring certain functions or defining certain macros that the
1910     ISO standard doesn't call for; this is to avoid interfering with
1911     any programs that might use these names for other things.
1912
1913     Functions that are normally built in but do not have semantics
1914     defined by ISO C (such as `alloca' and `ffs') are not built-in
1915     functions when `-ansi' is used.  *Note Other built-in functions
1916     provided by GCC: Other Builtins, for details of the functions
1917     affected.
1918
1919`-std='
1920     Determine the language standard. *Note Language Standards
1921     Supported by GCC: Standards, for details of these standard
1922     versions.  This option is currently only supported when compiling
1923     C or C++.
1924
1925     The compiler can accept several base standards, such as `c90' or
1926     `c++98', and GNU dialects of those standards, such as `gnu90' or
1927     `gnu++98'.  When a base standard is specified, the compiler
1928     accepts all programs following that standard plus those using GNU
1929     extensions that do not contradict it.  For example, `-std=c90'
1930     turns off certain features of GCC that are incompatible with ISO
1931     C90, such as the `asm' and `typeof' keywords, but not other GNU
1932     extensions that do not have a meaning in ISO C90, such as omitting
1933     the middle term of a `?:' expression. On the other hand, when a
1934     GNU dialect of a standard is specified, all features supported by
1935     the compiler are enabled, even when those features change the
1936     meaning of the base standard.  As a result, some strict-conforming
1937     programs may be rejected.  The particular standard is used by
1938     `-Wpedantic' to identify which features are GNU extensions given
1939     that version of the standard. For example `-std=gnu90 -Wpedantic'
1940     warns about C++ style `//' comments, while `-std=gnu99 -Wpedantic'
1941     does not.
1942
1943     A value for this option must be provided; possible values are
1944
1945    `c90'
1946    `c89'
1947    `iso9899:1990'
1948          Support all ISO C90 programs (certain GNU extensions that
1949          conflict with ISO C90 are disabled). Same as `-ansi' for C
1950          code.
1951
1952    `iso9899:199409'
1953          ISO C90 as modified in amendment 1.
1954
1955    `c99'
1956    `c9x'
1957    `iso9899:1999'
1958    `iso9899:199x'
1959          ISO C99.  This standard is substantially completely
1960          supported, modulo bugs and floating-point issues (mainly but
1961          not entirely relating to optional C99 features from Annexes F
1962          and G).  See `http://gcc.gnu.org/c99status.html' for more
1963          information.  The names `c9x' and `iso9899:199x' are
1964          deprecated.
1965
1966    `c11'
1967    `c1x'
1968    `iso9899:2011'
1969          ISO C11, the 2011 revision of the ISO C standard.  This
1970          standard is substantially completely supported, modulo bugs,
1971          floating-point issues (mainly but not entirely relating to
1972          optional C11 features from Annexes F and G) and the optional
1973          Annexes K (Bounds-checking interfaces) and L (Analyzability).
1974          The name `c1x' is deprecated.
1975
1976    `gnu90'
1977    `gnu89'
1978          GNU dialect of ISO C90 (including some C99 features).
1979
1980    `gnu99'
1981    `gnu9x'
1982          GNU dialect of ISO C99.  The name `gnu9x' is deprecated.
1983
1984    `gnu11'
1985    `gnu1x'
1986          GNU dialect of ISO C11.  This is the default for C code.  The
1987          name `gnu1x' is deprecated.
1988
1989    `c++98'
1990    `c++03'
1991          The 1998 ISO C++ standard plus the 2003 technical corrigendum
1992          and some additional defect reports. Same as `-ansi' for C++
1993          code.
1994
1995    `gnu++98'
1996    `gnu++03'
1997          GNU dialect of `-std=c++98'.  This is the default for C++
1998          code.
1999
2000    `c++11'
2001    `c++0x'
2002          The 2011 ISO C++ standard plus amendments.  The name `c++0x'
2003          is deprecated.
2004
2005    `gnu++11'
2006    `gnu++0x'
2007          GNU dialect of `-std=c++11'.  The name `gnu++0x' is
2008          deprecated.
2009
2010    `c++14'
2011    `c++1y'
2012          The 2014 ISO C++ standard plus amendments.  The name `c++1y'
2013          is deprecated.
2014
2015    `gnu++14'
2016    `gnu++1y'
2017          GNU dialect of `-std=c++14'.  The name `gnu++1y' is
2018          deprecated.
2019
2020    `c++1z'
2021          The next revision of the ISO C++ standard, tentatively
2022          planned for 2017.  Support is highly experimental, and will
2023          almost certainly change in incompatible ways in future
2024          releases.
2025
2026    `gnu++1z'
2027          GNU dialect of `-std=c++1z'.  Support is highly experimental,
2028          and will almost certainly change in incompatible ways in
2029          future releases.
2030
2031`-fgnu89-inline'
2032     The option `-fgnu89-inline' tells GCC to use the traditional GNU
2033     semantics for `inline' functions when in C99 mode.  *Note An
2034     Inline Function is As Fast As a Macro: Inline.  Using this option
2035     is roughly equivalent to adding the `gnu_inline' function
2036     attribute to all inline functions (*note Function Attributes::).
2037
2038     The option `-fno-gnu89-inline' explicitly tells GCC to use the C99
2039     semantics for `inline' when in C99 or gnu99 mode (i.e., it
2040     specifies the default behavior).  This option is not supported in
2041     `-std=c90' or `-std=gnu90' mode.
2042
2043     The preprocessor macros `__GNUC_GNU_INLINE__' and
2044     `__GNUC_STDC_INLINE__' may be used to check which semantics are in
2045     effect for `inline' functions.  *Note Common Predefined Macros:
2046     (cpp)Common Predefined Macros.
2047
2048`-aux-info FILENAME'
2049     Output to the given filename prototyped declarations for all
2050     functions declared and/or defined in a translation unit, including
2051     those in header files.  This option is silently ignored in any
2052     language other than C.
2053
2054     Besides declarations, the file indicates, in comments, the origin
2055     of each declaration (source file and line), whether the
2056     declaration was implicit, prototyped or unprototyped (`I', `N' for
2057     new or `O' for old, respectively, in the first character after the
2058     line number and the colon), and whether it came from a declaration
2059     or a definition (`C' or `F', respectively, in the following
2060     character).  In the case of function definitions, a K&R-style list
2061     of arguments followed by their declarations is also provided,
2062     inside comments, after the declaration.
2063
2064`-fallow-parameterless-variadic-functions'
2065     Accept variadic functions without named parameters.
2066
2067     Although it is possible to define such a function, this is not very
2068     useful as it is not possible to read the arguments.  This is only
2069     supported for C as this construct is allowed by C++.
2070
2071`-fno-asm'
2072     Do not recognize `asm', `inline' or `typeof' as a keyword, so that
2073     code can use these words as identifiers.  You can use the keywords
2074     `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
2075     `-fno-asm'.
2076
2077     In C++, this switch only affects the `typeof' keyword, since `asm'
2078     and `inline' are standard keywords.  You may want to use the
2079     `-fno-gnu-keywords' flag instead, which has the same effect.  In
2080     C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
2081     the `asm' and `typeof' keywords, since `inline' is a standard
2082     keyword in ISO C99.
2083
2084`-fno-builtin'
2085`-fno-builtin-FUNCTION'
2086     Don't recognize built-in functions that do not begin with
2087     `__builtin_' as prefix.  *Note Other built-in functions provided
2088     by GCC: Other Builtins, for details of the functions affected,
2089     including those which are not built-in functions when `-ansi' or
2090     `-std' options for strict ISO C conformance are used because they
2091     do not have an ISO standard meaning.
2092
2093     GCC normally generates special code to handle certain built-in
2094     functions more efficiently; for instance, calls to `alloca' may
2095     become single instructions which adjust the stack directly, and
2096     calls to `memcpy' may become inline copy loops.  The resulting
2097     code is often both smaller and faster, but since the function
2098     calls no longer appear as such, you cannot set a breakpoint on
2099     those calls, nor can you change the behavior of the functions by
2100     linking with a different library.  In addition, when a function is
2101     recognized as a built-in function, GCC may use information about
2102     that function to warn about problems with calls to that function,
2103     or to generate more efficient code, even if the resulting code
2104     still contains calls to that function.  For example, warnings are
2105     given with `-Wformat' for bad calls to `printf' when `printf' is
2106     built in and `strlen' is known not to modify global memory.
2107
2108     With the `-fno-builtin-FUNCTION' option only the built-in function
2109     FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
2110     If a function is named that is not built-in in this version of
2111     GCC, this option is ignored.  There is no corresponding
2112     `-fbuiltin-FUNCTION' option; if you wish to enable built-in
2113     functions selectively when using `-fno-builtin' or
2114     `-ffreestanding', you may define macros such as:
2115
2116          #define abs(n)          __builtin_abs ((n))
2117          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
2118
2119`-fhosted'
2120     Assert that compilation targets a hosted environment.  This implies
2121     `-fbuiltin'.  A hosted environment is one in which the entire
2122     standard library is available, and in which `main' has a return
2123     type of `int'.  Examples are nearly everything except a kernel.
2124     This is equivalent to `-fno-freestanding'.
2125
2126`-ffreestanding'
2127     Assert that compilation targets a freestanding environment.  This
2128     implies `-fno-builtin'.  A freestanding environment is one in
2129     which the standard library may not exist, and program startup may
2130     not necessarily be at `main'.  The most obvious example is an OS
2131     kernel.  This is equivalent to `-fno-hosted'.
2132
2133     *Note Language Standards Supported by GCC: Standards, for details
2134     of freestanding and hosted environments.
2135
2136`-fopenacc'
2137     Enable handling of OpenACC directives `#pragma acc' in C/C++ and
2138     `!$acc' in Fortran.  When `-fopenacc' is specified, the compiler
2139     generates accelerated code according to the OpenACC Application
2140     Programming Interface v2.0 `http://www.openacc.org/'.  This option
2141     implies `-pthread', and thus is only supported on targets that
2142     have support for `-pthread'.
2143
2144     Note that this is an experimental feature, incomplete, and subject
2145     to change in future versions of GCC.  See
2146     `https://gcc.gnu.org/wiki/OpenACC' for more information.
2147
2148`-fopenmp'
2149     Enable handling of OpenMP directives `#pragma omp' in C/C++ and
2150     `!$omp' in Fortran.  When `-fopenmp' is specified, the compiler
2151     generates parallel code according to the OpenMP Application
2152     Program Interface v4.0 `http://www.openmp.org/'.  This option
2153     implies `-pthread', and thus is only supported on targets that
2154     have support for `-pthread'. `-fopenmp' implies `-fopenmp-simd'.
2155
2156`-fopenmp-simd'
2157     Enable handling of OpenMP's SIMD directives with `#pragma omp' in
2158     C/C++ and `!$omp' in Fortran. Other OpenMP directives are ignored.
2159
2160`-fcilkplus'
2161     Enable the usage of Cilk Plus language extension features for
2162     C/C++.  When the option `-fcilkplus' is specified, enable the
2163     usage of the Cilk Plus Language extension features for C/C++.  The
2164     present implementation follows ABI version 1.2.  This is an
2165     experimental feature that is only partially complete, and whose
2166     interface may change in future versions of GCC as the official
2167     specification changes.  Currently, all features but `_Cilk_for'
2168     have been implemented.
2169
2170`-fgnu-tm'
2171     When the option `-fgnu-tm' is specified, the compiler generates
2172     code for the Linux variant of Intel's current Transactional Memory
2173     ABI specification document (Revision 1.1, May 6 2009).  This is an
2174     experimental feature whose interface may change in future versions
2175     of GCC, as the official specification changes.  Please note that
2176     not all architectures are supported for this feature.
2177
2178     For more information on GCC's support for transactional memory,
2179     *Note The GNU Transactional Memory Library: (libitm)Enabling
2180     libitm.
2181
2182     Note that the transactional memory feature is not supported with
2183     non-call exceptions (`-fnon-call-exceptions').
2184
2185`-fms-extensions'
2186     Accept some non-standard constructs used in Microsoft header files.
2187
2188     In C++ code, this allows member names in structures to be similar
2189     to previous types declarations.
2190
2191          typedef int UOW;
2192          struct ABC {
2193            UOW UOW;
2194          };
2195
2196     Some cases of unnamed fields in structures and unions are only
2197     accepted with this option.  *Note Unnamed struct/union fields
2198     within structs/unions: Unnamed Fields, for details.
2199
2200     Note that this option is off for all targets but x86 targets using
2201     ms-abi.
2202
2203`-fplan9-extensions'
2204     Accept some non-standard constructs used in Plan 9 code.
2205
2206     This enables `-fms-extensions', permits passing pointers to
2207     structures with anonymous fields to functions that expect pointers
2208     to elements of the type of the field, and permits referring to
2209     anonymous fields declared using a typedef.  *Note Unnamed
2210     struct/union fields within structs/unions: Unnamed Fields, for
2211     details.  This is only supported for C, not C++.
2212
2213`-trigraphs'
2214     Support ISO C trigraphs.  The `-ansi' option (and `-std' options
2215     for strict ISO C conformance) implies `-trigraphs'.
2216
2217`-traditional'
2218`-traditional-cpp'
2219     Formerly, these options caused GCC to attempt to emulate a
2220     pre-standard C compiler.  They are now only supported with the
2221     `-E' switch.  The preprocessor continues to support a pre-standard
2222     mode.  See the GNU CPP manual for details.
2223
2224`-fcond-mismatch'
2225     Allow conditional expressions with mismatched types in the second
2226     and third arguments.  The value of such an expression is void.
2227     This option is not supported for C++.
2228
2229`-flax-vector-conversions'
2230     Allow implicit conversions between vectors with differing numbers
2231     of elements and/or incompatible element types.  This option should
2232     not be used for new code.
2233
2234`-funsigned-char'
2235     Let the type `char' be unsigned, like `unsigned char'.
2236
2237     Each kind of machine has a default for what `char' should be.  It
2238     is either like `unsigned char' by default or like `signed char' by
2239     default.
2240
2241     Ideally, a portable program should always use `signed char' or
2242     `unsigned char' when it depends on the signedness of an object.
2243     But many programs have been written to use plain `char' and expect
2244     it to be signed, or expect it to be unsigned, depending on the
2245     machines they were written for.  This option, and its inverse, let
2246     you make such a program work with the opposite default.
2247
2248     The type `char' is always a distinct type from each of `signed
2249     char' or `unsigned char', even though its behavior is always just
2250     like one of those two.
2251
2252`-fsigned-char'
2253     Let the type `char' be signed, like `signed char'.
2254
2255     Note that this is equivalent to `-fno-unsigned-char', which is the
2256     negative form of `-funsigned-char'.  Likewise, the option
2257     `-fno-signed-char' is equivalent to `-funsigned-char'.
2258
2259`-fsigned-bitfields'
2260`-funsigned-bitfields'
2261`-fno-signed-bitfields'
2262`-fno-unsigned-bitfields'
2263     These options control whether a bit-field is signed or unsigned,
2264     when the declaration does not use either `signed' or `unsigned'.
2265     By default, such a bit-field is signed, because this is
2266     consistent: the basic integer types such as `int' are signed types.
2267
2268
2269File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
2270
22713.5 Options Controlling C++ Dialect
2272===================================
2273
2274This section describes the command-line options that are only meaningful
2275for C++ programs.  You can also use most of the GNU compiler options
2276regardless of what language your program is in.  For example, you might
2277compile a file `firstClass.C' like this:
2278
2279     g++ -g -frepo -O -c firstClass.C
2280
2281In this example, only `-frepo' is an option meant only for C++
2282programs; you can use the other options with any language supported by
2283GCC.
2284
2285 Here is a list of options that are _only_ for compiling C++ programs:
2286
2287`-fabi-version=N'
2288     Use version N of the C++ ABI.  The default is version 0.
2289
2290     Version 0 refers to the version conforming most closely to the C++
2291     ABI specification.  Therefore, the ABI obtained using version 0
2292     will change in different versions of G++ as ABI bugs are fixed.
2293
2294     Version 1 is the version of the C++ ABI that first appeared in G++
2295     3.2.
2296
2297     Version 2 is the version of the C++ ABI that first appeared in G++
2298     3.4, and was the default through G++ 4.9.
2299
2300     Version 3 corrects an error in mangling a constant address as a
2301     template argument.
2302
2303     Version 4, which first appeared in G++ 4.5, implements a standard
2304     mangling for vector types.
2305
2306     Version 5, which first appeared in G++ 4.6, corrects the mangling
2307     of attribute const/volatile on function pointer types, decltype of
2308     a plain decl, and use of a function parameter in the declaration of
2309     another parameter.
2310
2311     Version 6, which first appeared in G++ 4.7, corrects the promotion
2312     behavior of C++11 scoped enums and the mangling of template
2313     argument packs, const/static_cast, prefix ++ and -, and a class
2314     scope function used as a template argument.
2315
2316     Version 7, which first appeared in G++ 4.8, that treats nullptr_t
2317     as a builtin type and corrects the mangling of lambdas in default
2318     argument scope.
2319
2320     Version 8, which first appeared in G++ 4.9, corrects the
2321     substitution behavior of function types with
2322     function-cv-qualifiers.
2323
2324     Version 9, which first appeared in G++ 5.2, corrects the alignment
2325     of `nullptr_t'.
2326
2327     See also `-Wabi'.
2328
2329`-fabi-compat-version=N'
2330     On targets that support strong aliases, G++ works around mangling
2331     changes by creating an alias with the correct mangled name when
2332     defining a symbol with an incorrect mangled name.  This switch
2333     specifies which ABI version to use for the alias.
2334
2335     With `-fabi-version=0' (the default), this defaults to 2.  If
2336     another ABI version is explicitly selected, this defaults to 0.
2337
2338     The compatibility version is also set by `-Wabi=N'.
2339
2340`-fno-access-control'
2341     Turn off all access checking.  This switch is mainly useful for
2342     working around bugs in the access control code.
2343
2344`-fcheck-new'
2345     Check that the pointer returned by `operator new' is non-null
2346     before attempting to modify the storage allocated.  This check is
2347     normally unnecessary because the C++ standard specifies that
2348     `operator new' only returns `0' if it is declared `throw()', in
2349     which case the compiler always checks the return value even
2350     without this option.  In all other cases, when `operator new' has
2351     a non-empty exception specification, memory exhaustion is
2352     signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
2353
2354`-fconstexpr-depth=N'
2355     Set the maximum nested evaluation depth for C++11 constexpr
2356     functions to N.  A limit is needed to detect endless recursion
2357     during constant expression evaluation.  The minimum specified by
2358     the standard is 512.
2359
2360`-fdeduce-init-list'
2361     Enable deduction of a template type parameter as
2362     `std::initializer_list' from a brace-enclosed initializer list,
2363     i.e.
2364
2365          template <class T> auto forward(T t) -> decltype (realfn (t))
2366          {
2367            return realfn (t);
2368          }
2369
2370          void f()
2371          {
2372            forward({1,2}); // call forward<std::initializer_list<int>>
2373          }
2374
2375     This deduction was implemented as a possible extension to the
2376     originally proposed semantics for the C++11 standard, but was not
2377     part of the final standard, so it is disabled by default.  This
2378     option is deprecated, and may be removed in a future version of
2379     G++.
2380
2381`-ffriend-injection'
2382     Inject friend functions into the enclosing namespace, so that they
2383     are visible outside the scope of the class in which they are
2384     declared.  Friend functions were documented to work this way in
2385     the old Annotated C++ Reference Manual.  However, in ISO C++ a
2386     friend function that is not declared in an enclosing scope can
2387     only be found using argument dependent lookup.  GCC defaults to
2388     the standard behavior.
2389
2390     This option is for compatibility, and may be removed in a future
2391     release of G++.
2392
2393`-fno-elide-constructors'
2394     The C++ standard allows an implementation to omit creating a
2395     temporary that is only used to initialize another object of the
2396     same type.  Specifying this option disables that optimization, and
2397     forces G++ to call the copy constructor in all cases.
2398
2399`-fno-enforce-eh-specs'
2400     Don't generate code to check for violation of exception
2401     specifications at run time.  This option violates the C++
2402     standard, but may be useful for reducing code size in production
2403     builds, much like defining `NDEBUG'.  This does not give user code
2404     permission to throw exceptions in violation of the exception
2405     specifications; the compiler still optimizes based on the
2406     specifications, so throwing an unexpected exception results in
2407     undefined behavior at run time.
2408
2409`-fextern-tls-init'
2410`-fno-extern-tls-init'
2411     The C++11 and OpenMP standards allow `thread_local' and
2412     `threadprivate' variables to have dynamic (runtime)
2413     initialization.  To support this, any use of such a variable goes
2414     through a wrapper function that performs any necessary
2415     initialization.  When the use and definition of the variable are
2416     in the same translation unit, this overhead can be optimized away,
2417     but when the use is in a different translation unit there is
2418     significant overhead even if the variable doesn't actually need
2419     dynamic initialization.  If the programmer can be sure that no use
2420     of the variable in a non-defining TU needs to trigger dynamic
2421     initialization (either because the variable is statically
2422     initialized, or a use of the variable in the defining TU will be
2423     executed before any uses in another TU), they can avoid this
2424     overhead with the `-fno-extern-tls-init' option.
2425
2426     On targets that support symbol aliases, the default is
2427     `-fextern-tls-init'.  On targets that do not support symbol
2428     aliases, the default is `-fno-extern-tls-init'.
2429
2430`-ffor-scope'
2431`-fno-for-scope'
2432     If `-ffor-scope' is specified, the scope of variables declared in
2433     a for-init-statement is limited to the `for' loop itself, as
2434     specified by the C++ standard.  If `-fno-for-scope' is specified,
2435     the scope of variables declared in a for-init-statement extends to
2436     the end of the enclosing scope, as was the case in old versions of
2437     G++, and other (traditional) implementations of C++.
2438
2439     If neither flag is given, the default is to follow the standard,
2440     but to allow and give a warning for old-style code that would
2441     otherwise be invalid, or have different behavior.
2442
2443`-fno-gnu-keywords'
2444     Do not recognize `typeof' as a keyword, so that code can use this
2445     word as an identifier.  You can use the keyword `__typeof__'
2446     instead.  `-ansi' implies `-fno-gnu-keywords'.
2447
2448`-fno-implicit-templates'
2449     Never emit code for non-inline templates that are instantiated
2450     implicitly (i.e. by use); only emit code for explicit
2451     instantiations.  *Note Template Instantiation::, for more
2452     information.
2453
2454`-fno-implicit-inline-templates'
2455     Don't emit code for implicit instantiations of inline templates,
2456     either.  The default is to handle inlines differently so that
2457     compiles with and without optimization need the same set of
2458     explicit instantiations.
2459
2460`-fno-implement-inlines'
2461     To save space, do not emit out-of-line copies of inline functions
2462     controlled by `#pragma implementation'.  This causes linker errors
2463     if these functions are not inlined everywhere they are called.
2464
2465`-fms-extensions'
2466     Disable Wpedantic warnings about constructs used in MFC, such as
2467     implicit int and getting a pointer to member function via
2468     non-standard syntax.
2469
2470`-fno-nonansi-builtins'
2471     Disable built-in declarations of functions that are not mandated by
2472     ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
2473     `bzero', `conjf', and other related functions.
2474
2475`-fnothrow-opt'
2476     Treat a `throw()' exception specification as if it were a
2477     `noexcept' specification to reduce or eliminate the text size
2478     overhead relative to a function with no exception specification.
2479     If the function has local variables of types with non-trivial
2480     destructors, the exception specification actually makes the
2481     function smaller because the EH cleanups for those variables can be
2482     optimized away.  The semantic effect is that an exception thrown
2483     out of a function with such an exception specification results in
2484     a call to `terminate' rather than `unexpected'.
2485
2486`-fno-operator-names'
2487     Do not treat the operator name keywords `and', `bitand', `bitor',
2488     `compl', `not', `or' and `xor' as synonyms as keywords.
2489
2490`-fno-optional-diags'
2491     Disable diagnostics that the standard says a compiler does not
2492     need to issue.  Currently, the only such diagnostic issued by G++
2493     is the one for a name having multiple meanings within a class.
2494
2495`-fpermissive'
2496     Downgrade some diagnostics about nonconformant code from errors to
2497     warnings.  Thus, using `-fpermissive' allows some nonconforming
2498     code to compile.
2499
2500`-fno-pretty-templates'
2501     When an error message refers to a specialization of a function
2502     template, the compiler normally prints the signature of the
2503     template followed by the template arguments and any typedefs or
2504     typenames in the signature (e.g. `void f(T) [with T = int]' rather
2505     than `void f(int)') so that it's clear which template is involved.
2506     When an error message refers to a specialization of a class
2507     template, the compiler omits any template arguments that match the
2508     default template arguments for that template.  If either of these
2509     behaviors make it harder to understand the error message rather
2510     than easier, you can use `-fno-pretty-templates' to disable them.
2511
2512`-frepo'
2513     Enable automatic template instantiation at link time.  This option
2514     also implies `-fno-implicit-templates'.  *Note Template
2515     Instantiation::, for more information.
2516
2517`-fno-rtti'
2518     Disable generation of information about every class with virtual
2519     functions for use by the C++ run-time type identification features
2520     (`dynamic_cast' and `typeid').  If you don't use those parts of
2521     the language, you can save some space by using this flag.  Note
2522     that exception handling uses the same information, but G++
2523     generates it as needed. The `dynamic_cast' operator can still be
2524     used for casts that do not require run-time type information, i.e.
2525     casts to `void *' or to unambiguous base classes.
2526
2527`-fsized-deallocation'
2528     Enable the built-in global declarations
2529          void operator delete (void *, std::size_t) noexcept;
2530          void operator delete[] (void *, std::size_t) noexcept;
2531     as introduced in C++14.  This is useful for user-defined
2532     replacement deallocation functions that, for example, use the size
2533     of the object to make deallocation faster.  Enabled by default
2534     under `-std=c++14' and above.  The flag `-Wsized-deallocation'
2535     warns about places that might want to add a definition.
2536
2537`-fstats'
2538     Emit statistics about front-end processing at the end of the
2539     compilation.  This information is generally only useful to the G++
2540     development team.
2541
2542`-fstrict-enums'
2543     Allow the compiler to optimize using the assumption that a value of
2544     enumerated type can only be one of the values of the enumeration
2545     (as defined in the C++ standard; basically, a value that can be
2546     represented in the minimum number of bits needed to represent all
2547     the enumerators).  This assumption may not be valid if the program
2548     uses a cast to convert an arbitrary integer value to the
2549     enumerated type.
2550
2551`-ftemplate-backtrace-limit=N'
2552     Set the maximum number of template instantiation notes for a single
2553     warning or error to N.  The default value is 10.
2554
2555`-ftemplate-depth=N'
2556     Set the maximum instantiation depth for template classes to N.  A
2557     limit on the template instantiation depth is needed to detect
2558     endless recursions during template class instantiation.  ANSI/ISO
2559     C++ conforming programs must not rely on a maximum depth greater
2560     than 17 (changed to 1024 in C++11).  The default value is 900, as
2561     the compiler can run out of stack space before hitting 1024 in
2562     some situations.
2563
2564`-fno-threadsafe-statics'
2565     Do not emit the extra code to use the routines specified in the C++
2566     ABI for thread-safe initialization of local statics.  You can use
2567     this option to reduce code size slightly in code that doesn't need
2568     to be thread-safe.
2569
2570`-fuse-cxa-atexit'
2571     Register destructors for objects with static storage duration with
2572     the `__cxa_atexit' function rather than the `atexit' function.
2573     This option is required for fully standards-compliant handling of
2574     static destructors, but only works if your C library supports
2575     `__cxa_atexit'.
2576
2577`-fno-use-cxa-get-exception-ptr'
2578     Don't use the `__cxa_get_exception_ptr' runtime routine.  This
2579     causes `std::uncaught_exception' to be incorrect, but is necessary
2580     if the runtime routine is not available.
2581
2582`-fvisibility-inlines-hidden'
2583     This switch declares that the user does not attempt to compare
2584     pointers to inline functions or methods where the addresses of the
2585     two functions are taken in different shared objects.
2586
2587     The effect of this is that GCC may, effectively, mark inline
2588     methods with `__attribute__ ((visibility ("hidden")))' so that
2589     they do not appear in the export table of a DSO and do not require
2590     a PLT indirection when used within the DSO.  Enabling this option
2591     can have a dramatic effect on load and link times of a DSO as it
2592     massively reduces the size of the dynamic export table when the
2593     library makes heavy use of templates.
2594
2595     The behavior of this switch is not quite the same as marking the
2596     methods as hidden directly, because it does not affect static
2597     variables local to the function or cause the compiler to deduce
2598     that the function is defined in only one shared object.
2599
2600     You may mark a method as having a visibility explicitly to negate
2601     the effect of the switch for that method.  For example, if you do
2602     want to compare pointers to a particular inline method, you might
2603     mark it as having default visibility.  Marking the enclosing class
2604     with explicit visibility has no effect.
2605
2606     Explicitly instantiated inline methods are unaffected by this
2607     option as their linkage might otherwise cross a shared library
2608     boundary.  *Note Template Instantiation::.
2609
2610`-fvisibility-ms-compat'
2611     This flag attempts to use visibility settings to make GCC's C++
2612     linkage model compatible with that of Microsoft Visual Studio.
2613
2614     The flag makes these changes to GCC's linkage model:
2615
2616       1. It sets the default visibility to `hidden', like
2617          `-fvisibility=hidden'.
2618
2619       2. Types, but not their members, are not hidden by default.
2620
2621       3. The One Definition Rule is relaxed for types without explicit
2622          visibility specifications that are defined in more than one
2623          shared object: those declarations are permitted if they are
2624          permitted when this option is not used.
2625
2626     In new code it is better to use `-fvisibility=hidden' and export
2627     those classes that are intended to be externally visible.
2628     Unfortunately it is possible for code to rely, perhaps
2629     accidentally, on the Visual Studio behavior.
2630
2631     Among the consequences of these changes are that static data
2632     members of the same type with the same name but defined in
2633     different shared objects are different, so changing one does not
2634     change the other; and that pointers to function members defined in
2635     different shared objects may not compare equal.  When this flag is
2636     given, it is a violation of the ODR to define types with the same
2637     name differently.
2638
2639`-fvtable-verify=[std|preinit|none]'
2640     Turn on (or off, if using `-fvtable-verify=none') the security
2641     feature that verifies at run time, for every virtual call, that
2642     the vtable pointer through which the call is made is valid for the
2643     type of the object, and has not been corrupted or overwritten.  If
2644     an invalid vtable pointer is detected at run time, an error is
2645     reported and execution of the program is immediately halted.
2646
2647     This option causes run-time data structures to be built at program
2648     startup, which are used for verifying the vtable pointers.  The
2649     options `std' and `preinit' control the timing of when these data
2650     structures are built.  In both cases the data structures are built
2651     before execution reaches `main'.  Using `-fvtable-verify=std'
2652     causes the data structures to be built after shared libraries have
2653     been loaded and initialized.  `-fvtable-verify=preinit' causes
2654     them to be built before shared libraries have been loaded and
2655     initialized.
2656
2657     If this option appears multiple times in the command line with
2658     different values specified, `none' takes highest priority over
2659     both `std' and `preinit'; `preinit' takes priority over `std'.
2660
2661`-fvtv-debug'
2662     When used in conjunction with `-fvtable-verify=std' or
2663     `-fvtable-verify=preinit', causes debug versions of the runtime
2664     functions for the vtable verification feature to be called.  This
2665     flag also causes the compiler to log information about which
2666     vtable pointers it finds for each class.  This information is
2667     written to a file named `vtv_set_ptr_data.log' in the directory
2668     named by the environment variable `VTV_LOGS_DIR' if that is
2669     defined or the current working directory otherwise.
2670
2671     Note:  This feature _appends_ data to the log file. If you want a
2672     fresh log file, be sure to delete any existing one.
2673
2674`-fvtv-counts'
2675     This is a debugging flag.  When used in conjunction with
2676     `-fvtable-verify=std' or `-fvtable-verify=preinit', this causes
2677     the compiler to keep track of the total number of virtual calls it
2678     encounters and the number of verifications it inserts.  It also
2679     counts the number of calls to certain run-time library functions
2680     that it inserts and logs this information for each compilation
2681     unit.  The compiler writes this information to a file named
2682     `vtv_count_data.log' in the directory named by the environment
2683     variable `VTV_LOGS_DIR' if that is defined or the current working
2684     directory otherwise.  It also counts the size of the vtable
2685     pointer sets for each class, and writes this information to
2686     `vtv_class_set_sizes.log' in the same directory.
2687
2688     Note:  This feature _appends_ data to the log files.  To get fresh
2689     log files, be sure to delete any existing ones.
2690
2691`-fno-weak'
2692     Do not use weak symbol support, even if it is provided by the
2693     linker.  By default, G++ uses weak symbols if they are available.
2694     This option exists only for testing, and should not be used by
2695     end-users; it results in inferior code and has no benefits.  This
2696     option may be removed in a future release of G++.
2697
2698`-nostdinc++'
2699     Do not search for header files in the standard directories
2700     specific to C++, but do still search the other standard
2701     directories.  (This option is used when building the C++ library.)
2702
2703 In addition, these optimization, warning, and code generation options
2704have meanings only for C++ programs:
2705
2706`-Wabi (C, Objective-C, C++ and Objective-C++ only)'
2707     When an explicit `-fabi-version=N' option is used, causes G++ to
2708     warn when it generates code that is probably not compatible with
2709     the vendor-neutral C++ ABI.  Since G++ now defaults to
2710     `-fabi-version=0', `-Wabi' has no effect unless either an older
2711     ABI version is selected (with `-fabi-version=N') or an older
2712     compatibility version is selected (with `-Wabi=N' or
2713     `-fabi-compat-version=N').
2714
2715     Although an effort has been made to warn about all such cases,
2716     there are probably some cases that are not warned about, even
2717     though G++ is generating incompatible code.  There may also be
2718     cases where warnings are emitted even though the code that is
2719     generated is compatible.
2720
2721     You should rewrite your code to avoid these warnings if you are
2722     concerned about the fact that code generated by G++ may not be
2723     binary compatible with code generated by other compilers.
2724
2725     `-Wabi' can also be used with an explicit version number to warn
2726     about compatibility with a particular `-fabi-version' level, e.g.
2727     `-Wabi=2' to warn about changes relative to `-fabi-version=2'.
2728     Specifying a version number also sets `-fabi-compat-version=N'.
2729
2730     The known incompatibilities in `-fabi-version=2' (which was the
2731     default from GCC 3.4 to 4.9) include:
2732
2733        * A template with a non-type template parameter of reference
2734          type was mangled incorrectly:
2735               extern int N;
2736               template <int &> struct S {};
2737               void n (S<N>) {2}
2738
2739          This was fixed in `-fabi-version=3'.
2740
2741        * SIMD vector types declared using `__attribute
2742          ((vector_size))' were mangled in a non-standard way that does
2743          not allow for overloading of functions taking vectors of
2744          different sizes.
2745
2746          The mangling was changed in `-fabi-version=4'.
2747
2748        * `__attribute ((const))' and `noreturn' were mangled as type
2749          qualifiers, and `decltype' of a plain declaration was folded
2750          away.
2751
2752          These mangling issues were fixed in `-fabi-version=5'.
2753
2754        * Scoped enumerators passed as arguments to a variadic function
2755          are promoted like unscoped enumerators, causing `va_arg' to
2756          complain.  On most targets this does not actually affect the
2757          parameter passing ABI, as there is no way to pass an argument
2758          smaller than `int'.
2759
2760          Also, the ABI changed the mangling of template argument packs,
2761          `const_cast', `static_cast', prefix increment/decrement, and
2762          a class scope function used as a template argument.
2763
2764          These issues were corrected in `-fabi-version=6'.
2765
2766        * Lambdas in default argument scope were mangled incorrectly,
2767          and the ABI changed the mangling of `nullptr_t'.
2768
2769          These issues were corrected in `-fabi-version=7'.
2770
2771        * When mangling a function type with function-cv-qualifiers, the
2772          un-qualified function type was incorrectly treated as a
2773          substitution candidate.
2774
2775          This was fixed in `-fabi-version=8', the default for GCC 5.1.
2776
2777        * `decltype(nullptr)' incorrectly had an alignment of 1,
2778          leading to unaligned accesses.  Note that this did not affect
2779          the ABI of a function with a `nullptr_t' parameter, as
2780          parameters have a minimum alignment.
2781
2782          This was fixed in `-fabi-version=9', the default for GCC 5.2.
2783
2784     It also warns about psABI-related changes.  The known psABI
2785     changes at this point include:
2786
2787        * For SysV/x86-64, unions with `long double' members are passed
2788          in memory as specified in psABI.  For example:
2789
2790               union U {
2791                 long double ld;
2792                 int i;
2793               };
2794
2795          `union U' is always passed in memory.
2796
2797
2798`-Wabi-tag (C++ and Objective-C++ only)'
2799     Warn when a type with an ABI tag is used in a context that does not
2800     have that ABI tag.  See *Note C++ Attributes:: for more information
2801     about ABI tags.
2802
2803`-Wctor-dtor-privacy (C++ and Objective-C++ only)'
2804     Warn when a class seems unusable because all the constructors or
2805     destructors in that class are private, and it has neither friends
2806     nor public static member functions.  Also warn if there are no
2807     non-private methods, and there's at least one private member
2808     function that isn't a constructor or destructor.
2809
2810`-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
2811     Warn when `delete' is used to destroy an instance of a class that
2812     has virtual functions and non-virtual destructor. It is unsafe to
2813     delete an instance of a derived class through a pointer to a base
2814     class if the base class does not have a virtual destructor.  This
2815     warning is enabled by `-Wall'.
2816
2817`-Wliteral-suffix (C++ and Objective-C++ only)'
2818     Warn when a string or character literal is followed by a ud-suffix
2819     which does not begin with an underscore.  As a conforming
2820     extension, GCC treats such suffixes as separate preprocessing
2821     tokens in order to maintain backwards compatibility with code that
2822     uses formatting macros from `<inttypes.h>'.  For example:
2823
2824          #define __STDC_FORMAT_MACROS
2825          #include <inttypes.h>
2826          #include <stdio.h>
2827
2828          int main() {
2829            int64_t i64 = 123;
2830            printf("My int64: %"PRId64"\n", i64);
2831          }
2832
2833     In this case, `PRId64' is treated as a separate preprocessing
2834     token.
2835
2836     This warning is enabled by default.
2837
2838`-Wnarrowing (C++ and Objective-C++ only)'
2839     Warn when a narrowing conversion prohibited by C++11 occurs within
2840     `{ }', e.g.
2841
2842          int i = { 2.2 }; // error: narrowing from double to int
2843
2844     This flag is included in `-Wall' and `-Wc++11-compat'.
2845
2846     With `-std=c++11', `-Wno-narrowing' suppresses the diagnostic
2847     required by the standard.  Note that this does not affect the
2848     meaning of well-formed code; narrowing conversions are still
2849     considered ill-formed in SFINAE context.
2850
2851`-Wnoexcept (C++ and Objective-C++ only)'
2852     Warn when a noexcept-expression evaluates to false because of a
2853     call to a function that does not have a non-throwing exception
2854     specification (i.e. `throw()' or `noexcept') but is known by the
2855     compiler to never throw an exception.
2856
2857`-Wnon-virtual-dtor (C++ and Objective-C++ only)'
2858     Warn when a class has virtual functions and an accessible
2859     non-virtual destructor itself or in an accessible polymorphic base
2860     class, in which case it is possible but unsafe to delete an
2861     instance of a derived class through a pointer to the class itself
2862     or base class.  This warning is automatically enabled if
2863     `-Weffc++' is specified.
2864
2865`-Wreorder (C++ and Objective-C++ only)'
2866     Warn when the order of member initializers given in the code does
2867     not match the order in which they must be executed.  For instance:
2868
2869          struct A {
2870            int i;
2871            int j;
2872            A(): j (0), i (1) { }
2873          };
2874
2875     The compiler rearranges the member initializers for `i' and `j' to
2876     match the declaration order of the members, emitting a warning to
2877     that effect.  This warning is enabled by `-Wall'.
2878
2879`-fext-numeric-literals (C++ and Objective-C++ only)'
2880     Accept imaginary, fixed-point, or machine-defined literal number
2881     suffixes as GNU extensions.  When this option is turned off these
2882     suffixes are treated as C++11 user-defined literal numeric
2883     suffixes.  This is on by default for all pre-C++11 dialects and
2884     all GNU dialects: `-std=c++98', `-std=gnu++98', `-std=gnu++11',
2885     `-std=gnu++14'.  This option is off by default for ISO C++11
2886     onwards (`-std=c++11', ...).
2887
2888 The following `-W...' options are not affected by `-Wall'.
2889
2890`-Weffc++ (C++ and Objective-C++ only)'
2891     Warn about violations of the following style guidelines from Scott
2892     Meyers' `Effective C++' series of books:
2893
2894        * Define a copy constructor and an assignment operator for
2895          classes with dynamically-allocated memory.
2896
2897        * Prefer initialization to assignment in constructors.
2898
2899        * Have `operator=' return a reference to `*this'.
2900
2901        * Don't try to return a reference when you must return an
2902          object.
2903
2904        * Distinguish between prefix and postfix forms of increment and
2905          decrement operators.
2906
2907        * Never overload `&&', `||', or `,'.
2908
2909
2910     This option also enables `-Wnon-virtual-dtor', which is also one
2911     of the effective C++ recommendations.  However, the check is
2912     extended to warn about the lack of virtual destructor in accessible
2913     non-polymorphic bases classes too.
2914
2915     When selecting this option, be aware that the standard library
2916     headers do not obey all of these guidelines; use `grep -v' to
2917     filter out those warnings.
2918
2919`-Wstrict-null-sentinel (C++ and Objective-C++ only)'
2920     Warn about the use of an uncasted `NULL' as sentinel.  When
2921     compiling only with GCC this is a valid sentinel, as `NULL' is
2922     defined to `__null'.  Although it is a null pointer constant
2923     rather than a null pointer, it is guaranteed to be of the same
2924     size as a pointer.  But this use is not portable across different
2925     compilers.
2926
2927`-Wno-non-template-friend (C++ and Objective-C++ only)'
2928     Disable warnings when non-templatized friend functions are declared
2929     within a template.  Since the advent of explicit template
2930     specification support in G++, if the name of the friend is an
2931     unqualified-id (i.e., `friend foo(int)'), the C++ language
2932     specification demands that the friend declare or define an
2933     ordinary, nontemplate function.  (Section 14.5.3).  Before G++
2934     implemented explicit specification, unqualified-ids could be
2935     interpreted as a particular specialization of a templatized
2936     function.  Because this non-conforming behavior is no longer the
2937     default behavior for G++, `-Wnon-template-friend' allows the
2938     compiler to check existing code for potential trouble spots and is
2939     on by default.  This new compiler behavior can be turned off with
2940     `-Wno-non-template-friend', which keeps the conformant compiler
2941     code but disables the helpful warning.
2942
2943`-Wold-style-cast (C++ and Objective-C++ only)'
2944     Warn if an old-style (C-style) cast to a non-void type is used
2945     within a C++ program.  The new-style casts (`dynamic_cast',
2946     `static_cast', `reinterpret_cast', and `const_cast') are less
2947     vulnerable to unintended effects and much easier to search for.
2948
2949`-Woverloaded-virtual (C++ and Objective-C++ only)'
2950     Warn when a function declaration hides virtual functions from a
2951     base class.  For example, in:
2952
2953          struct A {
2954            virtual void f();
2955          };
2956
2957          struct B: public A {
2958            void f(int);
2959          };
2960
2961     the `A' class version of `f' is hidden in `B', and code like:
2962
2963          B* b;
2964          b->f();
2965
2966     fails to compile.
2967
2968`-Wno-pmf-conversions (C++ and Objective-C++ only)'
2969     Disable the diagnostic for converting a bound pointer to member
2970     function to a plain pointer.
2971
2972`-Wsign-promo (C++ and Objective-C++ only)'
2973     Warn when overload resolution chooses a promotion from unsigned or
2974     enumerated type to a signed type, over a conversion to an unsigned
2975     type of the same size.  Previous versions of G++ tried to preserve
2976     unsignedness, but the standard mandates the current behavior.
2977
2978
2979File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
2980
29813.6 Options Controlling Objective-C and Objective-C++ Dialects
2982==============================================================
2983
2984(NOTE: This manual does not describe the Objective-C and Objective-C++
2985languages themselves.  *Note Language Standards Supported by GCC:
2986Standards, for references.)
2987
2988 This section describes the command-line options that are only
2989meaningful for Objective-C and Objective-C++ programs.  You can also
2990use most of the language-independent GNU compiler options.  For
2991example, you might compile a file `some_class.m' like this:
2992
2993     gcc -g -fgnu-runtime -O -c some_class.m
2994
2995In this example, `-fgnu-runtime' is an option meant only for
2996Objective-C and Objective-C++ programs; you can use the other options
2997with any language supported by GCC.
2998
2999 Note that since Objective-C is an extension of the C language,
3000Objective-C compilations may also use options specific to the C
3001front-end (e.g., `-Wtraditional').  Similarly, Objective-C++
3002compilations may use C++-specific options (e.g., `-Wabi').
3003
3004 Here is a list of options that are _only_ for compiling Objective-C
3005and Objective-C++ programs:
3006
3007`-fconstant-string-class=CLASS-NAME'
3008     Use CLASS-NAME as the name of the class to instantiate for each
3009     literal string specified with the syntax `@"..."'.  The default
3010     class name is `NXConstantString' if the GNU runtime is being used,
3011     and `NSConstantString' if the NeXT runtime is being used (see
3012     below).  The `-fconstant-cfstrings' option, if also present,
3013     overrides the `-fconstant-string-class' setting and cause `@"..."'
3014     literals to be laid out as constant CoreFoundation strings.
3015
3016`-fgnu-runtime'
3017     Generate object code compatible with the standard GNU Objective-C
3018     runtime.  This is the default for most types of systems.
3019
3020`-fnext-runtime'
3021     Generate output compatible with the NeXT runtime.  This is the
3022     default for NeXT-based systems, including Darwin and Mac OS X.
3023     The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
3024     option is used.
3025
3026`-fno-nil-receivers'
3027     Assume that all Objective-C message dispatches (`[receiver
3028     message:arg]') in this translation unit ensure that the receiver is
3029     not `nil'.  This allows for more efficient entry points in the
3030     runtime to be used.  This option is only available in conjunction
3031     with the NeXT runtime and ABI version 0 or 1.
3032
3033`-fobjc-abi-version=N'
3034     Use version N of the Objective-C ABI for the selected runtime.
3035     This option is currently supported only for the NeXT runtime.  In
3036     that case, Version 0 is the traditional (32-bit) ABI without
3037     support for properties and other Objective-C 2.0 additions.
3038     Version 1 is the traditional (32-bit) ABI with support for
3039     properties and other Objective-C 2.0 additions.  Version 2 is the
3040     modern (64-bit) ABI.  If nothing is specified, the default is
3041     Version 0 on 32-bit target machines, and Version 2 on 64-bit
3042     target machines.
3043
3044`-fobjc-call-cxx-cdtors'
3045     For each Objective-C class, check if any of its instance variables
3046     is a C++ object with a non-trivial default constructor.  If so,
3047     synthesize a special `- (id) .cxx_construct' instance method which
3048     runs non-trivial default constructors on any such instance
3049     variables, in order, and then return `self'.  Similarly, check if
3050     any instance variable is a C++ object with a non-trivial
3051     destructor, and if so, synthesize a special `- (void)
3052     .cxx_destruct' method which runs all such default destructors, in
3053     reverse order.
3054
3055     The `- (id) .cxx_construct' and `- (void) .cxx_destruct' methods
3056     thusly generated only operate on instance variables declared in
3057     the current Objective-C class, and not those inherited from
3058     superclasses.  It is the responsibility of the Objective-C runtime
3059     to invoke all such methods in an object's inheritance hierarchy.
3060     The `- (id) .cxx_construct' methods are invoked by the runtime
3061     immediately after a new object instance is allocated; the `-
3062     (void) .cxx_destruct' methods are invoked immediately before the
3063     runtime deallocates an object instance.
3064
3065     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
3066     later has support for invoking the `- (id) .cxx_construct' and `-
3067     (void) .cxx_destruct' methods.
3068
3069`-fobjc-direct-dispatch'
3070     Allow fast jumps to the message dispatcher.  On Darwin this is
3071     accomplished via the comm page.
3072
3073`-fobjc-exceptions'
3074     Enable syntactic support for structured exception handling in
3075     Objective-C, similar to what is offered by C++ and Java.  This
3076     option is required to use the Objective-C keywords `@try',
3077     `@throw', `@catch', `@finally' and `@synchronized'.  This option
3078     is available with both the GNU runtime and the NeXT runtime (but
3079     not available in conjunction with the NeXT runtime on Mac OS X
3080     10.2 and earlier).
3081
3082`-fobjc-gc'
3083     Enable garbage collection (GC) in Objective-C and Objective-C++
3084     programs.  This option is only available with the NeXT runtime; the
3085     GNU runtime has a different garbage collection implementation that
3086     does not require special compiler flags.
3087
3088`-fobjc-nilcheck'
3089     For the NeXT runtime with version 2 of the ABI, check for a nil
3090     receiver in method invocations before doing the actual method call.
3091     This is the default and can be disabled using
3092     `-fno-objc-nilcheck'.  Class methods and super calls are never
3093     checked for nil in this way no matter what this flag is set to.
3094     Currently this flag does nothing when the GNU runtime, or an older
3095     version of the NeXT runtime ABI, is used.
3096
3097`-fobjc-std=objc1'
3098     Conform to the language syntax of Objective-C 1.0, the language
3099     recognized by GCC 4.0.  This only affects the Objective-C
3100     additions to the C/C++ language; it does not affect conformance to
3101     C/C++ standards, which is controlled by the separate C/C++ dialect
3102     option flags.  When this option is used with the Objective-C or
3103     Objective-C++ compiler, any Objective-C syntax that is not
3104     recognized by GCC 4.0 is rejected.  This is useful if you need to
3105     make sure that your Objective-C code can be compiled with older
3106     versions of GCC.
3107
3108`-freplace-objc-classes'
3109     Emit a special marker instructing `ld(1)' not to statically link in
3110     the resulting object file, and allow `dyld(1)' to load it in at
3111     run time instead.  This is used in conjunction with the
3112     Fix-and-Continue debugging mode, where the object file in question
3113     may be recompiled and dynamically reloaded in the course of
3114     program execution, without the need to restart the program itself.
3115     Currently, Fix-and-Continue functionality is only available in
3116     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
3117
3118`-fzero-link'
3119     When compiling for the NeXT runtime, the compiler ordinarily
3120     replaces calls to `objc_getClass("...")' (when the name of the
3121     class is known at compile time) with static class references that
3122     get initialized at load time, which improves run-time performance.
3123     Specifying the `-fzero-link' flag suppresses this behavior and
3124     causes calls to `objc_getClass("...")' to be retained.  This is
3125     useful in Zero-Link debugging mode, since it allows for individual
3126     class implementations to be modified during program execution.
3127     The GNU runtime currently always retains calls to
3128     `objc_get_class("...")' regardless of command-line options.
3129
3130`-fno-local-ivars'
3131     By default instance variables in Objective-C can be accessed as if
3132     they were local variables from within the methods of the class
3133     they're declared in.  This can lead to shadowing between instance
3134     variables and other variables declared either locally inside a
3135     class method or globally with the same name.  Specifying the
3136     `-fno-local-ivars' flag disables this behavior thus avoiding
3137     variable shadowing issues.
3138
3139`-fivar-visibility=[public|protected|private|package]'
3140     Set the default instance variable visibility to the specified
3141     option so that instance variables declared outside the scope of
3142     any access modifier directives default to the specified visibility.
3143
3144`-gen-decls'
3145     Dump interface declarations for all classes seen in the source
3146     file to a file named `SOURCENAME.decl'.
3147
3148`-Wassign-intercept (Objective-C and Objective-C++ only)'
3149     Warn whenever an Objective-C assignment is being intercepted by the
3150     garbage collector.
3151
3152`-Wno-protocol (Objective-C and Objective-C++ only)'
3153     If a class is declared to implement a protocol, a warning is
3154     issued for every method in the protocol that is not implemented by
3155     the class.  The default behavior is to issue a warning for every
3156     method not explicitly implemented in the class, even if a method
3157     implementation is inherited from the superclass.  If you use the
3158     `-Wno-protocol' option, then methods inherited from the superclass
3159     are considered to be implemented, and no warning is issued for
3160     them.
3161
3162`-Wselector (Objective-C and Objective-C++ only)'
3163     Warn if multiple methods of different types for the same selector
3164     are found during compilation.  The check is performed on the list
3165     of methods in the final stage of compilation.  Additionally, a
3166     check is performed for each selector appearing in a
3167     `@selector(...)'  expression, and a corresponding method for that
3168     selector has been found during compilation.  Because these checks
3169     scan the method table only at the end of compilation, these
3170     warnings are not produced if the final stage of compilation is not
3171     reached, for example because an error is found during compilation,
3172     or because the `-fsyntax-only' option is being used.
3173
3174`-Wstrict-selector-match (Objective-C and Objective-C++ only)'
3175     Warn if multiple methods with differing argument and/or return
3176     types are found for a given selector when attempting to send a
3177     message using this selector to a receiver of type `id' or `Class'.
3178     When this flag is off (which is the default behavior), the
3179     compiler omits such warnings if any differences found are confined
3180     to types that share the same size and alignment.
3181
3182`-Wundeclared-selector (Objective-C and Objective-C++ only)'
3183     Warn if a `@selector(...)' expression referring to an undeclared
3184     selector is found.  A selector is considered undeclared if no
3185     method with that name has been declared before the
3186     `@selector(...)' expression, either explicitly in an `@interface'
3187     or `@protocol' declaration, or implicitly in an `@implementation'
3188     section.  This option always performs its checks as soon as a
3189     `@selector(...)' expression is found, while `-Wselector' only
3190     performs its checks in the final stage of compilation.  This also
3191     enforces the coding style convention that methods and selectors
3192     must be declared before being used.
3193
3194`-print-objc-runtime-info'
3195     Generate C header describing the largest structure that is passed
3196     by value, if any.
3197
3198
3199
3200File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
3201
32023.7 Options to Control Diagnostic Messages Formatting
3203=====================================================
3204
3205Traditionally, diagnostic messages have been formatted irrespective of
3206the output device's aspect (e.g. its width, ...).  You can use the
3207options described below to control the formatting algorithm for
3208diagnostic messages, e.g. how many characters per line, how often
3209source location information should be reported.  Note that some
3210language front ends may not honor these options.
3211
3212`-fmessage-length=N'
3213     Try to format error messages so that they fit on lines of about N
3214     characters.  If N is zero, then no line-wrapping is done; each
3215     error message appears on a single line.  This is the default for
3216     all front ends.
3217
3218`-fdiagnostics-show-location=once'
3219     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3220     messages reporter to emit source location information _once_; that
3221     is, in case the message is too long to fit on a single physical
3222     line and has to be wrapped, the source location won't be emitted
3223     (as prefix) again, over and over, in subsequent continuation
3224     lines.  This is the default behavior.
3225
3226`-fdiagnostics-show-location=every-line'
3227     Only meaningful in line-wrapping mode.  Instructs the diagnostic
3228     messages reporter to emit the same source location information (as
3229     prefix) for physical lines that result from the process of breaking
3230     a message which is too long to fit on a single line.
3231
3232`-fdiagnostics-color[=WHEN]'
3233`-fno-diagnostics-color'
3234     Use color in diagnostics.  WHEN is `never', `always', or `auto'.
3235     The default depends on how the compiler has been configured, it
3236     can be any of the above WHEN options or also `never' if
3237     `GCC_COLORS' environment variable isn't present in the environment,
3238     and `auto' otherwise.  `auto' means to use color only when the
3239     standard error is a terminal.  The forms `-fdiagnostics-color' and
3240     `-fno-diagnostics-color' are aliases for
3241     `-fdiagnostics-color=always' and `-fdiagnostics-color=never',
3242     respectively.
3243
3244     The colors are defined by the environment variable `GCC_COLORS'.
3245     Its value is a colon-separated list of capabilities and Select
3246     Graphic Rendition (SGR) substrings. SGR commands are interpreted
3247     by the terminal or terminal emulator.  (See the section in the
3248     documentation of your text terminal for permitted values and their
3249     meanings as character attributes.)  These substring values are
3250     integers in decimal representation and can be concatenated with
3251     semicolons.  Common values to concatenate include `1' for bold,
3252     `4' for underline, `5' for blink, `7' for inverse, `39' for
3253     default foreground color, `30' to `37' for foreground colors, `90'
3254     to `97' for 16-color mode foreground colors, `38;5;0' to `38;5;255'
3255     for 88-color and 256-color modes foreground colors, `49' for
3256     default background color, `40' to `47' for background colors,
3257     `100' to `107' for 16-color mode background colors, and `48;5;0'
3258     to `48;5;255' for 88-color and 256-color modes background colors.
3259
3260     The default `GCC_COLORS' is
3261          error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
3262     where `01;31' is bold red, `01;35' is bold magenta, `01;36' is
3263     bold cyan, `01;32' is bold green and `01' is bold. Setting
3264     `GCC_COLORS' to the empty string disables colors.  Supported
3265     capabilities are as follows.
3266
3267    `error='
3268          SGR substring for error: markers.
3269
3270    `warning='
3271          SGR substring for warning: markers.
3272
3273    `note='
3274          SGR substring for note: markers.
3275
3276    `caret='
3277          SGR substring for caret line.
3278
3279    `locus='
3280          SGR substring for location information, `file:line' or
3281          `file:line:column' etc.
3282
3283    `quote='
3284          SGR substring for information printed within quotes.
3285
3286`-fno-diagnostics-show-option'
3287     By default, each diagnostic emitted includes text indicating the
3288     command-line option that directly controls the diagnostic (if such
3289     an option is known to the diagnostic machinery).  Specifying the
3290     `-fno-diagnostics-show-option' flag suppresses that behavior.
3291
3292`-fno-diagnostics-show-caret'
3293     By default, each diagnostic emitted includes the original source
3294     line and a caret '^' indicating the column.  This option
3295     suppresses this information.  The source line is truncated to N
3296     characters, if the `-fmessage-length=n' option is given.  When the
3297     output is done to the terminal, the width is limited to the width
3298     given by the `COLUMNS' environment variable or, if not set, to the
3299     terminal width.
3300
3301
3302
3303File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
3304
33053.8 Options to Request or Suppress Warnings
3306===========================================
3307
3308Warnings are diagnostic messages that report constructions that are not
3309inherently erroneous but that are risky or suggest there may have been
3310an error.
3311
3312 The following language-independent options do not enable specific
3313warnings but control the kinds of diagnostics produced by GCC.
3314
3315`-fsyntax-only'
3316     Check the code for syntax errors, but don't do anything beyond
3317     that.
3318
3319`-fmax-errors=N'
3320     Limits the maximum number of error messages to N, at which point
3321     GCC bails out rather than attempting to continue processing the
3322     source code.  If N is 0 (the default), there is no limit on the
3323     number of error messages produced.  If `-Wfatal-errors' is also
3324     specified, then `-Wfatal-errors' takes precedence over this option.
3325
3326`-w'
3327     Inhibit all warning messages.
3328
3329`-Werror'
3330     Make all warnings into errors.
3331
3332`-Werror='
3333     Make the specified warning into an error.  The specifier for a
3334     warning is appended; for example `-Werror=switch' turns the
3335     warnings controlled by `-Wswitch' into errors.  This switch takes a
3336     negative form, to be used to negate `-Werror' for specific
3337     warnings; for example `-Wno-error=switch' makes `-Wswitch'
3338     warnings not be errors, even when `-Werror' is in effect.
3339
3340     The warning message for each controllable warning includes the
3341     option that controls the warning.  That option can then be used
3342     with `-Werror=' and `-Wno-error=' as described above.  (Printing
3343     of the option in the warning message can be disabled using the
3344     `-fno-diagnostics-show-option' flag.)
3345
3346     Note that specifying `-Werror='FOO automatically implies `-W'FOO.
3347     However, `-Wno-error='FOO does not imply anything.
3348
3349`-Wfatal-errors'
3350     This option causes the compiler to abort compilation on the first
3351     error occurred rather than trying to keep going and printing
3352     further error messages.
3353
3354
3355 You can request many specific warnings with options beginning with
3356`-W', for example `-Wimplicit' to request warnings on implicit
3357declarations.  Each of these specific warning options also has a
3358negative form beginning `-Wno-' to turn off warnings; for example,
3359`-Wno-implicit'.  This manual lists only one of the two forms,
3360whichever is not the default.  For further language-specific options
3361also refer to *Note C++ Dialect Options:: and *Note Objective-C and
3362Objective-C++ Dialect Options::.
3363
3364 Some options, such as `-Wall' and `-Wextra', turn on other options,
3365such as `-Wunused', which may turn on further options, such as
3366`-Wunused-value'. The combined effect of positive and negative forms is
3367that more specific options have priority over less specific ones,
3368independently of their position in the command-line. For options of the
3369same specificity, the last one takes effect. Options enabled or
3370disabled via pragmas (*note Diagnostic Pragmas::) take effect as if
3371they appeared at the end of the command-line.
3372
3373 When an unrecognized warning option is requested (e.g.,
3374`-Wunknown-warning'), GCC emits a diagnostic stating that the option is
3375not recognized.  However, if the `-Wno-' form is used, the behavior is
3376slightly different: no diagnostic is produced for
3377`-Wno-unknown-warning' unless other diagnostics are being produced.
3378This allows the use of new `-Wno-' options with old compilers, but if
3379something goes wrong, the compiler warns that an unrecognized option is
3380present.
3381
3382`-Wpedantic'
3383`-pedantic'
3384     Issue all the warnings demanded by strict ISO C and ISO C++;
3385     reject all programs that use forbidden extensions, and some other
3386     programs that do not follow ISO C and ISO C++.  For ISO C, follows
3387     the version of the ISO C standard specified by any `-std' option
3388     used.
3389
3390     Valid ISO C and ISO C++ programs should compile properly with or
3391     without this option (though a rare few require `-ansi' or a `-std'
3392     option specifying the required version of ISO C).  However,
3393     without this option, certain GNU extensions and traditional C and
3394     C++ features are supported as well.  With this option, they are
3395     rejected.
3396
3397     `-Wpedantic' does not cause warning messages for use of the
3398     alternate keywords whose names begin and end with `__'.  Pedantic
3399     warnings are also disabled in the expression that follows
3400     `__extension__'.  However, only system header files should use
3401     these escape routes; application programs should avoid them.
3402     *Note Alternate Keywords::.
3403
3404     Some users try to use `-Wpedantic' to check programs for strict ISO
3405     C conformance.  They soon find that it does not do quite what they
3406     want: it finds some non-ISO practices, but not all--only those for
3407     which ISO C _requires_ a diagnostic, and some others for which
3408     diagnostics have been added.
3409
3410     A feature to report any failure to conform to ISO C might be
3411     useful in some instances, but would require considerable
3412     additional work and would be quite different from `-Wpedantic'.
3413     We don't have plans to support such a feature in the near future.
3414
3415     Where the standard specified with `-std' represents a GNU extended
3416     dialect of C, such as `gnu90' or `gnu99', there is a corresponding
3417     "base standard", the version of ISO C on which the GNU extended
3418     dialect is based.  Warnings from `-Wpedantic' are given where they
3419     are required by the base standard.  (It does not make sense for
3420     such warnings to be given only for features not in the specified
3421     GNU C dialect, since by definition the GNU dialects of C include
3422     all features the compiler supports with the given option, and
3423     there would be nothing to warn about.)
3424
3425`-pedantic-errors'
3426     Give an error whenever the "base standard" (see `-Wpedantic')
3427     requires a diagnostic, in some cases where there is undefined
3428     behavior at compile-time and in some other cases that do not
3429     prevent compilation of programs that are valid according to the
3430     standard. This is not equivalent to `-Werror=pedantic', since
3431     there are errors enabled by this option and not enabled by the
3432     latter and vice versa.
3433
3434`-Wall'
3435     This enables all the warnings about constructions that some users
3436     consider questionable, and that are easy to avoid (or modify to
3437     prevent the warning), even in conjunction with macros.  This also
3438     enables some language-specific warnings described in *Note C++
3439     Dialect Options:: and *Note Objective-C and Objective-C++ Dialect
3440     Options::.
3441
3442     `-Wall' turns on the following warning flags:
3443
3444          -Waddress
3445          -Warray-bounds=1 (only with `-O2')
3446          -Wc++11-compat  -Wc++14-compat
3447          -Wchar-subscripts
3448          -Wenum-compare (in C/ObjC; this is on by default in C++)
3449          -Wimplicit-int (C and Objective-C only)
3450          -Wimplicit-function-declaration (C and Objective-C only)
3451          -Wcomment
3452          -Wformat
3453          -Wmain (only for C/ObjC and unless `-ffreestanding')
3454          -Wmaybe-uninitialized
3455          -Wmissing-braces (only for C/ObjC)
3456          -Wnonnull
3457          -Wopenmp-simd
3458          -Wparentheses
3459          -Wpointer-sign
3460          -Wreorder
3461          -Wreturn-type
3462          -Wsequence-point
3463          -Wsign-compare (only in C++)
3464          -Wstrict-aliasing
3465          -Wstrict-overflow=1
3466          -Wswitch
3467          -Wtrigraphs
3468          -Wuninitialized
3469          -Wunknown-pragmas
3470          -Wunused-function
3471          -Wunused-label
3472          -Wunused-value
3473          -Wunused-variable
3474          -Wvolatile-register-var
3475
3476     Note that some warning flags are not implied by `-Wall'.  Some of
3477     them warn about constructions that users generally do not consider
3478     questionable, but which occasionally you might wish to check for;
3479     others warn about constructions that are necessary or hard to
3480     avoid in some cases, and there is no simple way to modify the code
3481     to suppress the warning. Some of them are enabled by `-Wextra' but
3482     many of them must be enabled individually.
3483
3484`-Wextra'
3485     This enables some extra warning flags that are not enabled by
3486     `-Wall'. (This option used to be called `-W'.  The older name is
3487     still supported, but the newer name is more descriptive.)
3488
3489          -Wclobbered
3490          -Wempty-body
3491          -Wignored-qualifiers
3492          -Wmissing-field-initializers
3493          -Wmissing-parameter-type (C only)
3494          -Wold-style-declaration (C only)
3495          -Woverride-init
3496          -Wsign-compare
3497          -Wtype-limits
3498          -Wuninitialized
3499          -Wunused-parameter (only with `-Wunused' or `-Wall')
3500          -Wunused-but-set-parameter (only with `-Wunused' or `-Wall')
3501
3502     The option `-Wextra' also prints warning messages for the
3503     following cases:
3504
3505        * A pointer is compared against integer zero with `<', `<=',
3506          `>', or `>='.
3507
3508        * (C++ only) An enumerator and a non-enumerator both appear in a
3509          conditional expression.
3510
3511        * (C++ only) Ambiguous virtual bases.
3512
3513        * (C++ only) Subscripting an array that has been declared
3514          `register'.
3515
3516        * (C++ only) Taking the address of a variable that has been
3517          declared `register'.
3518
3519        * (C++ only) A base class is not initialized in a derived
3520          class's copy constructor.
3521
3522
3523`-Wchar-subscripts'
3524     Warn if an array subscript has type `char'.  This is a common cause
3525     of error, as programmers often forget that this type is signed on
3526     some machines.  This warning is enabled by `-Wall'.
3527
3528`-Wcomment'
3529     Warn whenever a comment-start sequence `/*' appears in a `/*'
3530     comment, or whenever a Backslash-Newline appears in a `//' comment.
3531     This warning is enabled by `-Wall'.
3532
3533`-Wno-coverage-mismatch'
3534     Warn if feedback profiles do not match when using the
3535     `-fprofile-use' option.  If a source file is changed between
3536     compiling with `-fprofile-gen' and with `-fprofile-use', the files
3537     with the profile feedback can fail to match the source file and
3538     GCC cannot use the profile feedback information.  By default, this
3539     warning is enabled and is treated as an error.
3540     `-Wno-coverage-mismatch' can be used to disable the warning or
3541     `-Wno-error=coverage-mismatch' can be used to disable the error.
3542     Disabling the error for this warning can result in poorly
3543     optimized code and is useful only in the case of very minor
3544     changes such as bug fixes to an existing code-base.  Completely
3545     disabling the warning is not recommended.
3546
3547`-Wno-cpp'
3548     (C, Objective-C, C++, Objective-C++ and Fortran only)
3549
3550     Suppress warning messages emitted by `#warning' directives.
3551
3552`-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
3553     Give a warning when a value of type `float' is implicitly promoted
3554     to `double'.  CPUs with a 32-bit "single-precision" floating-point
3555     unit implement `float' in hardware, but emulate `double' in
3556     software.  On such a machine, doing computations using `double'
3557     values is much more expensive because of the overhead required for
3558     software emulation.
3559
3560     It is easy to accidentally do computations with `double' because
3561     floating-point literals are implicitly of type `double'.  For
3562     example, in:
3563          float area(float radius)
3564          {
3565             return 3.14159 * radius * radius;
3566          }
3567     the compiler performs the entire computation with `double'
3568     because the floating-point literal is a `double'.
3569
3570`-Wformat'
3571`-Wformat=N'
3572     Check calls to `printf' and `scanf', etc., to make sure that the
3573     arguments supplied have types appropriate to the format string
3574     specified, and that the conversions specified in the format string
3575     make sense.  This includes standard functions, and others
3576     specified by format attributes (*note Function Attributes::), in
3577     the `printf', `scanf', `strftime' and `strfmon' (an X/Open
3578     extension, not in the C standard) families (or other
3579     target-specific families).  Which functions are checked without
3580     format attributes having been specified depends on the standard
3581     version selected, and such checks of functions without the
3582     attribute specified are disabled by `-ffreestanding' or
3583     `-fno-builtin'.
3584
3585     The formats are checked against the format features supported by
3586     GNU libc version 2.2.  These include all ISO C90 and C99 features,
3587     as well as features from the Single Unix Specification and some
3588     BSD and GNU extensions.  Other library implementations may not
3589     support all these features; GCC does not support warning about
3590     features that go beyond a particular library's limitations.
3591     However, if `-Wpedantic' is used with `-Wformat', warnings are
3592     given about format features not in the selected standard version
3593     (but not for `strfmon' formats, since those are not in any version
3594     of the C standard).  *Note Options Controlling C Dialect: C
3595     Dialect Options.
3596
3597    `-Wformat=1'
3598    `-Wformat'
3599          Option `-Wformat' is equivalent to `-Wformat=1', and
3600          `-Wno-format' is equivalent to `-Wformat=0'.  Since
3601          `-Wformat' also checks for null format arguments for several
3602          functions, `-Wformat' also implies `-Wnonnull'.  Some aspects
3603          of this level of format checking can be disabled by the
3604          options: `-Wno-format-contains-nul',
3605          `-Wno-format-extra-args', and `-Wno-format-zero-length'.
3606          `-Wformat' is enabled by `-Wall'.
3607
3608    `-Wno-format-contains-nul'
3609          If `-Wformat' is specified, do not warn about format strings
3610          that contain NUL bytes.
3611
3612    `-Wno-format-extra-args'
3613          If `-Wformat' is specified, do not warn about excess
3614          arguments to a `printf' or `scanf' format function.  The C
3615          standard specifies that such arguments are ignored.
3616
3617          Where the unused arguments lie between used arguments that are
3618          specified with `$' operand number specifications, normally
3619          warnings are still given, since the implementation could not
3620          know what type to pass to `va_arg' to skip the unused
3621          arguments.  However, in the case of `scanf' formats, this
3622          option suppresses the warning if the unused arguments are all
3623          pointers, since the Single Unix Specification says that such
3624          unused arguments are allowed.
3625
3626    `-Wno-format-zero-length'
3627          If `-Wformat' is specified, do not warn about zero-length
3628          formats.  The C standard specifies that zero-length formats
3629          are allowed.
3630
3631    `-Wformat=2'
3632          Enable `-Wformat' plus additional format checks.  Currently
3633          equivalent to `-Wformat -Wformat-nonliteral -Wformat-security
3634          -Wformat-y2k'.
3635
3636    `-Wformat-nonliteral'
3637          If `-Wformat' is specified, also warn if the format string is
3638          not a string literal and so cannot be checked, unless the
3639          format function takes its format arguments as a `va_list'.
3640
3641    `-Wformat-security'
3642          If `-Wformat' is specified, also warn about uses of format
3643          functions that represent possible security problems.  At
3644          present, this warns about calls to `printf' and `scanf'
3645          functions where the format string is not a string literal and
3646          there are no format arguments, as in `printf (foo);'.  This
3647          may be a security hole if the format string came from
3648          untrusted input and contains `%n'.  (This is currently a
3649          subset of what `-Wformat-nonliteral' warns about, but in
3650          future warnings may be added to `-Wformat-security' that are
3651          not included in `-Wformat-nonliteral'.)
3652
3653    `-Wformat-signedness'
3654          If `-Wformat' is specified, also warn if the format string
3655          requires an unsigned argument and the argument is signed and
3656          vice versa.
3657
3658    `-Wformat-y2k'
3659          If `-Wformat' is specified, also warn about `strftime'
3660          formats that may yield only a two-digit year.
3661
3662`-Wnonnull'
3663     Warn about passing a null pointer for arguments marked as
3664     requiring a non-null value by the `nonnull' function attribute.
3665
3666     `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
3667     disabled with the `-Wno-nonnull' option.
3668
3669`-Winit-self (C, C++, Objective-C and Objective-C++ only)'
3670     Warn about uninitialized variables that are initialized with
3671     themselves.  Note this option can only be used with the
3672     `-Wuninitialized' option.
3673
3674     For example, GCC warns about `i' being uninitialized in the
3675     following snippet only when `-Winit-self' has been specified:
3676          int f()
3677          {
3678            int i = i;
3679            return i;
3680          }
3681
3682     This warning is enabled by `-Wall' in C++.
3683
3684`-Wimplicit-int (C and Objective-C only)'
3685     Warn when a declaration does not specify a type.  This warning is
3686     enabled by `-Wall'.
3687
3688`-Wimplicit-function-declaration (C and Objective-C only)'
3689     Give a warning whenever a function is used before being declared.
3690     In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled
3691     by default and it is made into an error by `-pedantic-errors'.
3692     This warning is also enabled by `-Wall'.
3693
3694`-Wimplicit (C and Objective-C only)'
3695     Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
3696     This warning is enabled by `-Wall'.
3697
3698`-Wignored-qualifiers (C and C++ only)'
3699     Warn if the return type of a function has a type qualifier such as
3700     `const'.  For ISO C such a type qualifier has no effect, since the
3701     value returned by a function is not an lvalue.  For C++, the
3702     warning is only emitted for scalar types or `void'.  ISO C
3703     prohibits qualified `void' return types on function definitions,
3704     so such return types always receive a warning even without this
3705     option.
3706
3707     This warning is also enabled by `-Wextra'.
3708
3709`-Wmain'
3710     Warn if the type of `main' is suspicious.  `main' should be a
3711     function with external linkage, returning int, taking either zero
3712     arguments, two, or three arguments of appropriate types.  This
3713     warning is enabled by default in C++ and is enabled by either
3714     `-Wall' or `-Wpedantic'.
3715
3716`-Wmissing-braces'
3717     Warn if an aggregate or union initializer is not fully bracketed.
3718     In the following example, the initializer for `a' is not fully
3719     bracketed, but that for `b' is fully bracketed.  This warning is
3720     enabled by `-Wall' in C.
3721
3722          int a[2][2] = { 0, 1, 2, 3 };
3723          int b[2][2] = { { 0, 1 }, { 2, 3 } };
3724
3725     This warning is enabled by `-Wall'.
3726
3727`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
3728     Warn if a user-supplied include directory does not exist.
3729
3730`-Wparentheses'
3731     Warn if parentheses are omitted in certain contexts, such as when
3732     there is an assignment in a context where a truth value is
3733     expected, or when operators are nested whose precedence people
3734     often get confused about.
3735
3736     Also warn if a comparison like `x<=y<=z' appears; this is
3737     equivalent to `(x<=y ? 1 : 0) <= z', which is a different
3738     interpretation from that of ordinary mathematical notation.
3739
3740     Also warn about constructions where there may be confusion to which
3741     `if' statement an `else' branch belongs.  Here is an example of
3742     such a case:
3743
3744          {
3745            if (a)
3746              if (b)
3747                foo ();
3748            else
3749              bar ();
3750          }
3751
3752     In C/C++, every `else' branch belongs to the innermost possible
3753     `if' statement, which in this example is `if (b)'.  This is often
3754     not what the programmer expected, as illustrated in the above
3755     example by indentation the programmer chose.  When there is the
3756     potential for this confusion, GCC issues a warning when this flag
3757     is specified.  To eliminate the warning, add explicit braces around
3758     the innermost `if' statement so there is no way the `else' can
3759     belong to the enclosing `if'.  The resulting code looks like this:
3760
3761          {
3762            if (a)
3763              {
3764                if (b)
3765                  foo ();
3766                else
3767                  bar ();
3768              }
3769          }
3770
3771     Also warn for dangerous uses of the GNU extension to `?:' with
3772     omitted middle operand. When the condition in the `?': operator is
3773     a boolean expression, the omitted value is always 1.  Often
3774     programmers expect it to be a value computed inside the
3775     conditional expression instead.
3776
3777     This warning is enabled by `-Wall'.
3778
3779`-Wsequence-point'
3780     Warn about code that may have undefined semantics because of
3781     violations of sequence point rules in the C and C++ standards.
3782
3783     The C and C++ standards define the order in which expressions in a
3784     C/C++ program are evaluated in terms of "sequence points", which
3785     represent a partial ordering between the execution of parts of the
3786     program: those executed before the sequence point, and those
3787     executed after it.  These occur after the evaluation of a full
3788     expression (one which is not part of a larger expression), after
3789     the evaluation of the first operand of a `&&', `||', `? :' or `,'
3790     (comma) operator, before a function is called (but after the
3791     evaluation of its arguments and the expression denoting the called
3792     function), and in certain other places.  Other than as expressed
3793     by the sequence point rules, the order of evaluation of
3794     subexpressions of an expression is not specified.  All these rules
3795     describe only a partial order rather than a total order, since,
3796     for example, if two functions are called within one expression
3797     with no sequence point between them, the order in which the
3798     functions are called is not specified.  However, the standards
3799     committee have ruled that function calls do not overlap.
3800
3801     It is not specified when between sequence points modifications to
3802     the values of objects take effect.  Programs whose behavior
3803     depends on this have undefined behavior; the C and C++ standards
3804     specify that "Between the previous and next sequence point an
3805     object shall have its stored value modified at most once by the
3806     evaluation of an expression.  Furthermore, the prior value shall
3807     be read only to determine the value to be stored.".  If a program
3808     breaks these rules, the results on any particular implementation
3809     are entirely unpredictable.
3810
3811     Examples of code with undefined behavior are `a = a++;', `a[n] =
3812     b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
3813     diagnosed by this option, and it may give an occasional false
3814     positive result, but in general it has been found fairly effective
3815     at detecting this sort of problem in programs.
3816
3817     The standard is worded confusingly, therefore there is some debate
3818     over the precise meaning of the sequence point rules in subtle
3819     cases.  Links to discussions of the problem, including proposed
3820     formal definitions, may be found on the GCC readings page, at
3821     `http://gcc.gnu.org/readings.html'.
3822
3823     This warning is enabled by `-Wall' for C and C++.
3824
3825`-Wno-return-local-addr'
3826     Do not warn about returning a pointer (or in C++, a reference) to a
3827     variable that goes out of scope after the function returns.
3828
3829`-Wreturn-type'
3830     Warn whenever a function is defined with a return type that
3831     defaults to `int'.  Also warn about any `return' statement with no
3832     return value in a function whose return type is not `void'
3833     (falling off the end of the function body is considered returning
3834     without a value), and about a `return' statement with an
3835     expression in a function whose return type is `void'.
3836
3837     For C++, a function without return type always produces a
3838     diagnostic message, even when `-Wno-return-type' is specified.
3839     The only exceptions are `main' and functions defined in system
3840     headers.
3841
3842     This warning is enabled by `-Wall'.
3843
3844`-Wshift-count-negative'
3845     Warn if shift count is negative. This warning is enabled by
3846     default.
3847
3848`-Wshift-count-overflow'
3849     Warn if shift count >= width of type. This warning is enabled by
3850     default.
3851
3852`-Wswitch'
3853     Warn whenever a `switch' statement has an index of enumerated type
3854     and lacks a `case' for one or more of the named codes of that
3855     enumeration.  (The presence of a `default' label prevents this
3856     warning.)  `case' labels outside the enumeration range also
3857     provoke warnings when this option is used (even if there is a
3858     `default' label).  This warning is enabled by `-Wall'.
3859
3860`-Wswitch-default'
3861     Warn whenever a `switch' statement does not have a `default' case.
3862
3863`-Wswitch-enum'
3864     Warn whenever a `switch' statement has an index of enumerated type
3865     and lacks a `case' for one or more of the named codes of that
3866     enumeration.  `case' labels outside the enumeration range also
3867     provoke warnings when this option is used.  The only difference
3868     between `-Wswitch' and this option is that this option gives a
3869     warning about an omitted enumeration code even if there is a
3870     `default' label.
3871
3872`-Wswitch-bool'
3873     Warn whenever a `switch' statement has an index of boolean type.
3874     It is possible to suppress this warning by casting the controlling
3875     expression to a type other than `bool'.  For example:
3876          switch ((int) (a == 4))
3877            {
3878            ...
3879            }
3880     This warning is enabled by default for C and C++ programs.
3881
3882`-Wsync-nand (C and C++ only)'
3883     Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch'
3884     built-in functions are used.  These functions changed semantics in
3885     GCC 4.4.
3886
3887`-Wtrigraphs'
3888     Warn if any trigraphs are encountered that might change the
3889     meaning of the program (trigraphs within comments are not warned
3890     about).  This warning is enabled by `-Wall'.
3891
3892`-Wunused-but-set-parameter'
3893     Warn whenever a function parameter is assigned to, but otherwise
3894     unused (aside from its declaration).
3895
3896     To suppress this warning use the `unused' attribute (*note
3897     Variable Attributes::).
3898
3899     This warning is also enabled by `-Wunused' together with `-Wextra'.
3900
3901`-Wunused-but-set-variable'
3902     Warn whenever a local variable is assigned to, but otherwise unused
3903     (aside from its declaration).  This warning is enabled by `-Wall'.
3904
3905     To suppress this warning use the `unused' attribute (*note
3906     Variable Attributes::).
3907
3908     This warning is also enabled by `-Wunused', which is enabled by
3909     `-Wall'.
3910
3911`-Wunused-function'
3912     Warn whenever a static function is declared but not defined or a
3913     non-inline static function is unused.  This warning is enabled by
3914     `-Wall'.
3915
3916`-Wunused-label'
3917     Warn whenever a label is declared but not used.  This warning is
3918     enabled by `-Wall'.
3919
3920     To suppress this warning use the `unused' attribute (*note
3921     Variable Attributes::).
3922
3923`-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
3924     Warn when a typedef locally defined in a function is not used.
3925     This warning is enabled by `-Wall'.
3926
3927`-Wunused-parameter'
3928     Warn whenever a function parameter is unused aside from its
3929     declaration.
3930
3931     To suppress this warning use the `unused' attribute (*note
3932     Variable Attributes::).
3933
3934`-Wno-unused-result'
3935     Do not warn if a caller of a function marked with attribute
3936     `warn_unused_result' (*note Function Attributes::) does not use
3937     its return value. The default is `-Wunused-result'.
3938
3939`-Wunused-variable'
3940     Warn whenever a local variable or non-constant static variable is
3941     unused aside from its declaration.  This warning is enabled by
3942     `-Wall'.
3943
3944     To suppress this warning use the `unused' attribute (*note
3945     Variable Attributes::).
3946
3947`-Wunused-value'
3948     Warn whenever a statement computes a result that is explicitly not
3949     used. To suppress this warning cast the unused expression to
3950     `void'. This includes an expression-statement or the left-hand
3951     side of a comma expression that contains no side effects. For
3952     example, an expression such as `x[i,j]' causes a warning, while
3953     `x[(void)i,j]' does not.
3954
3955     This warning is enabled by `-Wall'.
3956
3957`-Wunused'
3958     All the above `-Wunused' options combined.
3959
3960     In order to get a warning about an unused function parameter, you
3961     must either specify `-Wextra -Wunused' (note that `-Wall' implies
3962     `-Wunused'), or separately specify `-Wunused-parameter'.
3963
3964`-Wuninitialized'
3965     Warn if an automatic variable is used without first being
3966     initialized or if a variable may be clobbered by a `setjmp' call.
3967     In C++, warn if a non-static reference or non-static `const' member
3968     appears in a class without constructors.
3969
3970     If you want to warn about code that uses the uninitialized value
3971     of the variable in its own initializer, use the `-Winit-self'
3972     option.
3973
3974     These warnings occur for individual uninitialized or clobbered
3975     elements of structure, union or array variables as well as for
3976     variables that are uninitialized or clobbered as a whole.  They do
3977     not occur for variables or elements declared `volatile'.  Because
3978     these warnings depend on optimization, the exact variables or
3979     elements for which there are warnings depends on the precise
3980     optimization options and version of GCC used.
3981
3982     Note that there may be no warning about a variable that is used
3983     only to compute a value that itself is never used, because such
3984     computations may be deleted by data flow analysis before the
3985     warnings are printed.
3986
3987`-Wmaybe-uninitialized'
3988     For an automatic variable, if there exists a path from the function
3989     entry to a use of the variable that is initialized, but there exist
3990     some other paths for which the variable is not initialized, the
3991     compiler emits a warning if it cannot prove the uninitialized
3992     paths are not executed at run time. These warnings are made
3993     optional because GCC is not smart enough to see all the reasons
3994     why the code might be correct in spite of appearing to have an
3995     error.  Here is one example of how this can happen:
3996
3997          {
3998            int x;
3999            switch (y)
4000              {
4001              case 1: x = 1;
4002                break;
4003              case 2: x = 4;
4004                break;
4005              case 3: x = 5;
4006              }
4007            foo (x);
4008          }
4009
4010     If the value of `y' is always 1, 2 or 3, then `x' is always
4011     initialized, but GCC doesn't know this. To suppress the warning,
4012     you need to provide a default case with assert(0) or similar code.
4013
4014     This option also warns when a non-volatile automatic variable
4015     might be changed by a call to `longjmp'.  These warnings as well
4016     are possible only in optimizing compilation.
4017
4018     The compiler sees only the calls to `setjmp'.  It cannot know
4019     where `longjmp' will be called; in fact, a signal handler could
4020     call it at any point in the code.  As a result, you may get a
4021     warning even when there is in fact no problem because `longjmp'
4022     cannot in fact be called at the place that would cause a problem.
4023
4024     Some spurious warnings can be avoided if you declare all the
4025     functions you use that never return as `noreturn'.  *Note Function
4026     Attributes::.
4027
4028     This warning is enabled by `-Wall' or `-Wextra'.
4029
4030`-Wunknown-pragmas'
4031     Warn when a `#pragma' directive is encountered that is not
4032     understood by GCC.  If this command-line option is used, warnings
4033     are even issued for unknown pragmas in system header files.  This
4034     is not the case if the warnings are only enabled by the `-Wall'
4035     command-line option.
4036
4037`-Wno-pragmas'
4038     Do not warn about misuses of pragmas, such as incorrect parameters,
4039     invalid syntax, or conflicts between pragmas.  See also
4040     `-Wunknown-pragmas'.
4041
4042`-Wstrict-aliasing'
4043     This option is only active when `-fstrict-aliasing' is active.  It
4044     warns about code that might break the strict aliasing rules that
4045     the compiler is using for optimization.  The warning does not
4046     catch all cases, but does attempt to catch the more common
4047     pitfalls.  It is included in `-Wall'.  It is equivalent to
4048     `-Wstrict-aliasing=3'
4049
4050`-Wstrict-aliasing=n'
4051     This option is only active when `-fstrict-aliasing' is active.  It
4052     warns about code that might break the strict aliasing rules that
4053     the compiler is using for optimization.  Higher levels correspond
4054     to higher accuracy (fewer false positives).  Higher levels also
4055     correspond to more effort, similar to the way `-O' works.
4056     `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=3'.
4057
4058     Level 1: Most aggressive, quick, least accurate.  Possibly useful
4059     when higher levels do not warn but `-fstrict-aliasing' still
4060     breaks the code, as it has very few false negatives.  However, it
4061     has many false positives.  Warns for all pointer conversions
4062     between possibly incompatible types, even if never dereferenced.
4063     Runs in the front end only.
4064
4065     Level 2: Aggressive, quick, not too precise.  May still have many
4066     false positives (not as many as level 1 though), and few false
4067     negatives (but possibly more than level 1).  Unlike level 1, it
4068     only warns when an address is taken.  Warns about incomplete
4069     types.  Runs in the front end only.
4070
4071     Level 3 (default for `-Wstrict-aliasing'): Should have very few
4072     false positives and few false negatives.  Slightly slower than
4073     levels 1 or 2 when optimization is enabled.  Takes care of the
4074     common pun+dereference pattern in the front end:
4075     `*(int*)&some_float'.  If optimization is enabled, it also runs in
4076     the back end, where it deals with multiple statement cases using
4077     flow-sensitive points-to information.  Only warns when the
4078     converted pointer is dereferenced.  Does not warn about incomplete
4079     types.
4080
4081`-Wstrict-overflow'
4082`-Wstrict-overflow=N'
4083     This option is only active when `-fstrict-overflow' is active.  It
4084     warns about cases where the compiler optimizes based on the
4085     assumption that signed overflow does not occur.  Note that it does
4086     not warn about all cases where the code might overflow: it only
4087     warns about cases where the compiler implements some optimization.
4088     Thus this warning depends on the optimization level.
4089
4090     An optimization that assumes that signed overflow does not occur is
4091     perfectly safe if the values of the variables involved are such
4092     that overflow never does, in fact, occur.  Therefore this warning
4093     can easily give a false positive: a warning about code that is not
4094     actually a problem.  To help focus on important issues, several
4095     warning levels are defined.  No warnings are issued for the use of
4096     undefined signed overflow when estimating how many iterations a
4097     loop requires, in particular when determining whether a loop will
4098     be executed at all.
4099
4100    `-Wstrict-overflow=1'
4101          Warn about cases that are both questionable and easy to
4102          avoid.  For example,  with `-fstrict-overflow', the compiler
4103          simplifies `x + 1 > x' to `1'.  This level of
4104          `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
4105          not, and must be explicitly requested.
4106
4107    `-Wstrict-overflow=2'
4108          Also warn about other cases where a comparison is simplified
4109          to a constant.  For example: `abs (x) >= 0'.  This can only be
4110          simplified when `-fstrict-overflow' is in effect, because
4111          `abs (INT_MIN)' overflows to `INT_MIN', which is less than
4112          zero.  `-Wstrict-overflow' (with no level) is the same as
4113          `-Wstrict-overflow=2'.
4114
4115    `-Wstrict-overflow=3'
4116          Also warn about other cases where a comparison is simplified.
4117          For example: `x + 1 > 1' is simplified to `x > 0'.
4118
4119    `-Wstrict-overflow=4'
4120          Also warn about other simplifications not covered by the
4121          above cases.  For example: `(x * 10) / 5' is simplified to `x
4122          * 2'.
4123
4124    `-Wstrict-overflow=5'
4125          Also warn about cases where the compiler reduces the
4126          magnitude of a constant involved in a comparison.  For
4127          example: `x + 2 > y' is simplified to `x + 1 >= y'.  This is
4128          reported only at the highest warning level because this
4129          simplification applies to many comparisons, so this warning
4130          level gives a very large number of false positives.
4131
4132`-Wsuggest-attribute=[pure|const|noreturn|format]'
4133     Warn for cases where adding an attribute may be beneficial. The
4134     attributes currently supported are listed below.
4135
4136    `-Wsuggest-attribute=pure'
4137    `-Wsuggest-attribute=const'
4138    `-Wsuggest-attribute=noreturn'
4139          Warn about functions that might be candidates for attributes
4140          `pure', `const' or `noreturn'.  The compiler only warns for
4141          functions visible in other compilation units or (in the case
4142          of `pure' and `const') if it cannot prove that the function
4143          returns normally. A function returns normally if it doesn't
4144          contain an infinite loop or return abnormally by throwing,
4145          calling `abort' or trapping.  This analysis requires option
4146          `-fipa-pure-const', which is enabled by default at `-O' and
4147          higher.  Higher optimization levels improve the accuracy of
4148          the analysis.
4149
4150    `-Wsuggest-attribute=format'
4151    `-Wmissing-format-attribute'
4152          Warn about function pointers that might be candidates for
4153          `format' attributes.  Note these are only possible
4154          candidates, not absolute ones.  GCC guesses that function
4155          pointers with `format' attributes that are used in
4156          assignment, initialization, parameter passing or return
4157          statements should have a corresponding `format' attribute in
4158          the resulting type.  I.e. the left-hand side of the
4159          assignment or initialization, the type of the parameter
4160          variable, or the return type of the containing function
4161          respectively should also have a `format' attribute to avoid
4162          the warning.
4163
4164          GCC also warns about function definitions that might be
4165          candidates for `format' attributes.  Again, these are only
4166          possible candidates.  GCC guesses that `format' attributes
4167          might be appropriate for any function that calls a function
4168          like `vprintf' or `vscanf', but this might not always be the
4169          case, and some functions for which `format' attributes are
4170          appropriate may not be detected.
4171
4172`-Wsuggest-final-types'
4173     Warn about types with virtual methods where code quality would be
4174     improved if the type were declared with the C++11 `final'
4175     specifier, or, if possible, declared in an anonymous namespace.
4176     This allows GCC to more aggressively devirtualize the polymorphic
4177     calls. This warning is more effective with link time optimization,
4178     where the information about the class hierarchy graph is more
4179     complete.
4180
4181`-Wsuggest-final-methods'
4182     Warn about virtual methods where code quality would be improved if
4183     the method were declared with the C++11 `final' specifier, or, if
4184     possible, its type were declared in an anonymous namespace or with
4185     the `final' specifier.  This warning is more effective with link
4186     time optimization, where the information about the class hierarchy
4187     graph is more complete. It is recommended to first consider
4188     suggestions of `-Wsuggest-final-types' and then rebuild with new
4189     annotations.
4190
4191`-Wsuggest-override'
4192     Warn about overriding virtual functions that are not marked with
4193     the override keyword.
4194
4195`-Warray-bounds'
4196`-Warray-bounds=N'
4197     This option is only active when `-ftree-vrp' is active (default
4198     for `-O2' and above). It warns about subscripts to arrays that are
4199     always out of bounds. This warning is enabled by `-Wall'.
4200
4201    `-Warray-bounds=1'
4202          This is the warning level of `-Warray-bounds' and is enabled
4203          by `-Wall'; higher levels are not, and must be explicitly
4204          requested.
4205
4206    `-Warray-bounds=2'
4207          This warning level also warns about out of bounds access for
4208          arrays at the end of a struct and for arrays accessed through
4209          pointers. This warning level may give a larger number of
4210          false positives and is deactivated by default.
4211
4212`-Wbool-compare'
4213     Warn about boolean expression compared with an integer value
4214     different from `true'/`false'.  For instance, the following
4215     comparison is always false:
4216          int n = 5;
4217          ...
4218          if ((n > 1) == 2) { ... }
4219     This warning is enabled by `-Wall'.
4220
4221`-Wno-discarded-qualifiers (C and Objective-C only)'
4222     Do not warn if type qualifiers on pointers are being discarded.
4223     Typically, the compiler warns if a `const char *' variable is
4224     passed to a function that takes a `char *' parameter.  This option
4225     can be used to suppress such a warning.
4226
4227`-Wno-discarded-array-qualifiers (C and Objective-C only)'
4228     Do not warn if type qualifiers on arrays which are pointer targets
4229     are being discarded. Typically, the compiler warns if a `const int
4230     (*)[]' variable is passed to a function that takes a `int (*)[]'
4231     parameter.  This option can be used to suppress such a warning.
4232
4233`-Wno-incompatible-pointer-types (C and Objective-C only)'
4234     Do not warn when there is a conversion between pointers that have
4235     incompatible types.  This warning is for cases not covered by
4236     `-Wno-pointer-sign', which warns for pointer argument passing or
4237     assignment with different signedness.
4238
4239`-Wno-int-conversion (C and Objective-C only)'
4240     Do not warn about incompatible integer to pointer and pointer to
4241     integer conversions.  This warning is about implicit conversions;
4242     for explicit conversions the warnings `-Wno-int-to-pointer-cast'
4243     and `-Wno-pointer-to-int-cast' may be used.
4244
4245`-Wno-div-by-zero'
4246     Do not warn about compile-time integer division by zero.
4247     Floating-point division by zero is not warned about, as it can be
4248     a legitimate way of obtaining infinities and NaNs.
4249
4250`-Wsystem-headers'
4251     Print warning messages for constructs found in system header files.
4252     Warnings from system headers are normally suppressed, on the
4253     assumption that they usually do not indicate real problems and
4254     would only make the compiler output harder to read.  Using this
4255     command-line option tells GCC to emit warnings from system headers
4256     as if they occurred in user code.  However, note that using
4257     `-Wall' in conjunction with this option does _not_ warn about
4258     unknown pragmas in system headers--for that, `-Wunknown-pragmas'
4259     must also be used.
4260
4261`-Wtrampolines'
4262     Warn about trampolines generated for pointers to nested functions.
4263     A trampoline is a small piece of data or code that is created at
4264     run time on the stack when the address of a nested function is
4265     taken, and is used to call the nested function indirectly.  For
4266     some targets, it is made up of data only and thus requires no
4267     special treatment.  But, for most targets, it is made up of code
4268     and thus requires the stack to be made executable in order for the
4269     program to work properly.
4270
4271`-Wfloat-equal'
4272     Warn if floating-point values are used in equality comparisons.
4273
4274     The idea behind this is that sometimes it is convenient (for the
4275     programmer) to consider floating-point values as approximations to
4276     infinitely precise real numbers.  If you are doing this, then you
4277     need to compute (by analyzing the code, or in some other way) the
4278     maximum or likely maximum error that the computation introduces,
4279     and allow for it when performing comparisons (and when producing
4280     output, but that's a different problem).  In particular, instead
4281     of testing for equality, you should check to see whether the two
4282     values have ranges that overlap; and this is done with the
4283     relational operators, so equality comparisons are probably
4284     mistaken.
4285
4286`-Wtraditional (C and Objective-C only)'
4287     Warn about certain constructs that behave differently in
4288     traditional and ISO C.  Also warn about ISO C constructs that have
4289     no traditional C equivalent, and/or problematic constructs that
4290     should be avoided.
4291
4292        * Macro parameters that appear within string literals in the
4293          macro body.  In traditional C macro replacement takes place
4294          within string literals, but in ISO C it does not.
4295
4296        * In traditional C, some preprocessor directives did not exist.
4297          Traditional preprocessors only considered a line to be a
4298          directive if the `#' appeared in column 1 on the line.
4299          Therefore `-Wtraditional' warns about directives that
4300          traditional C understands but ignores because the `#' does
4301          not appear as the first character on the line.  It also
4302          suggests you hide directives like `#pragma' not understood by
4303          traditional C by indenting them.  Some traditional
4304          implementations do not recognize `#elif', so this option
4305          suggests avoiding it altogether.
4306
4307        * A function-like macro that appears without arguments.
4308
4309        * The unary plus operator.
4310
4311        * The `U' integer constant suffix, or the `F' or `L'
4312          floating-point constant suffixes.  (Traditional C does
4313          support the `L' suffix on integer constants.)  Note, these
4314          suffixes appear in macros defined in the system headers of
4315          most modern systems, e.g. the `_MIN'/`_MAX' macros in
4316          `<limits.h>'.  Use of these macros in user code might
4317          normally lead to spurious warnings, however GCC's integrated
4318          preprocessor has enough context to avoid warning in these
4319          cases.
4320
4321        * A function declared external in one block and then used after
4322          the end of the block.
4323
4324        * A `switch' statement has an operand of type `long'.
4325
4326        * A non-`static' function declaration follows a `static' one.
4327          This construct is not accepted by some traditional C
4328          compilers.
4329
4330        * The ISO type of an integer constant has a different width or
4331          signedness from its traditional type.  This warning is only
4332          issued if the base of the constant is ten.  I.e. hexadecimal
4333          or octal values, which typically represent bit patterns, are
4334          not warned about.
4335
4336        * Usage of ISO string concatenation is detected.
4337
4338        * Initialization of automatic aggregates.
4339
4340        * Identifier conflicts with labels.  Traditional C lacks a
4341          separate namespace for labels.
4342
4343        * Initialization of unions.  If the initializer is zero, the
4344          warning is omitted.  This is done under the assumption that
4345          the zero initializer in user code appears conditioned on e.g.
4346          `__STDC__' to avoid missing initializer warnings and relies
4347          on default initialization to zero in the traditional C case.
4348
4349        * Conversions by prototypes between fixed/floating-point values
4350          and vice versa.  The absence of these prototypes when
4351          compiling with traditional C causes serious problems.  This
4352          is a subset of the possible conversion warnings; for the full
4353          set use `-Wtraditional-conversion'.
4354
4355        * Use of ISO C style function definitions.  This warning
4356          intentionally is _not_ issued for prototype declarations or
4357          variadic functions because these ISO C features appear in
4358          your code when using libiberty's traditional C compatibility
4359          macros, `PARAMS' and `VPARAMS'.  This warning is also
4360          bypassed for nested functions because that feature is already
4361          a GCC extension and thus not relevant to traditional C
4362          compatibility.
4363
4364`-Wtraditional-conversion (C and Objective-C only)'
4365     Warn if a prototype causes a type conversion that is different
4366     from what would happen to the same argument in the absence of a
4367     prototype.  This includes conversions of fixed point to floating
4368     and vice versa, and conversions changing the width or signedness
4369     of a fixed-point argument except when the same as the default
4370     promotion.
4371
4372`-Wdeclaration-after-statement (C and Objective-C only)'
4373     Warn when a declaration is found after a statement in a block.
4374     This construct, known from C++, was introduced with ISO C99 and is
4375     by default allowed in GCC.  It is not supported by ISO C90.  *Note
4376     Mixed Declarations::.
4377
4378`-Wundef'
4379     Warn if an undefined identifier is evaluated in an `#if' directive.
4380
4381`-Wno-endif-labels'
4382     Do not warn whenever an `#else' or an `#endif' are followed by
4383     text.
4384
4385`-Wshadow'
4386     Warn whenever a local variable or type declaration shadows another
4387     variable, parameter, type, class member (in C++), or instance
4388     variable (in Objective-C) or whenever a built-in function is
4389     shadowed. Note that in C++, the compiler warns if a local variable
4390     shadows an explicit typedef, but not if it shadows a
4391     struct/class/enum.
4392
4393`-Wno-shadow-ivar (Objective-C only)'
4394     Do not warn whenever a local variable shadows an instance variable
4395     in an Objective-C method.
4396
4397`-Wlarger-than=LEN'
4398     Warn whenever an object of larger than LEN bytes is defined.
4399
4400`-Wframe-larger-than=LEN'
4401     Warn if the size of a function frame is larger than LEN bytes.
4402     The computation done to determine the stack frame size is
4403     approximate and not conservative.  The actual requirements may be
4404     somewhat greater than LEN even if you do not get a warning.  In
4405     addition, any space allocated via `alloca', variable-length
4406     arrays, or related constructs is not included by the compiler when
4407     determining whether or not to issue a warning.
4408
4409`-Wno-free-nonheap-object'
4410     Do not warn when attempting to free an object that was not
4411     allocated on the heap.
4412
4413`-Wstack-usage=LEN'
4414     Warn if the stack usage of a function might be larger than LEN
4415     bytes.  The computation done to determine the stack usage is
4416     conservative.  Any space allocated via `alloca', variable-length
4417     arrays, or related constructs is included by the compiler when
4418     determining whether or not to issue a warning.
4419
4420     The message is in keeping with the output of `-fstack-usage'.
4421
4422        * If the stack usage is fully static but exceeds the specified
4423          amount, it's:
4424
4425                 warning: stack usage is 1120 bytes
4426
4427        * If the stack usage is (partly) dynamic but bounded, it's:
4428
4429                 warning: stack usage might be 1648 bytes
4430
4431        * If the stack usage is (partly) dynamic and not bounded, it's:
4432
4433                 warning: stack usage might be unbounded
4434
4435`-Wunsafe-loop-optimizations'
4436     Warn if the loop cannot be optimized because the compiler cannot
4437     assume anything on the bounds of the loop indices.  With
4438     `-funsafe-loop-optimizations' warn if the compiler makes such
4439     assumptions.
4440
4441`-Wno-pedantic-ms-format (MinGW targets only)'
4442     When used in combination with `-Wformat' and `-pedantic' without
4443     GNU extensions, this option disables the warnings about non-ISO
4444     `printf' / `scanf' format width specifiers `I32', `I64', and `I'
4445     used on Windows targets, which depend on the MS runtime.
4446
4447`-Wpointer-arith'
4448     Warn about anything that depends on the "size of" a function type
4449     or of `void'.  GNU C assigns these types a size of 1, for
4450     convenience in calculations with `void *' pointers and pointers to
4451     functions.  In C++, warn also when an arithmetic operation involves
4452     `NULL'.  This warning is also enabled by `-Wpedantic'.
4453
4454`-Wtype-limits'
4455     Warn if a comparison is always true or always false due to the
4456     limited range of the data type, but do not warn for constant
4457     expressions.  For example, warn if an unsigned variable is
4458     compared against zero with `<' or `>='.  This warning is also
4459     enabled by `-Wextra'.
4460
4461`-Wbad-function-cast (C and Objective-C only)'
4462     Warn when a function call is cast to a non-matching type.  For
4463     example, warn if a call to a function returning an integer type is
4464     cast to a pointer type.
4465
4466`-Wc90-c99-compat (C and Objective-C only)'
4467     Warn about features not present in ISO C90, but present in ISO C99.
4468     For instance, warn about use of variable length arrays, `long long'
4469     type, `bool' type, compound literals, designated initializers, and
4470     so on.  This option is independent of the standards mode.
4471     Warnings are disabled in the expression that follows
4472     `__extension__'.
4473
4474`-Wc99-c11-compat (C and Objective-C only)'
4475     Warn about features not present in ISO C99, but present in ISO C11.
4476     For instance, warn about use of anonymous structures and unions,
4477     `_Atomic' type qualifier, `_Thread_local' storage-class specifier,
4478     `_Alignas' specifier, `Alignof' operator, `_Generic' keyword, and
4479     so on.  This option is independent of the standards mode.
4480     Warnings are disabled in the expression that follows
4481     `__extension__'.
4482
4483`-Wc++-compat (C and Objective-C only)'
4484     Warn about ISO C constructs that are outside of the common subset
4485     of ISO C and ISO C++, e.g. request for implicit conversion from
4486     `void *' to a pointer to non-`void' type.
4487
4488`-Wc++11-compat (C++ and Objective-C++ only)'
4489     Warn about C++ constructs whose meaning differs between ISO C++
4490     1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
4491     keywords in ISO C++ 2011.  This warning turns on `-Wnarrowing' and
4492     is enabled by `-Wall'.
4493
4494`-Wc++14-compat (C++ and Objective-C++ only)'
4495     Warn about C++ constructs whose meaning differs between ISO C++
4496     2011 and ISO C++ 2014.  This warning is enabled by `-Wall'.
4497
4498`-Wcast-qual'
4499     Warn whenever a pointer is cast so as to remove a type qualifier
4500     from the target type.  For example, warn if a `const char *' is
4501     cast to an ordinary `char *'.
4502
4503     Also warn when making a cast that introduces a type qualifier in an
4504     unsafe way.  For example, casting `char **' to `const char **' is
4505     unsafe, as in this example:
4506
4507            /* p is char ** value.  */
4508            const char **q = (const char **) p;
4509            /* Assignment of readonly string to const char * is OK.  */
4510            *q = "string";
4511            /* Now char** pointer points to read-only memory.  */
4512            **p = 'b';
4513
4514`-Wcast-align'
4515     Warn whenever a pointer is cast such that the required alignment
4516     of the target is increased.  For example, warn if a `char *' is
4517     cast to an `int *' on machines where integers can only be accessed
4518     at two- or four-byte boundaries.
4519
4520`-Wwrite-strings'
4521     When compiling C, give string constants the type `const
4522     char[LENGTH]' so that copying the address of one into a
4523     non-`const' `char *' pointer produces a warning.  These warnings
4524     help you find at compile time code that can try to write into a
4525     string constant, but only if you have been very careful about
4526     using `const' in declarations and prototypes.  Otherwise, it is
4527     just a nuisance. This is why we did not make `-Wall' request these
4528     warnings.
4529
4530     When compiling C++, warn about the deprecated conversion from
4531     string literals to `char *'.  This warning is enabled by default
4532     for C++ programs.
4533
4534`-Wclobbered'
4535     Warn for variables that might be changed by `longjmp' or `vfork'.
4536     This warning is also enabled by `-Wextra'.
4537
4538`-Wconditionally-supported (C++ and Objective-C++ only)'
4539     Warn for conditionally-supported (C++11 [intro.defs]) constructs.
4540
4541`-Wconversion'
4542     Warn for implicit conversions that may alter a value. This includes
4543     conversions between real and integer, like `abs (x)' when `x' is
4544     `double'; conversions between signed and unsigned, like `unsigned
4545     ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'.
4546     Do not warn for explicit casts like `abs ((int) x)' and `ui =
4547     (unsigned) -1', or if the value is not changed by the conversion
4548     like in `abs (2.0)'.  Warnings about conversions between signed
4549     and unsigned integers can be disabled by using
4550     `-Wno-sign-conversion'.
4551
4552     For C++, also warn for confusing overload resolution for
4553     user-defined conversions; and conversions that never use a type
4554     conversion operator: conversions to `void', the same type, a base
4555     class or a reference to them. Warnings about conversions between
4556     signed and unsigned integers are disabled by default in C++ unless
4557     `-Wsign-conversion' is explicitly enabled.
4558
4559`-Wno-conversion-null (C++ and Objective-C++ only)'
4560     Do not warn for conversions between `NULL' and non-pointer types.
4561     `-Wconversion-null' is enabled by default.
4562
4563`-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
4564     Warn when a literal '0' is used as null pointer constant.  This can
4565     be useful to facilitate the conversion to `nullptr' in C++11.
4566
4567`-Wdate-time'
4568     Warn when macros `__TIME__', `__DATE__' or `__TIMESTAMP__' are
4569     encountered as they might prevent bit-wise-identical reproducible
4570     compilations.
4571
4572`-Wdelete-incomplete (C++ and Objective-C++ only)'
4573     Warn when deleting a pointer to incomplete type, which may cause
4574     undefined behavior at runtime.  This warning is enabled by default.
4575
4576`-Wuseless-cast (C++ and Objective-C++ only)'
4577     Warn when an expression is casted to its own type.
4578
4579`-Wempty-body'
4580     Warn if an empty body occurs in an `if', `else' or `do while'
4581     statement.  This warning is also enabled by `-Wextra'.
4582
4583`-Wenum-compare'
4584     Warn about a comparison between values of different enumerated
4585     types.  In C++ enumeral mismatches in conditional expressions are
4586     also diagnosed and the warning is enabled by default.  In C this
4587     warning is enabled by `-Wall'.
4588
4589`-Wjump-misses-init (C, Objective-C only)'
4590     Warn if a `goto' statement or a `switch' statement jumps forward
4591     across the initialization of a variable, or jumps backward to a
4592     label after the variable has been initialized.  This only warns
4593     about variables that are initialized when they are declared.  This
4594     warning is only supported for C and Objective-C; in C++ this sort
4595     of branch is an error in any case.
4596
4597     `-Wjump-misses-init' is included in `-Wc++-compat'.  It can be
4598     disabled with the `-Wno-jump-misses-init' option.
4599
4600`-Wsign-compare'
4601     Warn when a comparison between signed and unsigned values could
4602     produce an incorrect result when the signed value is converted to
4603     unsigned.  This warning is also enabled by `-Wextra'; to get the
4604     other warnings of `-Wextra' without this warning, use `-Wextra
4605     -Wno-sign-compare'.
4606
4607`-Wsign-conversion'
4608     Warn for implicit conversions that may change the sign of an
4609     integer value, like assigning a signed integer expression to an
4610     unsigned integer variable. An explicit cast silences the warning.
4611     In C, this option is enabled also by `-Wconversion'.
4612
4613`-Wfloat-conversion'
4614     Warn for implicit conversions that reduce the precision of a real
4615     value.  This includes conversions from real to integer, and from
4616     higher precision real to lower precision real values.  This option
4617     is also enabled by `-Wconversion'.
4618
4619`-Wsized-deallocation (C++ and Objective-C++ only)'
4620     Warn about a definition of an unsized deallocation function
4621          void operator delete (void *) noexcept;
4622          void operator delete[] (void *) noexcept;
4623     without a definition of the corresponding sized deallocation
4624     function
4625          void operator delete (void *, std::size_t) noexcept;
4626          void operator delete[] (void *, std::size_t) noexcept;
4627     or vice versa.  Enabled by `-Wextra' along with
4628     `-fsized-deallocation'.
4629
4630`-Wsizeof-pointer-memaccess'
4631     Warn for suspicious length parameters to certain string and memory
4632     built-in functions if the argument uses `sizeof'.  This warning
4633     warns e.g.  about `memset (ptr, 0, sizeof (ptr));' if `ptr' is not
4634     an array, but a pointer, and suggests a possible fix, or about
4635     `memcpy (&foo, ptr, sizeof (&foo));'.  This warning is enabled by
4636     `-Wall'.
4637
4638`-Wsizeof-array-argument'
4639     Warn when the `sizeof' operator is applied to a parameter that is
4640     declared as an array in a function definition.  This warning is
4641     enabled by default for C and C++ programs.
4642
4643`-Wmemset-transposed-args'
4644     Warn for suspicious calls to the `memset' built-in function, if the
4645     second argument is not zero and the third argument is zero.  This
4646     warns e.g. about `memset (buf, sizeof buf, 0)' where most probably
4647     `memset (buf, 0, sizeof buf)' was meant instead.  The diagnostics
4648     is only emitted if the third argument is literal zero.  If it is
4649     some expression that is folded to zero, a cast of zero to some
4650     type, etc., it is far less likely that the user has mistakenly
4651     exchanged the arguments and no warning is emitted.  This warning
4652     is enabled by `-Wall'.
4653
4654`-Waddress'
4655     Warn about suspicious uses of memory addresses. These include using
4656     the address of a function in a conditional expression, such as
4657     `void func(void); if (func)', and comparisons against the memory
4658     address of a string literal, such as `if (x == "abc")'.  Such uses
4659     typically indicate a programmer error: the address of a function
4660     always evaluates to true, so their use in a conditional usually
4661     indicate that the programmer forgot the parentheses in a function
4662     call; and comparisons against string literals result in unspecified
4663     behavior and are not portable in C, so they usually indicate that
4664     the programmer intended to use `strcmp'.  This warning is enabled
4665     by `-Wall'.
4666
4667`-Wlogical-op'
4668     Warn about suspicious uses of logical operators in expressions.
4669     This includes using logical operators in contexts where a bit-wise
4670     operator is likely to be expected.
4671
4672`-Wlogical-not-parentheses'
4673     Warn about logical not used on the left hand side operand of a
4674     comparison.  This option does not warn if the RHS operand is of a
4675     boolean type.  Its purpose is to detect suspicious code like the
4676     following:
4677          int a;
4678          ...
4679          if (!a > 1) { ... }
4680
4681     It is possible to suppress the warning by wrapping the LHS into
4682     parentheses:
4683          if ((!a) > 1) { ... }
4684
4685     This warning is enabled by `-Wall'.
4686
4687`-Waggregate-return'
4688     Warn if any functions that return structures or unions are defined
4689     or called.  (In languages where you can return an array, this also
4690     elicits a warning.)
4691
4692`-Wno-aggressive-loop-optimizations'
4693     Warn if in a loop with constant number of iterations the compiler
4694     detects undefined behavior in some statement during one or more of
4695     the iterations.
4696
4697`-Wno-attributes'
4698     Do not warn if an unexpected `__attribute__' is used, such as
4699     unrecognized attributes, function attributes applied to variables,
4700     etc.  This does not stop errors for incorrect use of supported
4701     attributes.
4702
4703`-Wno-builtin-macro-redefined'
4704     Do not warn if certain built-in macros are redefined.  This
4705     suppresses warnings for redefinition of `__TIMESTAMP__',
4706     `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'.
4707
4708`-Wstrict-prototypes (C and Objective-C only)'
4709     Warn if a function is declared or defined without specifying the
4710     argument types.  (An old-style function definition is permitted
4711     without a warning if preceded by a declaration that specifies the
4712     argument types.)
4713
4714`-Wold-style-declaration (C and Objective-C only)'
4715     Warn for obsolescent usages, according to the C Standard, in a
4716     declaration. For example, warn if storage-class specifiers like
4717     `static' are not the first things in a declaration.  This warning
4718     is also enabled by `-Wextra'.
4719
4720`-Wold-style-definition (C and Objective-C only)'
4721     Warn if an old-style function definition is used.  A warning is
4722     given even if there is a previous prototype.
4723
4724`-Wmissing-parameter-type (C and Objective-C only)'
4725     A function parameter is declared without a type specifier in
4726     K&R-style functions:
4727
4728          void foo(bar) { }
4729
4730     This warning is also enabled by `-Wextra'.
4731
4732`-Wmissing-prototypes (C and Objective-C only)'
4733     Warn if a global function is defined without a previous prototype
4734     declaration.  This warning is issued even if the definition itself
4735     provides a prototype.  Use this option to detect global functions
4736     that do not have a matching prototype declaration in a header file.
4737     This option is not valid for C++ because all function declarations
4738     provide prototypes and a non-matching declaration declares an
4739     overload rather than conflict with an earlier declaration.  Use
4740     `-Wmissing-declarations' to detect missing declarations in C++.
4741
4742`-Wmissing-declarations'
4743     Warn if a global function is defined without a previous
4744     declaration.  Do so even if the definition itself provides a
4745     prototype.  Use this option to detect global functions that are
4746     not declared in header files.  In C, no warnings are issued for
4747     functions with previous non-prototype declarations; use
4748     `-Wmissing-prototypes' to detect missing prototypes.  In C++, no
4749     warnings are issued for function templates, or for inline
4750     functions, or for functions in anonymous namespaces.
4751
4752`-Wmissing-field-initializers'
4753     Warn if a structure's initializer has some fields missing.  For
4754     example, the following code causes such a warning, because `x.h'
4755     is implicitly zero:
4756
4757          struct s { int f, g, h; };
4758          struct s x = { 3, 4 };
4759
4760     This option does not warn about designated initializers, so the
4761     following modification does not trigger a warning:
4762
4763          struct s { int f, g, h; };
4764          struct s x = { .f = 3, .g = 4 };
4765
4766     In C++ this option does not warn either about the empty { }
4767     initializer, for example:
4768
4769          struct s { int f, g, h; };
4770          s x = { };
4771
4772     This warning is included in `-Wextra'.  To get other `-Wextra'
4773     warnings without this one, use `-Wextra
4774     -Wno-missing-field-initializers'.
4775
4776`-Wno-multichar'
4777     Do not warn if a multicharacter constant (`'FOOF'') is used.
4778     Usually they indicate a typo in the user's code, as they have
4779     implementation-defined values, and should not be used in portable
4780     code.
4781
4782`-Wnormalized[=<none|id|nfc|nfkc>]'
4783     In ISO C and ISO C++, two identifiers are different if they are
4784     different sequences of characters.  However, sometimes when
4785     characters outside the basic ASCII character set are used, you can
4786     have two different character sequences that look the same.  To
4787     avoid confusion, the ISO 10646 standard sets out some
4788     "normalization rules" which when applied ensure that two sequences
4789     that look the same are turned into the same sequence.  GCC can
4790     warn you if you are using identifiers that have not been
4791     normalized; this option controls that warning.
4792
4793     There are four levels of warning supported by GCC.  The default is
4794     `-Wnormalized=nfc', which warns about any identifier that is not
4795     in the ISO 10646 "C" normalized form, "NFC".  NFC is the
4796     recommended form for most uses.  It is equivalent to
4797     `-Wnormalized'.
4798
4799     Unfortunately, there are some characters allowed in identifiers by
4800     ISO C and ISO C++ that, when turned into NFC, are not allowed in
4801     identifiers.  That is, there's no way to use these symbols in
4802     portable ISO C or C++ and have all your identifiers in NFC.
4803     `-Wnormalized=id' suppresses the warning for these characters.  It
4804     is hoped that future versions of the standards involved will
4805     correct this, which is why this option is not the default.
4806
4807     You can switch the warning off for all characters by writing
4808     `-Wnormalized=none' or `-Wno-normalized'.  You should only do this
4809     if you are using some other normalization scheme (like "D"),
4810     because otherwise you can easily create bugs that are literally
4811     impossible to see.
4812
4813     Some characters in ISO 10646 have distinct meanings but look
4814     identical in some fonts or display methodologies, especially once
4815     formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
4816     LATIN SMALL LETTER N", displays just like a regular `n' that has
4817     been placed in a superscript.  ISO 10646 defines the "NFKC"
4818     normalization scheme to convert all these into a standard form as
4819     well, and GCC warns if your code is not in NFKC if you use
4820     `-Wnormalized=nfkc'.  This warning is comparable to warning about
4821     every identifier that contains the letter O because it might be
4822     confused with the digit 0, and so is not the default, but may be
4823     useful as a local coding convention if the programming environment
4824     cannot be fixed to display these characters distinctly.
4825
4826`-Wno-deprecated'
4827     Do not warn about usage of deprecated features.  *Note Deprecated
4828     Features::.
4829
4830`-Wno-deprecated-declarations'
4831     Do not warn about uses of functions (*note Function Attributes::),
4832     variables (*note Variable Attributes::), and types (*note Type
4833     Attributes::) marked as deprecated by using the `deprecated'
4834     attribute.
4835
4836`-Wno-overflow'
4837     Do not warn about compile-time overflow in constant expressions.
4838
4839`-Wno-odr'
4840     Warn about One Definition Rule violations during link-time
4841     optimization.  Requires `-flto-odr-type-merging' to be enabled.
4842     Enabled by default.
4843
4844`-Wopenmp-simd'
4845     Warn if the vectorizer cost model overrides the OpenMP or the Cilk
4846     Plus simd directive set by user.  The `-fsimd-cost-model=unlimited'
4847     option can be used to relax the cost model.
4848
4849`-Woverride-init (C and Objective-C only)'
4850     Warn if an initialized field without side effects is overridden
4851     when using designated initializers (*note Designated Initializers:
4852     Designated Inits.).
4853
4854     This warning is included in `-Wextra'.  To get other `-Wextra'
4855     warnings without this one, use `-Wextra -Wno-override-init'.
4856
4857`-Wpacked'
4858     Warn if a structure is given the packed attribute, but the packed
4859     attribute has no effect on the layout or size of the structure.
4860     Such structures may be mis-aligned for little benefit.  For
4861     instance, in this code, the variable `f.x' in `struct bar' is
4862     misaligned even though `struct bar' does not itself have the
4863     packed attribute:
4864
4865          struct foo {
4866            int x;
4867            char a, b, c, d;
4868          } __attribute__((packed));
4869          struct bar {
4870            char z;
4871            struct foo f;
4872          };
4873
4874`-Wpacked-bitfield-compat'
4875     The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute
4876     on bit-fields of type `char'.  This has been fixed in GCC 4.4 but
4877     the change can lead to differences in the structure layout.  GCC
4878     informs you when the offset of such a field has changed in GCC 4.4.
4879     For example there is no longer a 4-bit padding between field `a'
4880     and `b' in this structure:
4881
4882          struct foo
4883          {
4884            char a:4;
4885            char b:8;
4886          } __attribute__ ((packed));
4887
4888     This warning is enabled by default.  Use
4889     `-Wno-packed-bitfield-compat' to disable this warning.
4890
4891`-Wpadded'
4892     Warn if padding is included in a structure, either to align an
4893     element of the structure or to align the whole structure.
4894     Sometimes when this happens it is possible to rearrange the fields
4895     of the structure to reduce the padding and so make the structure
4896     smaller.
4897
4898`-Wredundant-decls'
4899     Warn if anything is declared more than once in the same scope,
4900     even in cases where multiple declaration is valid and changes
4901     nothing.
4902
4903`-Wnested-externs (C and Objective-C only)'
4904     Warn if an `extern' declaration is encountered within a function.
4905
4906`-Wno-inherited-variadic-ctor'
4907     Suppress warnings about use of C++11 inheriting constructors when
4908     the base class inherited from has a C variadic constructor; the
4909     warning is on by default because the ellipsis is not inherited.
4910
4911`-Winline'
4912     Warn if a function that is declared as inline cannot be inlined.
4913     Even with this option, the compiler does not warn about failures to
4914     inline functions declared in system headers.
4915
4916     The compiler uses a variety of heuristics to determine whether or
4917     not to inline a function.  For example, the compiler takes into
4918     account the size of the function being inlined and the amount of
4919     inlining that has already been done in the current function.
4920     Therefore, seemingly insignificant changes in the source program
4921     can cause the warnings produced by `-Winline' to appear or
4922     disappear.
4923
4924`-Wno-invalid-offsetof (C++ and Objective-C++ only)'
4925     Suppress warnings from applying the `offsetof' macro to a non-POD
4926     type.  According to the 2014 ISO C++ standard, applying `offsetof'
4927     to a non-standard-layout type is undefined.  In existing C++
4928     implementations, however, `offsetof' typically gives meaningful
4929     results.  This flag is for users who are aware that they are
4930     writing nonportable code and who have deliberately chosen to
4931     ignore the warning about it.
4932
4933     The restrictions on `offsetof' may be relaxed in a future version
4934     of the C++ standard.
4935
4936`-Wno-int-to-pointer-cast'
4937     Suppress warnings from casts to pointer type of an integer of a
4938     different size. In C++, casting to a pointer type of smaller size
4939     is an error. `Wint-to-pointer-cast' is enabled by default.
4940
4941`-Wno-pointer-to-int-cast (C and Objective-C only)'
4942     Suppress warnings from casts from a pointer to an integer type of a
4943     different size.
4944
4945`-Winvalid-pch'
4946     Warn if a precompiled header (*note Precompiled Headers::) is
4947     found in the search path but can't be used.
4948
4949`-Wlong-long'
4950     Warn if `long long' type is used.  This is enabled by either
4951     `-Wpedantic' or `-Wtraditional' in ISO C90 and C++98 modes.  To
4952     inhibit the warning messages, use `-Wno-long-long'.
4953
4954`-Wvariadic-macros'
4955     Warn if variadic macros are used in ISO C90 mode, or if the GNU
4956     alternate syntax is used in ISO C99 mode.  This is enabled by
4957     either `-Wpedantic' or `-Wtraditional'.  To inhibit the warning
4958     messages, use `-Wno-variadic-macros'.
4959
4960`-Wvarargs'
4961     Warn upon questionable usage of the macros used to handle variable
4962     arguments like `va_start'.  This is default.  To inhibit the
4963     warning messages, use `-Wno-varargs'.
4964
4965`-Wvector-operation-performance'
4966     Warn if vector operation is not implemented via SIMD capabilities
4967     of the architecture.  Mainly useful for the performance tuning.
4968     Vector operation can be implemented `piecewise', which means that
4969     the scalar operation is performed on every vector element; `in
4970     parallel', which means that the vector operation is implemented
4971     using scalars of wider type, which normally is more performance
4972     efficient; and `as a single scalar', which means that vector fits
4973     into a scalar type.
4974
4975`-Wno-virtual-move-assign'
4976     Suppress warnings about inheriting from a virtual base with a
4977     non-trivial C++11 move assignment operator.  This is dangerous
4978     because if the virtual base is reachable along more than one path,
4979     it is moved multiple times, which can mean both objects end up in
4980     the moved-from state.  If the move assignment operator is written
4981     to avoid moving from a moved-from object, this warning can be
4982     disabled.
4983
4984`-Wvla'
4985     Warn if variable length array is used in the code.  `-Wno-vla'
4986     prevents the `-Wpedantic' warning of the variable length array.
4987
4988`-Wvolatile-register-var'
4989     Warn if a register variable is declared volatile.  The volatile
4990     modifier does not inhibit all optimizations that may eliminate
4991     reads and/or writes to register variables.  This warning is
4992     enabled by `-Wall'.
4993
4994`-Wdisabled-optimization'
4995     Warn if a requested optimization pass is disabled.  This warning
4996     does not generally indicate that there is anything wrong with your
4997     code; it merely indicates that GCC's optimizers are unable to
4998     handle the code effectively.  Often, the problem is that your code
4999     is too big or too complex; GCC refuses to optimize programs when
5000     the optimization itself is likely to take inordinate amounts of
5001     time.
5002
5003`-Wpointer-sign (C and Objective-C only)'
5004     Warn for pointer argument passing or assignment with different
5005     signedness.  This option is only supported for C and Objective-C.
5006     It is implied by `-Wall' and by `-Wpedantic', which can be
5007     disabled with `-Wno-pointer-sign'.
5008
5009`-Wstack-protector'
5010     This option is only active when `-fstack-protector' is active.  It
5011     warns about functions that are not protected against stack
5012     smashing.
5013
5014`-Woverlength-strings'
5015     Warn about string constants that are longer than the "minimum
5016     maximum" length specified in the C standard.  Modern compilers
5017     generally allow string constants that are much longer than the
5018     standard's minimum limit, but very portable programs should avoid
5019     using longer strings.
5020
5021     The limit applies _after_ string constant concatenation, and does
5022     not count the trailing NUL.  In C90, the limit was 509 characters;
5023     in C99, it was raised to 4095.  C++98 does not specify a normative
5024     minimum maximum, so we do not diagnose overlength strings in C++.
5025
5026     This option is implied by `-Wpedantic', and can be disabled with
5027     `-Wno-overlength-strings'.
5028
5029`-Wunsuffixed-float-constants (C and Objective-C only)'
5030     Issue a warning for any floating constant that does not have a
5031     suffix.  When used together with `-Wsystem-headers' it warns about
5032     such constants in system header files.  This can be useful when
5033     preparing code to use with the `FLOAT_CONST_DECIMAL64' pragma from
5034     the decimal floating-point extension to C99.
5035
5036`-Wno-designated-init (C and Objective-C only)'
5037     Suppress warnings when a positional initializer is used to
5038     initialize a structure that has been marked with the
5039     `designated_init' attribute.
5040
5041
5042
5043File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
5044
50453.9 Options for Debugging Your Program or GCC
5046=============================================
5047
5048GCC has various special options that are used for debugging either your
5049program or GCC:
5050
5051`-g'
5052     Produce debugging information in the operating system's native
5053     format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
5054     debugging information.
5055
5056     On most systems that use stabs format, `-g' enables use of extra
5057     debugging information that only GDB can use; this extra information
5058     makes debugging work better in GDB but probably makes other
5059     debuggers crash or refuse to read the program.  If you want to
5060     control for certain whether to generate the extra information, use
5061     `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
5062     below).
5063
5064     GCC allows you to use `-g' with `-O'.  The shortcuts taken by
5065     optimized code may occasionally produce surprising results: some
5066     variables you declared may not exist at all; flow of control may
5067     briefly move where you did not expect it; some statements may not
5068     be executed because they compute constant results or their values
5069     are already at hand; some statements may execute in different
5070     places because they have been moved out of loops.
5071
5072     Nevertheless it proves possible to debug optimized output.  This
5073     makes it reasonable to use the optimizer for programs that might
5074     have bugs.
5075
5076     The following options are useful when GCC is generated with the
5077     capability for more than one debugging format.
5078
5079`-gsplit-dwarf'
5080     Separate as much dwarf debugging information as possible into a
5081     separate output file with the extension .dwo.  This option allows
5082     the build system to avoid linking files with debug information.  To
5083     be useful, this option requires a debugger capable of reading .dwo
5084     files.
5085
5086`-ggdb'
5087     Produce debugging information for use by GDB.  This means to use
5088     the most expressive format available (DWARF 2, stabs, or the
5089     native format if neither of those are supported), including GDB
5090     extensions if at all possible.
5091
5092`-gpubnames'
5093     Generate dwarf .debug_pubnames and .debug_pubtypes sections.
5094
5095`-ggnu-pubnames'
5096     Generate .debug_pubnames and .debug_pubtypes sections in a format
5097     suitable for conversion into a GDB index.  This option is only
5098     useful with a linker that can produce GDB index version 7.
5099
5100`-gstabs'
5101     Produce debugging information in stabs format (if that is
5102     supported), without GDB extensions.  This is the format used by
5103     DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
5104     systems this option produces stabs debugging output that is not
5105     understood by DBX or SDB.  On System V Release 4 systems this
5106     option requires the GNU assembler.
5107
5108`-feliminate-unused-debug-symbols'
5109     Produce debugging information in stabs format (if that is
5110     supported), for only symbols that are actually used.
5111
5112`-femit-class-debug-always'
5113     Instead of emitting debugging information for a C++ class in only
5114     one object file, emit it in all object files using the class.
5115     This option should be used only with debuggers that are unable to
5116     handle the way GCC normally emits debugging information for
5117     classes because using this option increases the size of debugging
5118     information by as much as a factor of two.
5119
5120`-fdebug-types-section'
5121     When using DWARF Version 4 or higher, type DIEs can be put into
5122     their own `.debug_types' section instead of making them part of the
5123     `.debug_info' section.  It is more efficient to put them in a
5124     separate comdat sections since the linker can then remove
5125     duplicates.  But not all DWARF consumers support `.debug_types'
5126     sections yet and on some objects `.debug_types' produces larger
5127     instead of smaller debugging information.
5128
5129`-gstabs+'
5130     Produce debugging information in stabs format (if that is
5131     supported), using GNU extensions understood only by the GNU
5132     debugger (GDB).  The use of these extensions is likely to make
5133     other debuggers crash or refuse to read the program.
5134
5135`-gcoff'
5136     Produce debugging information in COFF format (if that is
5137     supported).  This is the format used by SDB on most System V
5138     systems prior to System V Release 4.
5139
5140`-gxcoff'
5141     Produce debugging information in XCOFF format (if that is
5142     supported).  This is the format used by the DBX debugger on IBM
5143     RS/6000 systems.
5144
5145`-gxcoff+'
5146     Produce debugging information in XCOFF format (if that is
5147     supported), using GNU extensions understood only by the GNU
5148     debugger (GDB).  The use of these extensions is likely to make
5149     other debuggers crash or refuse to read the program, and may cause
5150     assemblers other than the GNU assembler (GAS) to fail with an
5151     error.
5152
5153`-gdwarf-VERSION'
5154     Produce debugging information in DWARF format (if that is
5155     supported).  The value of VERSION may be either 2, 3, 4 or 5; the
5156     default version for most targets is 4.  DWARF Version 5 is only
5157     experimental.
5158
5159     Note that with DWARF Version 2, some ports require and always use
5160     some non-conflicting DWARF 3 extensions in the unwind tables.
5161
5162     Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for
5163     maximum benefit.
5164
5165`-grecord-gcc-switches'
5166     This switch causes the command-line options used to invoke the
5167     compiler that may affect code generation to be appended to the
5168     DW_AT_producer attribute in DWARF debugging information.  The
5169     options are concatenated with spaces separating them from each
5170     other and from the compiler version.  See also
5171     `-frecord-gcc-switches' for another way of storing compiler
5172     options into the object file.  This is the default.
5173
5174`-gno-record-gcc-switches'
5175     Disallow appending command-line options to the DW_AT_producer
5176     attribute in DWARF debugging information.
5177
5178`-gstrict-dwarf'
5179     Disallow using extensions of later DWARF standard version than
5180     selected with `-gdwarf-VERSION'.  On most targets using
5181     non-conflicting DWARF extensions from later standard versions is
5182     allowed.
5183
5184`-gno-strict-dwarf'
5185     Allow using extensions of later DWARF standard version than
5186     selected with `-gdwarf-VERSION'.
5187
5188`-gz[=TYPE]'
5189     Produce compressed debug sections in DWARF format, if that is
5190     supported.  If TYPE is not given, the default type depends on the
5191     capabilities of the assembler and linker used.  TYPE may be one of
5192     `none' (don't compress debug sections), `zlib' (use zlib
5193     compression in ELF gABI format), or `zlib-gnu' (use zlib
5194     compression in traditional GNU format).  If the linker doesn't
5195     support writing compressed debug sections, the option is rejected.
5196     Otherwise, if the assembler does not support them, `-gz' is
5197     silently ignored when producing object files.
5198
5199`-gvms'
5200     Produce debugging information in Alpha/VMS debug format (if that is
5201     supported).  This is the format used by DEBUG on Alpha/VMS systems.
5202
5203`-gLEVEL'
5204`-ggdbLEVEL'
5205`-gstabsLEVEL'
5206`-gcoffLEVEL'
5207`-gxcoffLEVEL'
5208`-gvmsLEVEL'
5209     Request debugging information and also use LEVEL to specify how
5210     much information.  The default level is 2.
5211
5212     Level 0 produces no debug information at all.  Thus, `-g0' negates
5213     `-g'.
5214
5215     Level 1 produces minimal information, enough for making backtraces
5216     in parts of the program that you don't plan to debug.  This
5217     includes descriptions of functions and external variables, and
5218     line number tables, but no information about local variables.
5219
5220     Level 3 includes extra information, such as all the macro
5221     definitions present in the program.  Some debuggers support macro
5222     expansion when you use `-g3'.
5223
5224     `-gdwarf-2' does not accept a concatenated debug level, because
5225     GCC used to support an option `-gdwarf' that meant to generate
5226     debug information in version 1 of the DWARF format (which is very
5227     different from version 2), and it would have been too confusing.
5228     That debug format is long obsolete, but the option cannot be
5229     changed now.  Instead use an additional `-gLEVEL' option to change
5230     the debug level for DWARF.
5231
5232`-gtoggle'
5233     Turn off generation of debug info, if leaving out this option
5234     generates it, or turn it on at level 2 otherwise.  The position of
5235     this argument in the command line does not matter; it takes effect
5236     after all other options are processed, and it does so only once,
5237     no matter how many times it is given.  This is mainly intended to
5238     be used with `-fcompare-debug'.
5239
5240`-fsanitize=address'
5241     Enable AddressSanitizer, a fast memory error detector.  Memory
5242     access instructions are instrumented to detect out-of-bounds and
5243     use-after-free bugs.  See
5244     `https://github.com/google/sanitizers/wiki/AddressSanitizer' for
5245     more details.  The run-time behavior can be influenced using the
5246     `ASAN_OPTIONS' environment variable.  When set to `help=1', the
5247     available options are shown at startup of the instrumended
5248     program.  See
5249     `https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags'
5250     for a list of supported options.
5251
5252`-fsanitize=kernel-address'
5253     Enable AddressSanitizer for Linux kernel.  See
5254     `https://github.com/google/kasan/wiki' for more details.
5255
5256`-fsanitize=thread'
5257     Enable ThreadSanitizer, a fast data race detector.  Memory access
5258     instructions are instrumented to detect data race bugs.  See
5259     `https://github.com/google/sanitizers/wiki#threadsanitizer' for
5260     more details. The run-time behavior can be influenced using the
5261     `TSAN_OPTIONS' environment variable; see
5262     `https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags'
5263     for a list of supported options.
5264
5265`-fsanitize=leak'
5266     Enable LeakSanitizer, a memory leak detector.  This option only
5267     matters for linking of executables and if neither
5268     `-fsanitize=address' nor `-fsanitize=thread' is used.  In that
5269     case the executable is linked against a library that overrides
5270     `malloc' and other allocator functions.  See
5271     `https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer'
5272     for more details.  The run-time behavior can be influenced using
5273     the `LSAN_OPTIONS' environment variable.
5274
5275`-fsanitize=undefined'
5276     Enable UndefinedBehaviorSanitizer, a fast undefined behavior
5277     detector.  Various computations are instrumented to detect
5278     undefined behavior at runtime.  Current suboptions are:
5279
5280    `-fsanitize=shift'
5281          This option enables checking that the result of a shift
5282          operation is not undefined.  Note that what exactly is
5283          considered undefined differs slightly between C and C++, as
5284          well as between ISO C90 and C99, etc.
5285
5286    `-fsanitize=integer-divide-by-zero'
5287          Detect integer division by zero as well as `INT_MIN / -1'
5288          division.
5289
5290    `-fsanitize=unreachable'
5291          With this option, the compiler turns the
5292          `__builtin_unreachable' call into a diagnostics message call
5293          instead.  When reaching the `__builtin_unreachable' call, the
5294          behavior is undefined.
5295
5296    `-fsanitize=vla-bound'
5297          This option instructs the compiler to check that the size of
5298          a variable length array is positive.
5299
5300    `-fsanitize=null'
5301          This option enables pointer checking.  Particularly, the
5302          application built with this option turned on will issue an
5303          error message when it tries to dereference a NULL pointer, or
5304          if a reference (possibly an rvalue reference) is bound to a
5305          NULL pointer, or if a method is invoked on an object pointed
5306          by a NULL pointer.
5307
5308    `-fsanitize=return'
5309          This option enables return statement checking.  Programs
5310          built with this option turned on will issue an error message
5311          when the end of a non-void function is reached without
5312          actually returning a value.  This option works in C++ only.
5313
5314    `-fsanitize=signed-integer-overflow'
5315          This option enables signed integer overflow checking.  We
5316          check that the result of `+', `*', and both unary and binary
5317          `-' does not overflow in the signed arithmetics.  Note,
5318          integer promotion rules must be taken into account.  That is,
5319          the following is not an overflow:
5320               signed char a = SCHAR_MAX;
5321               a++;
5322
5323    `-fsanitize=bounds'
5324          This option enables instrumentation of array bounds.  Various
5325          out of bounds accesses are detected.  Flexible array members,
5326          flexible array member-like arrays, and initializers of
5327          variables with static storage are not instrumented.
5328
5329    `-fsanitize=alignment'
5330          This option enables checking of alignment of pointers when
5331          they are dereferenced, or when a reference is bound to
5332          insufficiently aligned target, or when a method or
5333          constructor is invoked on insufficiently aligned object.
5334
5335    `-fsanitize=object-size'
5336          This option enables instrumentation of memory references
5337          using the `__builtin_object_size' function.  Various out of
5338          bounds pointer accesses are detected.
5339
5340    `-fsanitize=float-divide-by-zero'
5341          Detect floating-point division by zero.  Unlike other similar
5342          options, `-fsanitize=float-divide-by-zero' is not enabled by
5343          `-fsanitize=undefined', since floating-point division by zero
5344          can be a legitimate way of obtaining infinities and NaNs.
5345
5346    `-fsanitize=float-cast-overflow'
5347          This option enables floating-point type to integer conversion
5348          checking.  We check that the result of the conversion does
5349          not overflow.  Unlike other similar options,
5350          `-fsanitize=float-cast-overflow' is not enabled by
5351          `-fsanitize=undefined'.  This option does not work well with
5352          `FE_INVALID' exceptions enabled.
5353
5354    `-fsanitize=nonnull-attribute'
5355          This option enables instrumentation of calls, checking
5356          whether null values are not passed to arguments marked as
5357          requiring a non-null value by the `nonnull' function
5358          attribute.
5359
5360    `-fsanitize=returns-nonnull-attribute'
5361          This option enables instrumentation of return statements in
5362          functions marked with `returns_nonnull' function attribute,
5363          to detect returning of null values from such functions.
5364
5365    `-fsanitize=bool'
5366          This option enables instrumentation of loads from bool.  If a
5367          value other than 0/1 is loaded, a run-time error is issued.
5368
5369    `-fsanitize=enum'
5370          This option enables instrumentation of loads from an enum
5371          type.  If a value outside the range of values for the enum
5372          type is loaded, a run-time error is issued.
5373
5374    `-fsanitize=vptr'
5375          This option enables instrumentation of C++ member function
5376          calls, member accesses and some conversions between pointers
5377          to base and derived classes, to verify the referenced object
5378          has the correct dynamic type.
5379
5380
5381     While `-ftrapv' causes traps for signed overflows to be emitted,
5382     `-fsanitize=undefined' gives a diagnostic message.  This currently
5383     works only for the C family of languages.
5384
5385`-fno-sanitize=all'
5386     This option disables all previously enabled sanitizers.
5387     `-fsanitize=all' is not allowed, as some sanitizers cannot be used
5388     together.
5389
5390`-fasan-shadow-offset=NUMBER'
5391     This option forces GCC to use custom shadow offset in
5392     AddressSanitizer checks.  It is useful for experimenting with
5393     different shadow memory layouts in Kernel AddressSanitizer.
5394
5395`-fsanitize-recover[=OPTS]'
5396     `-fsanitize-recover=' controls error recovery mode for sanitizers
5397     mentioned in comma-separated list of OPTS.  Enabling this option
5398     for a sanitizer component causes it to attempt to continue running
5399     the program as if no error happened.  This means multiple runtime
5400     errors can be reported in a single program run, and the exit code
5401     of the program may indicate success even when errors have been
5402     reported.  The `-fno-sanitize-recover=' option can be used to alter
5403     this behavior: only the first detected error is reported and
5404     program then exits with a non-zero exit code.
5405
5406     Currently this feature only works for `-fsanitize=undefined' (and
5407     its suboptions except for `-fsanitize=unreachable' and
5408     `-fsanitize=return'), `-fsanitize=float-cast-overflow',
5409     `-fsanitize=float-divide-by-zero' and `-fsanitize=kernel-address'.
5410     For these sanitizers error recovery is turned on by default.
5411     `-fsanitize-recover=all' and `-fno-sanitize-recover=all' is also
5412     accepted, the former enables recovery for all sanitizers that
5413     support it, the latter disables recovery for all sanitizers that
5414     support it.
5415
5416     Syntax without explicit OPTS parameter is deprecated.  It is
5417     equivalent to
5418          -fsanitize-recover=undefined,float-cast-overflow,float-divide-by-zero
5419     Similarly `-fno-sanitize-recover' is equivalent to
5420          -fno-sanitize-recover=undefined,float-cast-overflow,float-divide-by-zero
5421
5422`-fsanitize-undefined-trap-on-error'
5423     The `-fsanitize-undefined-trap-on-error' option instructs the
5424     compiler to report undefined behavior using `__builtin_trap'
5425     rather than a `libubsan' library routine.  The advantage of this
5426     is that the `libubsan' library is not needed and is not linked in,
5427     so this is usable even in freestanding environments.
5428
5429`-fcheck-pointer-bounds'
5430     Enable Pointer Bounds Checker instrumentation.  Each memory
5431     reference is instrumented with checks of the pointer used for
5432     memory access against bounds associated with that pointer.
5433
5434     Currently there is only an implementation for Intel MPX available,
5435     thus x86 target and `-mmpx' are required to enable this feature.
5436     MPX-based instrumentation requires a runtime library to enable MPX
5437     in hardware and handle bounds violation signals.  By default when
5438     `-fcheck-pointer-bounds' and `-mmpx' options are used to link a
5439     program, the GCC driver links against the `libmpx' runtime library
5440     and `libmpxwrappers' library.  It also passes '-z bndplt' to a
5441     linker in case it supports this option (which is checked on libmpx
5442     configuration).  Note that old versions of linker may ignore
5443     option.  Gold linker doesn't support '-z bndplt' option.  With no
5444     '-z bndplt' support in linker all calls to dynamic libraries lose
5445     passed bounds reducing overall protection level.  It's highly
5446     recommended to use linker with '-z bndplt' support.  In case such
5447     linker is not available it is adviced to always use
5448     `-static-libmpxwrappers' for better protection level or use
5449     `-static' to completely avoid external calls to dynamic libraries.
5450     MPX-based instrumentation may be used for debugging and also may
5451     be included in production code to increase program security.
5452     Depending on usage, you may have different requirements for the
5453     runtime library.  The current version of the MPX runtime library
5454     is more oriented for use as a debugging tool.  MPX runtime library
5455     usage implies `-lpthread'.  See also `-static-libmpx'.  The
5456     runtime library  behavior can be influenced using various
5457     `CHKP_RT_*' environment variables.  See
5458     `https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler'
5459     for more details.
5460
5461     Generated instrumentation may be controlled by various `-fchkp-*'
5462     options and by the `bnd_variable_size' structure field attribute
5463     (*note Type Attributes::) and `bnd_legacy', and `bnd_instrument'
5464     function attributes (*note Function Attributes::).  GCC also
5465     provides a number of built-in functions for controlling the
5466     Pointer Bounds Checker.  *Note Pointer Bounds Checker builtins::,
5467     for more information.
5468
5469`-fchkp-check-incomplete-type'
5470     Generate pointer bounds checks for variables with incomplete type.
5471     Enabled by default.
5472
5473`-fchkp-narrow-bounds'
5474     Controls bounds used by Pointer Bounds Checker for pointers to
5475     object fields.  If narrowing is enabled then field bounds are
5476     used.  Otherwise object bounds are used.  See also
5477     `-fchkp-narrow-to-innermost-array' and
5478     `-fchkp-first-field-has-own-bounds'.  Enabled by default.
5479
5480`-fchkp-first-field-has-own-bounds'
5481     Forces Pointer Bounds Checker to use narrowed bounds for the
5482     address of the first field in the structure.  By default a pointer
5483     to the first field has the same bounds as a pointer to the whole
5484     structure.
5485
5486`-fchkp-narrow-to-innermost-array'
5487     Forces Pointer Bounds Checker to use bounds of the innermost
5488     arrays in case of nested static array access.  By default this
5489     option is disabled and bounds of the outermost array are used.
5490
5491`-fchkp-optimize'
5492     Enables Pointer Bounds Checker optimizations.  Enabled by default
5493     at optimization levels `-O', `-O2', `-O3'.
5494
5495`-fchkp-use-fast-string-functions'
5496     Enables use of `*_nobnd' versions of string functions (not copying
5497     bounds) by Pointer Bounds Checker.  Disabled by default.
5498
5499`-fchkp-use-nochk-string-functions'
5500     Enables use of `*_nochk' versions of string functions (not
5501     checking bounds) by Pointer Bounds Checker.  Disabled by default.
5502
5503`-fchkp-use-static-bounds'
5504     Allow Pointer Bounds Checker to generate static bounds holding
5505     bounds of static variables.  Enabled by default.
5506
5507`-fchkp-use-static-const-bounds'
5508     Use statically-initialized bounds for constant bounds instead of
5509     generating them each time they are required.  By default enabled
5510     when `-fchkp-use-static-bounds' is enabled.
5511
5512`-fchkp-treat-zero-dynamic-size-as-infinite'
5513     With this option, objects with incomplete type whose
5514     dynamically-obtained size is zero are treated as having infinite
5515     size instead by Pointer Bounds Checker.  This option may be
5516     helpful if a program is linked with a library missing size
5517     information for some symbols.  Disabled by default.
5518
5519`-fchkp-check-read'
5520     Instructs Pointer Bounds Checker to generate checks for all read
5521     accesses to memory.  Enabled by default.
5522
5523`-fchkp-check-write'
5524     Instructs Pointer Bounds Checker to generate checks for all write
5525     accesses to memory.  Enabled by default.
5526
5527`-fchkp-store-bounds'
5528     Instructs Pointer Bounds Checker to generate bounds stores for
5529     pointer writes.  Enabled by default.
5530
5531`-fchkp-instrument-calls'
5532     Instructs Pointer Bounds Checker to pass pointer bounds to calls.
5533     Enabled by default.
5534
5535`-fchkp-instrument-marked-only'
5536     Instructs Pointer Bounds Checker to instrument only functions
5537     marked with the `bnd_instrument' attribute (*note Function
5538     Attributes::).  Disabled by default.
5539
5540`-fchkp-use-wrappers'
5541     Allows Pointer Bounds Checker to replace calls to built-in
5542     functions with calls to wrapper functions.  When
5543     `-fchkp-use-wrappers' is used to link a program, the GCC driver
5544     automatically links against `libmpxwrappers'.  See also
5545     `-static-libmpxwrappers'.  Enabled by default.
5546
5547`-fdump-final-insns[=FILE]'
5548     Dump the final internal representation (RTL) to FILE.  If the
5549     optional argument is omitted (or if FILE is `.'), the name of the
5550     dump file is determined by appending `.gkd' to the compilation
5551     output file name.
5552
5553`-fcompare-debug[=OPTS]'
5554     If no error occurs during compilation, run the compiler a second
5555     time, adding OPTS and `-fcompare-debug-second' to the arguments
5556     passed to the second compilation.  Dump the final internal
5557     representation in both compilations, and print an error if they
5558     differ.
5559
5560     If the equal sign is omitted, the default `-gtoggle' is used.
5561
5562     The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty
5563     and nonzero, implicitly enables `-fcompare-debug'.  If
5564     `GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
5565     then it is used for OPTS, otherwise the default `-gtoggle' is used.
5566
5567     `-fcompare-debug=', with the equal sign but without OPTS, is
5568     equivalent to `-fno-compare-debug', which disables the dumping of
5569     the final representation and the second compilation, preventing
5570     even `GCC_COMPARE_DEBUG' from taking effect.
5571
5572     To verify full coverage during `-fcompare-debug' testing, set
5573     `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which
5574     GCC rejects as an invalid option in any actual compilation (rather
5575     than preprocessing, assembly or linking).  To get just a warning,
5576     setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not
5577     overridden' will do.
5578
5579`-fcompare-debug-second'
5580     This option is implicitly passed to the compiler for the second
5581     compilation requested by `-fcompare-debug', along with options to
5582     silence warnings, and omitting other options that would cause
5583     side-effect compiler outputs to files or to the standard output.
5584     Dump files and preserved temporary files are renamed so as to
5585     contain the `.gk' additional extension during the second
5586     compilation, to avoid overwriting those generated by the first.
5587
5588     When this option is passed to the compiler driver, it causes the
5589     _first_ compilation to be skipped, which makes it useful for little
5590     other than debugging the compiler proper.
5591
5592`-feliminate-dwarf2-dups'
5593     Compress DWARF 2 debugging information by eliminating duplicated
5594     information about each symbol.  This option only makes sense when
5595     generating DWARF 2 debugging information with `-gdwarf-2'.
5596
5597`-femit-struct-debug-baseonly'
5598     Emit debug information for struct-like types only when the base
5599     name of the compilation source file matches the base name of file
5600     in which the struct is defined.
5601
5602     This option substantially reduces the size of debugging
5603     information, but at significant potential loss in type information
5604     to the debugger.  See `-femit-struct-debug-reduced' for a less
5605     aggressive option.  See `-femit-struct-debug-detailed' for more
5606     detailed control.
5607
5608     This option works only with DWARF 2.
5609
5610`-femit-struct-debug-reduced'
5611     Emit debug information for struct-like types only when the base
5612     name of the compilation source file matches the base name of file
5613     in which the type is defined, unless the struct is a template or
5614     defined in a system header.
5615
5616     This option significantly reduces the size of debugging
5617     information, with some potential loss in type information to the
5618     debugger.  See `-femit-struct-debug-baseonly' for a more
5619     aggressive option.  See `-femit-struct-debug-detailed' for more
5620     detailed control.
5621
5622     This option works only with DWARF 2.
5623
5624`-femit-struct-debug-detailed[=SPEC-LIST]'
5625     Specify the struct-like types for which the compiler generates
5626     debug information.  The intent is to reduce duplicate struct debug
5627     information between different object files within the same program.
5628
5629     This option is a detailed version of `-femit-struct-debug-reduced'
5630     and `-femit-struct-debug-baseonly', which serves for most needs.
5631
5632     A specification has the syntax
5633     [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none')
5634
5635     The optional first word limits the specification to structs that
5636     are used directly (`dir:') or used indirectly (`ind:').  A struct
5637     type is used directly when it is the type of a variable, member.
5638     Indirect uses arise through pointers to structs.  That is, when
5639     use of an incomplete struct is valid, the use is indirect.  An
5640     example is `struct one direct; struct two * indirect;'.
5641
5642     The optional second word limits the specification to ordinary
5643     structs (`ord:') or generic structs (`gen:').  Generic structs are
5644     a bit complicated to explain.  For C++, these are non-explicit
5645     specializations of template classes, or non-template classes
5646     within the above.  Other programming languages have generics, but
5647     `-femit-struct-debug-detailed' does not yet implement them.
5648
5649     The third word specifies the source files for those structs for
5650     which the compiler should emit debug information.  The values
5651     `none' and `any' have the normal meaning.  The value `base' means
5652     that the base of name of the file in which the type declaration
5653     appears must match the base of the name of the main compilation
5654     file.  In practice, this means that when compiling `foo.c', debug
5655     information is generated for types declared in that file and
5656     `foo.h', but not other header files.  The value `sys' means those
5657     types satisfying `base' or declared in system or compiler headers.
5658
5659     You may need to experiment to determine the best settings for your
5660     application.
5661
5662     The default is `-femit-struct-debug-detailed=all'.
5663
5664     This option works only with DWARF 2.
5665
5666`-fno-merge-debug-strings'
5667     Direct the linker to not merge together strings in the debugging
5668     information that are identical in different object files.  Merging
5669     is not supported by all assemblers or linkers.  Merging decreases
5670     the size of the debug information in the output file at the cost
5671     of increasing link processing time.  Merging is enabled by default.
5672
5673`-fdebug-prefix-map=OLD=NEW'
5674     When compiling files in directory `OLD', record debugging
5675     information describing them as in `NEW' instead.
5676
5677`-fno-dwarf2-cfi-asm'
5678     Emit DWARF 2 unwind info as compiler generated `.eh_frame' section
5679     instead of using GAS `.cfi_*' directives.
5680
5681`-p'
5682     Generate extra code to write profile information suitable for the
5683     analysis program `prof'.  You must use this option when compiling
5684     the source files you want data about, and you must also use it when
5685     linking.
5686
5687`-pg'
5688     Generate extra code to write profile information suitable for the
5689     analysis program `gprof'.  You must use this option when compiling
5690     the source files you want data about, and you must also use it when
5691     linking.
5692
5693`-Q'
5694     Makes the compiler print out each function name as it is compiled,
5695     and print some statistics about each pass when it finishes.
5696
5697`-ftime-report'
5698     Makes the compiler print some statistics about the time consumed
5699     by each pass when it finishes.
5700
5701`-fmem-report'
5702     Makes the compiler print some statistics about permanent memory
5703     allocation when it finishes.
5704
5705`-fmem-report-wpa'
5706     Makes the compiler print some statistics about permanent memory
5707     allocation for the WPA phase only.
5708
5709`-fpre-ipa-mem-report'
5710
5711`-fpost-ipa-mem-report'
5712     Makes the compiler print some statistics about permanent memory
5713     allocation before or after interprocedural optimization.
5714
5715`-fprofile-report'
5716     Makes the compiler print some statistics about consistency of the
5717     (estimated) profile and effect of individual passes.
5718
5719`-fstack-usage'
5720     Makes the compiler output stack usage information for the program,
5721     on a per-function basis.  The filename for the dump is made by
5722     appending `.su' to the AUXNAME.  AUXNAME is generated from the
5723     name of the output file, if explicitly specified and it is not an
5724     executable, otherwise it is the basename of the source file.  An
5725     entry is made up of three fields:
5726
5727        * The name of the function.
5728
5729        * A number of bytes.
5730
5731        * One or more qualifiers: `static', `dynamic', `bounded'.
5732
5733     The qualifier `static' means that the function manipulates the
5734     stack statically: a fixed number of bytes are allocated for the
5735     frame on function entry and released on function exit; no stack
5736     adjustments are otherwise made in the function.  The second field
5737     is this fixed number of bytes.
5738
5739     The qualifier `dynamic' means that the function manipulates the
5740     stack dynamically: in addition to the static allocation described
5741     above, stack adjustments are made in the body of the function, for
5742     example to push/pop arguments around function calls.  If the
5743     qualifier `bounded' is also present, the amount of these
5744     adjustments is bounded at compile time and the second field is an
5745     upper bound of the total amount of stack used by the function.  If
5746     it is not present, the amount of these adjustments is not bounded
5747     at compile time and the second field only represents the bounded
5748     part.
5749
5750`-fprofile-arcs'
5751     Add code so that program flow "arcs" are instrumented.  During
5752     execution the program records how many times each branch and call
5753     is executed and how many times it is taken or returns.  When the
5754     compiled program exits it saves this data to a file called
5755     `AUXNAME.gcda' for each source file.  The data may be used for
5756     profile-directed optimizations (`-fbranch-probabilities'), or for
5757     test coverage analysis (`-ftest-coverage').  Each object file's
5758     AUXNAME is generated from the name of the output file, if
5759     explicitly specified and it is not the final executable, otherwise
5760     it is the basename of the source file.  In both cases any suffix
5761     is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
5762     `dir/foo.gcda' for output file specified as `-o dir/foo.o').
5763     *Note Cross-profiling::.
5764
5765`--coverage'
5766     This option is used to compile and link code instrumented for
5767     coverage analysis.  The option is a synonym for `-fprofile-arcs'
5768     `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
5769     See the documentation for those options for more details.
5770
5771        * Compile the source files with `-fprofile-arcs' plus
5772          optimization and code generation options.  For test coverage
5773          analysis, use the additional `-ftest-coverage' option.  You
5774          do not need to profile every source file in a program.
5775
5776        * Link your object files with `-lgcov' or `-fprofile-arcs' (the
5777          latter implies the former).
5778
5779        * Run the program on a representative workload to generate the
5780          arc profile information.  This may be repeated any number of
5781          times.  You can run concurrent instances of your program, and
5782          provided that the file system supports locking, the data
5783          files will be correctly updated.  Also `fork' calls are
5784          detected and correctly handled (double counting will not
5785          happen).
5786
5787        * For profile-directed optimizations, compile the source files
5788          again with the same optimization and code generation options
5789          plus `-fbranch-probabilities' (*note Options that Control
5790          Optimization: Optimize Options.).
5791
5792        * For test coverage analysis, use `gcov' to produce human
5793          readable information from the `.gcno' and `.gcda' files.
5794          Refer to the `gcov' documentation for further information.
5795
5796
5797     With `-fprofile-arcs', for each function of your program GCC
5798     creates a program flow graph, then finds a spanning tree for the
5799     graph.  Only arcs that are not on the spanning tree have to be
5800     instrumented: the compiler adds code to count the number of times
5801     that these arcs are executed.  When an arc is the only exit or
5802     only entrance to a block, the instrumentation code can be added to
5803     the block; otherwise, a new basic block must be created to hold
5804     the instrumentation code.
5805
5806`-ftest-coverage'
5807     Produce a notes file that the `gcov' code-coverage utility (*note
5808     `gcov'--a Test Coverage Program: Gcov.) can use to show program
5809     coverage.  Each source file's note file is called `AUXNAME.gcno'.
5810     Refer to the `-fprofile-arcs' option above for a description of
5811     AUXNAME and instructions on how to generate test coverage data.
5812     Coverage data matches the source files more closely if you do not
5813     optimize.
5814
5815`-fdbg-cnt-list'
5816     Print the name and the counter upper bound for all debug counters.
5817
5818`-fdbg-cnt=COUNTER-VALUE-LIST'
5819     Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
5820     a comma-separated list of NAME:VALUE pairs which sets the upper
5821     bound of each debug counter NAME to VALUE.  All debug counters
5822     have the initial upper bound of `UINT_MAX'; thus `dbg_cnt' returns
5823     true always unless the upper bound is set by this option.  For
5824     example, with `-fdbg-cnt=dce:10,tail_call:0', `dbg_cnt(dce)'
5825     returns true only for first 10 invocations.
5826
5827`-fenable-KIND-PASS'
5828`-fdisable-KIND-PASS=RANGE-LIST'
5829     This is a set of options that are used to explicitly disable/enable
5830     optimization passes.  These options are intended for use for
5831     debugging GCC.  Compiler users should use regular options for
5832     enabling/disabling passes instead.
5833
5834    `-fdisable-ipa-PASS'
5835          Disable IPA pass PASS. PASS is the pass name.  If the same
5836          pass is statically invoked in the compiler multiple times,
5837          the pass name should be appended with a sequential number
5838          starting from 1.
5839
5840    `-fdisable-rtl-PASS'
5841    `-fdisable-rtl-PASS=RANGE-LIST'
5842          Disable RTL pass PASS.  PASS is the pass name.  If the same
5843          pass is statically invoked in the compiler multiple times,
5844          the pass name should be appended with a sequential number
5845          starting from 1.  RANGE-LIST is a comma-separated list of
5846          function ranges or assembler names.  Each range is a number
5847          pair separated by a colon.  The range is inclusive in both
5848          ends.  If the range is trivial, the number pair can be
5849          simplified as a single number.  If the function's call graph
5850          node's UID falls within one of the specified ranges, the PASS
5851          is disabled for that function.  The UID is shown in the
5852          function header of a dump file, and the pass names can be
5853          dumped by using option `-fdump-passes'.
5854
5855    `-fdisable-tree-PASS'
5856    `-fdisable-tree-PASS=RANGE-LIST'
5857          Disable tree pass PASS.  See `-fdisable-rtl' for the
5858          description of option arguments.
5859
5860    `-fenable-ipa-PASS'
5861          Enable IPA pass PASS.  PASS is the pass name.  If the same
5862          pass is statically invoked in the compiler multiple times,
5863          the pass name should be appended with a sequential number
5864          starting from 1.
5865
5866    `-fenable-rtl-PASS'
5867    `-fenable-rtl-PASS=RANGE-LIST'
5868          Enable RTL pass PASS.  See `-fdisable-rtl' for option argument
5869          description and examples.
5870
5871    `-fenable-tree-PASS'
5872    `-fenable-tree-PASS=RANGE-LIST'
5873          Enable tree pass PASS.  See `-fdisable-rtl' for the
5874          description of option arguments.
5875
5876
5877     Here are some examples showing uses of these options.
5878
5879
5880          # disable ccp1 for all functions
5881             -fdisable-tree-ccp1
5882          # disable complete unroll for function whose cgraph node uid is 1
5883             -fenable-tree-cunroll=1
5884          # disable gcse2 for functions at the following ranges [1,1],
5885          # [300,400], and [400,1000]
5886          # disable gcse2 for functions foo and foo2
5887             -fdisable-rtl-gcse2=foo,foo2
5888          # disable early inlining
5889             -fdisable-tree-einline
5890          # disable ipa inlining
5891             -fdisable-ipa-inline
5892          # enable tree full unroll
5893             -fenable-tree-unroll
5894
5895`-dLETTERS'
5896`-fdump-rtl-PASS'
5897`-fdump-rtl-PASS=FILENAME'
5898     Says to make debugging dumps during compilation at times specified
5899     by LETTERS.  This is used for debugging the RTL-based passes of the
5900     compiler.  The file names for most of the dumps are made by
5901     appending a pass number and a word to the DUMPNAME, and the files
5902     are created in the directory of the output file. In case of
5903     `=FILENAME' option, the dump is output on the given file instead
5904     of the pass numbered dump files. Note that the pass number is
5905     computed statically as passes get registered into the pass manager.
5906     Thus the numbering is not related to the dynamic order of
5907     execution of passes.  In particular, a pass installed by a plugin
5908     could have a number over 200 even if it executed quite early.
5909     DUMPNAME is generated from the name of the output file, if
5910     explicitly specified and it is not an executable, otherwise it is
5911     the basename of the source file. These switches may have different
5912     effects when `-E' is used for preprocessing.
5913
5914     Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d'
5915     option LETTERS.  Here are the possible letters for use in PASS and
5916     LETTERS, and their meanings:
5917
5918    `-fdump-rtl-alignments'
5919          Dump after branch alignments have been computed.
5920
5921    `-fdump-rtl-asmcons'
5922          Dump after fixing rtl statements that have unsatisfied in/out
5923          constraints.
5924
5925    `-fdump-rtl-auto_inc_dec'
5926          Dump after auto-inc-dec discovery.  This pass is only run on
5927          architectures that have auto inc or auto dec instructions.
5928
5929    `-fdump-rtl-barriers'
5930          Dump after cleaning up the barrier instructions.
5931
5932    `-fdump-rtl-bbpart'
5933          Dump after partitioning hot and cold basic blocks.
5934
5935    `-fdump-rtl-bbro'
5936          Dump after block reordering.
5937
5938    `-fdump-rtl-btl1'
5939    `-fdump-rtl-btl2'
5940          `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after
5941          the two branch target load optimization passes.
5942
5943    `-fdump-rtl-bypass'
5944          Dump after jump bypassing and control flow optimizations.
5945
5946    `-fdump-rtl-combine'
5947          Dump after the RTL instruction combination pass.
5948
5949    `-fdump-rtl-compgotos'
5950          Dump after duplicating the computed gotos.
5951
5952    `-fdump-rtl-ce1'
5953    `-fdump-rtl-ce2'
5954    `-fdump-rtl-ce3'
5955          `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3'
5956          enable dumping after the three if conversion passes.
5957
5958    `-fdump-rtl-cprop_hardreg'
5959          Dump after hard register copy propagation.
5960
5961    `-fdump-rtl-csa'
5962          Dump after combining stack adjustments.
5963
5964    `-fdump-rtl-cse1'
5965    `-fdump-rtl-cse2'
5966          `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after
5967          the two common subexpression elimination passes.
5968
5969    `-fdump-rtl-dce'
5970          Dump after the standalone dead code elimination passes.
5971
5972    `-fdump-rtl-dbr'
5973          Dump after delayed branch scheduling.
5974
5975    `-fdump-rtl-dce1'
5976    `-fdump-rtl-dce2'
5977          `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after
5978          the two dead store elimination passes.
5979
5980    `-fdump-rtl-eh'
5981          Dump after finalization of EH handling code.
5982
5983    `-fdump-rtl-eh_ranges'
5984          Dump after conversion of EH handling range regions.
5985
5986    `-fdump-rtl-expand'
5987          Dump after RTL generation.
5988
5989    `-fdump-rtl-fwprop1'
5990    `-fdump-rtl-fwprop2'
5991          `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping
5992          after the two forward propagation passes.
5993
5994    `-fdump-rtl-gcse1'
5995    `-fdump-rtl-gcse2'
5996          `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping
5997          after global common subexpression elimination.
5998
5999    `-fdump-rtl-init-regs'
6000          Dump after the initialization of the registers.
6001
6002    `-fdump-rtl-initvals'
6003          Dump after the computation of the initial value sets.
6004
6005    `-fdump-rtl-into_cfglayout'
6006          Dump after converting to cfglayout mode.
6007
6008    `-fdump-rtl-ira'
6009          Dump after iterated register allocation.
6010
6011    `-fdump-rtl-jump'
6012          Dump after the second jump optimization.
6013
6014    `-fdump-rtl-loop2'
6015          `-fdump-rtl-loop2' enables dumping after the rtl loop
6016          optimization passes.
6017
6018    `-fdump-rtl-mach'
6019          Dump after performing the machine dependent reorganization
6020          pass, if that pass exists.
6021
6022    `-fdump-rtl-mode_sw'
6023          Dump after removing redundant mode switches.
6024
6025    `-fdump-rtl-rnreg'
6026          Dump after register renumbering.
6027
6028    `-fdump-rtl-outof_cfglayout'
6029          Dump after converting from cfglayout mode.
6030
6031    `-fdump-rtl-peephole2'
6032          Dump after the peephole pass.
6033
6034    `-fdump-rtl-postreload'
6035          Dump after post-reload optimizations.
6036
6037    `-fdump-rtl-pro_and_epilogue'
6038          Dump after generating the function prologues and epilogues.
6039
6040    `-fdump-rtl-sched1'
6041    `-fdump-rtl-sched2'
6042          `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping
6043          after the basic block scheduling passes.
6044
6045    `-fdump-rtl-ree'
6046          Dump after sign/zero extension elimination.
6047
6048    `-fdump-rtl-seqabstr'
6049          Dump after common sequence discovery.
6050
6051    `-fdump-rtl-shorten'
6052          Dump after shortening branches.
6053
6054    `-fdump-rtl-sibling'
6055          Dump after sibling call optimizations.
6056
6057    `-fdump-rtl-split1'
6058    `-fdump-rtl-split2'
6059    `-fdump-rtl-split3'
6060    `-fdump-rtl-split4'
6061    `-fdump-rtl-split5'
6062          These options enable dumping after five rounds of instruction
6063          splitting.
6064
6065    `-fdump-rtl-sms'
6066          Dump after modulo scheduling.  This pass is only run on some
6067          architectures.
6068
6069    `-fdump-rtl-stack'
6070          Dump after conversion from GCC's "flat register file"
6071          registers to the x87's stack-like registers.  This pass is
6072          only run on x86 variants.
6073
6074    `-fdump-rtl-subreg1'
6075    `-fdump-rtl-subreg2'
6076          `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping
6077          after the two subreg expansion passes.
6078
6079    `-fdump-rtl-unshare'
6080          Dump after all rtl has been unshared.
6081
6082    `-fdump-rtl-vartrack'
6083          Dump after variable tracking.
6084
6085    `-fdump-rtl-vregs'
6086          Dump after converting virtual registers to hard registers.
6087
6088    `-fdump-rtl-web'
6089          Dump after live range splitting.
6090
6091    `-fdump-rtl-regclass'
6092    `-fdump-rtl-subregs_of_mode_init'
6093    `-fdump-rtl-subregs_of_mode_finish'
6094    `-fdump-rtl-dfinit'
6095    `-fdump-rtl-dfinish'
6096          These dumps are defined but always produce empty files.
6097
6098    `-da'
6099    `-fdump-rtl-all'
6100          Produce all the dumps listed above.
6101
6102    `-dA'
6103          Annotate the assembler output with miscellaneous debugging
6104          information.
6105
6106    `-dD'
6107          Dump all macro definitions, at the end of preprocessing, in
6108          addition to normal output.
6109
6110    `-dH'
6111          Produce a core dump whenever an error occurs.
6112
6113    `-dp'
6114          Annotate the assembler output with a comment indicating which
6115          pattern and alternative is used.  The length of each
6116          instruction is also printed.
6117
6118    `-dP'
6119          Dump the RTL in the assembler output as a comment before each
6120          instruction.  Also turns on `-dp' annotation.
6121
6122    `-dx'
6123          Just generate RTL for a function instead of compiling it.
6124          Usually used with `-fdump-rtl-expand'.
6125
6126`-fdump-noaddr'
6127     When doing debugging dumps, suppress address output.  This makes
6128     it more feasible to use diff on debugging dumps for compiler
6129     invocations with different compiler binaries and/or different text
6130     / bss / data / heap / stack / dso start locations.
6131
6132`-freport-bug'
6133     Collect and dump debug information into temporary file if ICE in
6134     C/C++ compiler occured.
6135
6136`-fdump-unnumbered'
6137     When doing debugging dumps, suppress instruction numbers and
6138     address output.  This makes it more feasible to use diff on
6139     debugging dumps for compiler invocations with different options,
6140     in particular with and without `-g'.
6141
6142`-fdump-unnumbered-links'
6143     When doing debugging dumps (see `-d' option above), suppress
6144     instruction numbers for the links to the previous and next
6145     instructions in a sequence.
6146
6147`-fdump-translation-unit (C++ only)'
6148`-fdump-translation-unit-OPTIONS (C++ only)'
6149     Dump a representation of the tree structure for the entire
6150     translation unit to a file.  The file name is made by appending
6151     `.tu' to the source file name, and the file is created in the same
6152     directory as the output file.  If the `-OPTIONS' form is used,
6153     OPTIONS controls the details of the dump as described for the
6154     `-fdump-tree' options.
6155
6156`-fdump-class-hierarchy (C++ only)'
6157`-fdump-class-hierarchy-OPTIONS (C++ only)'
6158     Dump a representation of each class's hierarchy and virtual
6159     function table layout to a file.  The file name is made by
6160     appending `.class' to the source file name, and the file is
6161     created in the same directory as the output file.  If the
6162     `-OPTIONS' form is used, OPTIONS controls the details of the dump
6163     as described for the `-fdump-tree' options.
6164
6165`-fdump-ipa-SWITCH'
6166     Control the dumping at various stages of inter-procedural analysis
6167     language tree to a file.  The file name is generated by appending a
6168     switch specific suffix to the source file name, and the file is
6169     created in the same directory as the output file.  The following
6170     dumps are possible:
6171
6172    `all'
6173          Enables all inter-procedural analysis dumps.
6174
6175    `cgraph'
6176          Dumps information about call-graph optimization, unused
6177          function removal, and inlining decisions.
6178
6179    `inline'
6180          Dump after function inlining.
6181
6182
6183`-fdump-passes'
6184     Dump the list of optimization passes that are turned on and off by
6185     the current command-line options.
6186
6187`-fdump-statistics-OPTION'
6188     Enable and control dumping of pass statistics in a separate file.
6189     The file name is generated by appending a suffix ending in
6190     `.statistics' to the source file name, and the file is created in
6191     the same directory as the output file.  If the `-OPTION' form is
6192     used, `-stats' causes counters to be summed over the whole
6193     compilation unit while `-details' dumps every event as the passes
6194     generate them.  The default with no option is to sum counters for
6195     each function compiled.
6196
6197`-fdump-tree-SWITCH'
6198`-fdump-tree-SWITCH-OPTIONS'
6199`-fdump-tree-SWITCH-OPTIONS=FILENAME'
6200     Control the dumping at various stages of processing the
6201     intermediate language tree to a file.  The file name is generated
6202     by appending a switch-specific suffix to the source file name, and
6203     the file is created in the same directory as the output file. In
6204     case of `=FILENAME' option, the dump is output on the given file
6205     instead of the auto named dump files.  If the `-OPTIONS' form is
6206     used, OPTIONS is a list of `-' separated options which control the
6207     details of the dump.  Not all options are applicable to all dumps;
6208     those that are not meaningful are ignored.  The following options
6209     are available
6210
6211    `address'
6212          Print the address of each node.  Usually this is not
6213          meaningful as it changes according to the environment and
6214          source file.  Its primary use is for tying up a dump file
6215          with a debug environment.
6216
6217    `asmname'
6218          If `DECL_ASSEMBLER_NAME' has been set for a given decl, use
6219          that in the dump instead of `DECL_NAME'.  Its primary use is
6220          ease of use working backward from mangled names in the
6221          assembly file.
6222
6223    `slim'
6224          When dumping front-end intermediate representations, inhibit
6225          dumping of members of a scope or body of a function merely
6226          because that scope has been reached.  Only dump such items
6227          when they are directly reachable by some other path.
6228
6229          When dumping pretty-printed trees, this option inhibits
6230          dumping the bodies of control structures.
6231
6232          When dumping RTL, print the RTL in slim (condensed) form
6233          instead of the default LISP-like representation.
6234
6235    `raw'
6236          Print a raw representation of the tree.  By default, trees are
6237          pretty-printed into a C-like representation.
6238
6239    `details'
6240          Enable more detailed dumps (not honored by every dump
6241          option). Also include information from the optimization
6242          passes.
6243
6244    `stats'
6245          Enable dumping various statistics about the pass (not honored
6246          by every dump option).
6247
6248    `blocks'
6249          Enable showing basic block boundaries (disabled in raw dumps).
6250
6251    `graph'
6252          For each of the other indicated dump files
6253          (`-fdump-rtl-PASS'), dump a representation of the control
6254          flow graph suitable for viewing with GraphViz to
6255          `FILE.PASSID.PASS.dot'.  Each function in the file is
6256          pretty-printed as a subgraph, so that GraphViz can render them
6257          all in a single plot.
6258
6259          This option currently only works for RTL dumps, and the RTL
6260          is always dumped in slim form.
6261
6262    `vops'
6263          Enable showing virtual operands for every statement.
6264
6265    `lineno'
6266          Enable showing line numbers for statements.
6267
6268    `uid'
6269          Enable showing the unique ID (`DECL_UID') for each variable.
6270
6271    `verbose'
6272          Enable showing the tree dump for each statement.
6273
6274    `eh'
6275          Enable showing the EH region number holding each statement.
6276
6277    `scev'
6278          Enable showing scalar evolution analysis details.
6279
6280    `optimized'
6281          Enable showing optimization information (only available in
6282          certain passes).
6283
6284    `missed'
6285          Enable showing missed optimization information (only
6286          available in certain passes).
6287
6288    `note'
6289          Enable other detailed optimization information (only
6290          available in certain passes).
6291
6292    `=FILENAME'
6293          Instead of an auto named dump file, output into the given file
6294          name. The file names `stdout' and `stderr' are treated
6295          specially and are considered already open standard streams.
6296          For example,
6297
6298               gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
6299                    -fdump-tree-pre=stderr file.c
6300
6301          outputs vectorizer dump into `foo.dump', while the PRE dump is
6302          output on to `stderr'. If two conflicting dump filenames are
6303          given for the same pass, then the latter option overrides the
6304          earlier one.
6305
6306    `all'
6307          Turn on all options, except `raw', `slim', `verbose' and
6308          `lineno'.
6309
6310    `optall'
6311          Turn on all optimization options, i.e., `optimized',
6312          `missed', and `note'.
6313
6314     The following tree dumps are possible:
6315    `original'
6316          Dump before any tree based optimization, to `FILE.original'.
6317
6318    `optimized'
6319          Dump after all tree based optimization, to `FILE.optimized'.
6320
6321    `gimple'
6322          Dump each function before and after the gimplification pass
6323          to a file.  The file name is made by appending `.gimple' to
6324          the source file name.
6325
6326    `cfg'
6327          Dump the control flow graph of each function to a file.  The
6328          file name is made by appending `.cfg' to the source file name.
6329
6330    `ch'
6331          Dump each function after copying loop headers.  The file name
6332          is made by appending `.ch' to the source file name.
6333
6334    `ssa'
6335          Dump SSA related information to a file.  The file name is
6336          made by appending `.ssa' to the source file name.
6337
6338    `alias'
6339          Dump aliasing information for each function.  The file name
6340          is made by appending `.alias' to the source file name.
6341
6342    `ccp'
6343          Dump each function after CCP.  The file name is made by
6344          appending `.ccp' to the source file name.
6345
6346    `storeccp'
6347          Dump each function after STORE-CCP.  The file name is made by
6348          appending `.storeccp' to the source file name.
6349
6350    `pre'
6351          Dump trees after partial redundancy elimination.  The file
6352          name is made by appending `.pre' to the source file name.
6353
6354    `fre'
6355          Dump trees after full redundancy elimination.  The file name
6356          is made by appending `.fre' to the source file name.
6357
6358    `copyprop'
6359          Dump trees after copy propagation.  The file name is made by
6360          appending `.copyprop' to the source file name.
6361
6362    `store_copyprop'
6363          Dump trees after store copy-propagation.  The file name is
6364          made by appending `.store_copyprop' to the source file name.
6365
6366    `dce'
6367          Dump each function after dead code elimination.  The file
6368          name is made by appending `.dce' to the source file name.
6369
6370    `sra'
6371          Dump each function after performing scalar replacement of
6372          aggregates.  The file name is made by appending `.sra' to the
6373          source file name.
6374
6375    `sink'
6376          Dump each function after performing code sinking.  The file
6377          name is made by appending `.sink' to the source file name.
6378
6379    `dom'
6380          Dump each function after applying dominator tree
6381          optimizations.  The file name is made by appending `.dom' to
6382          the source file name.
6383
6384    `dse'
6385          Dump each function after applying dead store elimination.
6386          The file name is made by appending `.dse' to the source file
6387          name.
6388
6389    `phiopt'
6390          Dump each function after optimizing PHI nodes into
6391          straightline code.  The file name is made by appending
6392          `.phiopt' to the source file name.
6393
6394    `forwprop'
6395          Dump each function after forward propagating single use
6396          variables.  The file name is made by appending `.forwprop' to
6397          the source file name.
6398
6399    `copyrename'
6400          Dump each function after applying the copy rename
6401          optimization.  The file name is made by appending
6402          `.copyrename' to the source file name.
6403
6404    `nrv'
6405          Dump each function after applying the named return value
6406          optimization on generic trees.  The file name is made by
6407          appending `.nrv' to the source file name.
6408
6409    `vect'
6410          Dump each function after applying vectorization of loops.
6411          The file name is made by appending `.vect' to the source file
6412          name.
6413
6414    `slp'
6415          Dump each function after applying vectorization of basic
6416          blocks.  The file name is made by appending `.slp' to the
6417          source file name.
6418
6419    `vrp'
6420          Dump each function after Value Range Propagation (VRP).  The
6421          file name is made by appending `.vrp' to the source file name.
6422
6423    `all'
6424          Enable all the available tree dumps with the flags provided
6425          in this option.
6426
6427`-fopt-info'
6428`-fopt-info-OPTIONS'
6429`-fopt-info-OPTIONS=FILENAME'
6430     Controls optimization dumps from various optimization passes. If
6431     the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
6432     option keywords to select the dump details and optimizations.
6433
6434     The OPTIONS can be divided into two groups: options describing the
6435     verbosity of the dump, and options describing which optimizations
6436     should be included. The options from both the groups can be freely
6437     mixed as they are non-overlapping. However, in case of any
6438     conflicts, the later options override the earlier options on the
6439     command line.
6440
6441     The following options control the dump verbosity:
6442
6443    `optimized'
6444          Print information when an optimization is successfully
6445          applied. It is up to a pass to decide which information is
6446          relevant. For example, the vectorizer passes print the source
6447          location of loops which are successfully vectorized.
6448
6449    `missed'
6450          Print information about missed optimizations. Individual
6451          passes control which information to include in the output.
6452
6453    `note'
6454          Print verbose information about optimizations, such as certain
6455          transformations, more detailed messages about decisions etc.
6456
6457    `all'
6458          Print detailed optimization information. This includes
6459          `optimized', `missed', and `note'.
6460
6461     One or more of the following option keywords can be used to
6462     describe a group of optimizations:
6463
6464    `ipa'
6465          Enable dumps from all interprocedural optimizations.
6466
6467    `loop'
6468          Enable dumps from all loop optimizations.
6469
6470    `inline'
6471          Enable dumps from all inlining optimizations.
6472
6473    `vec'
6474          Enable dumps from all vectorization optimizations.
6475
6476    `optall'
6477          Enable dumps from all optimizations. This is a superset of
6478          the optimization groups listed above.
6479
6480     If OPTIONS is omitted, it defaults to `optimized-optall', which
6481     means to dump all info about successful optimizations from all the
6482     passes.
6483
6484     If the FILENAME is provided, then the dumps from all the
6485     applicable optimizations are concatenated into the FILENAME.
6486     Otherwise the dump is output onto `stderr'. Though multiple
6487     `-fopt-info' options are accepted, only one of them can include a
6488     FILENAME. If other filenames are provided then all but the first
6489     such option are ignored.
6490
6491     Note that the output FILENAME is overwritten in case of multiple
6492     translation units. If a combined output from multiple translation
6493     units is desired, `stderr' should be used instead.
6494
6495     In the following example, the optimization info is output to
6496     `stderr':
6497
6498          gcc -O3 -fopt-info
6499
6500     This example:
6501          gcc -O3 -fopt-info-missed=missed.all
6502
6503     outputs missed optimization report from all the passes into
6504     `missed.all', and this one:
6505
6506          gcc -O2 -ftree-vectorize -fopt-info-vec-missed
6507
6508     prints information about missed optimization opportunities from
6509     vectorization passes on `stderr'.  Note that
6510     `-fopt-info-vec-missed' is equivalent to `-fopt-info-missed-vec'.
6511
6512     As another example,
6513          gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
6514
6515     outputs information about missed optimizations as well as
6516     optimized locations from all the inlining passes into `inline.txt'.
6517
6518     Finally, consider:
6519
6520          gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
6521
6522     Here the two output filenames `vec.miss' and `loop.opt' are in
6523     conflict since only one output file is allowed. In this case, only
6524     the first option takes effect and the subsequent options are
6525     ignored. Thus only `vec.miss' is produced which contains dumps
6526     from the vectorizer about missed opportunities.
6527
6528`-frandom-seed=STRING'
6529     This option provides a seed that GCC uses in place of random
6530     numbers in generating certain symbol names that have to be
6531     different in every compiled file.  It is also used to place unique
6532     stamps in coverage data files and the object files that produce
6533     them.  You can use the `-frandom-seed' option to produce
6534     reproducibly identical object files.
6535
6536     The STRING can either be a number (decimal, octal or hex) or an
6537     arbitrary string (in which case it's converted to a number by
6538     computing CRC32).
6539
6540     The STRING should be different for every file you compile.
6541
6542`-fsched-verbose=N'
6543     On targets that use instruction scheduling, this option controls
6544     the amount of debugging output the scheduler prints.  This
6545     information is written to standard error, unless
6546     `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which
6547     case it is output to the usual dump listing file, `.sched1' or
6548     `.sched2' respectively.  However for N greater than nine, the
6549     output is always printed to standard error.
6550
6551     For N greater than zero, `-fsched-verbose' outputs the same
6552     information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'.  For N
6553     greater than one, it also output basic block probabilities,
6554     detailed ready list information and unit/insn info.  For N greater
6555     than two, it includes RTL at abort point, control-flow and regions
6556     info.  And for N over four, `-fsched-verbose' also includes
6557     dependence info.
6558
6559`-save-temps'
6560`-save-temps=cwd'
6561     Store the usual "temporary" intermediate files permanently; place
6562     them in the current directory and name them based on the source
6563     file.  Thus, compiling `foo.c' with `-c -save-temps' produces files
6564     `foo.i' and `foo.s', as well as `foo.o'.  This creates a
6565     preprocessed `foo.i' output file even though the compiler now
6566     normally uses an integrated preprocessor.
6567
6568     When used in combination with the `-x' command-line option,
6569     `-save-temps' is sensible enough to avoid over writing an input
6570     source file with the same extension as an intermediate file.  The
6571     corresponding intermediate file may be obtained by renaming the
6572     source file before using `-save-temps'.
6573
6574     If you invoke GCC in parallel, compiling several different source
6575     files that share a common base name in different subdirectories or
6576     the same source file compiled for multiple output destinations, it
6577     is likely that the different parallel compilers will interfere
6578     with each other, and overwrite the temporary files.  For instance:
6579
6580          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
6581          gcc -save-temps -o outdir2/foo.o indir2/foo.c&
6582
6583     may result in `foo.i' and `foo.o' being written to simultaneously
6584     by both compilers.
6585
6586`-save-temps=obj'
6587     Store the usual "temporary" intermediate files permanently.  If the
6588     `-o' option is used, the temporary files are based on the object
6589     file.  If the `-o' option is not used, the `-save-temps=obj'
6590     switch behaves like `-save-temps'.
6591
6592     For example:
6593
6594          gcc -save-temps=obj -c foo.c
6595          gcc -save-temps=obj -c bar.c -o dir/xbar.o
6596          gcc -save-temps=obj foobar.c -o dir2/yfoobar
6597
6598     creates `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s',
6599     `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'.
6600
6601`-time[=FILE]'
6602     Report the CPU time taken by each subprocess in the compilation
6603     sequence.  For C source files, this is the compiler proper and
6604     assembler (plus the linker if linking is done).
6605
6606     Without the specification of an output file, the output looks like
6607     this:
6608
6609          # cc1 0.12 0.01
6610          # as 0.00 0.01
6611
6612     The first number on each line is the "user time", that is time
6613     spent executing the program itself.  The second number is "system
6614     time", time spent executing operating system routines on behalf of
6615     the program.  Both numbers are in seconds.
6616
6617     With the specification of an output file, the output is appended
6618     to the named file, and it looks like this:
6619
6620          0.12 0.01 cc1 OPTIONS
6621          0.00 0.01 as OPTIONS
6622
6623     The "user time" and the "system time" are moved before the program
6624     name, and the options passed to the program are displayed, so that
6625     one can later tell what file was being compiled, and with which
6626     options.
6627
6628`-fvar-tracking'
6629     Run variable tracking pass.  It computes where variables are
6630     stored at each position in code.  Better debugging information is
6631     then generated (if the debugging information format supports this
6632     information).
6633
6634     It is enabled by default when compiling with optimization (`-Os',
6635     `-O', `-O2', ...), debugging information (`-g') and the debug info
6636     format supports it.
6637
6638`-fvar-tracking-assignments'
6639     Annotate assignments to user variables early in the compilation and
6640     attempt to carry the annotations over throughout the compilation
6641     all the way to the end, in an attempt to improve debug information
6642     while optimizing.  Use of `-gdwarf-4' is recommended along with it.
6643
6644     It can be enabled even if var-tracking is disabled, in which case
6645     annotations are created and maintained, but discarded at the end.
6646     By default, this flag is enabled together with `-fvar-tracking',
6647     except when selective scheduling is enabled.
6648
6649`-fvar-tracking-assignments-toggle'
6650     Toggle `-fvar-tracking-assignments', in the same way that
6651     `-gtoggle' toggles `-g'.
6652
6653`-print-file-name=LIBRARY'
6654     Print the full absolute name of the library file LIBRARY that
6655     would be used when linking--and don't do anything else.  With this
6656     option, GCC does not compile or link anything; it just prints the
6657     file name.
6658
6659`-print-multi-directory'
6660     Print the directory name corresponding to the multilib selected by
6661     any other switches present in the command line.  This directory is
6662     supposed to exist in `GCC_EXEC_PREFIX'.
6663
6664`-print-multi-lib'
6665     Print the mapping from multilib directory names to compiler
6666     switches that enable them.  The directory name is separated from
6667     the switches by `;', and each switch starts with an `@' instead of
6668     the `-', without spaces between multiple switches.  This is
6669     supposed to ease shell processing.
6670
6671`-print-multi-os-directory'
6672     Print the path to OS libraries for the selected multilib, relative
6673     to some `lib' subdirectory.  If OS libraries are present in the
6674     `lib' subdirectory and no multilibs are used, this is usually just
6675     `.', if OS libraries are present in `libSUFFIX' sibling
6676     directories this prints e.g. `../lib64', `../lib' or `../lib32',
6677     or if OS libraries are present in `lib/SUBDIR' subdirectories it
6678     prints e.g. `amd64', `sparcv9' or `ev6'.
6679
6680`-print-multiarch'
6681     Print the path to OS libraries for the selected multiarch,
6682     relative to some `lib' subdirectory.
6683
6684`-print-prog-name=PROGRAM'
6685     Like `-print-file-name', but searches for a program such as `cpp'.
6686
6687`-print-libgcc-file-name'
6688     Same as `-print-file-name=libgcc.a'.
6689
6690     This is useful when you use `-nostdlib' or `-nodefaultlibs' but
6691     you do want to link with `libgcc.a'.  You can do:
6692
6693          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
6694
6695`-print-search-dirs'
6696     Print the name of the configured installation directory and a list
6697     of program and library directories `gcc' searches--and don't do
6698     anything else.
6699
6700     This is useful when `gcc' prints the error message `installation
6701     problem, cannot exec cpp0: No such file or directory'.  To resolve
6702     this you either need to put `cpp0' and the other compiler
6703     components where `gcc' expects to find them, or you can set the
6704     environment variable `GCC_EXEC_PREFIX' to the directory where you
6705     installed them.  Don't forget the trailing `/'.  *Note Environment
6706     Variables::.
6707
6708`-print-sysroot'
6709     Print the target sysroot directory that is used during
6710     compilation.  This is the target sysroot specified either at
6711     configure time or using the `--sysroot' option, possibly with an
6712     extra suffix that depends on compilation options.  If no target
6713     sysroot is specified, the option prints nothing.
6714
6715`-print-sysroot-headers-suffix'
6716     Print the suffix added to the target sysroot when searching for
6717     headers, or give an error if the compiler is not configured with
6718     such a suffix--and don't do anything else.
6719
6720`-dumpmachine'
6721     Print the compiler's target machine (for example,
6722     `i686-pc-linux-gnu')--and don't do anything else.
6723
6724`-dumpversion'
6725     Print the compiler version (for example, `3.0')--and don't do
6726     anything else.
6727
6728`-dumpspecs'
6729     Print the compiler's built-in specs--and don't do anything else.
6730     (This is used when GCC itself is being built.)  *Note Spec Files::.
6731
6732`-fno-eliminate-unused-debug-types'
6733     Normally, when producing DWARF 2 output, GCC avoids producing
6734     debug symbol output for types that are nowhere used in the source
6735     file being compiled.  Sometimes it is useful to have GCC emit
6736     debugging information for all types declared in a compilation
6737     unit, regardless of whether or not they are actually used in that
6738     compilation unit, for example if, in the debugger, you want to
6739     cast a value to a type that is not actually used in your program
6740     (but is declared).  More often, however, this results in a
6741     significant amount of wasted space.
6742
6743
6744File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
6745
67463.10 Options That Control Optimization
6747======================================
6748
6749These options control various sorts of optimizations.
6750
6751 Without any optimization option, the compiler's goal is to reduce the
6752cost of compilation and to make debugging produce the expected results.
6753Statements are independent: if you stop the program with a breakpoint
6754between statements, you can then assign a new value to any variable or
6755change the program counter to any other statement in the function and
6756get exactly the results you expect from the source code.
6757
6758 Turning on optimization flags makes the compiler attempt to improve
6759the performance and/or code size at the expense of compilation time and
6760possibly the ability to debug the program.
6761
6762 The compiler performs optimization based on the knowledge it has of the
6763program.  Compiling multiple files at once to a single output file mode
6764allows the compiler to use information gained from all of the files
6765when compiling each of them.
6766
6767 Not all optimizations are controlled directly by a flag.  Only
6768optimizations that have a flag are listed in this section.
6769
6770 Most optimizations are only enabled if an `-O' level is set on the
6771command line.  Otherwise they are disabled, even if individual
6772optimization flags are specified.
6773
6774 Depending on the target and how GCC was configured, a slightly
6775different set of optimizations may be enabled at each `-O' level than
6776those listed here.  You can invoke GCC with `-Q --help=optimizers' to
6777find out the exact set of optimizations that are enabled at each level.
6778*Note Overall Options::, for examples.
6779
6780`-O'
6781`-O1'
6782     Optimize.  Optimizing compilation takes somewhat more time, and a
6783     lot more memory for a large function.
6784
6785     With `-O', the compiler tries to reduce code size and execution
6786     time, without performing any optimizations that take a great deal
6787     of compilation time.
6788
6789     `-O' turns on the following optimization flags:
6790          -fauto-inc-dec
6791          -fbranch-count-reg
6792          -fcombine-stack-adjustments
6793          -fcompare-elim
6794          -fcprop-registers
6795          -fdce
6796          -fdefer-pop
6797          -fdelayed-branch
6798          -fdse
6799          -fforward-propagate
6800          -fguess-branch-probability
6801          -fif-conversion2
6802          -fif-conversion
6803          -finline-functions-called-once
6804          -fipa-pure-const
6805          -fipa-profile
6806          -fipa-reference
6807          -fmerge-constants
6808          -fmove-loop-invariants
6809          -fshrink-wrap
6810          -fsplit-wide-types
6811          -ftree-bit-ccp
6812          -ftree-ccp
6813          -fssa-phiopt
6814          -ftree-ch
6815          -ftree-copy-prop
6816          -ftree-copyrename
6817          -ftree-dce
6818          -ftree-dominator-opts
6819          -ftree-dse
6820          -ftree-forwprop
6821          -ftree-fre
6822          -ftree-phiprop
6823          -ftree-sink
6824          -ftree-slsr
6825          -ftree-sra
6826          -ftree-pta
6827          -ftree-ter
6828          -funit-at-a-time
6829
6830     `-O' also turns on `-fomit-frame-pointer' on machines where doing
6831     so does not interfere with debugging.
6832
6833`-O2'
6834     Optimize even more.  GCC performs nearly all supported
6835     optimizations that do not involve a space-speed tradeoff.  As
6836     compared to `-O', this option increases both compilation time and
6837     the performance of the generated code.
6838
6839     `-O2' turns on all optimization flags specified by `-O'.  It also
6840     turns on the following optimization flags:
6841          -fthread-jumps
6842          -falign-functions  -falign-jumps
6843          -falign-loops  -falign-labels
6844          -fcaller-saves
6845          -fcrossjumping
6846          -fcse-follow-jumps  -fcse-skip-blocks
6847          -fdelete-null-pointer-checks
6848          -fdevirtualize -fdevirtualize-speculatively
6849          -fexpensive-optimizations
6850          -fgcse  -fgcse-lm
6851          -fhoist-adjacent-loads
6852          -finline-small-functions
6853          -findirect-inlining
6854          -fipa-cp
6855          -fipa-cp-alignment
6856          -fipa-sra
6857          -fipa-icf
6858          -fisolate-erroneous-paths-dereference
6859          -flra-remat
6860          -foptimize-sibling-calls
6861          -foptimize-strlen
6862          -fpartial-inlining
6863          -fpeephole2
6864          -freorder-blocks -freorder-blocks-and-partition -freorder-functions
6865          -frerun-cse-after-loop
6866          -fsched-interblock  -fsched-spec
6867          -fschedule-insns  -fschedule-insns2
6868          -fstrict-aliasing -fstrict-overflow
6869          -ftree-builtin-call-dce
6870          -ftree-switch-conversion -ftree-tail-merge
6871          -ftree-pre
6872          -ftree-vrp
6873          -fipa-ra
6874
6875     Please note the warning under `-fgcse' about invoking `-O2' on
6876     programs that use computed gotos.
6877
6878`-O3'
6879     Optimize yet more.  `-O3' turns on all optimizations specified by
6880     `-O2' and also turns on the `-finline-functions',
6881     `-funswitch-loops', `-fpredictive-commoning',
6882     `-fgcse-after-reload', `-ftree-loop-vectorize',
6883     `-ftree-loop-distribute-patterns', `-ftree-slp-vectorize',
6884     `-fvect-cost-model', `-ftree-partial-pre' and `-fipa-cp-clone'
6885     options.
6886
6887`-O0'
6888     Reduce compilation time and make debugging produce the expected
6889     results.  This is the default.
6890
6891`-Os'
6892     Optimize for size.  `-Os' enables all `-O2' optimizations that do
6893     not typically increase code size.  It also performs further
6894     optimizations designed to reduce code size.
6895
6896     `-Os' disables the following optimization flags:
6897          -falign-functions  -falign-jumps  -falign-loops
6898          -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
6899          -fprefetch-loop-arrays
6900
6901`-Ofast'
6902     Disregard strict standards compliance.  `-Ofast' enables all `-O3'
6903     optimizations.  It also enables optimizations that are not valid
6904     for all standard-compliant programs.  It turns on `-ffast-math'
6905     and the Fortran-specific `-fno-protect-parens' and
6906     `-fstack-arrays'.
6907
6908`-Og'
6909     Optimize debugging experience.  `-Og' enables optimizations that
6910     do not interfere with debugging. It should be the optimization
6911     level of choice for the standard edit-compile-debug cycle, offering
6912     a reasonable level of optimization while maintaining fast
6913     compilation and a good debugging experience.
6914
6915     If you use multiple `-O' options, with or without level numbers,
6916     the last such option is the one that is effective.
6917
6918 Options of the form `-fFLAG' specify machine-independent flags.  Most
6919flags have both positive and negative forms; the negative form of
6920`-ffoo' is `-fno-foo'.  In the table below, only one of the forms is
6921listed--the one you typically use.  You can figure out the other form
6922by either removing `no-' or adding it.
6923
6924 The following options control specific optimizations.  They are either
6925activated by `-O' options or are related to ones that are.  You can use
6926the following flags in the rare cases when "fine-tuning" of
6927optimizations to be performed is desired.
6928
6929`-fno-defer-pop'
6930     Always pop the arguments to each function call as soon as that
6931     function returns.  For machines that must pop arguments after a
6932     function call, the compiler normally lets arguments accumulate on
6933     the stack for several function calls and pops them all at once.
6934
6935     Disabled at levels `-O', `-O2', `-O3', `-Os'.
6936
6937`-fforward-propagate'
6938     Perform a forward propagation pass on RTL.  The pass tries to
6939     combine two instructions and checks if the result can be
6940     simplified.  If loop unrolling is active, two passes are performed
6941     and the second is scheduled after loop unrolling.
6942
6943     This option is enabled by default at optimization levels `-O',
6944     `-O2', `-O3', `-Os'.
6945
6946`-ffp-contract=STYLE'
6947     `-ffp-contract=off' disables floating-point expression contraction.
6948     `-ffp-contract=fast' enables floating-point expression contraction
6949     such as forming of fused multiply-add operations if the target has
6950     native support for them.  `-ffp-contract=on' enables
6951     floating-point expression contraction if allowed by the language
6952     standard.  This is currently not implemented and treated equal to
6953     `-ffp-contract=off'.
6954
6955     The default is `-ffp-contract=fast'.
6956
6957`-fomit-frame-pointer'
6958     Don't keep the frame pointer in a register for functions that
6959     don't need one.  This avoids the instructions to save, set up and
6960     restore frame pointers; it also makes an extra register available
6961     in many functions.  *It also makes debugging impossible on some
6962     machines.*
6963
6964     On some machines, such as the VAX, this flag has no effect, because
6965     the standard calling sequence automatically handles the frame
6966     pointer and nothing is saved by pretending it doesn't exist.  The
6967     machine-description macro `FRAME_POINTER_REQUIRED' controls
6968     whether a target machine supports this flag.  *Note Register
6969     Usage: (gccint)Registers.
6970
6971     The default setting (when not optimizing for size) for 32-bit
6972     GNU/Linux x86 and 32-bit Darwin x86 targets is
6973     `-fomit-frame-pointer'.  You can configure GCC with the
6974     `--enable-frame-pointer' configure option to change the default.
6975
6976     Enabled at levels `-O', `-O2', `-O3', `-Os'.
6977
6978`-foptimize-sibling-calls'
6979     Optimize sibling and tail recursive calls.
6980
6981     Enabled at levels `-O2', `-O3', `-Os'.
6982
6983`-foptimize-strlen'
6984     Optimize various standard C string functions (e.g. `strlen',
6985     `strchr' or `strcpy') and their `_FORTIFY_SOURCE' counterparts
6986     into faster alternatives.
6987
6988     Enabled at levels `-O2', `-O3'.
6989
6990`-fno-inline'
6991     Do not expand any functions inline apart from those marked with
6992     the `always_inline' attribute.  This is the default when not
6993     optimizing.
6994
6995     Single functions can be exempted from inlining by marking them
6996     with the `noinline' attribute.
6997
6998`-finline-small-functions'
6999     Integrate functions into their callers when their body is smaller
7000     than expected function call code (so overall size of program gets
7001     smaller).  The compiler heuristically decides which functions are
7002     simple enough to be worth integrating in this way.  This inlining
7003     applies to all functions, even those not declared inline.
7004
7005     Enabled at level `-O2'.
7006
7007`-findirect-inlining'
7008     Inline also indirect calls that are discovered to be known at
7009     compile time thanks to previous inlining.  This option has any
7010     effect only when inlining itself is turned on by the
7011     `-finline-functions' or `-finline-small-functions' options.
7012
7013     Enabled at level `-O2'.
7014
7015`-finline-functions'
7016     Consider all functions for inlining, even if they are not declared
7017     inline.  The compiler heuristically decides which functions are
7018     worth integrating in this way.
7019
7020     If all calls to a given function are integrated, and the function
7021     is declared `static', then the function is normally not output as
7022     assembler code in its own right.
7023
7024     Enabled at level `-O3'.
7025
7026`-finline-functions-called-once'
7027     Consider all `static' functions called once for inlining into their
7028     caller even if they are not marked `inline'.  If a call to a given
7029     function is integrated, then the function is not output as
7030     assembler code in its own right.
7031
7032     Enabled at levels `-O1', `-O2', `-O3' and `-Os'.
7033
7034`-fearly-inlining'
7035     Inline functions marked by `always_inline' and functions whose
7036     body seems smaller than the function call overhead early before
7037     doing `-fprofile-generate' instrumentation and real inlining pass.
7038     Doing so makes profiling significantly cheaper and usually
7039     inlining faster on programs having large chains of nested wrapper
7040     functions.
7041
7042     Enabled by default.
7043
7044`-fipa-sra'
7045     Perform interprocedural scalar replacement of aggregates, removal
7046     of unused parameters and replacement of parameters passed by
7047     reference by parameters passed by value.
7048
7049     Enabled at levels `-O2', `-O3' and `-Os'.
7050
7051`-finline-limit=N'
7052     By default, GCC limits the size of functions that can be inlined.
7053     This flag allows coarse control of this limit.  N is the size of
7054     functions that can be inlined in number of pseudo instructions.
7055
7056     Inlining is actually controlled by a number of parameters, which
7057     may be specified individually by using `--param NAME=VALUE'.  The
7058     `-finline-limit=N' option sets some of these parameters as follows:
7059
7060    `max-inline-insns-single'
7061          is set to N/2.
7062
7063    `max-inline-insns-auto'
7064          is set to N/2.
7065
7066     See below for a documentation of the individual parameters
7067     controlling inlining and for the defaults of these parameters.
7068
7069     _Note:_ there may be no value to `-finline-limit' that results in
7070     default behavior.
7071
7072     _Note:_ pseudo instruction represents, in this particular context,
7073     an abstract measurement of function's size.  In no way does it
7074     represent a count of assembly instructions and as such its exact
7075     meaning might change from one release to an another.
7076
7077`-fno-keep-inline-dllexport'
7078     This is a more fine-grained version of `-fkeep-inline-functions',
7079     which applies only to functions that are declared using the
7080     `dllexport' attribute or declspec (*Note Declaring Attributes of
7081     Functions: Function Attributes.)
7082
7083`-fkeep-inline-functions'
7084     In C, emit `static' functions that are declared `inline' into the
7085     object file, even if the function has been inlined into all of its
7086     callers.  This switch does not affect functions using the `extern
7087     inline' extension in GNU C90.  In C++, emit any and all inline
7088     functions into the object file.
7089
7090`-fkeep-static-consts'
7091     Emit variables declared `static const' when optimization isn't
7092     turned on, even if the variables aren't referenced.
7093
7094     GCC enables this option by default.  If you want to force the
7095     compiler to check if a variable is referenced, regardless of
7096     whether or not optimization is turned on, use the
7097     `-fno-keep-static-consts' option.
7098
7099`-fmerge-constants'
7100     Attempt to merge identical constants (string constants and
7101     floating-point constants) across compilation units.
7102
7103     This option is the default for optimized compilation if the
7104     assembler and linker support it.  Use `-fno-merge-constants' to
7105     inhibit this behavior.
7106
7107     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7108
7109`-fmerge-all-constants'
7110     Attempt to merge identical constants and identical variables.
7111
7112     This option implies `-fmerge-constants'.  In addition to
7113     `-fmerge-constants' this considers e.g. even constant initialized
7114     arrays or initialized constant variables with integral or
7115     floating-point types.  Languages like C or C++ require each
7116     variable, including multiple instances of the same variable in
7117     recursive calls, to have distinct locations, so using this option
7118     results in non-conforming behavior.
7119
7120`-fmodulo-sched'
7121     Perform swing modulo scheduling immediately before the first
7122     scheduling pass.  This pass looks at innermost loops and reorders
7123     their instructions by overlapping different iterations.
7124
7125`-fmodulo-sched-allow-regmoves'
7126     Perform more aggressive SMS-based modulo scheduling with register
7127     moves allowed.  By setting this flag certain anti-dependences
7128     edges are deleted, which triggers the generation of reg-moves
7129     based on the life-range analysis.  This option is effective only
7130     with `-fmodulo-sched' enabled.
7131
7132`-fno-branch-count-reg'
7133     Do not use "decrement and branch" instructions on a count register,
7134     but instead generate a sequence of instructions that decrement a
7135     register, compare it against zero, then branch based upon the
7136     result.  This option is only meaningful on architectures that
7137     support such instructions, which include x86, PowerPC, IA-64 and
7138     S/390.
7139
7140     Enabled by default at `-O1' and higher.
7141
7142     The default is `-fbranch-count-reg'.
7143
7144`-fno-function-cse'
7145     Do not put function addresses in registers; make each instruction
7146     that calls a constant function contain the function's address
7147     explicitly.
7148
7149     This option results in less efficient code, but some strange hacks
7150     that alter the assembler output may be confused by the
7151     optimizations performed when this option is not used.
7152
7153     The default is `-ffunction-cse'
7154
7155`-fno-zero-initialized-in-bss'
7156     If the target supports a BSS section, GCC by default puts
7157     variables that are initialized to zero into BSS.  This can save
7158     space in the resulting code.
7159
7160     This option turns off this behavior because some programs
7161     explicitly rely on variables going to the data section--e.g., so
7162     that the resulting executable can find the beginning of that
7163     section and/or make assumptions based on that.
7164
7165     The default is `-fzero-initialized-in-bss'.
7166
7167`-fthread-jumps'
7168     Perform optimizations that check to see if a jump branches to a
7169     location where another comparison subsumed by the first is found.
7170     If so, the first branch is redirected to either the destination of
7171     the second branch or a point immediately following it, depending
7172     on whether the condition is known to be true or false.
7173
7174     Enabled at levels `-O2', `-O3', `-Os'.
7175
7176`-fsplit-wide-types'
7177     When using a type that occupies multiple registers, such as `long
7178     long' on a 32-bit system, split the registers apart and allocate
7179     them independently.  This normally generates better code for those
7180     types, but may make debugging more difficult.
7181
7182     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7183
7184`-fcse-follow-jumps'
7185     In common subexpression elimination (CSE), scan through jump
7186     instructions when the target of the jump is not reached by any
7187     other path.  For example, when CSE encounters an `if' statement
7188     with an `else' clause, CSE follows the jump when the condition
7189     tested is false.
7190
7191     Enabled at levels `-O2', `-O3', `-Os'.
7192
7193`-fcse-skip-blocks'
7194     This is similar to `-fcse-follow-jumps', but causes CSE to follow
7195     jumps that conditionally skip over blocks.  When CSE encounters a
7196     simple `if' statement with no else clause, `-fcse-skip-blocks'
7197     causes CSE to follow the jump around the body of the `if'.
7198
7199     Enabled at levels `-O2', `-O3', `-Os'.
7200
7201`-frerun-cse-after-loop'
7202     Re-run common subexpression elimination after loop optimizations
7203     are performed.
7204
7205     Enabled at levels `-O2', `-O3', `-Os'.
7206
7207`-fgcse'
7208     Perform a global common subexpression elimination pass.  This pass
7209     also performs global constant and copy propagation.
7210
7211     _Note:_ When compiling a program using computed gotos, a GCC
7212     extension, you may get better run-time performance if you disable
7213     the global common subexpression elimination pass by adding
7214     `-fno-gcse' to the command line.
7215
7216     Enabled at levels `-O2', `-O3', `-Os'.
7217
7218`-fgcse-lm'
7219     When `-fgcse-lm' is enabled, global common subexpression
7220     elimination attempts to move loads that are only killed by stores
7221     into themselves.  This allows a loop containing a load/store
7222     sequence to be changed to a load outside the loop, and a
7223     copy/store within the loop.
7224
7225     Enabled by default when `-fgcse' is enabled.
7226
7227`-fgcse-sm'
7228     When `-fgcse-sm' is enabled, a store motion pass is run after
7229     global common subexpression elimination.  This pass attempts to
7230     move stores out of loops.  When used in conjunction with
7231     `-fgcse-lm', loops containing a load/store sequence can be changed
7232     to a load before the loop and a store after the loop.
7233
7234     Not enabled at any optimization level.
7235
7236`-fgcse-las'
7237     When `-fgcse-las' is enabled, the global common subexpression
7238     elimination pass eliminates redundant loads that come after stores
7239     to the same memory location (both partial and full redundancies).
7240
7241     Not enabled at any optimization level.
7242
7243`-fgcse-after-reload'
7244     When `-fgcse-after-reload' is enabled, a redundant load elimination
7245     pass is performed after reload.  The purpose of this pass is to
7246     clean up redundant spilling.
7247
7248`-faggressive-loop-optimizations'
7249     This option tells the loop optimizer to use language constraints to
7250     derive bounds for the number of iterations of a loop.  This
7251     assumes that loop code does not invoke undefined behavior by for
7252     example causing signed integer overflows or out-of-bound array
7253     accesses.  The bounds for the number of iterations of a loop are
7254     used to guide loop unrolling and peeling and loop exit test
7255     optimizations.  This option is enabled by default.
7256
7257`-funsafe-loop-optimizations'
7258     This option tells the loop optimizer to assume that loop indices
7259     do not overflow, and that loops with nontrivial exit condition are
7260     not infinite.  This enables a wider range of loop optimizations
7261     even if the loop optimizer itself cannot prove that these
7262     assumptions are valid.  If you use `-Wunsafe-loop-optimizations',
7263     the compiler warns you if it finds this kind of loop.
7264
7265`-fcrossjumping'
7266     Perform cross-jumping transformation.  This transformation unifies
7267     equivalent code and saves code size.  The resulting code may or
7268     may not perform better than without cross-jumping.
7269
7270     Enabled at levels `-O2', `-O3', `-Os'.
7271
7272`-fauto-inc-dec'
7273     Combine increments or decrements of addresses with memory accesses.
7274     This pass is always skipped on architectures that do not have
7275     instructions to support this.  Enabled by default at `-O' and
7276     higher on architectures that support this.
7277
7278`-fdce'
7279     Perform dead code elimination (DCE) on RTL.  Enabled by default at
7280     `-O' and higher.
7281
7282`-fdse'
7283     Perform dead store elimination (DSE) on RTL.  Enabled by default
7284     at `-O' and higher.
7285
7286`-fif-conversion'
7287     Attempt to transform conditional jumps into branch-less
7288     equivalents.  This includes use of conditional moves, min, max,
7289     set flags and abs instructions, and some tricks doable by standard
7290     arithmetics.  The use of conditional execution on chips where it
7291     is available is controlled by `-fif-conversion2'.
7292
7293     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7294
7295`-fif-conversion2'
7296     Use conditional execution (where available) to transform
7297     conditional jumps into branch-less equivalents.
7298
7299     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7300
7301`-fdeclone-ctor-dtor'
7302     The C++ ABI requires multiple entry points for constructors and
7303     destructors: one for a base subobject, one for a complete object,
7304     and one for a virtual destructor that calls operator delete
7305     afterwards.  For a hierarchy with virtual bases, the base and
7306     complete variants are clones, which means two copies of the
7307     function.  With this option, the base and complete variants are
7308     changed to be thunks that call a common implementation.
7309
7310     Enabled by `-Os'.
7311
7312`-fdelete-null-pointer-checks'
7313     Assume that programs cannot safely dereference null pointers, and
7314     that no code or data element resides there.  This enables simple
7315     constant folding optimizations at all optimization levels.  In
7316     addition, other optimization passes in GCC use this flag to
7317     control global dataflow analyses that eliminate useless checks for
7318     null pointers; these assume that if a pointer is checked after it
7319     has already been dereferenced, it cannot be null.
7320
7321     Note however that in some environments this assumption is not true.
7322     Use `-fno-delete-null-pointer-checks' to disable this optimization
7323     for programs that depend on that behavior.
7324
7325     Some targets, especially embedded ones, disable this option at all
7326     levels.  Otherwise it is enabled at all levels: `-O0', `-O1',
7327     `-O2', `-O3', `-Os'.  Passes that use the information are enabled
7328     independently at different optimization levels.
7329
7330`-fdevirtualize'
7331     Attempt to convert calls to virtual functions to direct calls.
7332     This is done both within a procedure and interprocedurally as part
7333     of indirect inlining (`-findirect-inlining') and interprocedural
7334     constant propagation (`-fipa-cp').  Enabled at levels `-O2',
7335     `-O3', `-Os'.
7336
7337`-fdevirtualize-speculatively'
7338     Attempt to convert calls to virtual functions to speculative
7339     direct calls.  Based on the analysis of the type inheritance
7340     graph, determine for a given call the set of likely targets. If
7341     the set is small, preferably of size 1, change the call into a
7342     conditional deciding between direct and indirect calls.  The
7343     speculative calls enable more optimizations, such as inlining.
7344     When they seem useless after further optimization, they are
7345     converted back into original form.
7346
7347`-fdevirtualize-at-ltrans'
7348     Stream extra information needed for aggressive devirtualization
7349     when running the link-time optimizer in local transformation mode.
7350     This option enables more devirtualization but significantly
7351     increases the size of streamed data. For this reason it is
7352     disabled by default.
7353
7354`-fexpensive-optimizations'
7355     Perform a number of minor optimizations that are relatively
7356     expensive.
7357
7358     Enabled at levels `-O2', `-O3', `-Os'.
7359
7360`-free'
7361     Attempt to remove redundant extension instructions.  This is
7362     especially helpful for the x86-64 architecture, which implicitly
7363     zero-extends in 64-bit registers after writing to their lower
7364     32-bit half.
7365
7366     Enabled for Alpha, AArch64 and x86 at levels `-O2', `-O3', `-Os'.
7367
7368`-fno-lifetime-dse'
7369     In C++ the value of an object is only affected by changes within
7370     its lifetime: when the constructor begins, the object has an
7371     indeterminate value, and any changes during the lifetime of the
7372     object are dead when the object is destroyed.  Normally dead store
7373     elimination will take advantage of this; if your code relies on
7374     the value of the object storage persisting beyond the lifetime of
7375     the object, you can use this flag to disable this optimization.
7376
7377`-flive-range-shrinkage'
7378     Attempt to decrease register pressure through register live range
7379     shrinkage.  This is helpful for fast processors with small or
7380     moderate size register sets.
7381
7382`-fira-algorithm=ALGORITHM'
7383     Use the specified coloring algorithm for the integrated register
7384     allocator.  The ALGORITHM argument can be `priority', which
7385     specifies Chow's priority coloring, or `CB', which specifies
7386     Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
7387     implemented for all architectures, but for those targets that do
7388     support it, it is the default because it generates better code.
7389
7390`-fira-region=REGION'
7391     Use specified regions for the integrated register allocator.  The
7392     REGION argument should be one of the following:
7393
7394    `all'
7395          Use all loops as register allocation regions.  This can give
7396          the best results for machines with a small and/or irregular
7397          register set.
7398
7399    `mixed'
7400          Use all loops except for loops with small register pressure
7401          as the regions.  This value usually gives the best results in
7402          most cases and for most architectures, and is enabled by
7403          default when compiling with optimization for speed (`-O',
7404          `-O2', ...).
7405
7406    `one'
7407          Use all functions as a single region.  This typically results
7408          in the smallest code size, and is enabled by default for
7409          `-Os' or `-O0'.
7410
7411
7412`-fira-hoist-pressure'
7413     Use IRA to evaluate register pressure in the code hoisting pass for
7414     decisions to hoist expressions.  This option usually results in
7415     smaller code, but it can slow the compiler down.
7416
7417     This option is enabled at level `-Os' for all targets.
7418
7419`-fira-loop-pressure'
7420     Use IRA to evaluate register pressure in loops for decisions to
7421     move loop invariants.  This option usually results in generation
7422     of faster and smaller code on machines with large register files
7423     (>= 32 registers), but it can slow the compiler down.
7424
7425     This option is enabled at level `-O3' for some targets.
7426
7427`-fno-ira-share-save-slots'
7428     Disable sharing of stack slots used for saving call-used hard
7429     registers living through a call.  Each hard register gets a
7430     separate stack slot, and as a result function stack frames are
7431     larger.
7432
7433`-fno-ira-share-spill-slots'
7434     Disable sharing of stack slots allocated for pseudo-registers.
7435     Each pseudo-register that does not get a hard register gets a
7436     separate stack slot, and as a result function stack frames are
7437     larger.
7438
7439`-fira-verbose=N'
7440     Control the verbosity of the dump file for the integrated register
7441     allocator.  The default value is 5.  If the value N is greater or
7442     equal to 10, the dump output is sent to stderr using the same
7443     format as N minus 10.
7444
7445`-flra-remat'
7446     Enable CFG-sensitive rematerialization in LRA.  Instead of loading
7447     values of spilled pseudos, LRA tries to rematerialize (recalculate)
7448     values if it is profitable.
7449
7450     Enabled at levels `-O2', `-O3', `-Os'.
7451
7452`-fdelayed-branch'
7453     If supported for the target machine, attempt to reorder
7454     instructions to exploit instruction slots available after delayed
7455     branch instructions.
7456
7457     Enabled at levels `-O', `-O2', `-O3', `-Os'.
7458
7459`-fschedule-insns'
7460     If supported for the target machine, attempt to reorder
7461     instructions to eliminate execution stalls due to required data
7462     being unavailable.  This helps machines that have slow floating
7463     point or memory load instructions by allowing other instructions
7464     to be issued until the result of the load or floating-point
7465     instruction is required.
7466
7467     Enabled at levels `-O2', `-O3'.
7468
7469`-fschedule-insns2'
7470     Similar to `-fschedule-insns', but requests an additional pass of
7471     instruction scheduling after register allocation has been done.
7472     This is especially useful on machines with a relatively small
7473     number of registers and where memory load instructions take more
7474     than one cycle.
7475
7476     Enabled at levels `-O2', `-O3', `-Os'.
7477
7478`-fno-sched-interblock'
7479     Don't schedule instructions across basic blocks.  This is normally
7480     enabled by default when scheduling before register allocation, i.e.
7481     with `-fschedule-insns' or at `-O2' or higher.
7482
7483`-fno-sched-spec'
7484     Don't allow speculative motion of non-load instructions.  This is
7485     normally enabled by default when scheduling before register
7486     allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
7487
7488`-fsched-pressure'
7489     Enable register pressure sensitive insn scheduling before register
7490     allocation.  This only makes sense when scheduling before register
7491     allocation is enabled, i.e. with `-fschedule-insns' or at `-O2' or
7492     higher.  Usage of this option can improve the generated code and
7493     decrease its size by preventing register pressure increase above
7494     the number of available hard registers and subsequent spills in
7495     register allocation.
7496
7497`-fsched-spec-load'
7498     Allow speculative motion of some load instructions.  This only
7499     makes sense when scheduling before register allocation, i.e. with
7500     `-fschedule-insns' or at `-O2' or higher.
7501
7502`-fsched-spec-load-dangerous'
7503     Allow speculative motion of more load instructions.  This only
7504     makes sense when scheduling before register allocation, i.e. with
7505     `-fschedule-insns' or at `-O2' or higher.
7506
7507`-fsched-stalled-insns'
7508`-fsched-stalled-insns=N'
7509     Define how many insns (if any) can be moved prematurely from the
7510     queue of stalled insns into the ready list during the second
7511     scheduling pass.  `-fno-sched-stalled-insns' means that no insns
7512     are moved prematurely, `-fsched-stalled-insns=0' means there is no
7513     limit on how many queued insns can be moved prematurely.
7514     `-fsched-stalled-insns' without a value is equivalent to
7515     `-fsched-stalled-insns=1'.
7516
7517`-fsched-stalled-insns-dep'
7518`-fsched-stalled-insns-dep=N'
7519     Define how many insn groups (cycles) are examined for a dependency
7520     on a stalled insn that is a candidate for premature removal from
7521     the queue of stalled insns.  This has an effect only during the
7522     second scheduling pass, and only if `-fsched-stalled-insns' is
7523     used.  `-fno-sched-stalled-insns-dep' is equivalent to
7524     `-fsched-stalled-insns-dep=0'.  `-fsched-stalled-insns-dep'
7525     without a value is equivalent to `-fsched-stalled-insns-dep=1'.
7526
7527`-fsched2-use-superblocks'
7528     When scheduling after register allocation, use superblock
7529     scheduling.  This allows motion across basic block boundaries,
7530     resulting in faster schedules.  This option is experimental, as
7531     not all machine descriptions used by GCC model the CPU closely
7532     enough to avoid unreliable results from the algorithm.
7533
7534     This only makes sense when scheduling after register allocation,
7535     i.e. with `-fschedule-insns2' or at `-O2' or higher.
7536
7537`-fsched-group-heuristic'
7538     Enable the group heuristic in the scheduler.  This heuristic favors
7539     the instruction that belongs to a schedule group.  This is enabled
7540     by default when scheduling is enabled, i.e. with `-fschedule-insns'
7541     or `-fschedule-insns2' or at `-O2' or higher.
7542
7543`-fsched-critical-path-heuristic'
7544     Enable the critical-path heuristic in the scheduler.  This
7545     heuristic favors instructions on the critical path.  This is
7546     enabled by default when scheduling is enabled, i.e. with
7547     `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher.
7548
7549`-fsched-spec-insn-heuristic'
7550     Enable the speculative instruction heuristic in the scheduler.
7551     This heuristic favors speculative instructions with greater
7552     dependency weakness.  This is enabled by default when scheduling
7553     is enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2'
7554     or at `-O2' or higher.
7555
7556`-fsched-rank-heuristic'
7557     Enable the rank heuristic in the scheduler.  This heuristic favors
7558     the instruction belonging to a basic block with greater size or
7559     frequency.  This is enabled by default when scheduling is enabled,
7560     i.e.  with `-fschedule-insns' or `-fschedule-insns2' or at `-O2'
7561     or higher.
7562
7563`-fsched-last-insn-heuristic'
7564     Enable the last-instruction heuristic in the scheduler.  This
7565     heuristic favors the instruction that is less dependent on the
7566     last instruction scheduled.  This is enabled by default when
7567     scheduling is enabled, i.e. with `-fschedule-insns' or
7568     `-fschedule-insns2' or at `-O2' or higher.
7569
7570`-fsched-dep-count-heuristic'
7571     Enable the dependent-count heuristic in the scheduler.  This
7572     heuristic favors the instruction that has more instructions
7573     depending on it.  This is enabled by default when scheduling is
7574     enabled, i.e.  with `-fschedule-insns' or `-fschedule-insns2' or
7575     at `-O2' or higher.
7576
7577`-freschedule-modulo-scheduled-loops'
7578     Modulo scheduling is performed before traditional scheduling.  If
7579     a loop is modulo scheduled, later scheduling passes may change its
7580     schedule.  Use this option to control that behavior.
7581
7582`-fselective-scheduling'
7583     Schedule instructions using selective scheduling algorithm.
7584     Selective scheduling runs instead of the first scheduler pass.
7585
7586`-fselective-scheduling2'
7587     Schedule instructions using selective scheduling algorithm.
7588     Selective scheduling runs instead of the second scheduler pass.
7589
7590`-fsel-sched-pipelining'
7591     Enable software pipelining of innermost loops during selective
7592     scheduling.  This option has no effect unless one of
7593     `-fselective-scheduling' or `-fselective-scheduling2' is turned on.
7594
7595`-fsel-sched-pipelining-outer-loops'
7596     When pipelining loops during selective scheduling, also pipeline
7597     outer loops.  This option has no effect unless
7598     `-fsel-sched-pipelining' is turned on.
7599
7600`-fsemantic-interposition'
7601     Some object formats, like ELF, allow interposing of symbols by the
7602     dynamic linker.  This means that for symbols exported from the
7603     DSO, the compiler cannot perform interprocedural propagation,
7604     inlining and other optimizations in anticipation that the function
7605     or variable in question may change. While this feature is useful,
7606     for example, to rewrite memory allocation functions by a debugging
7607     implementation, it is expensive in the terms of code quality.
7608     With `-fno-semantic-interposition' the compiler assumes that if
7609     interposition happens for functions the overwriting function will
7610     have precisely the same semantics (and side effects).  Similarly
7611     if interposition happens for variables, the constructor of the
7612     variable will be the same. The flag has no effect for functions
7613     explicitly declared inline (where it is never allowed for
7614     interposition to change semantics) and for symbols explicitly
7615     declared weak.
7616
7617`-fshrink-wrap'
7618     Emit function prologues only before parts of the function that
7619     need it, rather than at the top of the function.  This flag is
7620     enabled by default at `-O' and higher.
7621
7622`-fcaller-saves'
7623     Enable allocation of values to registers that are clobbered by
7624     function calls, by emitting extra instructions to save and restore
7625     the registers around such calls.  Such allocation is done only
7626     when it seems to result in better code.
7627
7628     This option is always enabled by default on certain machines,
7629     usually those which have no call-preserved registers to use
7630     instead.
7631
7632     Enabled at levels `-O2', `-O3', `-Os'.
7633
7634`-fcombine-stack-adjustments'
7635     Tracks stack adjustments (pushes and pops) and stack memory
7636     references and then tries to find ways to combine them.
7637
7638     Enabled by default at `-O1' and higher.
7639
7640`-fipa-ra'
7641     Use caller save registers for allocation if those registers are
7642     not used by any called function.  In that case it is not necessary
7643     to save and restore them around calls.  This is only possible if
7644     called functions are part of same compilation unit as current
7645     function and they are compiled before it.
7646
7647     Enabled at levels `-O2', `-O3', `-Os'.
7648
7649`-fconserve-stack'
7650     Attempt to minimize stack usage.  The compiler attempts to use less
7651     stack space, even if that makes the program slower.  This option
7652     implies setting the `large-stack-frame' parameter to 100 and the
7653     `large-stack-frame-growth' parameter to 400.
7654
7655`-ftree-reassoc'
7656     Perform reassociation on trees.  This flag is enabled by default
7657     at `-O' and higher.
7658
7659`-ftree-pre'
7660     Perform partial redundancy elimination (PRE) on trees.  This flag
7661     is enabled by default at `-O2' and `-O3'.
7662
7663`-ftree-partial-pre'
7664     Make partial redundancy elimination (PRE) more aggressive.  This
7665     flag is enabled by default at `-O3'.
7666
7667`-ftree-forwprop'
7668     Perform forward propagation on trees.  This flag is enabled by
7669     default at `-O' and higher.
7670
7671`-ftree-fre'
7672     Perform full redundancy elimination (FRE) on trees.  The difference
7673     between FRE and PRE is that FRE only considers expressions that
7674     are computed on all paths leading to the redundant computation.
7675     This analysis is faster than PRE, though it exposes fewer
7676     redundancies.  This flag is enabled by default at `-O' and higher.
7677
7678`-ftree-phiprop'
7679     Perform hoisting of loads from conditional pointers on trees.  This
7680     pass is enabled by default at `-O' and higher.
7681
7682`-fhoist-adjacent-loads'
7683     Speculatively hoist loads from both branches of an if-then-else if
7684     the loads are from adjacent locations in the same structure and
7685     the target architecture has a conditional move instruction.  This
7686     flag is enabled by default at `-O2' and higher.
7687
7688`-ftree-copy-prop'
7689     Perform copy propagation on trees.  This pass eliminates
7690     unnecessary copy operations.  This flag is enabled by default at
7691     `-O' and higher.
7692
7693`-fipa-pure-const'
7694     Discover which functions are pure or constant.  Enabled by default
7695     at `-O' and higher.
7696
7697`-fipa-reference'
7698     Discover which static variables do not escape the compilation unit.
7699     Enabled by default at `-O' and higher.
7700
7701`-fipa-pta'
7702     Perform interprocedural pointer analysis and interprocedural
7703     modification and reference analysis.  This option can cause
7704     excessive memory and compile-time usage on large compilation
7705     units.  It is not enabled by default at any optimization level.
7706
7707`-fipa-profile'
7708     Perform interprocedural profile propagation.  The functions called
7709     only from cold functions are marked as cold. Also functions
7710     executed once (such as `cold', `noreturn', static constructors or
7711     destructors) are identified. Cold functions and loop less parts of
7712     functions executed once are then optimized for size.  Enabled by
7713     default at `-O' and higher.
7714
7715`-fipa-cp'
7716     Perform interprocedural constant propagation.  This optimization
7717     analyzes the program to determine when values passed to functions
7718     are constants and then optimizes accordingly.  This optimization
7719     can substantially increase performance if the application has
7720     constants passed to functions.  This flag is enabled by default at
7721     `-O2', `-Os' and `-O3'.
7722
7723`-fipa-cp-clone'
7724     Perform function cloning to make interprocedural constant
7725     propagation stronger.  When enabled, interprocedural constant
7726     propagation performs function cloning when externally visible
7727     function can be called with constant arguments.  Because this
7728     optimization can create multiple copies of functions, it may
7729     significantly increase code size (see `--param
7730     ipcp-unit-growth=VALUE').  This flag is enabled by default at
7731     `-O3'.
7732
7733`-fipa-cp-alignment'
7734     When enabled, this optimization propagates alignment of function
7735     parameters to support better vectorization and string operations.
7736
7737     This flag is enabled by default at `-O2' and `-Os'.  It requires
7738     that `-fipa-cp' is enabled.
7739
7740`-fipa-icf'
7741     Perform Identical Code Folding for functions and read-only
7742     variables.  The optimization reduces code size and may disturb
7743     unwind stacks by replacing a function by equivalent one with a
7744     different name. The optimization works more effectively with link
7745     time optimization enabled.
7746
7747     Nevertheless the behavior is similar to Gold Linker ICF
7748     optimization, GCC ICF works on different levels and thus the
7749     optimizations are not same - there are equivalences that are found
7750     only by GCC and equivalences found only by Gold.
7751
7752     This flag is enabled by default at `-O2' and `-Os'.
7753
7754`-fisolate-erroneous-paths-dereference'
7755     Detect paths that trigger erroneous or undefined behavior due to
7756     dereferencing a null pointer.  Isolate those paths from the main
7757     control flow and turn the statement with erroneous or undefined
7758     behavior into a trap.  This flag is enabled by default at `-O2'
7759     and higher.
7760
7761`-fisolate-erroneous-paths-attribute'
7762     Detect paths that trigger erroneous or undefined behavior due a
7763     null value being used in a way forbidden by a `returns_nonnull' or
7764     `nonnull' attribute.  Isolate those paths from the main control
7765     flow and turn the statement with erroneous or undefined behavior
7766     into a trap.  This is not currently enabled, but may be enabled by
7767     `-O2' in the future.
7768
7769`-ftree-sink'
7770     Perform forward store motion  on trees.  This flag is enabled by
7771     default at `-O' and higher.
7772
7773`-ftree-bit-ccp'
7774     Perform sparse conditional bit constant propagation on trees and
7775     propagate pointer alignment information.  This pass only operates
7776     on local scalar variables and is enabled by default at `-O' and
7777     higher.  It requires that `-ftree-ccp' is enabled.
7778
7779`-ftree-ccp'
7780     Perform sparse conditional constant propagation (CCP) on trees.
7781     This pass only operates on local scalar variables and is enabled
7782     by default at `-O' and higher.
7783
7784`-fssa-phiopt'
7785     Perform pattern matching on SSA PHI nodes to optimize conditional
7786     code.  This pass is enabled by default at `-O' and higher.
7787
7788`-ftree-switch-conversion'
7789     Perform conversion of simple initializations in a switch to
7790     initializations from a scalar array.  This flag is enabled by
7791     default at `-O2' and higher.
7792
7793`-ftree-tail-merge'
7794     Look for identical code sequences.  When found, replace one with a
7795     jump to the other.  This optimization is known as tail merging or
7796     cross jumping.  This flag is enabled by default at `-O2' and
7797     higher.  The compilation time in this pass can be limited using
7798     `max-tail-merge-comparisons' parameter and
7799     `max-tail-merge-iterations' parameter.
7800
7801`-ftree-dce'
7802     Perform dead code elimination (DCE) on trees.  This flag is
7803     enabled by default at `-O' and higher.
7804
7805`-ftree-builtin-call-dce'
7806     Perform conditional dead code elimination (DCE) for calls to
7807     built-in functions that may set `errno' but are otherwise
7808     side-effect free.  This flag is enabled by default at `-O2' and
7809     higher if `-Os' is not also specified.
7810
7811`-ftree-dominator-opts'
7812     Perform a variety of simple scalar cleanups (constant/copy
7813     propagation, redundancy elimination, range propagation and
7814     expression simplification) based on a dominator tree traversal.
7815     This also performs jump threading (to reduce jumps to jumps). This
7816     flag is enabled by default at `-O' and higher.
7817
7818`-ftree-dse'
7819     Perform dead store elimination (DSE) on trees.  A dead store is a
7820     store into a memory location that is later overwritten by another
7821     store without any intervening loads.  In this case the earlier
7822     store can be deleted.  This flag is enabled by default at `-O' and
7823     higher.
7824
7825`-ftree-ch'
7826     Perform loop header copying on trees.  This is beneficial since it
7827     increases effectiveness of code motion optimizations.  It also
7828     saves one jump.  This flag is enabled by default at `-O' and
7829     higher.  It is not enabled for `-Os', since it usually increases
7830     code size.
7831
7832`-ftree-loop-optimize'
7833     Perform loop optimizations on trees.  This flag is enabled by
7834     default at `-O' and higher.
7835
7836`-ftree-loop-linear'
7837     Perform loop interchange transformations on tree.  Same as
7838     `-floop-interchange'.  To use this code transformation, GCC has to
7839     be configured with `--with-isl' to enable the Graphite loop
7840     transformation infrastructure.
7841
7842`-floop-interchange'
7843     Perform loop interchange transformations on loops.  Interchanging
7844     two nested loops switches the inner and outer loops.  For example,
7845     given a loop like:
7846          DO J = 1, M
7847            DO I = 1, N
7848              A(J, I) = A(J, I) * C
7849            ENDDO
7850          ENDDO
7851     loop interchange transforms the loop as if it were written:
7852          DO I = 1, N
7853            DO J = 1, M
7854              A(J, I) = A(J, I) * C
7855            ENDDO
7856          ENDDO
7857     which can be beneficial when `N' is larger than the caches,
7858     because in Fortran, the elements of an array are stored in memory
7859     contiguously by column, and the original loop iterates over rows,
7860     potentially creating at each access a cache miss.  This
7861     optimization applies to all the languages supported by GCC and is
7862     not limited to Fortran.  To use this code transformation, GCC has
7863     to be configured with `--with-isl' to enable the Graphite loop
7864     transformation infrastructure.
7865
7866`-floop-strip-mine'
7867     Perform loop strip mining transformations on loops.  Strip mining
7868     splits a loop into two nested loops.  The outer loop has strides
7869     equal to the strip size and the inner loop has strides of the
7870     original loop within a strip.  The strip length can be changed
7871     using the `loop-block-tile-size' parameter.  For example, given a
7872     loop like:
7873          DO I = 1, N
7874            A(I) = A(I) + C
7875          ENDDO
7876     loop strip mining transforms the loop as if it were written:
7877          DO II = 1, N, 51
7878            DO I = II, min (II + 50, N)
7879              A(I) = A(I) + C
7880            ENDDO
7881          ENDDO
7882     This optimization applies to all the languages supported by GCC
7883     and is not limited to Fortran.  To use this code transformation,
7884     GCC has to be configured with `--with-isl' to enable the Graphite
7885     loop transformation infrastructure.
7886
7887`-floop-block'
7888     Perform loop blocking transformations on loops.  Blocking strip
7889     mines each loop in the loop nest such that the memory accesses of
7890     the element loops fit inside caches.  The strip length can be
7891     changed using the `loop-block-tile-size' parameter.  For example,
7892     given a loop like:
7893          DO I = 1, N
7894            DO J = 1, M
7895              A(J, I) = B(I) + C(J)
7896            ENDDO
7897          ENDDO
7898     loop blocking transforms the loop as if it were written:
7899          DO II = 1, N, 51
7900            DO JJ = 1, M, 51
7901              DO I = II, min (II + 50, N)
7902                DO J = JJ, min (JJ + 50, M)
7903                  A(J, I) = B(I) + C(J)
7904                ENDDO
7905              ENDDO
7906            ENDDO
7907          ENDDO
7908     which can be beneficial when `M' is larger than the caches,
7909     because the innermost loop iterates over a smaller amount of data
7910     which can be kept in the caches.  This optimization applies to all
7911     the languages supported by GCC and is not limited to Fortran.  To
7912     use this code transformation, GCC has to be configured with
7913     `--with-isl' to enable the Graphite loop transformation
7914     infrastructure.
7915
7916`-fgraphite-identity'
7917     Enable the identity transformation for graphite.  For every SCoP
7918     we generate the polyhedral representation and transform it back to
7919     gimple.  Using `-fgraphite-identity' we can check the costs or
7920     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
7921     minimal optimizations are also performed by the code generator
7922     ISL, like index splitting and dead code elimination in loops.
7923
7924`-floop-nest-optimize'
7925     Enable the ISL based loop nest optimizer.  This is a generic loop
7926     nest optimizer based on the Pluto optimization algorithms.  It
7927     calculates a loop structure optimized for data-locality and
7928     parallelism.  This option is experimental.
7929
7930`-floop-unroll-and-jam'
7931     Enable unroll and jam for the ISL based loop nest optimizer.  The
7932     unroll factor can be changed using the `loop-unroll-jam-size'
7933     parameter.  The unrolled dimension (counting from the most inner
7934     one) can be changed using the `loop-unroll-jam-depth' parameter.
7935                  .
7936
7937`-floop-parallelize-all'
7938     Use the Graphite data dependence analysis to identify loops that
7939     can be parallelized.  Parallelize all the loops that can be
7940     analyzed to not contain loop carried dependences without checking
7941     that it is profitable to parallelize the loops.
7942
7943`-fcheck-data-deps'
7944     Compare the results of several data dependence analyzers.  This
7945     option is used for debugging the data dependence analyzers.
7946
7947`-ftree-loop-if-convert'
7948     Attempt to transform conditional jumps in the innermost loops to
7949     branch-less equivalents.  The intent is to remove control-flow from
7950     the innermost loops in order to improve the ability of the
7951     vectorization pass to handle these loops.  This is enabled by
7952     default if vectorization is enabled.
7953
7954`-ftree-loop-if-convert-stores'
7955     Attempt to also if-convert conditional jumps containing memory
7956     writes.  This transformation can be unsafe for multi-threaded
7957     programs as it transforms conditional memory writes into
7958     unconditional memory writes.  For example,
7959          for (i = 0; i < N; i++)
7960            if (cond)
7961              A[i] = expr;
7962     is transformed to
7963          for (i = 0; i < N; i++)
7964            A[i] = cond ? expr : A[i];
7965     potentially producing data races.
7966
7967`-ftree-loop-distribution'
7968     Perform loop distribution.  This flag can improve cache
7969     performance on big loop bodies and allow further loop
7970     optimizations, like parallelization or vectorization, to take
7971     place.  For example, the loop
7972          DO I = 1, N
7973            A(I) = B(I) + C
7974            D(I) = E(I) * F
7975          ENDDO
7976     is transformed to
7977          DO I = 1, N
7978             A(I) = B(I) + C
7979          ENDDO
7980          DO I = 1, N
7981             D(I) = E(I) * F
7982          ENDDO
7983
7984`-ftree-loop-distribute-patterns'
7985     Perform loop distribution of patterns that can be code generated
7986     with calls to a library.  This flag is enabled by default at `-O3'.
7987
7988     This pass distributes the initialization loops and generates a
7989     call to memset zero.  For example, the loop
7990          DO I = 1, N
7991            A(I) = 0
7992            B(I) = A(I) + I
7993          ENDDO
7994     is transformed to
7995          DO I = 1, N
7996             A(I) = 0
7997          ENDDO
7998          DO I = 1, N
7999             B(I) = A(I) + I
8000          ENDDO
8001     and the initialization loop is transformed into a call to memset
8002     zero.
8003
8004`-ftree-loop-im'
8005     Perform loop invariant motion on trees.  This pass moves only
8006     invariants that are hard to handle at RTL level (function calls,
8007     operations that expand to nontrivial sequences of insns).  With
8008     `-funswitch-loops' it also moves operands of conditions that are
8009     invariant out of the loop, so that we can use just trivial
8010     invariantness analysis in loop unswitching.  The pass also includes
8011     store motion.
8012
8013`-ftree-loop-ivcanon'
8014     Create a canonical counter for number of iterations in loops for
8015     which determining number of iterations requires complicated
8016     analysis.  Later optimizations then may determine the number
8017     easily.  Useful especially in connection with unrolling.
8018
8019`-fivopts'
8020     Perform induction variable optimizations (strength reduction,
8021     induction variable merging and induction variable elimination) on
8022     trees.
8023
8024`-ftree-parallelize-loops=n'
8025     Parallelize loops, i.e., split their iteration space to run in n
8026     threads.  This is only possible for loops whose iterations are
8027     independent and can be arbitrarily reordered.  The optimization is
8028     only profitable on multiprocessor machines, for loops that are
8029     CPU-intensive, rather than constrained e.g. by memory bandwidth.
8030     This option implies `-pthread', and thus is only supported on
8031     targets that have support for `-pthread'.
8032
8033`-ftree-pta'
8034     Perform function-local points-to analysis on trees.  This flag is
8035     enabled by default at `-O' and higher.
8036
8037`-ftree-sra'
8038     Perform scalar replacement of aggregates.  This pass replaces
8039     structure references with scalars to prevent committing structures
8040     to memory too early.  This flag is enabled by default at `-O' and
8041     higher.
8042
8043`-ftree-copyrename'
8044     Perform copy renaming on trees.  This pass attempts to rename
8045     compiler temporaries to other variables at copy locations, usually
8046     resulting in variable names which more closely resemble the
8047     original variables.  This flag is enabled by default at `-O' and
8048     higher.
8049
8050`-ftree-coalesce-inlined-vars'
8051     Tell the copyrename pass (see `-ftree-copyrename') to attempt to
8052     combine small user-defined variables too, but only if they are
8053     inlined from other functions.  It is a more limited form of
8054     `-ftree-coalesce-vars'.  This may harm debug information of such
8055     inlined variables, but it keeps variables of the inlined-into
8056     function apart from each other, such that they are more likely to
8057     contain the expected values in a debugging session.
8058
8059`-ftree-coalesce-vars'
8060     Tell the copyrename pass (see `-ftree-copyrename') to attempt to
8061     combine small user-defined variables too, instead of just compiler
8062     temporaries.  This may severely limit the ability to debug an
8063     optimized program compiled with `-fno-var-tracking-assignments'.
8064     In the negated form, this flag prevents SSA coalescing of user
8065     variables, including inlined ones.  This option is enabled by
8066     default.
8067
8068`-ftree-ter'
8069     Perform temporary expression replacement during the SSA->normal
8070     phase.  Single use/single def temporaries are replaced at their
8071     use location with their defining expression.  This results in
8072     non-GIMPLE code, but gives the expanders much more complex trees
8073     to work on resulting in better RTL generation.  This is enabled by
8074     default at `-O' and higher.
8075
8076`-ftree-slsr'
8077     Perform straight-line strength reduction on trees.  This
8078     recognizes related expressions involving multiplications and
8079     replaces them by less expensive calculations when possible.  This
8080     is enabled by default at `-O' and higher.
8081
8082`-ftree-vectorize'
8083     Perform vectorization on trees. This flag enables
8084     `-ftree-loop-vectorize' and `-ftree-slp-vectorize' if not
8085     explicitly specified.
8086
8087`-ftree-loop-vectorize'
8088     Perform loop vectorization on trees. This flag is enabled by
8089     default at `-O3' and when `-ftree-vectorize' is enabled.
8090
8091`-ftree-slp-vectorize'
8092     Perform basic block vectorization on trees. This flag is enabled
8093     by default at `-O3' and when `-ftree-vectorize' is enabled.
8094
8095`-fvect-cost-model=MODEL'
8096     Alter the cost model used for vectorization.  The MODEL argument
8097     should be one of `unlimited', `dynamic' or `cheap'.  With the
8098     `unlimited' model the vectorized code-path is assumed to be
8099     profitable while with the `dynamic' model a runtime check guards
8100     the vectorized code-path to enable it only for iteration counts
8101     that will likely execute faster than when executing the original
8102     scalar loop.  The `cheap' model disables vectorization of loops
8103     where doing so would be cost prohibitive for example due to
8104     required runtime checks for data dependence or alignment but
8105     otherwise is equal to the `dynamic' model.  The default cost model
8106     depends on other optimization flags and is either `dynamic' or
8107     `cheap'.
8108
8109`-fsimd-cost-model=MODEL'
8110     Alter the cost model used for vectorization of loops marked with
8111     the OpenMP or Cilk Plus simd directive.  The MODEL argument should
8112     be one of `unlimited', `dynamic', `cheap'.  All values of MODEL
8113     have the same meaning as described in `-fvect-cost-model' and by
8114     default a cost model defined with `-fvect-cost-model' is used.
8115
8116`-ftree-vrp'
8117     Perform Value Range Propagation on trees.  This is similar to the
8118     constant propagation pass, but instead of values, ranges of values
8119     are propagated.  This allows the optimizers to remove unnecessary
8120     range checks like array bound checks and null pointer checks.
8121     This is enabled by default at `-O2' and higher.  Null pointer check
8122     elimination is only done if `-fdelete-null-pointer-checks' is
8123     enabled.
8124
8125`-fsplit-ivs-in-unroller'
8126     Enables expression of values of induction variables in later
8127     iterations of the unrolled loop using the value in the first
8128     iteration.  This breaks long dependency chains, thus improving
8129     efficiency of the scheduling passes.
8130
8131     A combination of `-fweb' and CSE is often sufficient to obtain the
8132     same effect.  However, that is not reliable in cases where the
8133     loop body is more complicated than a single basic block.  It also
8134     does not work at all on some architectures due to restrictions in
8135     the CSE pass.
8136
8137     This optimization is enabled by default.
8138
8139`-fvariable-expansion-in-unroller'
8140     With this option, the compiler creates multiple copies of some
8141     local variables when unrolling a loop, which can result in
8142     superior code.
8143
8144`-fpartial-inlining'
8145     Inline parts of functions.  This option has any effect only when
8146     inlining itself is turned on by the `-finline-functions' or
8147     `-finline-small-functions' options.
8148
8149     Enabled at level `-O2'.
8150
8151`-fpredictive-commoning'
8152     Perform predictive commoning optimization, i.e., reusing
8153     computations (especially memory loads and stores) performed in
8154     previous iterations of loops.
8155
8156     This option is enabled at level `-O3'.
8157
8158`-fprefetch-loop-arrays'
8159     If supported by the target machine, generate instructions to
8160     prefetch memory to improve the performance of loops that access
8161     large arrays.
8162
8163     This option may generate better or worse code; results are highly
8164     dependent on the structure of loops within the source code.
8165
8166     Disabled at level `-Os'.
8167
8168`-fno-peephole'
8169`-fno-peephole2'
8170     Disable any machine-specific peephole optimizations.  The
8171     difference between `-fno-peephole' and `-fno-peephole2' is in how
8172     they are implemented in the compiler; some targets use one, some
8173     use the other, a few use both.
8174
8175     `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
8176     levels `-O2', `-O3', `-Os'.
8177
8178`-fno-guess-branch-probability'
8179     Do not guess branch probabilities using heuristics.
8180
8181     GCC uses heuristics to guess branch probabilities if they are not
8182     provided by profiling feedback (`-fprofile-arcs').  These
8183     heuristics are based on the control flow graph.  If some branch
8184     probabilities are specified by `__builtin_expect', then the
8185     heuristics are used to guess branch probabilities for the rest of
8186     the control flow graph, taking the `__builtin_expect' info into
8187     account.  The interactions between the heuristics and
8188     `__builtin_expect' can be complex, and in some cases, it may be
8189     useful to disable the heuristics so that the effects of
8190     `__builtin_expect' are easier to understand.
8191
8192     The default is `-fguess-branch-probability' at levels `-O', `-O2',
8193     `-O3', `-Os'.
8194
8195`-freorder-blocks'
8196     Reorder basic blocks in the compiled function in order to reduce
8197     number of taken branches and improve code locality.
8198
8199     Enabled at levels `-O2', `-O3'.
8200
8201`-freorder-blocks-and-partition'
8202     In addition to reordering basic blocks in the compiled function,
8203     in order to reduce number of taken branches, partitions hot and
8204     cold basic blocks into separate sections of the assembly and .o
8205     files, to improve paging and cache locality performance.
8206
8207     This optimization is automatically turned off in the presence of
8208     exception handling, for linkonce sections, for functions with a
8209     user-defined section attribute and on any architecture that does
8210     not support named sections.
8211
8212     Enabled for x86 at levels `-O2', `-O3'.
8213
8214`-freorder-functions'
8215     Reorder functions in the object file in order to improve code
8216     locality.  This is implemented by using special subsections
8217     `.text.hot' for most frequently executed functions and
8218     `.text.unlikely' for unlikely executed functions.  Reordering is
8219     done by the linker so object file format must support named
8220     sections and linker must place them in a reasonable way.
8221
8222     Also profile feedback must be available to make this option
8223     effective.  See `-fprofile-arcs' for details.
8224
8225     Enabled at levels `-O2', `-O3', `-Os'.
8226
8227`-fstrict-aliasing'
8228     Allow the compiler to assume the strictest aliasing rules
8229     applicable to the language being compiled.  For C (and C++), this
8230     activates optimizations based on the type of expressions.  In
8231     particular, an object of one type is assumed never to reside at
8232     the same address as an object of a different type, unless the
8233     types are almost the same.  For example, an `unsigned int' can
8234     alias an `int', but not a `void*' or a `double'.  A character type
8235     may alias any other type.
8236
8237     Pay special attention to code like this:
8238          union a_union {
8239            int i;
8240            double d;
8241          };
8242
8243          int f() {
8244            union a_union t;
8245            t.d = 3.0;
8246            return t.i;
8247          }
8248     The practice of reading from a different union member than the one
8249     most recently written to (called "type-punning") is common.  Even
8250     with `-fstrict-aliasing', type-punning is allowed, provided the
8251     memory is accessed through the union type.  So, the code above
8252     works as expected.  *Note Structures unions enumerations and
8253     bit-fields implementation::.  However, this code might not:
8254          int f() {
8255            union a_union t;
8256            int* ip;
8257            t.d = 3.0;
8258            ip = &t.i;
8259            return *ip;
8260          }
8261
8262     Similarly, access by taking the address, casting the resulting
8263     pointer and dereferencing the result has undefined behavior, even
8264     if the cast uses a union type, e.g.:
8265          int f() {
8266            double d = 3.0;
8267            return ((union a_union *) &d)->i;
8268          }
8269
8270     The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3',
8271     `-Os'.
8272
8273`-fstrict-overflow'
8274     Allow the compiler to assume strict signed overflow rules,
8275     depending on the language being compiled.  For C (and C++) this
8276     means that overflow when doing arithmetic with signed numbers is
8277     undefined, which means that the compiler may assume that it does
8278     not happen.  This permits various optimizations.  For example, the
8279     compiler assumes that an expression like `i + 10 > i' is always
8280     true for signed `i'.  This assumption is only valid if signed
8281     overflow is undefined, as the expression is false if `i + 10'
8282     overflows when using twos complement arithmetic.  When this option
8283     is in effect any attempt to determine whether an operation on
8284     signed numbers overflows must be written carefully to not actually
8285     involve overflow.
8286
8287     This option also allows the compiler to assume strict pointer
8288     semantics: given a pointer to an object, if adding an offset to
8289     that pointer does not produce a pointer to the same object, the
8290     addition is undefined.  This permits the compiler to conclude that
8291     `p + u > p' is always true for a pointer `p' and unsigned integer
8292     `u'.  This assumption is only valid because pointer wraparound is
8293     undefined, as the expression is false if `p + u' overflows using
8294     twos complement arithmetic.
8295
8296     See also the `-fwrapv' option.  Using `-fwrapv' means that integer
8297     signed overflow is fully defined: it wraps.  When `-fwrapv' is
8298     used, there is no difference between `-fstrict-overflow' and
8299     `-fno-strict-overflow' for integers.  With `-fwrapv' certain types
8300     of overflow are permitted.  For example, if the compiler gets an
8301     overflow when doing arithmetic on constants, the overflowed value
8302     can still be used with `-fwrapv', but not otherwise.
8303
8304     The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
8305     `-Os'.
8306
8307`-falign-functions'
8308`-falign-functions=N'
8309     Align the start of functions to the next power-of-two greater than
8310     N, skipping up to N bytes.  For instance, `-falign-functions=32'
8311     aligns functions to the next 32-byte boundary, but
8312     `-falign-functions=24' aligns to the next 32-byte boundary only if
8313     this can be done by skipping 23 bytes or less.
8314
8315     `-fno-align-functions' and `-falign-functions=1' are equivalent
8316     and mean that functions are not aligned.
8317
8318     Some assemblers only support this flag when N is a power of two;
8319     in that case, it is rounded up.
8320
8321     If N is not specified or is zero, use a machine-dependent default.
8322
8323     Enabled at levels `-O2', `-O3'.
8324
8325`-falign-labels'
8326`-falign-labels=N'
8327     Align all branch targets to a power-of-two boundary, skipping up to
8328     N bytes like `-falign-functions'.  This option can easily make
8329     code slower, because it must insert dummy operations for when the
8330     branch target is reached in the usual flow of the code.
8331
8332     `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
8333     that labels are not aligned.
8334
8335     If `-falign-loops' or `-falign-jumps' are applicable and are
8336     greater than this value, then their values are used instead.
8337
8338     If N is not specified or is zero, use a machine-dependent default
8339     which is very likely to be `1', meaning no alignment.
8340
8341     Enabled at levels `-O2', `-O3'.
8342
8343`-falign-loops'
8344`-falign-loops=N'
8345     Align loops to a power-of-two boundary, skipping up to N bytes
8346     like `-falign-functions'.  If the loops are executed many times,
8347     this makes up for any execution of the dummy operations.
8348
8349     `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
8350     that loops are not aligned.
8351
8352     If N is not specified or is zero, use a machine-dependent default.
8353
8354     Enabled at levels `-O2', `-O3'.
8355
8356`-falign-jumps'
8357`-falign-jumps=N'
8358     Align branch targets to a power-of-two boundary, for branch targets
8359     where the targets can only be reached by jumping, skipping up to N
8360     bytes like `-falign-functions'.  In this case, no dummy operations
8361     need be executed.
8362
8363     `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
8364     that loops are not aligned.
8365
8366     If N is not specified or is zero, use a machine-dependent default.
8367
8368     Enabled at levels `-O2', `-O3'.
8369
8370`-funit-at-a-time'
8371     This option is left for compatibility reasons. `-funit-at-a-time'
8372     has no effect, while `-fno-unit-at-a-time' implies
8373     `-fno-toplevel-reorder' and `-fno-section-anchors'.
8374
8375     Enabled by default.
8376
8377`-fno-toplevel-reorder'
8378     Do not reorder top-level functions, variables, and `asm'
8379     statements.  Output them in the same order that they appear in the
8380     input file.  When this option is used, unreferenced static
8381     variables are not removed.  This option is intended to support
8382     existing code that relies on a particular ordering.  For new code,
8383     it is better to use attributes when possible.
8384
8385     Enabled at level `-O0'.  When disabled explicitly, it also implies
8386     `-fno-section-anchors', which is otherwise enabled at `-O0' on some
8387     targets.
8388
8389`-fweb'
8390     Constructs webs as commonly used for register allocation purposes
8391     and assign each web individual pseudo register.  This allows the
8392     register allocation pass to operate on pseudos directly, but also
8393     strengthens several other optimization passes, such as CSE, loop
8394     optimizer and trivial dead code remover.  It can, however, make
8395     debugging impossible, since variables no longer stay in a "home
8396     register".
8397
8398     Enabled by default with `-funroll-loops'.
8399
8400`-fwhole-program'
8401     Assume that the current compilation unit represents the whole
8402     program being compiled.  All public functions and variables with
8403     the exception of `main' and those merged by attribute
8404     `externally_visible' become static functions and in effect are
8405     optimized more aggressively by interprocedural optimizers.
8406
8407     This option should not be used in combination with `-flto'.
8408     Instead relying on a linker plugin should provide safer and more
8409     precise information.
8410
8411`-flto[=N]'
8412     This option runs the standard link-time optimizer.  When invoked
8413     with source code, it generates GIMPLE (one of GCC's internal
8414     representations) and writes it to special ELF sections in the
8415     object file.  When the object files are linked together, all the
8416     function bodies are read from these ELF sections and instantiated
8417     as if they had been part of the same translation unit.
8418
8419     To use the link-time optimizer, `-flto' and optimization options
8420     should be specified at compile time and during the final link.
8421     For example:
8422
8423          gcc -c -O2 -flto foo.c
8424          gcc -c -O2 -flto bar.c
8425          gcc -o myprog -flto -O2 foo.o bar.o
8426
8427     The first two invocations to GCC save a bytecode representation of
8428     GIMPLE into special ELF sections inside `foo.o' and `bar.o'.  The
8429     final invocation reads the GIMPLE bytecode from `foo.o' and
8430     `bar.o', merges the two files into a single internal image, and
8431     compiles the result as usual.  Since both `foo.o' and `bar.o' are
8432     merged into a single image, this causes all the interprocedural
8433     analyses and optimizations in GCC to work across the two files as
8434     if they were a single one.  This means, for example, that the
8435     inliner is able to inline functions in `bar.o' into functions in
8436     `foo.o' and vice-versa.
8437
8438     Another (simpler) way to enable link-time optimization is:
8439
8440          gcc -o myprog -flto -O2 foo.c bar.c
8441
8442     The above generates bytecode for `foo.c' and `bar.c', merges them
8443     together into a single GIMPLE representation and optimizes them as
8444     usual to produce `myprog'.
8445
8446     The only important thing to keep in mind is that to enable
8447     link-time optimizations you need to use the GCC driver to perform
8448     the link-step.  GCC then automatically performs link-time
8449     optimization if any of the objects involved were compiled with the
8450     `-flto' command-line option.  You generally should specify the
8451     optimization options to be used for link-time optimization though
8452     GCC tries to be clever at guessing an optimization level to use
8453     from the options used at compile-time if you fail to specify one
8454     at link-time.  You can always override the automatic decision to
8455     do link-time optimization at link-time by passing `-fno-lto' to
8456     the link command.
8457
8458     To make whole program optimization effective, it is necessary to
8459     make certain whole program assumptions.  The compiler needs to know
8460     what functions and variables can be accessed by libraries and
8461     runtime outside of the link-time optimized unit.  When supported
8462     by the linker, the linker plugin (see `-fuse-linker-plugin')
8463     passes information to the compiler about used and externally
8464     visible symbols.  When the linker plugin is not available,
8465     `-fwhole-program' should be used to allow the compiler to make
8466     these assumptions, which leads to more aggressive optimization
8467     decisions.
8468
8469     When `-fuse-linker-plugin' is not enabled then, when a file is
8470     compiled with `-flto', the generated object file is larger than a
8471     regular object file because it contains GIMPLE bytecodes and the
8472     usual final code (see `-ffat-lto-objects'.  This means that object
8473     files with LTO information can be linked as normal object files;
8474     if `-fno-lto' is passed to the linker, no interprocedural
8475     optimizations are applied.  Note that when `-fno-fat-lto-objects'
8476     is enabled the compile-stage is faster but you cannot perform a
8477     regular, non-LTO link on them.
8478
8479     Additionally, the optimization flags used to compile individual
8480     files are not necessarily related to those used at link time.  For
8481     instance,
8482
8483          gcc -c -O0 -ffat-lto-objects -flto foo.c
8484          gcc -c -O0 -ffat-lto-objects -flto bar.c
8485          gcc -o myprog -O3 foo.o bar.o
8486
8487     This produces individual object files with unoptimized assembler
8488     code, but the resulting binary `myprog' is optimized at `-O3'.
8489     If, instead, the final binary is generated with `-fno-lto', then
8490     `myprog' is not optimized.
8491
8492     When producing the final binary, GCC only applies link-time
8493     optimizations to those files that contain bytecode.  Therefore,
8494     you can mix and match object files and libraries with GIMPLE
8495     bytecodes and final object code.  GCC automatically selects which
8496     files to optimize in LTO mode and which files to link without
8497     further processing.
8498
8499     There are some code generation flags preserved by GCC when
8500     generating bytecodes, as they need to be used during the final link
8501     stage.  Generally options specified at link-time override those
8502     specified at compile-time.
8503
8504     If you do not specify an optimization level option `-O' at
8505     link-time then GCC computes one based on the optimization levels
8506     used when compiling the object files.  The highest optimization
8507     level wins here.
8508
8509     Currently, the following options and their setting are take from
8510     the first object file that explicitely specified it: `-fPIC',
8511     `-fpic', `-fpie', `-fcommon', `-fexceptions',
8512     `-fnon-call-exceptions', `-fgnu-tm' and all the `-m' target flags.
8513
8514     Certain ABI changing flags are required to match in all
8515     compilation-units and trying to override this at link-time with a
8516     conflicting value is ignored.  This includes options such as
8517     `-freg-struct-return' and `-fpcc-struct-return'.
8518
8519     Other options such as `-ffp-contract', `-fno-strict-overflow',
8520     `-fwrapv', `-fno-trapv' or `-fno-strict-aliasing' are passed
8521     through to the link stage and merged conservatively for
8522     conflicting translation units.  Specifically
8523     `-fno-strict-overflow', `-fwrapv' and `-fno-trapv' take precedence
8524     and for example `-ffp-contract=off' takes precedence over
8525     `-ffp-contract=fast'.  You can override them at linke-time.
8526
8527     It is recommended that you compile all the files participating in
8528     the same link with the same options and also specify those options
8529     at link time.
8530
8531     If LTO encounters objects with C linkage declared with incompatible
8532     types in separate translation units to be linked together
8533     (undefined behavior according to ISO C99 6.2.7), a non-fatal
8534     diagnostic may be issued.  The behavior is still undefined at run
8535     time.  Similar diagnostics may be raised for other languages.
8536
8537     Another feature of LTO is that it is possible to apply
8538     interprocedural optimizations on files written in different
8539     languages:
8540
8541          gcc -c -flto foo.c
8542          g++ -c -flto bar.cc
8543          gfortran -c -flto baz.f90
8544          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
8545
8546     Notice that the final link is done with `g++' to get the C++
8547     runtime libraries and `-lgfortran' is added to get the Fortran
8548     runtime libraries.  In general, when mixing languages in LTO mode,
8549     you should use the same link command options as when mixing
8550     languages in a regular (non-LTO) compilation.
8551
8552     If object files containing GIMPLE bytecode are stored in a library
8553     archive, say `libfoo.a', it is possible to extract and use them in
8554     an LTO link if you are using a linker with plugin support.  To
8555     create static libraries suitable for LTO, use `gcc-ar' and
8556     `gcc-ranlib' instead of `ar' and `ranlib'; to show the symbols of
8557     object files with GIMPLE bytecode, use `gcc-nm'.  Those commands
8558     require that `ar', `ranlib' and `nm' have been compiled with
8559     plugin support.  At link time, use the the flag
8560     `-fuse-linker-plugin' to ensure that the library participates in
8561     the LTO optimization process:
8562
8563          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
8564
8565     With the linker plugin enabled, the linker extracts the needed
8566     GIMPLE files from `libfoo.a' and passes them on to the running GCC
8567     to make them part of the aggregated GIMPLE image to be optimized.
8568
8569     If you are not using a linker with plugin support and/or do not
8570     enable the linker plugin, then the objects inside `libfoo.a' are
8571     extracted and linked as usual, but they do not participate in the
8572     LTO optimization process.  In order to make a static library
8573     suitable for both LTO optimization and usual linkage, compile its
8574     object files with `-flto' `-ffat-lto-objects'.
8575
8576     Link-time optimizations do not require the presence of the whole
8577     program to operate.  If the program does not require any symbols
8578     to be exported, it is possible to combine `-flto' and
8579     `-fwhole-program' to allow the interprocedural optimizers to use
8580     more aggressive assumptions which may lead to improved
8581     optimization opportunities.  Use of `-fwhole-program' is not
8582     needed when linker plugin is active (see `-fuse-linker-plugin').
8583
8584     The current implementation of LTO makes no attempt to generate
8585     bytecode that is portable between different types of hosts.  The
8586     bytecode files are versioned and there is a strict version check,
8587     so bytecode files generated in one version of GCC do not work with
8588     an older or newer version of GCC.
8589
8590     Link-time optimization does not work well with generation of
8591     debugging information.  Combining `-flto' with `-g' is currently
8592     experimental and expected to produce unexpected results.
8593
8594     If you specify the optional N, the optimization and code
8595     generation done at link time is executed in parallel using N
8596     parallel jobs by utilizing an installed `make' program.  The
8597     environment variable `MAKE' may be used to override the program
8598     used.  The default value for N is 1.
8599
8600     You can also specify `-flto=jobserver' to use GNU make's job
8601     server mode to determine the number of parallel jobs. This is
8602     useful when the Makefile calling GCC is already executing in
8603     parallel.  You must prepend a `+' to the command recipe in the
8604     parent Makefile for this to work.  This option likely only works
8605     if `MAKE' is GNU make.
8606
8607`-flto-partition=ALG'
8608     Specify the partitioning algorithm used by the link-time optimizer.
8609     The value is either `1to1' to specify a partitioning mirroring the
8610     original source files or `balanced' to specify partitioning into
8611     equally sized chunks (whenever possible) or `max' to create new
8612     partition for every symbol where possible.  Specifying `none' as
8613     an algorithm disables partitioning and streaming completely.  The
8614     default value is `balanced'. While `1to1' can be used as an
8615     workaround for various code ordering issues, the `max'
8616     partitioning is intended for internal testing only.  The value
8617     `one' specifies that exactly one partition should be used while
8618     the value `none' bypasses partitioning and executes the link-time
8619     optimization step directly from the WPA phase.
8620
8621`-flto-odr-type-merging'
8622     Enable streaming of mangled types names of C++ types and their
8623     unification at linktime.  This increases size of LTO object files,
8624     but enable diagnostics about One Definition Rule violations.
8625
8626`-flto-compression-level=N'
8627     This option specifies the level of compression used for
8628     intermediate language written to LTO object files, and is only
8629     meaningful in conjunction with LTO mode (`-flto').  Valid values
8630     are 0 (no compression) to 9 (maximum compression).  Values outside
8631     this range are clamped to either 0 or 9.  If the option is not
8632     given, a default balanced compression setting is used.
8633
8634`-flto-report'
8635     Prints a report with internal details on the workings of the
8636     link-time optimizer.  The contents of this report vary from
8637     version to version.  It is meant to be useful to GCC developers
8638     when processing object files in LTO mode (via `-flto').
8639
8640     Disabled by default.
8641
8642`-flto-report-wpa'
8643     Like `-flto-report', but only print for the WPA phase of Link Time
8644     Optimization.
8645
8646`-fuse-linker-plugin'
8647     Enables the use of a linker plugin during link-time optimization.
8648     This option relies on plugin support in the linker, which is
8649     available in gold or in GNU ld 2.21 or newer.
8650
8651     This option enables the extraction of object files with GIMPLE
8652     bytecode out of library archives. This improves the quality of
8653     optimization by exposing more code to the link-time optimizer.
8654     This information specifies what symbols can be accessed externally
8655     (by non-LTO object or during dynamic linking).  Resulting code
8656     quality improvements on binaries (and shared libraries that use
8657     hidden visibility) are similar to `-fwhole-program'.  See `-flto'
8658     for a description of the effect of this flag and how to use it.
8659
8660     This option is enabled by default when LTO support in GCC is
8661     enabled and GCC was configured for use with a linker supporting
8662     plugins (GNU ld 2.21 or newer or gold).
8663
8664`-ffat-lto-objects'
8665     Fat LTO objects are object files that contain both the
8666     intermediate language and the object code. This makes them usable
8667     for both LTO linking and normal linking. This option is effective
8668     only when compiling with `-flto' and is ignored at link time.
8669
8670     `-fno-fat-lto-objects' improves compilation time over plain LTO,
8671     but requires the complete toolchain to be aware of LTO. It
8672     requires a linker with linker plugin support for basic
8673     functionality.  Additionally, `nm', `ar' and `ranlib' need to
8674     support linker plugins to allow a full-featured build environment
8675     (capable of building static libraries etc).  GCC provides the
8676     `gcc-ar', `gcc-nm', `gcc-ranlib' wrappers to pass the right options
8677     to these tools. With non fat LTO makefiles need to be modified to
8678     use them.
8679
8680     The default is `-fno-fat-lto-objects' on targets with linker plugin
8681     support.
8682
8683`-fcompare-elim'
8684     After register allocation and post-register allocation instruction
8685     splitting, identify arithmetic instructions that compute processor
8686     flags similar to a comparison operation based on that arithmetic.
8687     If possible, eliminate the explicit comparison operation.
8688
8689     This pass only applies to certain targets that cannot explicitly
8690     represent the comparison operation before register allocation is
8691     complete.
8692
8693     Enabled at levels `-O', `-O2', `-O3', `-Os'.
8694
8695`-fcprop-registers'
8696     After register allocation and post-register allocation instruction
8697     splitting, perform a copy-propagation pass to try to reduce
8698     scheduling dependencies and occasionally eliminate the copy.
8699
8700     Enabled at levels `-O', `-O2', `-O3', `-Os'.
8701
8702`-fprofile-correction'
8703     Profiles collected using an instrumented binary for multi-threaded
8704     programs may be inconsistent due to missed counter updates. When
8705     this option is specified, GCC uses heuristics to correct or smooth
8706     out such inconsistencies. By default, GCC emits an error message
8707     when an inconsistent profile is detected.
8708
8709`-fprofile-dir=PATH'
8710     Set the directory to search for the profile data files in to PATH.
8711     This option affects only the profile data generated by
8712     `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used
8713     by `-fprofile-use' and `-fbranch-probabilities' and its related
8714     options.  Both absolute and relative paths can be used.  By
8715     default, GCC uses the current directory as PATH, thus the profile
8716     data file appears in the same directory as the object file.
8717
8718`-fprofile-generate'
8719`-fprofile-generate=PATH'
8720     Enable options usually used for instrumenting application to
8721     produce profile useful for later recompilation with profile
8722     feedback based optimization.  You must use `-fprofile-generate'
8723     both when compiling and when linking your program.
8724
8725     The following options are enabled: `-fprofile-arcs',
8726     `-fprofile-values', `-fvpt'.
8727
8728     If PATH is specified, GCC looks at the PATH to find the profile
8729     feedback data files. See `-fprofile-dir'.
8730
8731`-fprofile-use'
8732`-fprofile-use=PATH'
8733     Enable profile feedback-directed optimizations, and the following
8734     optimizations which are generally profitable only with profile
8735     feedback available: `-fbranch-probabilities', `-fvpt',
8736     `-funroll-loops', `-fpeel-loops', `-ftracer', `-ftree-vectorize',
8737     and `ftree-loop-distribute-patterns'.
8738
8739     By default, GCC emits an error message if the feedback profiles do
8740     not match the source code.  This error can be turned into a
8741     warning by using `-Wcoverage-mismatch'.  Note this may result in
8742     poorly optimized code.
8743
8744     If PATH is specified, GCC looks at the PATH to find the profile
8745     feedback data files. See `-fprofile-dir'.
8746
8747`-fauto-profile'
8748`-fauto-profile=PATH'
8749     Enable sampling-based feedback-directed optimizations, and the
8750     following optimizations which are generally profitable only with
8751     profile feedback available: `-fbranch-probabilities', `-fvpt',
8752     `-funroll-loops', `-fpeel-loops', `-ftracer', `-ftree-vectorize',
8753     `-finline-functions', `-fipa-cp', `-fipa-cp-clone',
8754     `-fpredictive-commoning', `-funswitch-loops',
8755     `-fgcse-after-reload', and `-ftree-loop-distribute-patterns'.
8756
8757     PATH is the name of a file containing AutoFDO profile information.
8758     If omitted, it defaults to `fbdata.afdo' in the current directory.
8759
8760     Producing an AutoFDO profile data file requires running your
8761     program with the `perf' utility on a supported GNU/Linux target
8762     system.  For more information, see `https://perf.wiki.kernel.org/'.
8763
8764     E.g.
8765          perf record -e br_inst_retired:near_taken -b -o perf.data \
8766              -- your_program
8767
8768     Then use the `create_gcov' tool to convert the raw profile data to
8769     a format that can be used by GCC.  You must also supply the
8770     unstripped binary for your program to this tool.  See
8771     `https://github.com/google/autofdo'.
8772
8773     E.g.
8774          create_gcov --binary=your_program.unstripped --profile=perf.data \
8775              --gcov=profile.afdo
8776
8777 The following options control compiler behavior regarding
8778floating-point arithmetic.  These options trade off between speed and
8779correctness.  All must be specifically enabled.
8780
8781`-ffloat-store'
8782     Do not store floating-point variables in registers, and inhibit
8783     other options that might change whether a floating-point value is
8784     taken from a register or memory.
8785
8786     This option prevents undesirable excess precision on machines such
8787     as the 68000 where the floating registers (of the 68881) keep more
8788     precision than a `double' is supposed to have.  Similarly for the
8789     x86 architecture.  For most programs, the excess precision does
8790     only good, but a few programs rely on the precise definition of
8791     IEEE floating point.  Use `-ffloat-store' for such programs, after
8792     modifying them to store all pertinent intermediate computations
8793     into variables.
8794
8795`-fexcess-precision=STYLE'
8796     This option allows further control over excess precision on
8797     machines where floating-point registers have more precision than
8798     the IEEE `float' and `double' types and the processor does not
8799     support operations rounding to those types.  By default,
8800     `-fexcess-precision=fast' is in effect; this means that operations
8801     are carried out in the precision of the registers and that it is
8802     unpredictable when rounding to the types specified in the source
8803     code takes place.  When compiling C, if
8804     `-fexcess-precision=standard' is specified then excess precision
8805     follows the rules specified in ISO C99; in particular, both casts
8806     and assignments cause values to be rounded to their semantic types
8807     (whereas `-ffloat-store' only affects assignments).  This option
8808     is enabled by default for C if a strict conformance option such as
8809     `-std=c99' is used.
8810
8811     `-fexcess-precision=standard' is not implemented for languages
8812     other than C, and has no effect if `-funsafe-math-optimizations'
8813     or `-ffast-math' is specified.  On the x86, it also has no effect
8814     if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the
8815     former case, IEEE semantics apply without excess precision, and in
8816     the latter, rounding is unpredictable.
8817
8818`-ffast-math'
8819     Sets the options `-fno-math-errno', `-funsafe-math-optimizations',
8820     `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans'
8821     and `-fcx-limited-range'.
8822
8823     This option causes the preprocessor macro `__FAST_MATH__' to be
8824     defined.
8825
8826     This option is not turned on by any `-O' option besides `-Ofast'
8827     since it can result in incorrect output for programs that depend
8828     on an exact implementation of IEEE or ISO rules/specifications for
8829     math functions. It may, however, yield faster code for programs
8830     that do not require the guarantees of these specifications.
8831
8832`-fno-math-errno'
8833     Do not set `errno' after calling math functions that are executed
8834     with a single instruction, e.g., `sqrt'.  A program that relies on
8835     IEEE exceptions for math error handling may want to use this flag
8836     for speed while maintaining IEEE arithmetic compatibility.
8837
8838     This option is not turned on by any `-O' option since it can
8839     result in incorrect output for programs that depend on an exact
8840     implementation of IEEE or ISO rules/specifications for math
8841     functions. It may, however, yield faster code for programs that do
8842     not require the guarantees of these specifications.
8843
8844     The default is `-fmath-errno'.
8845
8846     On Darwin systems, the math library never sets `errno'.  There is
8847     therefore no reason for the compiler to consider the possibility
8848     that it might, and `-fno-math-errno' is the default.
8849
8850`-funsafe-math-optimizations'
8851     Allow optimizations for floating-point arithmetic that (a) assume
8852     that arguments and results are valid and (b) may violate IEEE or
8853     ANSI standards.  When used at link-time, it may include libraries
8854     or startup files that change the default FPU control word or other
8855     similar optimizations.
8856
8857     This option is not turned on by any `-O' option since it can
8858     result in incorrect output for programs that depend on an exact
8859     implementation of IEEE or ISO rules/specifications for math
8860     functions. It may, however, yield faster code for programs that do
8861     not require the guarantees of these specifications.  Enables
8862     `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math'
8863     and `-freciprocal-math'.
8864
8865     The default is `-fno-unsafe-math-optimizations'.
8866
8867`-fassociative-math'
8868     Allow re-association of operands in series of floating-point
8869     operations.  This violates the ISO C and C++ language standard by
8870     possibly changing computation result.  NOTE: re-ordering may
8871     change the sign of zero as well as ignore NaNs and inhibit or
8872     create underflow or overflow (and thus cannot be used on code that
8873     relies on rounding behavior like `(x + 2**52) - 2**52'.  May also
8874     reorder floating-point comparisons and thus may not be used when
8875     ordered comparisons are required.  This option requires that both
8876     `-fno-signed-zeros' and `-fno-trapping-math' be in effect.
8877     Moreover, it doesn't make much sense with `-frounding-math'. For
8878     Fortran the option is automatically enabled when both
8879     `-fno-signed-zeros' and `-fno-trapping-math' are in effect.
8880
8881     The default is `-fno-associative-math'.
8882
8883`-freciprocal-math'
8884     Allow the reciprocal of a value to be used instead of dividing by
8885     the value if this enables optimizations.  For example `x / y' can
8886     be replaced with `x * (1/y)', which is useful if `(1/y)' is
8887     subject to common subexpression elimination.  Note that this loses
8888     precision and increases the number of flops operating on the value.
8889
8890     The default is `-fno-reciprocal-math'.
8891
8892`-ffinite-math-only'
8893     Allow optimizations for floating-point arithmetic that assume that
8894     arguments and results are not NaNs or +-Infs.
8895
8896     This option is not turned on by any `-O' option since it can
8897     result in incorrect output for programs that depend on an exact
8898     implementation of IEEE or ISO rules/specifications for math
8899     functions. It may, however, yield faster code for programs that do
8900     not require the guarantees of these specifications.
8901
8902     The default is `-fno-finite-math-only'.
8903
8904`-fno-signed-zeros'
8905     Allow optimizations for floating-point arithmetic that ignore the
8906     signedness of zero.  IEEE arithmetic specifies the behavior of
8907     distinct +0.0 and -0.0 values, which then prohibits simplification
8908     of expressions such as x+0.0 or 0.0*x (even with
8909     `-ffinite-math-only').  This option implies that the sign of a
8910     zero result isn't significant.
8911
8912     The default is `-fsigned-zeros'.
8913
8914`-fno-trapping-math'
8915     Compile code assuming that floating-point operations cannot
8916     generate user-visible traps.  These traps include division by
8917     zero, overflow, underflow, inexact result and invalid operation.
8918     This option requires that `-fno-signaling-nans' be in effect.
8919     Setting this option may allow faster code if one relies on
8920     "non-stop" IEEE arithmetic, for example.
8921
8922     This option should never be turned on by any `-O' option since it
8923     can result in incorrect output for programs that depend on an
8924     exact implementation of IEEE or ISO rules/specifications for math
8925     functions.
8926
8927     The default is `-ftrapping-math'.
8928
8929`-frounding-math'
8930     Disable transformations and optimizations that assume default
8931     floating-point rounding behavior.  This is round-to-zero for all
8932     floating point to integer conversions, and round-to-nearest for
8933     all other arithmetic truncations.  This option should be specified
8934     for programs that change the FP rounding mode dynamically, or that
8935     may be executed with a non-default rounding mode.  This option
8936     disables constant folding of floating-point expressions at compile
8937     time (which may be affected by rounding mode) and arithmetic
8938     transformations that are unsafe in the presence of sign-dependent
8939     rounding modes.
8940
8941     The default is `-fno-rounding-math'.
8942
8943     This option is experimental and does not currently guarantee to
8944     disable all GCC optimizations that are affected by rounding mode.
8945     Future versions of GCC may provide finer control of this setting
8946     using C99's `FENV_ACCESS' pragma.  This command-line option will
8947     be used to specify the default state for `FENV_ACCESS'.
8948
8949`-fsignaling-nans'
8950     Compile code assuming that IEEE signaling NaNs may generate
8951     user-visible traps during floating-point operations.  Setting this
8952     option disables optimizations that may change the number of
8953     exceptions visible with signaling NaNs.  This option implies
8954     `-ftrapping-math'.
8955
8956     This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
8957     defined.
8958
8959     The default is `-fno-signaling-nans'.
8960
8961     This option is experimental and does not currently guarantee to
8962     disable all GCC optimizations that affect signaling NaN behavior.
8963
8964`-fsingle-precision-constant'
8965     Treat floating-point constants as single precision instead of
8966     implicitly converting them to double-precision constants.
8967
8968`-fcx-limited-range'
8969     When enabled, this option states that a range reduction step is not
8970     needed when performing complex division.  Also, there is no
8971     checking whether the result of a complex multiplication or
8972     division is `NaN + I*NaN', with an attempt to rescue the situation
8973     in that case.  The default is `-fno-cx-limited-range', but is
8974     enabled by `-ffast-math'.
8975
8976     This option controls the default setting of the ISO C99
8977     `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
8978     all languages.
8979
8980`-fcx-fortran-rules'
8981     Complex multiplication and division follow Fortran rules.  Range
8982     reduction is done as part of complex division, but there is no
8983     checking whether the result of a complex multiplication or
8984     division is `NaN + I*NaN', with an attempt to rescue the situation
8985     in that case.
8986
8987     The default is `-fno-cx-fortran-rules'.
8988
8989
8990 The following options control optimizations that may improve
8991performance, but are not enabled by any `-O' options.  This section
8992includes experimental options that may produce broken code.
8993
8994`-fbranch-probabilities'
8995     After running a program compiled with `-fprofile-arcs' (*note
8996     Options for Debugging Your Program or `gcc': Debugging Options.),
8997     you can compile it a second time using `-fbranch-probabilities',
8998     to improve optimizations based on the number of times each branch
8999     was taken.  When a program compiled with `-fprofile-arcs' exits,
9000     it saves arc execution counts to a file called `SOURCENAME.gcda'
9001     for each source file.  The information in this data file is very
9002     dependent on the structure of the generated code, so you must use
9003     the same source code and the same optimization options for both
9004     compilations.
9005
9006     With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
9007     each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
9008     optimization.  Currently, they are only used in one place: in
9009     `reorg.c', instead of guessing which path a branch is most likely
9010     to take, the `REG_BR_PROB' values are used to exactly determine
9011     which path is taken more often.
9012
9013`-fprofile-values'
9014     If combined with `-fprofile-arcs', it adds code so that some data
9015     about values of expressions in the program is gathered.
9016
9017     With `-fbranch-probabilities', it reads back the data gathered
9018     from profiling values of expressions for usage in optimizations.
9019
9020     Enabled with `-fprofile-generate' and `-fprofile-use'.
9021
9022`-fprofile-reorder-functions'
9023     Function reordering based on profile instrumentation collects
9024     first time of execution of a function and orders these functions
9025     in ascending order.
9026
9027     Enabled with `-fprofile-use'.
9028
9029`-fvpt'
9030     If combined with `-fprofile-arcs', this option instructs the
9031     compiler to add code to gather information about values of
9032     expressions.
9033
9034     With `-fbranch-probabilities', it reads back the data gathered and
9035     actually performs the optimizations based on them.  Currently the
9036     optimizations include specialization of division operations using
9037     the knowledge about the value of the denominator.
9038
9039`-frename-registers'
9040     Attempt to avoid false dependencies in scheduled code by making use
9041     of registers left over after register allocation.  This
9042     optimization most benefits processors with lots of registers.
9043     Depending on the debug information format adopted by the target,
9044     however, it can make debugging impossible, since variables no
9045     longer stay in a "home register".
9046
9047     Enabled by default with `-funroll-loops' and `-fpeel-loops'.
9048
9049`-fschedule-fusion'
9050     Performs a target dependent pass over the instruction stream to
9051     schedule instructions of same type together because target machine
9052     can execute them more efficiently if they are adjacent to each
9053     other in the instruction flow.
9054
9055     Enabled at levels `-O2', `-O3', `-Os'.
9056
9057`-ftracer'
9058     Perform tail duplication to enlarge superblock size.  This
9059     transformation simplifies the control flow of the function
9060     allowing other optimizations to do a better job.
9061
9062     Enabled with `-fprofile-use'.
9063
9064`-funroll-loops'
9065     Unroll loops whose number of iterations can be determined at
9066     compile time or upon entry to the loop.  `-funroll-loops' implies
9067     `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
9068     also turns on complete loop peeling (i.e. complete removal of
9069     loops with a small constant number of iterations).  This option
9070     makes code larger, and may or may not make it run faster.
9071
9072     Enabled with `-fprofile-use'.
9073
9074`-funroll-all-loops'
9075     Unroll all loops, even if their number of iterations is uncertain
9076     when the loop is entered.  This usually makes programs run more
9077     slowly.  `-funroll-all-loops' implies the same options as
9078     `-funroll-loops'.
9079
9080`-fpeel-loops'
9081     Peels loops for which there is enough information that they do not
9082     roll much (from profile feedback).  It also turns on complete loop
9083     peeling (i.e. complete removal of loops with small constant number
9084     of iterations).
9085
9086     Enabled with `-fprofile-use'.
9087
9088`-fmove-loop-invariants'
9089     Enables the loop invariant motion pass in the RTL loop optimizer.
9090     Enabled at level `-O1'
9091
9092`-funswitch-loops'
9093     Move branches with loop invariant conditions out of the loop, with
9094     duplicates of the loop on both branches (modified according to
9095     result of the condition).
9096
9097`-ffunction-sections'
9098`-fdata-sections'
9099     Place each function or data item into its own section in the output
9100     file if the target supports arbitrary sections.  The name of the
9101     function or the name of the data item determines the section's name
9102     in the output file.
9103
9104     Use these options on systems where the linker can perform
9105     optimizations to improve locality of reference in the instruction
9106     space.  Most systems using the ELF object format and SPARC
9107     processors running Solaris 2 have linkers with such optimizations.
9108     AIX may have these optimizations in the future.
9109
9110     Only use these options when there are significant benefits from
9111     doing so.  When you specify these options, the assembler and linker
9112     create larger object and executable files and are also slower.
9113     You cannot use `gprof' on all systems if you specify this option,
9114     and you may have problems with debugging if you specify both this
9115     option and `-g'.
9116
9117`-fbranch-target-load-optimize'
9118     Perform branch target register load optimization before prologue /
9119     epilogue threading.  The use of target registers can typically be
9120     exposed only during reload, thus hoisting loads out of loops and
9121     doing inter-block scheduling needs a separate optimization pass.
9122
9123`-fbranch-target-load-optimize2'
9124     Perform branch target register load optimization after prologue /
9125     epilogue threading.
9126
9127`-fbtr-bb-exclusive'
9128     When performing branch target register load optimization, don't
9129     reuse branch target registers within any basic block.
9130
9131`-fstack-protector'
9132     Emit extra code to check for buffer overflows, such as stack
9133     smashing attacks.  This is done by adding a guard variable to
9134     functions with vulnerable objects.  This includes functions that
9135     call `alloca', and functions with buffers larger than 8 bytes.
9136     The guards are initialized when a function is entered and then
9137     checked when the function exits.  If a guard check fails, an error
9138     message is printed and the program exits.
9139
9140`-fstack-protector-all'
9141     Like `-fstack-protector' except that all functions are protected.
9142
9143`-fstack-protector-strong'
9144     Like `-fstack-protector' but includes additional functions to be
9145     protected -- those that have local array definitions, or have
9146     references to local frame addresses.
9147
9148`-fstack-protector-explicit'
9149     Like `-fstack-protector' but only protects those functions which
9150     have the `stack_protect' attribute
9151
9152`-fstdarg-opt'
9153     Optimize the prologue of variadic argument functions with respect
9154     to usage of those arguments.
9155
9156`-fsection-anchors'
9157     Try to reduce the number of symbolic address calculations by using
9158     shared "anchor" symbols to address nearby objects.  This
9159     transformation can help to reduce the number of GOT entries and
9160     GOT accesses on some targets.
9161
9162     For example, the implementation of the following function `foo':
9163
9164          static int a, b, c;
9165          int foo (void) { return a + b + c; }
9166
9167     usually calculates the addresses of all three variables, but if you
9168     compile it with `-fsection-anchors', it accesses the variables
9169     from a common anchor point instead.  The effect is similar to the
9170     following pseudocode (which isn't valid C):
9171
9172          int foo (void)
9173          {
9174            register int *xr = &x;
9175            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
9176          }
9177
9178     Not all targets support this option.
9179
9180`--param NAME=VALUE'
9181     In some places, GCC uses various constants to control the amount of
9182     optimization that is done.  For example, GCC does not inline
9183     functions that contain more than a certain number of instructions.
9184     You can control some of these constants on the command line using
9185     the `--param' option.
9186
9187     The names of specific parameters, and the meaning of the values,
9188     are tied to the internals of the compiler, and are subject to
9189     change without notice in future releases.
9190
9191     In each case, the VALUE is an integer.  The allowable choices for
9192     NAME are:
9193
9194    `predictable-branch-outcome'
9195          When branch is predicted to be taken with probability lower
9196          than this threshold (in percent), then it is considered well
9197          predictable. The default is 10.
9198
9199    `max-crossjump-edges'
9200          The maximum number of incoming edges to consider for
9201          cross-jumping.  The algorithm used by `-fcrossjumping' is
9202          O(N^2) in the number of edges incoming to each block.
9203          Increasing values mean more aggressive optimization, making
9204          the compilation time increase with probably small improvement
9205          in executable size.
9206
9207    `min-crossjump-insns'
9208          The minimum number of instructions that must be matched at
9209          the end of two blocks before cross-jumping is performed on
9210          them.  This value is ignored in the case where all
9211          instructions in the block being cross-jumped from are
9212          matched.  The default value is 5.
9213
9214    `max-grow-copy-bb-insns'
9215          The maximum code size expansion factor when copying basic
9216          blocks instead of jumping.  The expansion is relative to a
9217          jump instruction.  The default value is 8.
9218
9219    `max-goto-duplication-insns'
9220          The maximum number of instructions to duplicate to a block
9221          that jumps to a computed goto.  To avoid O(N^2) behavior in a
9222          number of passes, GCC factors computed gotos early in the
9223          compilation process, and unfactors them as late as possible.
9224          Only computed jumps at the end of a basic blocks with no more
9225          than max-goto-duplication-insns are unfactored.  The default
9226          value is 8.
9227
9228    `max-delay-slot-insn-search'
9229          The maximum number of instructions to consider when looking
9230          for an instruction to fill a delay slot.  If more than this
9231          arbitrary number of instructions are searched, the time
9232          savings from filling the delay slot are minimal, so stop
9233          searching.  Increasing values mean more aggressive
9234          optimization, making the compilation time increase with
9235          probably small improvement in execution time.
9236
9237    `max-delay-slot-live-search'
9238          When trying to fill delay slots, the maximum number of
9239          instructions to consider when searching for a block with
9240          valid live register information.  Increasing this arbitrarily
9241          chosen value means more aggressive optimization, increasing
9242          the compilation time.  This parameter should be removed when
9243          the delay slot code is rewritten to maintain the control-flow
9244          graph.
9245
9246    `max-gcse-memory'
9247          The approximate maximum amount of memory that can be
9248          allocated in order to perform the global common subexpression
9249          elimination optimization.  If more memory than specified is
9250          required, the optimization is not done.
9251
9252    `max-gcse-insertion-ratio'
9253          If the ratio of expression insertions to deletions is larger
9254          than this value for any expression, then RTL PRE inserts or
9255          removes the expression and thus leaves partially redundant
9256          computations in the instruction stream.  The default value is
9257          20.
9258
9259    `max-pending-list-length'
9260          The maximum number of pending dependencies scheduling allows
9261          before flushing the current state and starting over.  Large
9262          functions with few branches or calls can create excessively
9263          large lists which needlessly consume memory and resources.
9264
9265    `max-modulo-backtrack-attempts'
9266          The maximum number of backtrack attempts the scheduler should
9267          make when modulo scheduling a loop.  Larger values can
9268          exponentially increase compilation time.
9269
9270    `max-inline-insns-single'
9271          Several parameters control the tree inliner used in GCC.
9272          This number sets the maximum number of instructions (counted
9273          in GCC's internal representation) in a single function that
9274          the tree inliner considers for inlining.  This only affects
9275          functions declared inline and methods implemented in a class
9276          declaration (C++).  The default value is 400.
9277
9278    `max-inline-insns-auto'
9279          When you use `-finline-functions' (included in `-O3'), a lot
9280          of functions that would otherwise not be considered for
9281          inlining by the compiler are investigated.  To those
9282          functions, a different (more restrictive) limit compared to
9283          functions declared inline can be applied.  The default value
9284          is 40.
9285
9286    `inline-min-speedup'
9287          When estimated performance improvement of caller + callee
9288          runtime exceeds this threshold (in precent), the function can
9289          be inlined regardless the limit on `--param
9290          max-inline-insns-single' and `--param max-inline-insns-auto'.
9291
9292    `large-function-insns'
9293          The limit specifying really large functions.  For functions
9294          larger than this limit after inlining, inlining is
9295          constrained by `--param large-function-growth'.  This
9296          parameter is useful primarily to avoid extreme compilation
9297          time caused by non-linear algorithms used by the back end.
9298          The default value is 2700.
9299
9300    `large-function-growth'
9301          Specifies maximal growth of large function caused by inlining
9302          in percents.  The default value is 100 which limits large
9303          function growth to 2.0 times the original size.
9304
9305    `large-unit-insns'
9306          The limit specifying large translation unit.  Growth caused
9307          by inlining of units larger than this limit is limited by
9308          `--param inline-unit-growth'.  For small units this might be
9309          too tight.  For example, consider a unit consisting of
9310          function A that is inline and B that just calls A three
9311          times.  If B is small relative to A, the growth of unit is
9312          300\% and yet such inlining is very sane.  For very large
9313          units consisting of small inlineable functions, however, the
9314          overall unit growth limit is needed to avoid exponential
9315          explosion of code size.  Thus for smaller units, the size is
9316          increased to `--param large-unit-insns' before applying
9317          `--param inline-unit-growth'.  The default is 10000.
9318
9319    `inline-unit-growth'
9320          Specifies maximal overall growth of the compilation unit
9321          caused by inlining.  The default value is 20 which limits
9322          unit growth to 1.2 times the original size. Cold functions
9323          (either marked cold via an attribute or by profile feedback)
9324          are not accounted into the unit size.
9325
9326    `ipcp-unit-growth'
9327          Specifies maximal overall growth of the compilation unit
9328          caused by interprocedural constant propagation.  The default
9329          value is 10 which limits unit growth to 1.1 times the
9330          original size.
9331
9332    `large-stack-frame'
9333          The limit specifying large stack frames.  While inlining the
9334          algorithm is trying to not grow past this limit too much.
9335          The default value is 256 bytes.
9336
9337    `large-stack-frame-growth'
9338          Specifies maximal growth of large stack frames caused by
9339          inlining in percents.  The default value is 1000 which limits
9340          large stack frame growth to 11 times the original size.
9341
9342    `max-inline-insns-recursive'
9343    `max-inline-insns-recursive-auto'
9344          Specifies the maximum number of instructions an out-of-line
9345          copy of a self-recursive inline function can grow into by
9346          performing recursive inlining.
9347
9348          `--param max-inline-insns-recursive' applies to functions
9349          declared inline.  For functions not declared inline,
9350          recursive inlining happens only when `-finline-functions'
9351          (included in `-O3') is enabled; `--param
9352          max-inline-insns-recursive-auto' applies instead.  The
9353          default value is 450.
9354
9355    `max-inline-recursive-depth'
9356    `max-inline-recursive-depth-auto'
9357          Specifies the maximum recursion depth used for recursive
9358          inlining.
9359
9360          `--param max-inline-recursive-depth' applies to functions
9361          declared inline.  For functions not declared inline,
9362          recursive inlining happens only when `-finline-functions'
9363          (included in `-O3') is enabled; `--param
9364          max-inline-recursive-depth-auto' applies instead.  The
9365          default value is 8.
9366
9367    `min-inline-recursive-probability'
9368          Recursive inlining is profitable only for function having
9369          deep recursion in average and can hurt for function having
9370          little recursion depth by increasing the prologue size or
9371          complexity of function body to other optimizers.
9372
9373          When profile feedback is available (see `-fprofile-generate')
9374          the actual recursion depth can be guessed from probability
9375          that function recurses via a given call expression.  This
9376          parameter limits inlining only to call expressions whose
9377          probability exceeds the given threshold (in percents).  The
9378          default value is 10.
9379
9380    `early-inlining-insns'
9381          Specify growth that the early inliner can make.  In effect it
9382          increases the amount of inlining for code having a large
9383          abstraction penalty.  The default value is 14.
9384
9385    `max-early-inliner-iterations'
9386          Limit of iterations of the early inliner.  This basically
9387          bounds the number of nested indirect calls the early inliner
9388          can resolve.  Deeper chains are still handled by late
9389          inlining.
9390
9391    `comdat-sharing-probability'
9392          Probability (in percent) that C++ inline function with comdat
9393          visibility are shared across multiple compilation units.  The
9394          default value is 20.
9395
9396    `profile-func-internal-id'
9397          A parameter to control whether to use function internal id in
9398          profile database lookup. If the value is 0, the compiler uses
9399          an id that is based on function assembler name and filename,
9400          which makes old profile data more tolerant to source changes
9401          such as function reordering etc.  The default value is 0.
9402
9403    `min-vect-loop-bound'
9404          The minimum number of iterations under which loops are not
9405          vectorized when `-ftree-vectorize' is used.  The number of
9406          iterations after vectorization needs to be greater than the
9407          value specified by this option to allow vectorization.  The
9408          default value is 0.
9409
9410    `gcse-cost-distance-ratio'
9411          Scaling factor in calculation of maximum distance an
9412          expression can be moved by GCSE optimizations.  This is
9413          currently supported only in the code hoisting pass.  The
9414          bigger the ratio, the more aggressive code hoisting is with
9415          simple expressions, i.e., the expressions that have cost less
9416          than `gcse-unrestricted-cost'.  Specifying 0 disables
9417          hoisting of simple expressions.  The default value is 10.
9418
9419    `gcse-unrestricted-cost'
9420          Cost, roughly measured as the cost of a single typical machine
9421          instruction, at which GCSE optimizations do not constrain the
9422          distance an expression can travel.  This is currently
9423          supported only in the code hoisting pass.  The lesser the
9424          cost, the more aggressive code hoisting is.  Specifying 0
9425          allows all expressions to travel unrestricted distances.  The
9426          default value is 3.
9427
9428    `max-hoist-depth'
9429          The depth of search in the dominator tree for expressions to
9430          hoist.  This is used to avoid quadratic behavior in hoisting
9431          algorithm.  The value of 0 does not limit on the search, but
9432          may slow down compilation of huge functions.  The default
9433          value is 30.
9434
9435    `max-tail-merge-comparisons'
9436          The maximum amount of similar bbs to compare a bb with.  This
9437          is used to avoid quadratic behavior in tree tail merging.
9438          The default value is 10.
9439
9440    `max-tail-merge-iterations'
9441          The maximum amount of iterations of the pass over the
9442          function.  This is used to limit compilation time in tree
9443          tail merging.  The default value is 2.
9444
9445    `max-unrolled-insns'
9446          The maximum number of instructions that a loop may have to be
9447          unrolled.  If a loop is unrolled, this parameter also
9448          determines how many times the loop code is unrolled.
9449
9450    `max-average-unrolled-insns'
9451          The maximum number of instructions biased by probabilities of
9452          their execution that a loop may have to be unrolled.  If a
9453          loop is unrolled, this parameter also determines how many
9454          times the loop code is unrolled.
9455
9456    `max-unroll-times'
9457          The maximum number of unrollings of a single loop.
9458
9459    `max-peeled-insns'
9460          The maximum number of instructions that a loop may have to be
9461          peeled.  If a loop is peeled, this parameter also determines
9462          how many times the loop code is peeled.
9463
9464    `max-peel-times'
9465          The maximum number of peelings of a single loop.
9466
9467    `max-peel-branches'
9468          The maximum number of branches on the hot path through the
9469          peeled sequence.
9470
9471    `max-completely-peeled-insns'
9472          The maximum number of insns of a completely peeled loop.
9473
9474    `max-completely-peel-times'
9475          The maximum number of iterations of a loop to be suitable for
9476          complete peeling.
9477
9478    `max-completely-peel-loop-nest-depth'
9479          The maximum depth of a loop nest suitable for complete
9480          peeling.
9481
9482    `max-unswitch-insns'
9483          The maximum number of insns of an unswitched loop.
9484
9485    `max-unswitch-level'
9486          The maximum number of branches unswitched in a single loop.
9487
9488    `lim-expensive'
9489          The minimum cost of an expensive expression in the loop
9490          invariant motion.
9491
9492    `iv-consider-all-candidates-bound'
9493          Bound on number of candidates for induction variables, below
9494          which all candidates are considered for each use in induction
9495          variable optimizations.  If there are more candidates than
9496          this, only the most relevant ones are considered to avoid
9497          quadratic time complexity.
9498
9499    `iv-max-considered-uses'
9500          The induction variable optimizations give up on loops that
9501          contain more induction variable uses.
9502
9503    `iv-always-prune-cand-set-bound'
9504          If the number of candidates in the set is smaller than this
9505          value, always try to remove unnecessary ivs from the set when
9506          adding a new one.
9507
9508    `scev-max-expr-size'
9509          Bound on size of expressions used in the scalar evolutions
9510          analyzer.  Large expressions slow the analyzer.
9511
9512    `scev-max-expr-complexity'
9513          Bound on the complexity of the expressions in the scalar
9514          evolutions analyzer.  Complex expressions slow the analyzer.
9515
9516    `omega-max-vars'
9517          The maximum number of variables in an Omega constraint system.
9518          The default value is 128.
9519
9520    `omega-max-geqs'
9521          The maximum number of inequalities in an Omega constraint
9522          system.  The default value is 256.
9523
9524    `omega-max-eqs'
9525          The maximum number of equalities in an Omega constraint
9526          system.  The default value is 128.
9527
9528    `omega-max-wild-cards'
9529          The maximum number of wildcard variables that the Omega
9530          solver is able to insert.  The default value is 18.
9531
9532    `omega-hash-table-size'
9533          The size of the hash table in the Omega solver.  The default
9534          value is 550.
9535
9536    `omega-max-keys'
9537          The maximal number of keys used by the Omega solver.  The
9538          default value is 500.
9539
9540    `omega-eliminate-redundant-constraints'
9541          When set to 1, use expensive methods to eliminate all
9542          redundant constraints.  The default value is 0.
9543
9544    `vect-max-version-for-alignment-checks'
9545          The maximum number of run-time checks that can be performed
9546          when doing loop versioning for alignment in the vectorizer.
9547
9548    `vect-max-version-for-alias-checks'
9549          The maximum number of run-time checks that can be performed
9550          when doing loop versioning for alias in the vectorizer.
9551
9552    `vect-max-peeling-for-alignment'
9553          The maximum number of loop peels to enhance access alignment
9554          for vectorizer. Value -1 means 'no limit'.
9555
9556    `max-iterations-to-track'
9557          The maximum number of iterations of a loop the brute-force
9558          algorithm for analysis of the number of iterations of the
9559          loop tries to evaluate.
9560
9561    `hot-bb-count-ws-permille'
9562          A basic block profile count is considered hot if it
9563          contributes to the given permillage (i.e. 0...1000) of the
9564          entire profiled execution.
9565
9566    `hot-bb-frequency-fraction'
9567          Select fraction of the entry block frequency of executions of
9568          basic block in function given basic block needs to have to be
9569          considered hot.
9570
9571    `max-predicted-iterations'
9572          The maximum number of loop iterations we predict statically.
9573          This is useful in cases where a function contains a single
9574          loop with known bound and another loop with unknown bound.
9575          The known number of iterations is predicted correctly, while
9576          the unknown number of iterations average to roughly 10.  This
9577          means that the loop without bounds appears artificially cold
9578          relative to the other one.
9579
9580    `builtin-expect-probability'
9581          Control the probability of the expression having the
9582          specified value. This parameter takes a percentage (i.e. 0
9583          ... 100) as input.  The default probability of 90 is obtained
9584          empirically.
9585
9586    `align-threshold'
9587          Select fraction of the maximal frequency of executions of a
9588          basic block in a function to align the basic block.
9589
9590    `align-loop-iterations'
9591          A loop expected to iterate at least the selected number of
9592          iterations is aligned.
9593
9594    `tracer-dynamic-coverage'
9595    `tracer-dynamic-coverage-feedback'
9596          This value is used to limit superblock formation once the
9597          given percentage of executed instructions is covered.  This
9598          limits unnecessary code size expansion.
9599
9600          The `tracer-dynamic-coverage-feedback' parameter is used only
9601          when profile feedback is available.  The real profiles (as
9602          opposed to statically estimated ones) are much less balanced
9603          allowing the threshold to be larger value.
9604
9605    `tracer-max-code-growth'
9606          Stop tail duplication once code growth has reached given
9607          percentage.  This is a rather artificial limit, as most of
9608          the duplicates are eliminated later in cross jumping, so it
9609          may be set to much higher values than is the desired code
9610          growth.
9611
9612    `tracer-min-branch-ratio'
9613          Stop reverse growth when the reverse probability of best edge
9614          is less than this threshold (in percent).
9615
9616    `tracer-min-branch-ratio'
9617    `tracer-min-branch-ratio-feedback'
9618          Stop forward growth if the best edge has probability lower
9619          than this threshold.
9620
9621          Similarly to `tracer-dynamic-coverage' two values are
9622          present, one for compilation for profile feedback and one for
9623          compilation without.  The value for compilation with profile
9624          feedback needs to be more conservative (higher) in order to
9625          make tracer effective.
9626
9627    `max-cse-path-length'
9628          The maximum number of basic blocks on path that CSE considers.
9629          The default is 10.
9630
9631    `max-cse-insns'
9632          The maximum number of instructions CSE processes before
9633          flushing.  The default is 1000.
9634
9635    `ggc-min-expand'
9636          GCC uses a garbage collector to manage its own memory
9637          allocation.  This parameter specifies the minimum percentage
9638          by which the garbage collector's heap should be allowed to
9639          expand between collections.  Tuning this may improve
9640          compilation speed; it has no effect on code generation.
9641
9642          The default is 30% + 70% * (RAM/1GB) with an upper bound of
9643          100% when RAM >= 1GB.  If `getrlimit' is available, the
9644          notion of "RAM" is the smallest of actual RAM and
9645          `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
9646          calculate RAM on a particular platform, the lower bound of
9647          30% is used.  Setting this parameter and `ggc-min-heapsize'
9648          to zero causes a full collection to occur at every
9649          opportunity.  This is extremely slow, but can be useful for
9650          debugging.
9651
9652    `ggc-min-heapsize'
9653          Minimum size of the garbage collector's heap before it begins
9654          bothering to collect garbage.  The first collection occurs
9655          after the heap expands by `ggc-min-expand'% beyond
9656          `ggc-min-heapsize'.  Again, tuning this may improve
9657          compilation speed, and has no effect on code generation.
9658
9659          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
9660          that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
9661          exceeded, but with a lower bound of 4096 (four megabytes) and
9662          an upper bound of 131072 (128 megabytes).  If GCC is not able
9663          to calculate RAM on a particular platform, the lower bound is
9664          used.  Setting this parameter very large effectively disables
9665          garbage collection.  Setting this parameter and
9666          `ggc-min-expand' to zero causes a full collection to occur at
9667          every opportunity.
9668
9669    `max-reload-search-insns'
9670          The maximum number of instruction reload should look backward
9671          for equivalent register.  Increasing values mean more
9672          aggressive optimization, making the compilation time increase
9673          with probably slightly better performance.  The default value
9674          is 100.
9675
9676    `max-cselib-memory-locations'
9677          The maximum number of memory locations cselib should take
9678          into account.  Increasing values mean more aggressive
9679          optimization, making the compilation time increase with
9680          probably slightly better performance.  The default value is
9681          500.
9682
9683    `reorder-blocks-duplicate'
9684    `reorder-blocks-duplicate-feedback'
9685          Used by the basic block reordering pass to decide whether to
9686          use unconditional branch or duplicate the code on its
9687          destination.  Code is duplicated when its estimated size is
9688          smaller than this value multiplied by the estimated size of
9689          unconditional jump in the hot spots of the program.
9690
9691          The `reorder-block-duplicate-feedback' parameter is used only
9692          when profile feedback is available.  It may be set to higher
9693          values than `reorder-block-duplicate' since information about
9694          the hot spots is more accurate.
9695
9696    `max-sched-ready-insns'
9697          The maximum number of instructions ready to be issued the
9698          scheduler should consider at any given time during the first
9699          scheduling pass.  Increasing values mean more thorough
9700          searches, making the compilation time increase with probably
9701          little benefit.  The default value is 100.
9702
9703    `max-sched-region-blocks'
9704          The maximum number of blocks in a region to be considered for
9705          interblock scheduling.  The default value is 10.
9706
9707    `max-pipeline-region-blocks'
9708          The maximum number of blocks in a region to be considered for
9709          pipelining in the selective scheduler.  The default value is
9710          15.
9711
9712    `max-sched-region-insns'
9713          The maximum number of insns in a region to be considered for
9714          interblock scheduling.  The default value is 100.
9715
9716    `max-pipeline-region-insns'
9717          The maximum number of insns in a region to be considered for
9718          pipelining in the selective scheduler.  The default value is
9719          200.
9720
9721    `min-spec-prob'
9722          The minimum probability (in percents) of reaching a source
9723          block for interblock speculative scheduling.  The default
9724          value is 40.
9725
9726    `max-sched-extend-regions-iters'
9727          The maximum number of iterations through CFG to extend
9728          regions.  A value of 0 (the default) disables region
9729          extensions.
9730
9731    `max-sched-insn-conflict-delay'
9732          The maximum conflict delay for an insn to be considered for
9733          speculative motion.  The default value is 3.
9734
9735    `sched-spec-prob-cutoff'
9736          The minimal probability of speculation success (in percents),
9737          so that speculative insns are scheduled.  The default value
9738          is 40.
9739
9740    `sched-spec-state-edge-prob-cutoff'
9741          The minimum probability an edge must have for the scheduler
9742          to save its state across it.  The default value is 10.
9743
9744    `sched-mem-true-dep-cost'
9745          Minimal distance (in CPU cycles) between store and load
9746          targeting same memory locations.  The default value is 1.
9747
9748    `selsched-max-lookahead'
9749          The maximum size of the lookahead window of selective
9750          scheduling.  It is a depth of search for available
9751          instructions.  The default value is 50.
9752
9753    `selsched-max-sched-times'
9754          The maximum number of times that an instruction is scheduled
9755          during selective scheduling.  This is the limit on the number
9756          of iterations through which the instruction may be pipelined.
9757          The default value is 2.
9758
9759    `selsched-max-insns-to-rename'
9760          The maximum number of best instructions in the ready list
9761          that are considered for renaming in the selective scheduler.
9762          The default value is 2.
9763
9764    `sms-min-sc'
9765          The minimum value of stage count that swing modulo scheduler
9766          generates.  The default value is 2.
9767
9768    `max-last-value-rtl'
9769          The maximum size measured as number of RTLs that can be
9770          recorded in an expression in combiner for a pseudo register
9771          as last known value of that register.  The default is 10000.
9772
9773    `max-combine-insns'
9774          The maximum number of instructions the RTL combiner tries to
9775          combine.  The default value is 2 at `-Og' and 4 otherwise.
9776
9777    `integer-share-limit'
9778          Small integer constants can use a shared data structure,
9779          reducing the compiler's memory usage and increasing its
9780          speed.  This sets the maximum value of a shared integer
9781          constant.  The default value is 256.
9782
9783    `ssp-buffer-size'
9784          The minimum size of buffers (i.e. arrays) that receive stack
9785          smashing protection when `-fstack-protection' is used.
9786
9787    `min-size-for-stack-sharing'
9788          The minimum size of variables taking part in stack slot
9789          sharing when not optimizing. The default value is 32.
9790
9791    `max-jump-thread-duplication-stmts'
9792          Maximum number of statements allowed in a block that needs to
9793          be duplicated when threading jumps.
9794
9795    `max-fields-for-field-sensitive'
9796          Maximum number of fields in a structure treated in a field
9797          sensitive manner during pointer analysis.  The default is zero
9798          for `-O0' and `-O1', and 100 for `-Os', `-O2', and `-O3'.
9799
9800    `prefetch-latency'
9801          Estimate on average number of instructions that are executed
9802          before prefetch finishes.  The distance prefetched ahead is
9803          proportional to this constant.  Increasing this number may
9804          also lead to less streams being prefetched (see
9805          `simultaneous-prefetches').
9806
9807    `simultaneous-prefetches'
9808          Maximum number of prefetches that can run at the same time.
9809
9810    `l1-cache-line-size'
9811          The size of cache line in L1 cache, in bytes.
9812
9813    `l1-cache-size'
9814          The size of L1 cache, in kilobytes.
9815
9816    `l2-cache-size'
9817          The size of L2 cache, in kilobytes.
9818
9819    `min-insn-to-prefetch-ratio'
9820          The minimum ratio between the number of instructions and the
9821          number of prefetches to enable prefetching in a loop.
9822
9823    `prefetch-min-insn-to-mem-ratio'
9824          The minimum ratio between the number of instructions and the
9825          number of memory references to enable prefetching in a loop.
9826
9827    `use-canonical-types'
9828          Whether the compiler should use the "canonical" type system.
9829          By default, this should always be 1, which uses a more
9830          efficient internal mechanism for comparing types in C++ and
9831          Objective-C++.  However, if bugs in the canonical type system
9832          are causing compilation failures, set this value to 0 to
9833          disable canonical types.
9834
9835    `switch-conversion-max-branch-ratio'
9836          Switch initialization conversion refuses to create arrays
9837          that are bigger than `switch-conversion-max-branch-ratio'
9838          times the number of branches in the switch.
9839
9840    `max-partial-antic-length'
9841          Maximum length of the partial antic set computed during the
9842          tree partial redundancy elimination optimization
9843          (`-ftree-pre') when optimizing at `-O3' and above.  For some
9844          sorts of source code the enhanced partial redundancy
9845          elimination optimization can run away, consuming all of the
9846          memory available on the host machine.  This parameter sets a
9847          limit on the length of the sets that are computed, which
9848          prevents the runaway behavior.  Setting a value of 0 for this
9849          parameter allows an unlimited set length.
9850
9851    `sccvn-max-scc-size'
9852          Maximum size of a strongly connected component (SCC) during
9853          SCCVN processing.  If this limit is hit, SCCVN processing for
9854          the whole function is not done and optimizations depending on
9855          it are disabled.  The default maximum SCC size is 10000.
9856
9857    `sccvn-max-alias-queries-per-access'
9858          Maximum number of alias-oracle queries we perform when
9859          looking for redundancies for loads and stores.  If this limit
9860          is hit the search is aborted and the load or store is not
9861          considered redundant.  The number of queries is
9862          algorithmically limited to the number of stores on all paths
9863          from the load to the function entry.  The default maxmimum
9864          number of queries is 1000.
9865
9866    `ira-max-loops-num'
9867          IRA uses regional register allocation by default.  If a
9868          function contains more loops than the number given by this
9869          parameter, only at most the given number of the most
9870          frequently-executed loops form regions for regional register
9871          allocation.  The default value of the parameter is 100.
9872
9873    `ira-max-conflict-table-size'
9874          Although IRA uses a sophisticated algorithm to compress the
9875          conflict table, the table can still require excessive amounts
9876          of memory for huge functions.  If the conflict table for a
9877          function could be more than the size in MB given by this
9878          parameter, the register allocator instead uses a faster,
9879          simpler, and lower-quality algorithm that does not require
9880          building a pseudo-register conflict table.  The default value
9881          of the parameter is 2000.
9882
9883    `ira-loop-reserved-regs'
9884          IRA can be used to evaluate more accurate register pressure
9885          in loops for decisions to move loop invariants (see `-O3').
9886          The number of available registers reserved for some other
9887          purposes is given by this parameter.  The default value of
9888          the parameter is 2, which is the minimal number of registers
9889          needed by typical instructions.  This value is the best found
9890          from numerous experiments.
9891
9892    `lra-inheritance-ebb-probability-cutoff'
9893          LRA tries to reuse values reloaded in registers in subsequent
9894          insns.  This optimization is called inheritance.  EBB is used
9895          as a region to do this optimization.  The parameter defines a
9896          minimal fall-through edge probability in percentage used to
9897          add BB to inheritance EBB in LRA.  The default value of the
9898          parameter is 40.  The value was chosen from numerous runs of
9899          SPEC2000 on x86-64.
9900
9901    `loop-invariant-max-bbs-in-loop'
9902          Loop invariant motion can be very expensive, both in
9903          compilation time and in amount of needed compile-time memory,
9904          with very large loops.  Loops with more basic blocks than
9905          this parameter won't have loop invariant motion optimization
9906          performed on them.  The default value of the parameter is
9907          1000 for `-O1' and 10000 for `-O2' and above.
9908
9909    `loop-max-datarefs-for-datadeps'
9910          Building data dapendencies is expensive for very large loops.
9911          This parameter limits the number of data references in loops
9912          that are considered for data dependence analysis.  These
9913          large loops are no handled by the optimizations using loop
9914          data dependencies.  The default value is 1000.
9915
9916    `max-vartrack-size'
9917          Sets a maximum number of hash table slots to use during
9918          variable tracking dataflow analysis of any function.  If this
9919          limit is exceeded with variable tracking at assignments
9920          enabled, analysis for that function is retried without it,
9921          after removing all debug insns from the function.  If the
9922          limit is exceeded even without debug insns, var tracking
9923          analysis is completely disabled for the function.  Setting
9924          the parameter to zero makes it unlimited.
9925
9926    `max-vartrack-expr-depth'
9927          Sets a maximum number of recursion levels when attempting to
9928          map variable names or debug temporaries to value expressions.
9929          This trades compilation time for more complete debug
9930          information.  If this is set too low, value expressions that
9931          are available and could be represented in debug information
9932          may end up not being used; setting this higher may enable the
9933          compiler to find more complex debug expressions, but compile
9934          time and memory use may grow.  The default is 12.
9935
9936    `min-nondebug-insn-uid'
9937          Use uids starting at this parameter for nondebug insns.  The
9938          range below the parameter is reserved exclusively for debug
9939          insns created by `-fvar-tracking-assignments', but debug
9940          insns may get (non-overlapping) uids above it if the reserved
9941          range is exhausted.
9942
9943    `ipa-sra-ptr-growth-factor'
9944          IPA-SRA replaces a pointer to an aggregate with one or more
9945          new parameters only when their cumulative size is less or
9946          equal to `ipa-sra-ptr-growth-factor' times the size of the
9947          original pointer parameter.
9948
9949    `sra-max-scalarization-size-Ospeed'
9950
9951    `sra-max-scalarization-size-Osize'
9952          The two Scalar Reduction of Aggregates passes (SRA and
9953          IPA-SRA) aim to replace scalar parts of aggregates with uses
9954          of independent scalar variables.  These parameters control
9955          the maximum size, in storage units, of aggregate which is
9956          considered for replacement when compiling for speed
9957          (`sra-max-scalarization-size-Ospeed') or size
9958          (`sra-max-scalarization-size-Osize') respectively.
9959
9960    `tm-max-aggregate-size'
9961          When making copies of thread-local variables in a
9962          transaction, this parameter specifies the size in bytes after
9963          which variables are saved with the logging functions as
9964          opposed to save/restore code sequence pairs.  This option
9965          only applies when using `-fgnu-tm'.
9966
9967    `graphite-max-nb-scop-params'
9968          To avoid exponential effects in the Graphite loop transforms,
9969          the number of parameters in a Static Control Part (SCoP) is
9970          bounded.  The default value is 10 parameters.  A variable
9971          whose value is unknown at compilation time and defined
9972          outside a SCoP is a parameter of the SCoP.
9973
9974    `graphite-max-bbs-per-function'
9975          To avoid exponential effects in the detection of SCoPs, the
9976          size of the functions analyzed by Graphite is bounded.  The
9977          default value is 100 basic blocks.
9978
9979    `loop-block-tile-size'
9980          Loop blocking or strip mining transforms, enabled with
9981          `-floop-block' or `-floop-strip-mine', strip mine each loop
9982          in the loop nest by a given number of iterations.  The strip
9983          length can be changed using the `loop-block-tile-size'
9984          parameter.  The default value is 51 iterations.
9985
9986    `loop-unroll-jam-size'
9987          Specify the unroll factor for the `-floop-unroll-and-jam'
9988          option.  The default value is 4.
9989
9990    `loop-unroll-jam-depth'
9991          Specify the dimension to be unrolled (counting from the most
9992          inner loop) for the  `-floop-unroll-and-jam'.  The default
9993          value is 2.
9994
9995    `ipa-cp-value-list-size'
9996          IPA-CP attempts to track all possible values and types passed
9997          to a function's parameter in order to propagate them and
9998          perform devirtualization.  `ipa-cp-value-list-size' is the
9999          maximum number of values and types it stores per one formal
10000          parameter of a function.
10001
10002    `ipa-cp-eval-threshold'
10003          IPA-CP calculates its own score of cloning profitability
10004          heuristics and performs those cloning opportunities with
10005          scores that exceed `ipa-cp-eval-threshold'.
10006
10007    `ipa-cp-recursion-penalty'
10008          Percentage penalty the recursive functions will receive when
10009          they are evaluated for cloning.
10010
10011    `ipa-cp-single-call-penalty'
10012          Percentage penalty functions containg a single call to another
10013          function will receive when they are evaluated for cloning.
10014
10015    `ipa-max-agg-items'
10016          IPA-CP is also capable to propagate a number of scalar values
10017          passed in an aggregate. `ipa-max-agg-items' controls the
10018          maximum number of such values per one parameter.
10019
10020    `ipa-cp-loop-hint-bonus'
10021          When IPA-CP determines that a cloning candidate would make
10022          the number of iterations of a loop known, it adds a bonus of
10023          `ipa-cp-loop-hint-bonus' to the profitability score of the
10024          candidate.
10025
10026    `ipa-cp-array-index-hint-bonus'
10027          When IPA-CP determines that a cloning candidate would make
10028          the index of an array access known, it adds a bonus of
10029          `ipa-cp-array-index-hint-bonus' to the profitability score of
10030          the candidate.
10031
10032    `ipa-max-aa-steps'
10033          During its analysis of function bodies, IPA-CP employs alias
10034          analysis in order to track values pointed to by function
10035          parameters.  In order not spend too much time analyzing huge
10036          functions, it gives up and consider all memory clobbered
10037          after examining `ipa-max-aa-steps' statements modifying
10038          memory.
10039
10040    `lto-partitions'
10041          Specify desired number of partitions produced during WHOPR
10042          compilation.  The number of partitions should exceed the
10043          number of CPUs used for compilation.  The default value is 32.
10044
10045    `lto-minpartition'
10046          Size of minimal partition for WHOPR (in estimated
10047          instructions).  This prevents expenses of splitting very
10048          small programs into too many partitions.
10049
10050    `cxx-max-namespaces-for-diagnostic-help'
10051          The maximum number of namespaces to consult for suggestions
10052          when C++ name lookup fails for an identifier.  The default is
10053          1000.
10054
10055    `sink-frequency-threshold'
10056          The maximum relative execution frequency (in percents) of the
10057          target block relative to a statement's original block to
10058          allow statement sinking of a statement.  Larger numbers
10059          result in more aggressive statement sinking.  The default
10060          value is 75.  A small positive adjustment is applied for
10061          statements with memory operands as those are even more
10062          profitable so sink.
10063
10064    `max-stores-to-sink'
10065          The maximum number of conditional stores paires that can be
10066          sunk.  Set to 0 if either vectorization (`-ftree-vectorize')
10067          or if-conversion (`-ftree-loop-if-convert') is disabled.  The
10068          default is 2.
10069
10070    `allow-store-data-races'
10071          Allow optimizers to introduce new data races on stores.  Set
10072          to 1 to allow, otherwise to 0.  This option is enabled by
10073          default at optimization level `-Ofast'.
10074
10075    `case-values-threshold'
10076          The smallest number of different values for which it is best
10077          to use a jump-table instead of a tree of conditional
10078          branches.  If the value is 0, use the default for the
10079          machine.  The default is 0.
10080
10081    `tree-reassoc-width'
10082          Set the maximum number of instructions executed in parallel in
10083          reassociated tree. This parameter overrides target dependent
10084          heuristics used by default if has non zero value.
10085
10086    `sched-pressure-algorithm'
10087          Choose between the two available implementations of
10088          `-fsched-pressure'.  Algorithm 1 is the original
10089          implementation and is the more likely to prevent instructions
10090          from being reordered.  Algorithm 2 was designed to be a
10091          compromise between the relatively conservative approach taken
10092          by algorithm 1 and the rather aggressive approach taken by
10093          the default scheduler.  It relies more heavily on having a
10094          regular register file and accurate register pressure classes.
10095          See `haifa-sched.c' in the GCC sources for more details.
10096
10097          The default choice depends on the target.
10098
10099    `max-slsr-cand-scan'
10100          Set the maximum number of existing candidates that are
10101          considered when seeking a basis for a new straight-line
10102          strength reduction candidate.
10103
10104    `asan-globals'
10105          Enable buffer overflow detection for global objects.  This
10106          kind of protection is enabled by default if you are using
10107          `-fsanitize=address' option.  To disable global objects
10108          protection use `--param asan-globals=0'.
10109
10110    `asan-stack'
10111          Enable buffer overflow detection for stack objects.  This
10112          kind of protection is enabled by default when
10113          using`-fsanitize=address'.  To disable stack protection use
10114          `--param asan-stack=0' option.
10115
10116    `asan-instrument-reads'
10117          Enable buffer overflow detection for memory reads.  This kind
10118          of protection is enabled by default when using
10119          `-fsanitize=address'.  To disable memory reads protection use
10120          `--param asan-instrument-reads=0'.
10121
10122    `asan-instrument-writes'
10123          Enable buffer overflow detection for memory writes.  This
10124          kind of protection is enabled by default when using
10125          `-fsanitize=address'.  To disable memory writes protection use
10126          `--param asan-instrument-writes=0' option.
10127
10128    `asan-memintrin'
10129          Enable detection for built-in functions.  This kind of
10130          protection is enabled by default when using
10131          `-fsanitize=address'.  To disable built-in functions
10132          protection use `--param asan-memintrin=0'.
10133
10134    `asan-use-after-return'
10135          Enable detection of use-after-return.  This kind of protection
10136          is enabled by default when using `-fsanitize=address' option.
10137          To disable use-after-return detection use `--param
10138          asan-use-after-return=0'.
10139
10140    `asan-instrumentation-with-call-threshold'
10141          If number of memory accesses in function being instrumented
10142          is greater or equal to this number, use callbacks instead of
10143          inline checks.  E.g. to disable inline code use `--param
10144          asan-instrumentation-with-call-threshold=0'.
10145
10146    `chkp-max-ctor-size'
10147          Static constructors generated by Pointer Bounds Checker may
10148          become very large and significantly increase compile time at
10149          optimization level `-O1' and higher.  This parameter is a
10150          maximum nubmer of statements in a single generated
10151          constructor.  Default value is 5000.
10152
10153    `max-fsm-thread-path-insns'
10154          Maximum number of instructions to copy when duplicating
10155          blocks on a finite state automaton jump thread path.  The
10156          default is 100.
10157
10158    `max-fsm-thread-length'
10159          Maximum number of basic blocks on a finite state automaton
10160          jump thread path.  The default is 10.
10161
10162    `max-fsm-thread-paths'
10163          Maximum number of new jump thread paths to create for a
10164          finite state automaton.  The default is 50.
10165
10166
10167
10168File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
10169
101703.11 Options Controlling the Preprocessor
10171=========================================
10172
10173These options control the C preprocessor, which is run on each C source
10174file before actual compilation.
10175
10176 If you use the `-E' option, nothing is done except preprocessing.
10177Some of these options make sense only together with `-E' because they
10178cause the preprocessor output to be unsuitable for actual compilation.
10179
10180`-Wp,OPTION'
10181     You can use `-Wp,OPTION' to bypass the compiler driver and pass
10182     OPTION directly through to the preprocessor.  If OPTION contains
10183     commas, it is split into multiple options at the commas.  However,
10184     many options are modified, translated or interpreted by the
10185     compiler driver before being passed to the preprocessor, and `-Wp'
10186     forcibly bypasses this phase.  The preprocessor's direct interface
10187     is undocumented and subject to change, so whenever possible you
10188     should avoid using `-Wp' and let the driver handle the options
10189     instead.
10190
10191`-Xpreprocessor OPTION'
10192     Pass OPTION as an option to the preprocessor.  You can use this to
10193     supply system-specific preprocessor options that GCC does not
10194     recognize.
10195
10196     If you want to pass an option that takes an argument, you must use
10197     `-Xpreprocessor' twice, once for the option and once for the
10198     argument.
10199
10200`-no-integrated-cpp'
10201     Perform preprocessing as a separate pass before compilation.  By
10202     default, GCC performs preprocessing as an integrated part of input
10203     tokenization and parsing.  If this option is provided, the
10204     appropriate language front end (`cc1', `cc1plus', or `cc1obj' for
10205     C, C++, and Objective-C, respectively) is instead invoked twice,
10206     once for preprocessing only and once for actual compilation of the
10207     preprocessed input.  This option may be useful in conjunction with
10208     the `-B' or `-wrapper' options to specify an alternate
10209     preprocessor or perform additional processing of the program
10210     source between normal preprocessing and compilation.
10211
10212`-D NAME'
10213     Predefine NAME as a macro, with definition `1'.
10214
10215`-D NAME=DEFINITION'
10216     The contents of DEFINITION are tokenized and processed as if they
10217     appeared during translation phase three in a `#define' directive.
10218     In particular, the definition will be truncated by embedded
10219     newline characters.
10220
10221     If you are invoking the preprocessor from a shell or shell-like
10222     program you may need to use the shell's quoting syntax to protect
10223     characters such as spaces that have a meaning in the shell syntax.
10224
10225     If you wish to define a function-like macro on the command line,
10226     write its argument list with surrounding parentheses before the
10227     equals sign (if any).  Parentheses are meaningful to most shells,
10228     so you will need to quote the option.  With `sh' and `csh',
10229     `-D'NAME(ARGS...)=DEFINITION'' works.
10230
10231     `-D' and `-U' options are processed in the order they are given on
10232     the command line.  All `-imacros FILE' and `-include FILE' options
10233     are processed after all `-D' and `-U' options.
10234
10235`-U NAME'
10236     Cancel any previous definition of NAME, either built in or
10237     provided with a `-D' option.
10238
10239`-undef'
10240     Do not predefine any system-specific or GCC-specific macros.  The
10241     standard predefined macros remain defined.
10242
10243`-I DIR'
10244     Add the directory DIR to the list of directories to be searched
10245     for header files.  Directories named by `-I' are searched before
10246     the standard system include directories.  If the directory DIR is
10247     a standard system include directory, the option is ignored to
10248     ensure that the default search order for system directories and
10249     the special treatment of system headers are not defeated .  If DIR
10250     begins with `=', then the `=' will be replaced by the sysroot
10251     prefix; see `--sysroot' and `-isysroot'.
10252
10253`-o FILE'
10254     Write output to FILE.  This is the same as specifying FILE as the
10255     second non-option argument to `cpp'.  `gcc' has a different
10256     interpretation of a second non-option argument, so you must use
10257     `-o' to specify the output file.
10258
10259`-Wall'
10260     Turns on all optional warnings which are desirable for normal code.
10261     At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
10262     warning about integer promotion causing a change of sign in `#if'
10263     expressions.  Note that many of the preprocessor's warnings are on
10264     by default and have no options to control them.
10265
10266`-Wcomment'
10267`-Wcomments'
10268     Warn whenever a comment-start sequence `/*' appears in a `/*'
10269     comment, or whenever a backslash-newline appears in a `//' comment.
10270     (Both forms have the same effect.)
10271
10272`-Wtrigraphs'
10273     Most trigraphs in comments cannot affect the meaning of the
10274     program.  However, a trigraph that would form an escaped newline
10275     (`??/' at the end of a line) can, by changing where the comment
10276     begins or ends.  Therefore, only trigraphs that would form escaped
10277     newlines produce warnings inside a comment.
10278
10279     This option is implied by `-Wall'.  If `-Wall' is not given, this
10280     option is still enabled unless trigraphs are enabled.  To get
10281     trigraph conversion without warnings, but get the other `-Wall'
10282     warnings, use `-trigraphs -Wall -Wno-trigraphs'.
10283
10284`-Wtraditional'
10285     Warn about certain constructs that behave differently in
10286     traditional and ISO C.  Also warn about ISO C constructs that have
10287     no traditional C equivalent, and problematic constructs which
10288     should be avoided.
10289
10290`-Wundef'
10291     Warn whenever an identifier which is not a macro is encountered in
10292     an `#if' directive, outside of `defined'.  Such identifiers are
10293     replaced with zero.
10294
10295`-Wunused-macros'
10296     Warn about macros defined in the main file that are unused.  A
10297     macro is "used" if it is expanded or tested for existence at least
10298     once.  The preprocessor will also warn if the macro has not been
10299     used at the time it is redefined or undefined.
10300
10301     Built-in macros, macros defined on the command line, and macros
10302     defined in include files are not warned about.
10303
10304     _Note:_ If a macro is actually used, but only used in skipped
10305     conditional blocks, then CPP will report it as unused.  To avoid
10306     the warning in such a case, you might improve the scope of the
10307     macro's definition by, for example, moving it into the first
10308     skipped block.  Alternatively, you could provide a dummy use with
10309     something like:
10310
10311          #if defined the_macro_causing_the_warning
10312          #endif
10313
10314`-Wendif-labels'
10315     Warn whenever an `#else' or an `#endif' are followed by text.
10316     This usually happens in code of the form
10317
10318          #if FOO
10319          ...
10320          #else FOO
10321          ...
10322          #endif FOO
10323
10324     The second and third `FOO' should be in comments, but often are not
10325     in older programs.  This warning is on by default.
10326
10327`-Werror'
10328     Make all warnings into hard errors.  Source code which triggers
10329     warnings will be rejected.
10330
10331`-Wsystem-headers'
10332     Issue warnings for code in system headers.  These are normally
10333     unhelpful in finding bugs in your own code, therefore suppressed.
10334     If you are responsible for the system library, you may want to see
10335     them.
10336
10337`-w'
10338     Suppress all warnings, including those which GNU CPP issues by
10339     default.
10340
10341`-pedantic'
10342     Issue all the mandatory diagnostics listed in the C standard.
10343     Some of them are left out by default, since they trigger
10344     frequently on harmless code.
10345
10346`-pedantic-errors'
10347     Issue all the mandatory diagnostics, and make all mandatory
10348     diagnostics into errors.  This includes mandatory diagnostics that
10349     GCC issues without `-pedantic' but treats as warnings.
10350
10351`-M'
10352     Instead of outputting the result of preprocessing, output a rule
10353     suitable for `make' describing the dependencies of the main source
10354     file.  The preprocessor outputs one `make' rule containing the
10355     object file name for that source file, a colon, and the names of
10356     all the included files, including those coming from `-include' or
10357     `-imacros' command-line options.
10358
10359     Unless specified explicitly (with `-MT' or `-MQ'), the object file
10360     name consists of the name of the source file with any suffix
10361     replaced with object file suffix and with any leading directory
10362     parts removed.  If there are many included files then the rule is
10363     split into several lines using `\'-newline.  The rule has no
10364     commands.
10365
10366     This option does not suppress the preprocessor's debug output,
10367     such as `-dM'.  To avoid mixing such debug output with the
10368     dependency rules you should explicitly specify the dependency
10369     output file with `-MF', or use an environment variable like
10370     `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
10371     output will still be sent to the regular output stream as normal.
10372
10373     Passing `-M' to the driver implies `-E', and suppresses warnings
10374     with an implicit `-w'.
10375
10376`-MM'
10377     Like `-M' but do not mention header files that are found in system
10378     header directories, nor header files that are included, directly
10379     or indirectly, from such a header.
10380
10381     This implies that the choice of angle brackets or double quotes in
10382     an `#include' directive does not in itself determine whether that
10383     header will appear in `-MM' dependency output.  This is a slight
10384     change in semantics from GCC versions 3.0 and earlier.
10385
10386`-MF FILE'
10387     When used with `-M' or `-MM', specifies a file to write the
10388     dependencies to.  If no `-MF' switch is given the preprocessor
10389     sends the rules to the same place it would have sent preprocessed
10390     output.
10391
10392     When used with the driver options `-MD' or `-MMD', `-MF' overrides
10393     the default dependency output file.
10394
10395`-MG'
10396     In conjunction with an option such as `-M' requesting dependency
10397     generation, `-MG' assumes missing header files are generated files
10398     and adds them to the dependency list without raising an error.
10399     The dependency filename is taken directly from the `#include'
10400     directive without prepending any path.  `-MG' also suppresses
10401     preprocessed output, as a missing header file renders this useless.
10402
10403     This feature is used in automatic updating of makefiles.
10404
10405`-MP'
10406     This option instructs CPP to add a phony target for each dependency
10407     other than the main file, causing each to depend on nothing.  These
10408     dummy rules work around errors `make' gives if you remove header
10409     files without updating the `Makefile' to match.
10410
10411     This is typical output:
10412
10413          test.o: test.c test.h
10414
10415          test.h:
10416
10417`-MT TARGET'
10418     Change the target of the rule emitted by dependency generation.  By
10419     default CPP takes the name of the main input file, deletes any
10420     directory components and any file suffix such as `.c', and appends
10421     the platform's usual object suffix.  The result is the target.
10422
10423     An `-MT' option will set the target to be exactly the string you
10424     specify.  If you want multiple targets, you can specify them as a
10425     single argument to `-MT', or use multiple `-MT' options.
10426
10427     For example, `-MT '$(objpfx)foo.o'' might give
10428
10429          $(objpfx)foo.o: foo.c
10430
10431`-MQ TARGET'
10432     Same as `-MT', but it quotes any characters which are special to
10433     Make.  `-MQ '$(objpfx)foo.o'' gives
10434
10435          $$(objpfx)foo.o: foo.c
10436
10437     The default target is automatically quoted, as if it were given
10438     with `-MQ'.
10439
10440`-MD'
10441     `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
10442     implied.  The driver determines FILE based on whether an `-o'
10443     option is given.  If it is, the driver uses its argument but with
10444     a suffix of `.d', otherwise it takes the name of the input file,
10445     removes any directory components and suffix, and applies a `.d'
10446     suffix.
10447
10448     If `-MD' is used in conjunction with `-E', any `-o' switch is
10449     understood to specify the dependency output file (*note -MF:
10450     dashMF.), but if used without `-E', each `-o' is understood to
10451     specify a target object file.
10452
10453     Since `-E' is not implied, `-MD' can be used to generate a
10454     dependency output file as a side-effect of the compilation process.
10455
10456`-MMD'
10457     Like `-MD' except mention only user header files, not system
10458     header files.
10459
10460`-fpch-deps'
10461     When using precompiled headers (*note Precompiled Headers::), this
10462     flag will cause the dependency-output flags to also list the files
10463     from the precompiled header's dependencies.  If not specified only
10464     the precompiled header would be listed and not the files that were
10465     used to create it because those files are not consulted when a
10466     precompiled header is used.
10467
10468`-fpch-preprocess'
10469     This option allows use of a precompiled header (*note Precompiled
10470     Headers::) together with `-E'.  It inserts a special `#pragma',
10471     `#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
10472     place where the precompiled header was found, and its FILENAME.
10473     When `-fpreprocessed' is in use, GCC recognizes this `#pragma' and
10474     loads the PCH.
10475
10476     This option is off by default, because the resulting preprocessed
10477     output is only really suitable as input to GCC.  It is switched on
10478     by `-save-temps'.
10479
10480     You should not write this `#pragma' in your own code, but it is
10481     safe to edit the filename if the PCH file is available in a
10482     different location.  The filename may be absolute or it may be
10483     relative to GCC's current directory.
10484
10485`-x c'
10486`-x c++'
10487`-x objective-c'
10488`-x assembler-with-cpp'
10489     Specify the source language: C, C++, Objective-C, or assembly.
10490     This has nothing to do with standards conformance or extensions;
10491     it merely selects which base syntax to expect.  If you give none
10492     of these options, cpp will deduce the language from the extension
10493     of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
10494     extensions for C++ and assembly are also recognized.  If cpp does
10495     not recognize the extension, it will treat the file as C; this is
10496     the most generic mode.
10497
10498     _Note:_ Previous versions of cpp accepted a `-lang' option which
10499     selected both the language and the standards conformance level.
10500     This option has been removed, because it conflicts with the `-l'
10501     option.
10502
10503`-std=STANDARD'
10504`-ansi'
10505     Specify the standard to which the code should conform.  Currently
10506     CPP knows about C and C++ standards; others may be added in the
10507     future.
10508
10509     STANDARD may be one of:
10510    `c90'
10511    `c89'
10512    `iso9899:1990'
10513          The ISO C standard from 1990.  `c90' is the customary
10514          shorthand for this version of the standard.
10515
10516          The `-ansi' option is equivalent to `-std=c90'.
10517
10518    `iso9899:199409'
10519          The 1990 C standard, as amended in 1994.
10520
10521    `iso9899:1999'
10522    `c99'
10523    `iso9899:199x'
10524    `c9x'
10525          The revised ISO C standard, published in December 1999.
10526          Before publication, this was known as C9X.
10527
10528    `iso9899:2011'
10529    `c11'
10530    `c1x'
10531          The revised ISO C standard, published in December 2011.
10532          Before publication, this was known as C1X.
10533
10534    `gnu90'
10535    `gnu89'
10536          The 1990 C standard plus GNU extensions.  This is the default.
10537
10538    `gnu99'
10539    `gnu9x'
10540          The 1999 C standard plus GNU extensions.
10541
10542    `gnu11'
10543    `gnu1x'
10544          The 2011 C standard plus GNU extensions.
10545
10546    `c++98'
10547          The 1998 ISO C++ standard plus amendments.
10548
10549    `gnu++98'
10550          The same as `-std=c++98' plus GNU extensions.  This is the
10551          default for C++ code.
10552
10553`-I-'
10554     Split the include path.  Any directories specified with `-I'
10555     options before `-I-' are searched only for headers requested with
10556     `#include "FILE"'; they are not searched for `#include <FILE>'.
10557     If additional directories are specified with `-I' options after
10558     the `-I-', those directories are searched for all `#include'
10559     directives.
10560
10561     In addition, `-I-' inhibits the use of the directory of the current
10562     file directory as the first search directory for `#include "FILE"'.
10563     This option has been deprecated.
10564
10565`-nostdinc'
10566     Do not search the standard system directories for header files.
10567     Only the directories you have specified with `-I' options (and the
10568     directory of the current file, if appropriate) are searched.
10569
10570`-nostdinc++'
10571     Do not search for header files in the C++-specific standard
10572     directories, but do still search the other standard directories.
10573     (This option is used when building the C++ library.)
10574
10575`-include FILE'
10576     Process FILE as if `#include "file"' appeared as the first line of
10577     the primary source file.  However, the first directory searched
10578     for FILE is the preprocessor's working directory _instead of_ the
10579     directory containing the main source file.  If not found there, it
10580     is searched for in the remainder of the `#include "..."' search
10581     chain as normal.
10582
10583     If multiple `-include' options are given, the files are included
10584     in the order they appear on the command line.
10585
10586`-imacros FILE'
10587     Exactly like `-include', except that any output produced by
10588     scanning FILE is thrown away.  Macros it defines remain defined.
10589     This allows you to acquire all the macros from a header without
10590     also processing its declarations.
10591
10592     All files specified by `-imacros' are processed before all files
10593     specified by `-include'.
10594
10595`-idirafter DIR'
10596     Search DIR for header files, but do it _after_ all directories
10597     specified with `-I' and the standard system directories have been
10598     exhausted.  DIR is treated as a system include directory.  If DIR
10599     begins with `=', then the `=' will be replaced by the sysroot
10600     prefix; see `--sysroot' and `-isysroot'.
10601
10602`-iprefix PREFIX'
10603     Specify PREFIX as the prefix for subsequent `-iwithprefix'
10604     options.  If the prefix represents a directory, you should include
10605     the final `/'.
10606
10607`-iwithprefix DIR'
10608`-iwithprefixbefore DIR'
10609     Append DIR to the prefix specified previously with `-iprefix', and
10610     add the resulting directory to the include search path.
10611     `-iwithprefixbefore' puts it in the same place `-I' would;
10612     `-iwithprefix' puts it where `-idirafter' would.
10613
10614`-isysroot DIR'
10615     This option is like the `--sysroot' option, but applies only to
10616     header files (except for Darwin targets, where it applies to both
10617     header files and libraries).  See the `--sysroot' option for more
10618     information.
10619
10620`-imultilib DIR'
10621     Use DIR as a subdirectory of the directory containing
10622     target-specific C++ headers.
10623
10624`-isystem DIR'
10625     Search DIR for header files, after all directories specified by
10626     `-I' but before the standard system directories.  Mark it as a
10627     system directory, so that it gets the same special treatment as is
10628     applied to the standard system directories.  If DIR begins with
10629     `=', then the `=' will be replaced by the sysroot prefix; see
10630     `--sysroot' and `-isysroot'.
10631
10632`-cxx-isystem DIR'
10633     Search DIR for C++ header files, after all directories specified by
10634     `-I' but before the standard system directories.  Mark it as a
10635     system directory, so that it gets the same special treatment as is
10636     applied to the standard system directories.
10637
10638`-iquote DIR'
10639     Search DIR only for header files requested with `#include "FILE"';
10640     they are not searched for `#include <FILE>', before all
10641     directories specified by `-I' and before the standard system
10642     directories.  If DIR begins with `=', then the `=' will be replaced
10643     by the sysroot prefix; see `--sysroot' and `-isysroot'.
10644
10645`-fdirectives-only'
10646     When preprocessing, handle directives, but do not expand macros.
10647
10648     The option's behavior depends on the `-E' and `-fpreprocessed'
10649     options.
10650
10651     With `-E', preprocessing is limited to the handling of directives
10652     such as `#define', `#ifdef', and `#error'.  Other preprocessor
10653     operations, such as macro expansion and trigraph conversion are
10654     not performed.  In addition, the `-dD' option is implicitly
10655     enabled.
10656
10657     With `-fpreprocessed', predefinition of command line and most
10658     builtin macros is disabled.  Macros such as `__LINE__', which are
10659     contextually dependent, are handled normally.  This enables
10660     compilation of files previously preprocessed with `-E
10661     -fdirectives-only'.
10662
10663     With both `-E' and `-fpreprocessed', the rules for
10664     `-fpreprocessed' take precedence.  This enables full preprocessing
10665     of files previously preprocessed with `-E -fdirectives-only'.
10666
10667`-iremap SRC:DST'
10668     Replace the prefix SRC in __FILE__ with DST at expansion time.
10669     This option can be specified more than once.  Processing stops at
10670     the first match.
10671
10672`-fdollars-in-identifiers'
10673     Accept `$' in identifiers.
10674
10675`-fextended-identifiers'
10676     Accept universal character names in identifiers.  This option is
10677     enabled by default for C99 (and later C standard versions) and C++.
10678
10679`-fno-canonical-system-headers'
10680     When preprocessing, do not shorten system header paths with
10681     canonicalization.
10682
10683`-fpreprocessed'
10684     Indicate to the preprocessor that the input file has already been
10685     preprocessed.  This suppresses things like macro expansion,
10686     trigraph conversion, escaped newline splicing, and processing of
10687     most directives.  The preprocessor still recognizes and removes
10688     comments, so that you can pass a file preprocessed with `-C' to
10689     the compiler without problems.  In this mode the integrated
10690     preprocessor is little more than a tokenizer for the front ends.
10691
10692     `-fpreprocessed' is implicit if the input file has one of the
10693     extensions `.i', `.ii' or `.mi'.  These are the extensions that
10694     GCC uses for preprocessed files created by `-save-temps'.
10695
10696`-ftabstop=WIDTH'
10697     Set the distance between tab stops.  This helps the preprocessor
10698     report correct column numbers in warnings or errors, even if tabs
10699     appear on the line.  If the value is less than 1 or greater than
10700     100, the option is ignored.  The default is 8.
10701
10702`-fdebug-cpp'
10703     This option is only useful for debugging GCC.  When used with
10704     `-E', dumps debugging information about location maps.  Every
10705     token in the output is preceded by the dump of the map its location
10706     belongs to.  The dump of the map holding the location of a token
10707     would be:
10708          {`P':`/file/path';`F':`/includer/path';`L':LINE_NUM;`C':COL_NUM;`S':SYSTEM_HEADER_P;`M':MAP_ADDRESS;`E':MACRO_EXPANSION_P,`loc':LOCATION}
10709
10710     When used without `-E', this option has no effect.
10711
10712`-ftrack-macro-expansion[=LEVEL]'
10713     Track locations of tokens across macro expansions. This allows the
10714     compiler to emit diagnostic about the current macro expansion stack
10715     when a compilation error occurs in a macro expansion. Using this
10716     option makes the preprocessor and the compiler consume more
10717     memory. The LEVEL parameter can be used to choose the level of
10718     precision of token location tracking thus decreasing the memory
10719     consumption if necessary. Value `0' of LEVEL de-activates this
10720     option just as if no `-ftrack-macro-expansion' was present on the
10721     command line. Value `1' tracks tokens locations in a degraded mode
10722     for the sake of minimal memory overhead. In this mode all tokens
10723     resulting from the expansion of an argument of a function-like
10724     macro have the same location. Value `2' tracks tokens locations
10725     completely. This value is the most memory hungry.  When this
10726     option is given no argument, the default parameter value is `2'.
10727
10728     Note that `-ftrack-macro-expansion=2' is activated by default.
10729
10730`-fexec-charset=CHARSET'
10731     Set the execution character set, used for string and character
10732     constants.  The default is UTF-8.  CHARSET can be any encoding
10733     supported by the system's `iconv' library routine.
10734
10735`-fwide-exec-charset=CHARSET'
10736     Set the wide execution character set, used for wide string and
10737     character constants.  The default is UTF-32 or UTF-16, whichever
10738     corresponds to the width of `wchar_t'.  As with `-fexec-charset',
10739     CHARSET can be any encoding supported by the system's `iconv'
10740     library routine; however, you will have problems with encodings
10741     that do not fit exactly in `wchar_t'.
10742
10743`-finput-charset=CHARSET'
10744     Set the input character set, used for translation from the
10745     character set of the input file to the source character set used
10746     by GCC.  If the locale does not specify, or GCC cannot get this
10747     information from the locale, the default is UTF-8.  This can be
10748     overridden by either the locale or this command-line option.
10749     Currently the command-line option takes precedence if there's a
10750     conflict.  CHARSET can be any encoding supported by the system's
10751     `iconv' library routine.
10752
10753`-fworking-directory'
10754     Enable generation of linemarkers in the preprocessor output that
10755     will let the compiler know the current working directory at the
10756     time of preprocessing.  When this option is enabled, the
10757     preprocessor will emit, after the initial linemarker, a second
10758     linemarker with the current working directory followed by two
10759     slashes.  GCC will use this directory, when it's present in the
10760     preprocessed input, as the directory emitted as the current
10761     working directory in some debugging information formats.  This
10762     option is implicitly enabled if debugging information is enabled,
10763     but this can be inhibited with the negated form
10764     `-fno-working-directory'.  If the `-P' flag is present in the
10765     command line, this option has no effect, since no `#line'
10766     directives are emitted whatsoever.
10767
10768`-fno-show-column'
10769     Do not print column numbers in diagnostics.  This may be necessary
10770     if diagnostics are being scanned by a program that does not
10771     understand the column numbers, such as `dejagnu'.
10772
10773`-A PREDICATE=ANSWER'
10774     Make an assertion with the predicate PREDICATE and answer ANSWER.
10775     This form is preferred to the older form `-A PREDICATE(ANSWER)',
10776     which is still supported, because it does not use shell special
10777     characters.
10778
10779`-A -PREDICATE=ANSWER'
10780     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
10781
10782`-dCHARS'
10783     CHARS is a sequence of one or more of the following characters,
10784     and must not be preceded by a space.  Other characters are
10785     interpreted by the compiler proper, or reserved for future
10786     versions of GCC, and so are silently ignored.  If you specify
10787     characters whose behavior conflicts, the result is undefined.
10788
10789    `M'
10790          Instead of the normal output, generate a list of `#define'
10791          directives for all the macros defined during the execution of
10792          the preprocessor, including predefined macros.  This gives
10793          you a way of finding out what is predefined in your version
10794          of the preprocessor.  Assuming you have no file `foo.h', the
10795          command
10796
10797               touch foo.h; cpp -dM foo.h
10798
10799          will show all the predefined macros.
10800
10801          If you use `-dM' without the `-E' option, `-dM' is
10802          interpreted as a synonym for `-fdump-rtl-mach'.  *Note
10803          Debugging Options: (gcc)Debugging Options.
10804
10805    `D'
10806          Like `M' except in two respects: it does _not_ include the
10807          predefined macros, and it outputs _both_ the `#define'
10808          directives and the result of preprocessing.  Both kinds of
10809          output go to the standard output file.
10810
10811    `N'
10812          Like `D', but emit only the macro names, not their expansions.
10813
10814    `I'
10815          Output `#include' directives in addition to the result of
10816          preprocessing.
10817
10818    `U'
10819          Like `D' except that only macros that are expanded, or whose
10820          definedness is tested in preprocessor directives, are output;
10821          the output is delayed until the use or test of the macro; and
10822          `#undef' directives are also output for macros tested but
10823          undefined at the time.
10824
10825`-P'
10826     Inhibit generation of linemarkers in the output from the
10827     preprocessor.  This might be useful when running the preprocessor
10828     on something that is not C code, and will be sent to a program
10829     which might be confused by the linemarkers.
10830
10831`-C'
10832     Do not discard comments.  All comments are passed through to the
10833     output file, except for comments in processed directives, which
10834     are deleted along with the directive.
10835
10836     You should be prepared for side effects when using `-C'; it causes
10837     the preprocessor to treat comments as tokens in their own right.
10838     For example, comments appearing at the start of what would be a
10839     directive line have the effect of turning that line into an
10840     ordinary source line, since the first token on the line is no
10841     longer a `#'.
10842
10843`-CC'
10844     Do not discard comments, including during macro expansion.  This is
10845     like `-C', except that comments contained within macros are also
10846     passed through to the output file where the macro is expanded.
10847
10848     In addition to the side-effects of the `-C' option, the `-CC'
10849     option causes all C++-style comments inside a macro to be
10850     converted to C-style comments.  This is to prevent later use of
10851     that macro from inadvertently commenting out the remainder of the
10852     source line.
10853
10854     The `-CC' option is generally used to support lint comments.
10855
10856`-traditional-cpp'
10857     Try to imitate the behavior of old-fashioned C preprocessors, as
10858     opposed to ISO C preprocessors.
10859
10860`-trigraphs'
10861     Process trigraph sequences.  These are three-character sequences,
10862     all starting with `??', that are defined by ISO C to stand for
10863     single characters.  For example, `??/' stands for `\', so `'??/n''
10864     is a character constant for a newline.  By default, GCC ignores
10865     trigraphs, but in standard-conforming modes it converts them.  See
10866     the `-std' and `-ansi' options.
10867
10868     The nine trigraphs and their replacements are
10869
10870          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
10871          Replacement:      [    ]    {    }    #    \    ^    |    ~
10872
10873`-remap'
10874     Enable special code to work around file systems which only permit
10875     very short file names, such as MS-DOS.
10876
10877`--help'
10878`--target-help'
10879     Print text describing all the command-line options instead of
10880     preprocessing anything.
10881
10882`-v'
10883     Verbose mode.  Print out GNU CPP's version number at the beginning
10884     of execution, and report the final form of the include path.
10885
10886`-H'
10887     Print the name of each header file used, in addition to other
10888     normal activities.  Each name is indented to show how deep in the
10889     `#include' stack it is.  Precompiled header files are also
10890     printed, even if they are found to be invalid; an invalid
10891     precompiled header file is printed with `...x' and a valid one
10892     with `...!' .
10893
10894`-version'
10895`--version'
10896     Print out GNU CPP's version number.  With one dash, proceed to
10897     preprocess as normal.  With two dashes, exit immediately.
10898
10899
10900File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
10901
109023.12 Passing Options to the Assembler
10903=====================================
10904
10905You can pass options to the assembler.
10906
10907`-Wa,OPTION'
10908     Pass OPTION as an option to the assembler.  If OPTION contains
10909     commas, it is split into multiple options at the commas.
10910
10911`-Xassembler OPTION'
10912     Pass OPTION as an option to the assembler.  You can use this to
10913     supply system-specific assembler options that GCC does not
10914     recognize.
10915
10916     If you want to pass an option that takes an argument, you must use
10917     `-Xassembler' twice, once for the option and once for the argument.
10918
10919
10920
10921File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
10922
109233.13 Options for Linking
10924========================
10925
10926These options come into play when the compiler links object files into
10927an executable output file.  They are meaningless if the compiler is not
10928doing a link step.
10929
10930`OBJECT-FILE-NAME'
10931     A file name that does not end in a special recognized suffix is
10932     considered to name an object file or library.  (Object files are
10933     distinguished from libraries by the linker according to the file
10934     contents.)  If linking is done, these object files are used as
10935     input to the linker.
10936
10937`-c'
10938`-S'
10939`-E'
10940     If any of these options is used, then the linker is not run, and
10941     object file names should not be used as arguments.  *Note Overall
10942     Options::.
10943
10944`-fuse-ld=bfd'
10945     Use the `bfd' linker instead of the default linker.
10946
10947`-fuse-ld=gold'
10948     Use the `gold' linker instead of the default linker.
10949
10950`-lLIBRARY'
10951`-l LIBRARY'
10952     Search the library named LIBRARY when linking.  (The second
10953     alternative with the library as a separate argument is only for
10954     POSIX compliance and is not recommended.)
10955
10956     It makes a difference where in the command you write this option;
10957     the linker searches and processes libraries and object files in
10958     the order they are specified.  Thus, `foo.o -lz bar.o' searches
10959     library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
10960     refers to functions in `z', those functions may not be loaded.
10961
10962     The linker searches a standard list of directories for the library,
10963     which is actually a file named `libLIBRARY.a'.  The linker then
10964     uses this file as if it had been specified precisely by name.
10965
10966     The directories searched include several standard system
10967     directories plus any that you specify with `-L'.
10968
10969     Normally the files found this way are library files--archive files
10970     whose members are object files.  The linker handles an archive
10971     file by scanning through it for members which define symbols that
10972     have so far been referenced but not defined.  But if the file that
10973     is found is an ordinary object file, it is linked in the usual
10974     fashion.  The only difference between using an `-l' option and
10975     specifying a file name is that `-l' surrounds LIBRARY with `lib'
10976     and `.a' and searches several directories.
10977
10978`-lobjc'
10979     You need this special case of the `-l' option in order to link an
10980     Objective-C or Objective-C++ program.
10981
10982`-nostartfiles'
10983     Do not use the standard system startup files when linking.  The
10984     standard system libraries are used normally, unless `-nostdlib' or
10985     `-nodefaultlibs' is used.
10986
10987`-nodefaultlibs'
10988     Do not use the standard system libraries when linking.  Only the
10989     libraries you specify are passed to the linker, and options
10990     specifying linkage of the system libraries, such as
10991     `-static-libgcc' or `-shared-libgcc', are ignored.  The standard
10992     startup files are used normally, unless `-nostartfiles' is used.
10993
10994     The compiler may generate calls to `memcmp', `memset', `memcpy'
10995     and `memmove'.  These entries are usually resolved by entries in
10996     libc.  These entry points should be supplied through some other
10997     mechanism when this option is specified.
10998
10999`-nostdlib'
11000     Do not use the standard system startup files or libraries when
11001     linking.  No startup files and only the libraries you specify are
11002     passed to the linker, and options specifying linkage of the system
11003     libraries, such as `-static-libgcc' or `-shared-libgcc', are
11004     ignored.
11005
11006     The compiler may generate calls to `memcmp', `memset', `memcpy'
11007     and `memmove'.  These entries are usually resolved by entries in
11008     libc.  These entry points should be supplied through some other
11009     mechanism when this option is specified.
11010
11011     One of the standard libraries bypassed by `-nostdlib' and
11012     `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
11013     which GCC uses to overcome shortcomings of particular machines, or
11014     special needs for some languages.  (*Note Interfacing to GCC
11015     Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
11016     most cases, you need `libgcc.a' even when you want to avoid other
11017     standard libraries.  In other words, when you specify `-nostdlib'
11018     or `-nodefaultlibs' you should usually specify `-lgcc' as well.
11019     This ensures that you have no unresolved references to internal GCC
11020     library subroutines.  (An example of such an internal subroutine
11021     is `__main', used to ensure C++ constructors are called; *note
11022     `collect2': (gccint)Collect2.)
11023
11024`-pie'
11025     Produce a position independent executable on targets that support
11026     it.  For predictable results, you must also specify the same set
11027     of options used for compilation (`-fpie', `-fPIE', or model
11028     suboptions) when you specify this linker option.
11029
11030`-rdynamic'
11031     Pass the flag `-export-dynamic' to the ELF linker, on targets that
11032     support it. This instructs the linker to add all symbols, not only
11033     used ones, to the dynamic symbol table. This option is needed for
11034     some uses of `dlopen' or to allow obtaining backtraces from within
11035     a program.
11036
11037`-s'
11038     Remove all symbol table and relocation information from the
11039     executable.
11040
11041`-static'
11042     On systems that support dynamic linking, this prevents linking
11043     with the shared libraries.  On other systems, this option has no
11044     effect.
11045
11046`-shared'
11047     Produce a shared object which can then be linked with other
11048     objects to form an executable.  Not all systems support this
11049     option.  For predictable results, you must also specify the same
11050     set of options used for compilation (`-fpic', `-fPIC', or model
11051     suboptions) when you specify this linker option.(1)
11052
11053`-shared-libgcc'
11054`-static-libgcc'
11055     On systems that provide `libgcc' as a shared library, these options
11056     force the use of either the shared or static version, respectively.
11057     If no shared version of `libgcc' was built when the compiler was
11058     configured, these options have no effect.
11059
11060     There are several situations in which an application should use the
11061     shared `libgcc' instead of the static version.  The most common of
11062     these is when the application wishes to throw and catch exceptions
11063     across different shared libraries.  In that case, each of the
11064     libraries as well as the application itself should use the shared
11065     `libgcc'.
11066
11067     Therefore, the G++ and GCJ drivers automatically add
11068     `-shared-libgcc' whenever you build a shared library or a main
11069     executable, because C++ and Java programs typically use
11070     exceptions, so this is the right thing to do.
11071
11072     If, instead, you use the GCC driver to create shared libraries,
11073     you may find that they are not always linked with the shared
11074     `libgcc'.  If GCC finds, at its configuration time, that you have
11075     a non-GNU linker or a GNU linker that does not support option
11076     `--eh-frame-hdr', it links the shared version of `libgcc' into
11077     shared libraries by default.  Otherwise, it takes advantage of the
11078     linker and optimizes away the linking with the shared version of
11079     `libgcc', linking with the static version of libgcc by default.
11080     This allows exceptions to propagate through such shared libraries,
11081     without incurring relocation costs at library load time.
11082
11083     However, if a library or main executable is supposed to throw or
11084     catch exceptions, you must link it using the G++ or GCJ driver, as
11085     appropriate for the languages used in the program, or using the
11086     option `-shared-libgcc', such that it is linked with the shared
11087     `libgcc'.
11088
11089`-static-libasan'
11090     When the `-fsanitize=address' option is used to link a program,
11091     the GCC driver automatically links against `libasan'.  If
11092     `libasan' is available as a shared library, and the `-static'
11093     option is not used, then this links against the shared version of
11094     `libasan'.  The `-static-libasan' option directs the GCC driver to
11095     link `libasan' statically, without necessarily linking other
11096     libraries statically.
11097
11098`-static-libtsan'
11099     When the `-fsanitize=thread' option is used to link a program, the
11100     GCC driver automatically links against `libtsan'.  If `libtsan' is
11101     available as a shared library, and the `-static' option is not
11102     used, then this links against the shared version of `libtsan'.
11103     The `-static-libtsan' option directs the GCC driver to link
11104     `libtsan' statically, without necessarily linking other libraries
11105     statically.
11106
11107`-static-liblsan'
11108     When the `-fsanitize=leak' option is used to link a program, the
11109     GCC driver automatically links against `liblsan'.  If `liblsan' is
11110     available as a shared library, and the `-static' option is not
11111     used, then this links against the shared version of `liblsan'.
11112     The `-static-liblsan' option directs the GCC driver to link
11113     `liblsan' statically, without necessarily linking other libraries
11114     statically.
11115
11116`-static-libubsan'
11117     When the `-fsanitize=undefined' option is used to link a program,
11118     the GCC driver automatically links against `libubsan'.  If
11119     `libubsan' is available as a shared library, and the `-static'
11120     option is not used, then this links against the shared version of
11121     `libubsan'.  The `-static-libubsan' option directs the GCC driver
11122     to link `libubsan' statically, without necessarily linking other
11123     libraries statically.
11124
11125`-static-libmpx'
11126     When the `-fcheck-pointer bounds' and `-mmpx' options are used to
11127     link a program, the GCC driver automatically links against
11128     `libmpx'.  If `libmpx' is available as a shared library, and the
11129     `-static' option is not used, then this links against the shared
11130     version of `libmpx'.  The `-static-libmpx' option directs the GCC
11131     driver to link `libmpx' statically, without necessarily linking
11132     other libraries statically.
11133
11134`-static-libmpxwrappers'
11135     When the `-fcheck-pointer bounds' and `-mmpx' options are used to
11136     link a program without also using `-fno-chkp-use-wrappers', the
11137     GCC driver automatically links against `libmpxwrappers'.  If
11138     `libmpxwrappers' is available as a shared library, and the
11139     `-static' option is not used, then this links against the shared
11140     version of `libmpxwrappers'.  The `-static-libmpxwrappers' option
11141     directs the GCC driver to link `libmpxwrappers' statically,
11142     without necessarily linking other libraries statically.
11143
11144`-static-libstdc++'
11145     When the `g++' program is used to link a C++ program, it normally
11146     automatically links against `libstdc++'.  If `libstdc++' is
11147     available as a shared library, and the `-static' option is not
11148     used, then this links against the shared version of `libstdc++'.
11149     That is normally fine.  However, it is sometimes useful to freeze
11150     the version of `libstdc++' used by the program without going all
11151     the way to a fully static link.  The `-static-libstdc++' option
11152     directs the `g++' driver to link `libstdc++' statically, without
11153     necessarily linking other libraries statically.
11154
11155`-symbolic'
11156     Bind references to global symbols when building a shared object.
11157     Warn about any unresolved references (unless overridden by the
11158     link editor option `-Xlinker -z -Xlinker defs').  Only a few
11159     systems support this option.
11160
11161`-T SCRIPT'
11162     Use SCRIPT as the linker script.  This option is supported by most
11163     systems using the GNU linker.  On some targets, such as bare-board
11164     targets without an operating system, the `-T' option may be
11165     required when linking to avoid references to undefined symbols.
11166
11167`-Xlinker OPTION'
11168     Pass OPTION as an option to the linker.  You can use this to
11169     supply system-specific linker options that GCC does not recognize.
11170
11171     If you want to pass an option that takes a separate argument, you
11172     must use `-Xlinker' twice, once for the option and once for the
11173     argument.  For example, to pass `-assert definitions', you must
11174     write `-Xlinker -assert -Xlinker definitions'.  It does not work
11175     to write `-Xlinker "-assert definitions"', because this passes the
11176     entire string as a single argument, which is not what the linker
11177     expects.
11178
11179     When using the GNU linker, it is usually more convenient to pass
11180     arguments to linker options using the `OPTION=VALUE' syntax than
11181     as separate arguments.  For example, you can specify `-Xlinker
11182     -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'.
11183     Other linkers may not support this syntax for command-line options.
11184
11185`-Wl,OPTION'
11186     Pass OPTION as an option to the linker.  If OPTION contains
11187     commas, it is split into multiple options at the commas.  You can
11188     use this syntax to pass an argument to the option.  For example,
11189     `-Wl,-Map,output.map' passes `-Map output.map' to the linker.
11190     When using the GNU linker, you can also get the same effect with
11191     `-Wl,-Map=output.map'.
11192
11193`-u SYMBOL'
11194     Pretend the symbol SYMBOL is undefined, to force linking of
11195     library modules to define it.  You can use `-u' multiple times with
11196     different symbols to force loading of additional library modules.
11197
11198`-z KEYWORD'
11199     `-z' is passed directly on to the linker along with the keyword
11200     KEYWORD. See the section in the documentation of your linker for
11201     permitted values and their meanings.
11202
11203 ---------- Footnotes ----------
11204
11205 (1) On some systems, `gcc -shared' needs to build supplementary stub
11206code for constructors to work.  On multi-libbed systems, `gcc -shared'
11207must select the correct support libraries to link against.  Failing to
11208supply the correct flags may lead to subtle defects.  Supplying them in
11209cases where they are not necessary is innocuous.
11210
11211
11212File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
11213
112143.14 Options for Directory Search
11215=================================
11216
11217These options specify directories to search for header files, for
11218libraries and for parts of the compiler:
11219
11220`-IDIR'
11221     Add the directory DIR to the head of the list of directories to be
11222     searched for header files.  This can be used to override a system
11223     header file, substituting your own version, since these
11224     directories are searched before the system header file
11225     directories.  However, you should not use this option to add
11226     directories that contain vendor-supplied system header files (use
11227     `-isystem' for that).  If you use more than one `-I' option, the
11228     directories are scanned in left-to-right order; the standard
11229     system directories come after.
11230
11231     If a standard system include directory, or a directory specified
11232     with `-isystem', is also specified with `-I', the `-I' option is
11233     ignored.  The directory is still searched but as a system
11234     directory at its normal position in the system include chain.
11235     This is to ensure that GCC's procedure to fix buggy system headers
11236     and the ordering for the `include_next' directive are not
11237     inadvertently changed.  If you really need to change the search
11238     order for system directories, use the `-nostdinc' and/or
11239     `-isystem' options.
11240
11241`-iplugindir=DIR'
11242     Set the directory to search for plugins that are passed by
11243     `-fplugin=NAME' instead of `-fplugin=PATH/NAME.so'.  This option
11244     is not meant to be used by the user, but only passed by the driver.
11245
11246`-iquoteDIR'
11247     Add the directory DIR to the head of the list of directories to be
11248     searched for header files only for the case of `#include "FILE"';
11249     they are not searched for `#include <FILE>', otherwise just like
11250     `-I'.
11251
11252`-iremap SRC:DST'
11253     Replace the prefix SRC in __FILE__ with DST at expansion time.
11254     This option can be specified more than once.  Processing stops at
11255     the first match.
11256
11257`-LDIR'
11258     Add directory DIR to the list of directories to be searched for
11259     `-l'.
11260
11261`-BPREFIX'
11262     This option specifies where to find the executables, libraries,
11263     include files, and data files of the compiler itself.
11264
11265     The compiler driver program runs one or more of the subprograms
11266     `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
11267     program it tries to run, both with and without `MACHINE/VERSION/'
11268     (*note Target Options::).
11269
11270     For each subprogram to be run, the compiler driver first tries the
11271     `-B' prefix, if any.  If that name is not found, or if `-B' is not
11272     specified, the driver tries two standard prefixes, `/usr/lib/gcc/'
11273     and `/usr/local/lib/gcc/'.  If neither of those results in a file
11274     name that is found, the unmodified program name is searched for
11275     using the directories specified in your `PATH' environment
11276     variable.
11277
11278     The compiler checks to see if the path provided by `-B' refers to
11279     a directory, and if necessary it adds a directory separator
11280     character at the end of the path.
11281
11282     `-B' prefixes that effectively specify directory names also apply
11283     to libraries in the linker, because the compiler translates these
11284     options into `-L' options for the linker.  They also apply to
11285     include files in the preprocessor, because the compiler translates
11286     these options into `-isystem' options for the preprocessor.  In
11287     this case, the compiler appends `include' to the prefix.
11288
11289     The runtime support file `libgcc.a' can also be searched for using
11290     the `-B' prefix, if needed.  If it is not found there, the two
11291     standard prefixes above are tried, and that is all.  The file is
11292     left out of the link if it is not found by those means.
11293
11294     Another way to specify a prefix much like the `-B' prefix is to use
11295     the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
11296     Variables::.
11297
11298     As a special kludge, if the path provided by `-B' is
11299     `[dir/]stageN/', where N is a number in the range 0 to 9, then it
11300     is replaced by `[dir/]include'.  This is to help with
11301     boot-strapping the compiler.
11302
11303`-specs=FILE'
11304     Process FILE after the compiler reads in the standard `specs'
11305     file, in order to override the defaults which the `gcc' driver
11306     program uses when determining what switches to pass to `cc1',
11307     `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
11308     specified on the command line, and they are processed in order,
11309     from left to right.
11310
11311`--sysroot=DIR'
11312     Use DIR as the logical root directory for headers and libraries.
11313     For example, if the compiler normally searches for headers in
11314     `/usr/include' and libraries in `/usr/lib', it instead searches
11315     `DIR/usr/include' and `DIR/usr/lib'.
11316
11317     If you use both this option and the `-isysroot' option, then the
11318     `--sysroot' option applies to libraries, but the `-isysroot'
11319     option applies to header files.
11320
11321     The GNU linker (beginning with version 2.16) has the necessary
11322     support for this option.  If your linker does not support this
11323     option, the header file aspect of `--sysroot' still works, but the
11324     library aspect does not.
11325
11326`--no-sysroot-suffix'
11327     For some targets, a suffix is added to the root directory specified
11328     with `--sysroot', depending on the other options used, so that
11329     headers may for example be found in `DIR/SUFFIX/usr/include'
11330     instead of `DIR/usr/include'.  This option disables the addition of
11331     such a suffix.
11332
11333`-I-'
11334     This option has been deprecated.  Please use `-iquote' instead for
11335     `-I' directories before the `-I-' and remove the `-I-' option.
11336     Any directories you specify with `-I' options before the `-I-'
11337     option are searched only for the case of `#include "FILE"'; they
11338     are not searched for `#include <FILE>'.
11339
11340     If additional directories are specified with `-I' options after
11341     the `-I-' option, these directories are searched for all `#include'
11342     directives.  (Ordinarily _all_ `-I' directories are used this way.)
11343
11344     In addition, the `-I-' option inhibits the use of the current
11345     directory (where the current input file came from) as the first
11346     search directory for `#include "FILE"'.  There is no way to
11347     override this effect of `-I-'.  With `-I.' you can specify
11348     searching the directory that is current when the compiler is
11349     invoked.  That is not exactly the same as what the preprocessor
11350     does by default, but it is often satisfactory.
11351
11352     `-I-' does not inhibit the use of the standard system directories
11353     for header files.  Thus, `-I-' and `-nostdinc' are independent.
11354
11355
11356File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
11357
113583.15 Specifying Subprocesses and the Switches to Pass to Them
11359=============================================================
11360
11361`gcc' is a driver program.  It performs its job by invoking a sequence
11362of other programs to do the work of compiling, assembling and linking.
11363GCC interprets its command-line parameters and uses these to deduce
11364which programs it should invoke, and which command-line options it
11365ought to place on their command lines.  This behavior is controlled by
11366"spec strings".  In most cases there is one spec string for each
11367program that GCC can invoke, but a few programs have multiple spec
11368strings to control their behavior.  The spec strings built into GCC can
11369be overridden by using the `-specs=' command-line switch to specify a
11370spec file.
11371
11372 "Spec files" are plaintext files that are used to construct spec
11373strings.  They consist of a sequence of directives separated by blank
11374lines.  The type of directive is determined by the first non-whitespace
11375character on the line, which can be one of the following:
11376
11377`%COMMAND'
11378     Issues a COMMAND to the spec file processor.  The commands that can
11379     appear here are:
11380
11381    `%include <FILE>'
11382          Search for FILE and insert its text at the current point in
11383          the specs file.
11384
11385    `%include_noerr <FILE>'
11386          Just like `%include', but do not generate an error message if
11387          the include file cannot be found.
11388
11389    `%rename OLD_NAME NEW_NAME'
11390          Rename the spec string OLD_NAME to NEW_NAME.
11391
11392
11393`*[SPEC_NAME]:'
11394     This tells the compiler to create, override or delete the named
11395     spec string.  All lines after this directive up to the next
11396     directive or blank line are considered to be the text for the spec
11397     string.  If this results in an empty string then the spec is
11398     deleted.  (Or, if the spec did not exist, then nothing happens.)
11399     Otherwise, if the spec does not currently exist a new spec is
11400     created.  If the spec does exist then its contents are overridden
11401     by the text of this directive, unless the first character of that
11402     text is the `+' character, in which case the text is appended to
11403     the spec.
11404
11405`[SUFFIX]:'
11406     Creates a new `[SUFFIX] spec' pair.  All lines after this directive
11407     and up to the next directive or blank line are considered to make
11408     up the spec string for the indicated suffix.  When the compiler
11409     encounters an input file with the named suffix, it processes the
11410     spec string in order to work out how to compile that file.  For
11411     example:
11412
11413          .ZZ:
11414          z-compile -input %i
11415
11416     This says that any input file whose name ends in `.ZZ' should be
11417     passed to the program `z-compile', which should be invoked with the
11418     command-line switch `-input' and with the result of performing the
11419     `%i' substitution.  (See below.)
11420
11421     As an alternative to providing a spec string, the text following a
11422     suffix directive can be one of the following:
11423
11424    `@LANGUAGE'
11425          This says that the suffix is an alias for a known LANGUAGE.
11426          This is similar to using the `-x' command-line switch to GCC
11427          to specify a language explicitly.  For example:
11428
11429               .ZZ:
11430               @c++
11431
11432          Says that .ZZ files are, in fact, C++ source files.
11433
11434    `#NAME'
11435          This causes an error messages saying:
11436
11437               NAME compiler not installed on this system.
11438
11439     GCC already has an extensive list of suffixes built into it.  This
11440     directive adds an entry to the end of the list of suffixes, but
11441     since the list is searched from the end backwards, it is
11442     effectively possible to override earlier entries using this
11443     technique.
11444
11445
11446 GCC has the following spec strings built into it.  Spec files can
11447override these strings or create their own.  Note that individual
11448targets can also add their own spec strings to this list.
11449
11450     asm          Options to pass to the assembler
11451     asm_final    Options to pass to the assembler post-processor
11452     cpp          Options to pass to the C preprocessor
11453     cc1          Options to pass to the C compiler
11454     cc1plus      Options to pass to the C++ compiler
11455     endfile      Object files to include at the end of the link
11456     link         Options to pass to the linker
11457     lib          Libraries to include on the command line to the linker
11458     libgcc       Decides which GCC support library to pass to the linker
11459     linker       Sets the name of the linker
11460     predefines   Defines to be passed to the C preprocessor
11461     signed_char  Defines to pass to CPP to say whether `char' is signed
11462                  by default
11463     startfile    Object files to include at the start of the link
11464
11465 Here is a small example of a spec file:
11466
11467     %rename lib                 old_lib
11468
11469     *lib:
11470     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
11471
11472 This example renames the spec called `lib' to `old_lib' and then
11473overrides the previous definition of `lib' with a new one.  The new
11474definition adds in some extra command-line options before including the
11475text of the old definition.
11476
11477 "Spec strings" are a list of command-line options to be passed to their
11478corresponding program.  In addition, the spec strings can contain
11479`%'-prefixed sequences to substitute variable text or to conditionally
11480insert text into the command line.  Using these constructs it is
11481possible to generate quite complex command lines.
11482
11483 Here is a table of all defined `%'-sequences for spec strings.  Note
11484that spaces are not generated automatically around the results of
11485expanding these sequences.  Therefore you can concatenate them together
11486or combine them with constant text in a single argument.
11487
11488`%%'
11489     Substitute one `%' into the program name or argument.
11490
11491`%i'
11492     Substitute the name of the input file being processed.
11493
11494`%b'
11495     Substitute the basename of the input file being processed.  This
11496     is the substring up to (and not including) the last period and not
11497     including the directory.
11498
11499`%B'
11500     This is the same as `%b', but include the file suffix (text after
11501     the last period).
11502
11503`%d'
11504     Marks the argument containing or following the `%d' as a temporary
11505     file name, so that that file is deleted if GCC exits successfully.
11506     Unlike `%g', this contributes no text to the argument.
11507
11508`%gSUFFIX'
11509     Substitute a file name that has suffix SUFFIX and is chosen once
11510     per compilation, and mark the argument in the same way as `%d'.
11511     To reduce exposure to denial-of-service attacks, the file name is
11512     now chosen in a way that is hard to predict even when previously
11513     chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
11514     might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
11515     matches the regexp `[.A-Za-z]*' or the special string `%O', which
11516     is treated exactly as if `%O' had been preprocessed.  Previously,
11517     `%g' was simply substituted with a file name chosen once per
11518     compilation, without regard to any appended suffix (which was
11519     therefore treated just like ordinary text), making such attacks
11520     more likely to succeed.
11521
11522`%uSUFFIX'
11523     Like `%g', but generates a new temporary file name each time it
11524     appears instead of once per compilation.
11525
11526`%USUFFIX'
11527     Substitutes the last file name generated with `%uSUFFIX',
11528     generating a new one if there is no such last file name.  In the
11529     absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
11530     they don't share the same suffix _space_, so `%g.s ... %U.s ...
11531     %g.s ... %U.s' involves the generation of two distinct file names,
11532     one for each `%g.s' and another for each `%U.s'.  Previously, `%U'
11533     was simply substituted with a file name chosen for the previous
11534     `%u', without regard to any appended suffix.
11535
11536`%jSUFFIX'
11537     Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
11538     writable, and if `-save-temps' is not used; otherwise, substitute
11539     the name of a temporary file, just like `%u'.  This temporary file
11540     is not meant for communication between processes, but rather as a
11541     junk disposal mechanism.
11542
11543`%|SUFFIX'
11544`%mSUFFIX'
11545     Like `%g', except if `-pipe' is in effect.  In that case `%|'
11546     substitutes a single dash and `%m' substitutes nothing at all.
11547     These are the two most common ways to instruct a program that it
11548     should read from standard input or write to standard output.  If
11549     you need something more elaborate you can use an `%{pipe:`X'}'
11550     construct: see for example `f/lang-specs.h'.
11551
11552`%.SUFFIX'
11553     Substitutes .SUFFIX for the suffixes of a matched switch's args
11554     when it is subsequently output with `%*'.  SUFFIX is terminated by
11555     the next space or %.
11556
11557`%w'
11558     Marks the argument containing or following the `%w' as the
11559     designated output file of this compilation.  This puts the argument
11560     into the sequence of arguments that `%o' substitutes.
11561
11562`%o'
11563     Substitutes the names of all the output files, with spaces
11564     automatically placed around them.  You should write spaces around
11565     the `%o' as well or the results are undefined.  `%o' is for use in
11566     the specs for running the linker.  Input files whose names have no
11567     recognized suffix are not compiled at all, but they are included
11568     among the output files, so they are linked.
11569
11570`%O'
11571     Substitutes the suffix for object files.  Note that this is
11572     handled specially when it immediately follows `%g, %u, or %U',
11573     because of the need for those to form complete file names.  The
11574     handling is such that `%O' is treated exactly as if it had already
11575     been substituted, except that `%g, %u, and %U' do not currently
11576     support additional SUFFIX characters following `%O' as they do
11577     following, for example, `.o'.
11578
11579`%p'
11580     Substitutes the standard macro predefinitions for the current
11581     target machine.  Use this when running `cpp'.
11582
11583`%P'
11584     Like `%p', but puts `__' before and after the name of each
11585     predefined macro, except for macros that start with `__' or with
11586     `_L', where L is an uppercase letter.  This is for ISO C.
11587
11588`%I'
11589     Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
11590     `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
11591     from `COMPILER_PATH' and `-B' options) and `-imultilib' as
11592     necessary.
11593
11594`%s'
11595     Current argument is the name of a library or startup file of some
11596     sort.  Search for that file in a standard list of directories and
11597     substitute the full name found.  The current working directory is
11598     included in the list of directories scanned.
11599
11600`%T'
11601     Current argument is the name of a linker script.  Search for that
11602     file in the current list of directories to scan for libraries. If
11603     the file is located insert a `--script' option into the command
11604     line followed by the full path name found.  If the file is not
11605     found then generate an error message.  Note: the current working
11606     directory is not searched.
11607
11608`%eSTR'
11609     Print STR as an error message.  STR is terminated by a newline.
11610     Use this when inconsistent options are detected.
11611
11612`%(NAME)'
11613     Substitute the contents of spec string NAME at this point.
11614
11615`%x{OPTION}'
11616     Accumulate an option for `%X'.
11617
11618`%X'
11619     Output the accumulated linker options specified by `-Wl' or a `%x'
11620     spec string.
11621
11622`%Y'
11623     Output the accumulated assembler options specified by `-Wa'.
11624
11625`%Z'
11626     Output the accumulated preprocessor options specified by `-Wp'.
11627
11628`%a'
11629     Process the `asm' spec.  This is used to compute the switches to
11630     be passed to the assembler.
11631
11632`%A'
11633     Process the `asm_final' spec.  This is a spec string for passing
11634     switches to an assembler post-processor, if such a program is
11635     needed.
11636
11637`%l'
11638     Process the `link' spec.  This is the spec for computing the
11639     command line passed to the linker.  Typically it makes use of the
11640     `%L %G %S %D and %E' sequences.
11641
11642`%D'
11643     Dump out a `-L' option for each directory that GCC believes might
11644     contain startup files.  If the target supports multilibs then the
11645     current multilib directory is prepended to each of these paths.
11646
11647`%L'
11648     Process the `lib' spec.  This is a spec string for deciding which
11649     libraries are included on the command line to the linker.
11650
11651`%G'
11652     Process the `libgcc' spec.  This is a spec string for deciding
11653     which GCC support library is included on the command line to the
11654     linker.
11655
11656`%S'
11657     Process the `startfile' spec.  This is a spec for deciding which
11658     object files are the first ones passed to the linker.  Typically
11659     this might be a file named `crt0.o'.
11660
11661`%E'
11662     Process the `endfile' spec.  This is a spec string that specifies
11663     the last object files that are passed to the linker.
11664
11665`%C'
11666     Process the `cpp' spec.  This is used to construct the arguments
11667     to be passed to the C preprocessor.
11668
11669`%1'
11670     Process the `cc1' spec.  This is used to construct the options to
11671     be passed to the actual C compiler (`cc1').
11672
11673`%2'
11674     Process the `cc1plus' spec.  This is used to construct the options
11675     to be passed to the actual C++ compiler (`cc1plus').
11676
11677`%*'
11678     Substitute the variable part of a matched option.  See below.
11679     Note that each comma in the substituted string is replaced by a
11680     single space.
11681
11682`%<`S''
11683     Remove all occurrences of `-S' from the command line.  Note--this
11684     command is position dependent.  `%' commands in the spec string
11685     before this one see `-S', `%' commands in the spec string after
11686     this one do not.
11687
11688`%:FUNCTION(ARGS)'
11689     Call the named function FUNCTION, passing it ARGS.  ARGS is first
11690     processed as a nested spec string, then split into an argument
11691     vector in the usual fashion.  The function returns a string which
11692     is processed as if it had appeared literally as part of the
11693     current spec.
11694
11695     The following built-in spec functions are provided:
11696
11697    ``getenv''
11698          The `getenv' spec function takes two arguments: an environment
11699          variable name and a string.  If the environment variable is
11700          not defined, a fatal error is issued.  Otherwise, the return
11701          value is the value of the environment variable concatenated
11702          with the string.  For example, if `TOPDIR' is defined as
11703          `/path/to/top', then:
11704
11705               %:getenv(TOPDIR /include)
11706
11707          expands to `/path/to/top/include'.
11708
11709    ``if-exists''
11710          The `if-exists' spec function takes one argument, an absolute
11711          pathname to a file.  If the file exists, `if-exists' returns
11712          the pathname.  Here is a small example of its usage:
11713
11714               *startfile:
11715               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
11716
11717    ``if-exists-else''
11718          The `if-exists-else' spec function is similar to the
11719          `if-exists' spec function, except that it takes two
11720          arguments.  The first argument is an absolute pathname to a
11721          file.  If the file exists, `if-exists-else' returns the
11722          pathname.  If it does not exist, it returns the second
11723          argument.  This way, `if-exists-else' can be used to select
11724          one file or another, based on the existence of the first.
11725          Here is a small example of its usage:
11726
11727               *startfile:
11728               crt0%O%s %:if-exists(crti%O%s) \
11729               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
11730
11731    ``replace-outfile''
11732          The `replace-outfile' spec function takes two arguments.  It
11733          looks for the first argument in the outfiles array and
11734          replaces it with the second argument.  Here is a small
11735          example of its usage:
11736
11737               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
11738
11739    ``remove-outfile''
11740          The `remove-outfile' spec function takes one argument.  It
11741          looks for the first argument in the outfiles array and
11742          removes it.  Here is a small example its usage:
11743
11744               %:remove-outfile(-lm)
11745
11746    ``pass-through-libs''
11747          The `pass-through-libs' spec function takes any number of
11748          arguments.  It finds any `-l' options and any non-options
11749          ending in `.a' (which it assumes are the names of linker
11750          input library archive files) and returns a result containing
11751          all the found arguments each prepended by
11752          `-plugin-opt=-pass-through=' and joined by spaces.  This list
11753          is intended to be passed to the LTO linker plugin.
11754
11755               %:pass-through-libs(%G %L %G)
11756
11757    ``print-asm-header''
11758          The `print-asm-header' function takes no arguments and simply
11759          prints a banner like:
11760
11761               Assembler options
11762               =================
11763
11764               Use "-Wa,OPTION" to pass "OPTION" to the assembler.
11765
11766          It is used to separate compiler options from assembler options
11767          in the `--target-help' output.
11768
11769`%{`S'}'
11770     Substitutes the `-S' switch, if that switch is given to GCC.  If
11771     that switch is not specified, this substitutes nothing.  Note that
11772     the leading dash is omitted when specifying this option, and it is
11773     automatically inserted if the substitution is performed.  Thus the
11774     spec string `%{foo}' matches the command-line option `-foo' and
11775     outputs the command-line option `-foo'.
11776
11777`%W{`S'}'
11778     Like %{`S'} but mark last argument supplied within as a file to be
11779     deleted on failure.
11780
11781`%{`S'*}'
11782     Substitutes all the switches specified to GCC whose names start
11783     with `-S', but which also take an argument.  This is used for
11784     switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
11785     being one switch whose name starts with `o'.  %{o*} substitutes
11786     this text, including the space.  Thus two arguments are generated.
11787
11788`%{`S'*&`T'*}'
11789     Like %{`S'*}, but preserve order of `S' and `T' options (the order
11790     of `S' and `T' in the spec is not significant).  There can be any
11791     number of ampersand-separated variables; for each the wild card is
11792     optional.  Useful for CPP as `%{D*&U*&A*}'.
11793
11794`%{`S':`X'}'
11795     Substitutes `X', if the `-S' switch is given to GCC.
11796
11797`%{!`S':`X'}'
11798     Substitutes `X', if the `-S' switch is _not_ given to GCC.
11799
11800`%{`S'*:`X'}'
11801     Substitutes `X' if one or more switches whose names start with
11802     `-S' are specified to GCC.  Normally `X' is substituted only once,
11803     no matter how many such switches appeared.  However, if `%*'
11804     appears somewhere in `X', then `X' is substituted once for each
11805     matching switch, with the `%*' replaced by the part of that switch
11806     matching the `*'.
11807
11808     If `%*' appears as the last part of a spec sequence then a space
11809     is added after the end of the last substitution.  If there is more
11810     text in the sequence, however, then a space is not generated.  This
11811     allows the `%*' substitution to be used as part of a larger
11812     string.  For example, a spec string like this:
11813
11814          %{mcu=*:--script=%*/memory.ld}
11815
11816     when matching an option like `-mcu=newchip' produces:
11817
11818          --script=newchip/memory.ld
11819
11820`%{.`S':`X'}'
11821     Substitutes `X', if processing a file with suffix `S'.
11822
11823`%{!.`S':`X'}'
11824     Substitutes `X', if _not_ processing a file with suffix `S'.
11825
11826`%{,`S':`X'}'
11827     Substitutes `X', if processing a file for language `S'.
11828
11829`%{!,`S':`X'}'
11830     Substitutes `X', if not processing a file for language `S'.
11831
11832`%{`S'|`P':`X'}'
11833     Substitutes `X' if either `-S' or `-P' is given to GCC.  This may
11834     be combined with `!', `.', `,', and `*' sequences as well,
11835     although they have a stronger binding than the `|'.  If `%*'
11836     appears in `X', all of the alternatives must be starred, and only
11837     the first matching alternative is substituted.
11838
11839     For example, a spec string like this:
11840
11841          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
11842
11843     outputs the following command-line options from the following input
11844     command-line options:
11845
11846          fred.c        -foo -baz
11847          jim.d         -bar -boggle
11848          -d fred.c     -foo -baz -boggle
11849          -d jim.d      -bar -baz -boggle
11850
11851`%{S:X; T:Y; :D}'
11852     If `S' is given to GCC, substitutes `X'; else if `T' is given to
11853     GCC, substitutes `Y'; else substitutes `D'.  There can be as many
11854     clauses as you need.  This may be combined with `.', `,', `!',
11855     `|', and `*' as needed.
11856
11857
11858 The conditional text `X' in a %{`S':`X'} or similar construct may
11859contain other nested `%' constructs or spaces, or even newlines.  They
11860are processed as usual, as described above.  Trailing white space in
11861`X' is ignored.  White space may also appear anywhere on the left side
11862of the colon in these constructs, except between `.' or `*' and the
11863corresponding word.
11864
11865 The `-O', `-f', `-m', and `-W' switches are handled specifically in
11866these constructs.  If another value of `-O' or the negated form of a
11867`-f', `-m', or `-W' switch is found later in the command line, the
11868earlier switch value is ignored, except with {`S'*} where `S' is just
11869one letter, which passes all matching options.
11870
11871 The character `|' at the beginning of the predicate text is used to
11872indicate that a command should be piped to the following command, but
11873only if `-pipe' is specified.
11874
11875 It is built into GCC which switches take arguments and which do not.
11876(You might think it would be useful to generalize this to allow each
11877compiler's spec to say which switches take arguments.  But this cannot
11878be done in a consistent fashion.  GCC cannot even decide which input
11879files have been specified without knowing which switches take arguments,
11880and it must know which input files to compile in order to tell which
11881compilers to run).
11882
11883 GCC also knows implicitly that arguments starting in `-l' are to be
11884treated as compiler output files, and passed to the linker in their
11885proper position among the other output files.
11886
11887
11888File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
11889
118903.16 Specifying Target Machine and Compiler Version
11891===================================================
11892
11893The usual way to run GCC is to run the executable called `gcc', or
11894`MACHINE-gcc' when cross-compiling, or `MACHINE-gcc-VERSION' to run a
11895version other than the one that was installed last.
11896
11897
11898File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
11899
119003.17 Hardware Models and Configurations
11901=======================================
11902
11903Each target machine types can have its own special options, starting
11904with `-m', to choose among various hardware models or
11905configurations--for example, 68010 vs 68020, floating coprocessor or
11906none.  A single installed version of the compiler can compile for any
11907model or configuration, according to the options specified.
11908
11909 Some configurations of the compiler also support additional special
11910options, usually for compatibility with other compilers on the same
11911platform.
11912
11913* Menu:
11914
11915* AArch64 Options::
11916* Adapteva Epiphany Options::
11917* ARC Options::
11918* ARM Options::
11919* AVR Options::
11920* Blackfin Options::
11921* C6X Options::
11922* CRIS Options::
11923* CR16 Options::
11924* Darwin Options::
11925* DEC Alpha Options::
11926* FR30 Options::
11927* FRV Options::
11928* GNU/Linux Options::
11929* H8/300 Options::
11930* HPPA Options::
11931* IA-64 Options::
11932* LM32 Options::
11933* M32C Options::
11934* M32R/D Options::
11935* M680x0 Options::
11936* MCore Options::
11937* MeP Options::
11938* MicroBlaze Options::
11939* MIPS Options::
11940* MMIX Options::
11941* MN10300 Options::
11942* Moxie Options::
11943* MSP430 Options::
11944* NDS32 Options::
11945* Nios II Options::
11946* Nvidia PTX Options::
11947* PDP-11 Options::
11948* picoChip Options::
11949* PowerPC Options::
11950* RL78 Options::
11951* RS/6000 and PowerPC Options::
11952* RX Options::
11953* S/390 and zSeries Options::
11954* Score Options::
11955* SH Options::
11956* Solaris 2 Options::
11957* SPARC Options::
11958* SPU Options::
11959* System V Options::
11960* TILE-Gx Options::
11961* TILEPro Options::
11962* V850 Options::
11963* VAX Options::
11964* Visium Options::
11965* VMS Options::
11966* VxWorks Options::
11967* x86 Options::
11968* x86 Windows Options::
11969* Xstormy16 Options::
11970* Xtensa Options::
11971* zSeries Options::
11972
11973
11974File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options
11975
119763.17.1 AArch64 Options
11977----------------------
11978
11979These options are defined for AArch64 implementations:
11980
11981`-mabi=NAME'
11982     Generate code for the specified data model.  Permissible values
11983     are `ilp32' for SysV-like data model where int, long int and
11984     pointer are 32-bit, and `lp64' for SysV-like data model where int
11985     is 32-bit, but long int and pointer are 64-bit.
11986
11987     The default depends on the specific target configuration.  Note
11988     that the LP64 and ILP32 ABIs are not link-compatible; you must
11989     compile your entire program with the same ABI, and link with a
11990     compatible set of libraries.
11991
11992`-mbig-endian'
11993     Generate big-endian code.  This is the default when GCC is
11994     configured for an `aarch64_be-*-*' target.
11995
11996`-mgeneral-regs-only'
11997     Generate code which uses only the general registers.
11998
11999`-mlittle-endian'
12000     Generate little-endian code.  This is the default when GCC is
12001     configured for an `aarch64-*-*' but not an `aarch64_be-*-*' target.
12002
12003`-mcmodel=tiny'
12004     Generate code for the tiny code model.  The program and its
12005     statically defined symbols must be within 1GB of each other.
12006     Pointers are 64 bits.  Programs can be statically or dynamically
12007     linked.  This model is not fully implemented and mostly treated as
12008     `small'.
12009
12010`-mcmodel=small'
12011     Generate code for the small code model.  The program and its
12012     statically defined symbols must be within 4GB of each other.
12013     Pointers are 64 bits.  Programs can be statically or dynamically
12014     linked.  This is the default code model.
12015
12016`-mcmodel=large'
12017     Generate code for the large code model.  This makes no assumptions
12018     about addresses and sizes of sections.  Pointers are 64 bits.
12019     Programs can be statically linked only.
12020
12021`-mstrict-align'
12022     Do not assume that unaligned memory references are handled by the
12023     system.
12024
12025`-momit-leaf-frame-pointer'
12026`-mno-omit-leaf-frame-pointer'
12027     Omit or keep the frame pointer in leaf functions.  The former
12028     behaviour is the default.
12029
12030`-mtls-dialect=desc'
12031     Use TLS descriptors as the thread-local storage mechanism for
12032     dynamic accesses of TLS variables.  This is the default.
12033
12034`-mtls-dialect=traditional'
12035     Use traditional TLS as the thread-local storage mechanism for
12036     dynamic accesses of TLS variables.
12037
12038`-mfix-cortex-a53-835769'
12039`-mno-fix-cortex-a53-835769'
12040     Enable or disable the workaround for the ARM Cortex-A53 erratum
12041     number 835769.  This involves inserting a NOP instruction between
12042     memory instructions and 64-bit integer multiply-accumulate
12043     instructions.
12044
12045`-mfix-cortex-a53-843419'
12046`-mno-fix-cortex-a53-843419'
12047     Enable or disable the workaround for the ARM Cortex-A53 erratum
12048     number 843419.  This erratum workaround is made at link time and
12049     this will only pass the corresponding flag to the linker.
12050
12051`-march=NAME'
12052     Specify the name of the target architecture, optionally suffixed
12053     by one or more feature modifiers.  This option has the form
12054     `-march=ARCH{+[no]FEATURE}*', where the only permissible value for
12055     ARCH is `armv8-a'.  The permissible values for FEATURE are
12056     documented in the sub-section below.
12057
12058     Where conflicting feature modifiers are specified, the right-most
12059     feature is used.
12060
12061     GCC uses this name to determine what kind of instructions it can
12062     emit when generating assembly code.
12063
12064     Where `-march' is specified without either of `-mtune' or `-mcpu'
12065     also being specified, the code is tuned to perform well across a
12066     range of target processors implementing the target architecture.
12067
12068`-mtune=NAME'
12069     Specify the name of the target processor for which GCC should tune
12070     the performance of the code.  Permissible values for this option
12071     are: `generic', `cortex-a53', `cortex-a57', `cortex-a72',
12072     `exynos-m1', `thunderx', `xgene1'.
12073
12074     Additionally, this option can specify that GCC should tune the
12075     performance of the code for a big.LITTLE system.  Permissible
12076     values for this option are: `cortex-a57.cortex-a53',
12077     `cortex-a72.cortex-a53'.
12078
12079     Where none of `-mtune=', `-mcpu=' or `-march=' are specified, the
12080     code is tuned to perform well across a range of target processors.
12081
12082     This option cannot be suffixed by feature modifiers.
12083
12084`-mcpu=NAME'
12085     Specify the name of the target processor, optionally suffixed by
12086     one or more feature modifiers.  This option has the form
12087     `-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU
12088     are the same as those available for `-mtune'.
12089
12090     The permissible values for FEATURE are documented in the
12091     sub-section below.
12092
12093     Where conflicting feature modifiers are specified, the right-most
12094     feature is used.
12095
12096     GCC uses this name to determine what kind of instructions it can
12097     emit when generating assembly code (as if by `-march') and to
12098     determine the target processor for which to tune for performance
12099     (as if by `-mtune').  Where this option is used in conjunction
12100     with `-march' or `-mtune', those options take precedence over the
12101     appropriate part of this option.
12102
121033.17.1.1 `-march' and `-mcpu' Feature Modifiers
12104...............................................
12105
12106Feature modifiers used with `-march' and `-mcpu' can be one the
12107following:
12108
12109`crc'
12110     Enable CRC extension.
12111
12112`crypto'
12113     Enable Crypto extension.  This implies Advanced SIMD is enabled.
12114
12115`fp'
12116     Enable floating-point instructions.
12117
12118`simd'
12119     Enable Advanced SIMD instructions.  This implies floating-point
12120     instructions are enabled.  This is the default for all current
12121     possible values for options `-march' and `-mcpu='.
12122
12123
12124File: gcc.info,  Node: Adapteva Epiphany Options,  Next: ARC Options,  Prev: AArch64 Options,  Up: Submodel Options
12125
121263.17.2 Adapteva Epiphany Options
12127--------------------------------
12128
12129These `-m' options are defined for Adapteva Epiphany:
12130
12131`-mhalf-reg-file'
12132     Don't allocate any register in the range `r32'...`r63'.  That
12133     allows code to run on hardware variants that lack these registers.
12134
12135`-mprefer-short-insn-regs'
12136     Preferrentially allocate registers that allow short instruction
12137     generation.  This can result in increased instruction count, so
12138     this may either reduce or increase overall code size.
12139
12140`-mbranch-cost=NUM'
12141     Set the cost of branches to roughly NUM "simple" instructions.
12142     This cost is only a heuristic and is not guaranteed to produce
12143     consistent results across releases.
12144
12145`-mcmove'
12146     Enable the generation of conditional moves.
12147
12148`-mnops=NUM'
12149     Emit NUM NOPs before every other generated instruction.
12150
12151`-mno-soft-cmpsf'
12152     For single-precision floating-point comparisons, emit an `fsub'
12153     instruction and test the flags.  This is faster than a software
12154     comparison, but can get incorrect results in the presence of NaNs,
12155     or when two different small numbers are compared such that their
12156     difference is calculated as zero.  The default is `-msoft-cmpsf',
12157     which uses slower, but IEEE-compliant, software comparisons.
12158
12159`-mstack-offset=NUM'
12160     Set the offset between the top of the stack and the stack pointer.
12161     E.g., a value of 8 means that the eight bytes in the range
12162     `sp+0...sp+7' can be used by leaf functions without stack
12163     allocation.  Values other than `8' or `16' are untested and
12164     unlikely to work.  Note also that this option changes the ABI;
12165     compiling a program with a different stack offset than the
12166     libraries have been compiled with generally does not work.  This
12167     option can be useful if you want to evaluate if a different stack
12168     offset would give you better code, but to actually use a different
12169     stack offset to build working programs, it is recommended to
12170     configure the toolchain with the appropriate
12171     `--with-stack-offset=NUM' option.
12172
12173`-mno-round-nearest'
12174     Make the scheduler assume that the rounding mode has been set to
12175     truncating.  The default is `-mround-nearest'.
12176
12177`-mlong-calls'
12178     If not otherwise specified by an attribute, assume all calls might
12179     be beyond the offset range of the `b' / `bl' instructions, and
12180     therefore load the function address into a register before
12181     performing a (otherwise direct) call.  This is the default.
12182
12183`-mshort-calls'
12184     If not otherwise specified by an attribute, assume all direct
12185     calls are in the range of the `b' / `bl' instructions, so use
12186     these instructions for direct calls.  The default is
12187     `-mlong-calls'.
12188
12189`-msmall16'
12190     Assume addresses can be loaded as 16-bit unsigned values.  This
12191     does not apply to function addresses for which `-mlong-calls'
12192     semantics are in effect.
12193
12194`-mfp-mode=MODE'
12195     Set the prevailing mode of the floating-point unit.  This
12196     determines the floating-point mode that is provided and expected
12197     at function call and return time.  Making this mode match the mode
12198     you predominantly need at function start can make your programs
12199     smaller and faster by avoiding unnecessary mode switches.
12200
12201     MODE can be set to one the following values:
12202
12203    `caller'
12204          Any mode at function entry is valid, and retained or restored
12205          when the function returns, and when it calls other functions.
12206          This mode is useful for compiling libraries or other
12207          compilation units you might want to incorporate into
12208          different programs with different prevailing FPU modes, and
12209          the convenience of being able to use a single object file
12210          outweighs the size and speed overhead for any extra mode
12211          switching that might be needed, compared with what would be
12212          needed with a more specific choice of prevailing FPU mode.
12213
12214    `truncate'
12215          This is the mode used for floating-point calculations with
12216          truncating (i.e. round towards zero) rounding mode.  That
12217          includes conversion from floating point to integer.
12218
12219    `round-nearest'
12220          This is the mode used for floating-point calculations with
12221          round-to-nearest-or-even rounding mode.
12222
12223    `int'
12224          This is the mode used to perform integer calculations in the
12225          FPU, e.g.  integer multiply, or integer
12226          multiply-and-accumulate.
12227
12228     The default is `-mfp-mode=caller'
12229
12230`-mnosplit-lohi'
12231`-mno-postinc'
12232`-mno-postmodify'
12233     Code generation tweaks that disable, respectively, splitting of
12234     32-bit loads, generation of post-increment addresses, and
12235     generation of post-modify addresses.  The defaults are
12236     `msplit-lohi', `-mpost-inc', and `-mpost-modify'.
12237
12238`-mnovect-double'
12239     Change the preferred SIMD mode to SImode.  The default is
12240     `-mvect-double', which uses DImode as preferred SIMD mode.
12241
12242`-max-vect-align=NUM'
12243     The maximum alignment for SIMD vector mode types.  NUM may be 4 or
12244     8.  The default is 8.  Note that this is an ABI change, even
12245     though many library function interfaces are unaffected if they
12246     don't use SIMD vector modes in places that affect size and/or
12247     alignment of relevant types.
12248
12249`-msplit-vecmove-early'
12250     Split vector moves into single word moves before reload.  In
12251     theory this can give better register allocation, but so far the
12252     reverse seems to be generally the case.
12253
12254`-m1reg-REG'
12255     Specify a register to hold the constant -1, which makes loading
12256     small negative constants and certain bitmasks faster.  Allowable
12257     values for REG are `r43' and `r63', which specify use of that
12258     register as a fixed register, and `none', which means that no
12259     register is used for this purpose.  The default is `-m1reg-none'.
12260
12261
12262
12263File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options
12264
122653.17.3 ARC Options
12266------------------
12267
12268The following options control the architecture variant for which code
12269is being compiled:
12270
12271`-mbarrel-shifter'
12272     Generate instructions supported by barrel shifter.  This is the
12273     default unless `-mcpu=ARC601' is in effect.
12274
12275`-mcpu=CPU'
12276     Set architecture type, register usage, and instruction scheduling
12277     parameters for CPU.  There are also shortcut alias options
12278     available for backward compatibility and convenience.  Supported
12279     values for CPU are
12280
12281    `ARC600'
12282          Compile for ARC600.  Aliases: `-mA6', `-mARC600'.
12283
12284    `ARC601'
12285          Compile for ARC601.  Alias: `-mARC601'.
12286
12287    `ARC700'
12288          Compile for ARC700.  Aliases: `-mA7', `-mARC700'.  This is
12289          the default when configured with `--with-cpu=arc700'.
12290
12291`-mdpfp'
12292`-mdpfp-compact'
12293     FPX: Generate Double Precision FPX instructions, tuned for the
12294     compact implementation.
12295
12296`-mdpfp-fast'
12297     FPX: Generate Double Precision FPX instructions, tuned for the fast
12298     implementation.
12299
12300`-mno-dpfp-lrsr'
12301     Disable LR and SR instructions from using FPX extension aux
12302     registers.
12303
12304`-mea'
12305     Generate Extended arithmetic instructions.  Currently only
12306     `divaw', `adds', `subs', and `sat16' are supported.  This is
12307     always enabled for `-mcpu=ARC700'.
12308
12309`-mno-mpy'
12310     Do not generate mpy instructions for ARC700.
12311
12312`-mmul32x16'
12313     Generate 32x16 bit multiply and mac instructions.
12314
12315`-mmul64'
12316     Generate mul64 and mulu64 instructions.  Only valid for
12317     `-mcpu=ARC600'.
12318
12319`-mnorm'
12320     Generate norm instruction.  This is the default if `-mcpu=ARC700'
12321     is in effect.
12322
12323`-mspfp'
12324`-mspfp-compact'
12325     FPX: Generate Single Precision FPX instructions, tuned for the
12326     compact implementation.
12327
12328`-mspfp-fast'
12329     FPX: Generate Single Precision FPX instructions, tuned for the fast
12330     implementation.
12331
12332`-msimd'
12333     Enable generation of ARC SIMD instructions via target-specific
12334     builtins.  Only valid for `-mcpu=ARC700'.
12335
12336`-msoft-float'
12337     This option ignored; it is provided for compatibility purposes
12338     only.  Software floating point code is emitted by default, and
12339     this default can overridden by FPX options; `mspfp',
12340     `mspfp-compact', or `mspfp-fast' for single precision, and `mdpfp',
12341     `mdpfp-compact', or `mdpfp-fast' for double precision.
12342
12343`-mswap'
12344     Generate swap instructions.
12345
12346
12347 The following options are passed through to the assembler, and also
12348define preprocessor macro symbols.
12349
12350`-mdsp-packa'
12351     Passed down to the assembler to enable the DSP Pack A extensions.
12352     Also sets the preprocessor symbol `__Xdsp_packa'.
12353
12354`-mdvbf'
12355     Passed down to the assembler to enable the dual viterbi butterfly
12356     extension.  Also sets the preprocessor symbol `__Xdvbf'.
12357
12358`-mlock'
12359     Passed down to the assembler to enable the Locked Load/Store
12360     Conditional extension.  Also sets the preprocessor symbol
12361     `__Xlock'.
12362
12363`-mmac-d16'
12364     Passed down to the assembler.  Also sets the preprocessor symbol
12365     `__Xxmac_d16'.
12366
12367`-mmac-24'
12368     Passed down to the assembler.  Also sets the preprocessor symbol
12369     `__Xxmac_24'.
12370
12371`-mrtsc'
12372     Passed down to the assembler to enable the 64-bit Time-Stamp
12373     Counter extension instruction.  Also sets the preprocessor symbol
12374     `__Xrtsc'.
12375
12376`-mswape'
12377     Passed down to the assembler to enable the swap byte ordering
12378     extension instruction.  Also sets the preprocessor symbol
12379     `__Xswape'.
12380
12381`-mtelephony'
12382     Passed down to the assembler to enable dual and single operand
12383     instructions for telephony.  Also sets the preprocessor symbol
12384     `__Xtelephony'.
12385
12386`-mxy'
12387     Passed down to the assembler to enable the XY Memory extension.
12388     Also sets the preprocessor symbol `__Xxy'.
12389
12390
12391 The following options control how the assembly code is annotated:
12392
12393`-misize'
12394     Annotate assembler instructions with estimated addresses.
12395
12396`-mannotate-align'
12397     Explain what alignment considerations lead to the decision to make
12398     an instruction short or long.
12399
12400
12401 The following options are passed through to the linker:
12402
12403`-marclinux'
12404     Passed through to the linker, to specify use of the `arclinux'
12405     emulation.  This option is enabled by default in tool chains built
12406     for `arc-linux-uclibc' and `arceb-linux-uclibc' targets when
12407     profiling is not requested.
12408
12409`-marclinux_prof'
12410     Passed through to the linker, to specify use of the
12411     `arclinux_prof' emulation.  This option is enabled by default in
12412     tool chains built for `arc-linux-uclibc' and `arceb-linux-uclibc'
12413     targets when profiling is requested.
12414
12415
12416 The following options control the semantics of generated code:
12417
12418`-mepilogue-cfi'
12419     Enable generation of call frame information for epilogues.
12420
12421`-mno-epilogue-cfi'
12422     Disable generation of call frame information for epilogues.
12423
12424`-mlong-calls'
12425     Generate call insns as register indirect calls, thus providing
12426     access to the full 32-bit address range.
12427
12428`-mmedium-calls'
12429     Don't use less than 25 bit addressing range for calls, which is the
12430     offset available for an unconditional branch-and-link instruction.
12431     Conditional execution of function calls is suppressed, to allow
12432     use of the 25-bit range, rather than the 21-bit range with
12433     conditional branch-and-link.  This is the default for tool chains
12434     built for `arc-linux-uclibc' and `arceb-linux-uclibc' targets.
12435
12436`-mno-sdata'
12437     Do not generate sdata references.  This is the default for tool
12438     chains built for `arc-linux-uclibc' and `arceb-linux-uclibc'
12439     targets.
12440
12441`-mucb-mcount'
12442     Instrument with mcount calls as used in UCB code.  I.e. do the
12443     counting in the callee, not the caller.  By default ARC
12444     instrumentation counts in the caller.
12445
12446`-mvolatile-cache'
12447     Use ordinarily cached memory accesses for volatile references.
12448     This is the default.
12449
12450`-mno-volatile-cache'
12451     Enable cache bypass for volatile references.
12452
12453
12454 The following options fine tune code generation:
12455`-malign-call'
12456     Do alignment optimizations for call instructions.
12457
12458`-mauto-modify-reg'
12459     Enable the use of pre/post modify with register displacement.
12460
12461`-mbbit-peephole'
12462     Enable bbit peephole2.
12463
12464`-mno-brcc'
12465     This option disables a target-specific pass in `arc_reorg' to
12466     generate `BRcc' instructions.  It has no effect on `BRcc'
12467     generation driven by the combiner pass.
12468
12469`-mcase-vector-pcrel'
12470     Use pc-relative switch case tables - this enables case table
12471     shortening.  This is the default for `-Os'.
12472
12473`-mcompact-casesi'
12474     Enable compact casesi pattern.  This is the default for `-Os'.
12475
12476`-mno-cond-exec'
12477     Disable ARCompact specific pass to generate conditional execution
12478     instructions.  Due to delay slot scheduling and interactions
12479     between operand numbers, literal sizes, instruction lengths, and
12480     the support for conditional execution, the target-independent pass
12481     to generate conditional execution is often lacking, so the ARC
12482     port has kept a special pass around that tries to find more
12483     conditional execution generating opportunities after register
12484     allocation, branch shortening, and delay slot scheduling have been
12485     done.  This pass generally, but not always, improves performance
12486     and code size, at the cost of extra compilation time, which is why
12487     there is an option to switch it off.  If you have a problem with
12488     call instructions exceeding their allowable offset range because
12489     they are conditionalized, you should consider using
12490     `-mmedium-calls' instead.
12491
12492`-mearly-cbranchsi'
12493     Enable pre-reload use of the cbranchsi pattern.
12494
12495`-mexpand-adddi'
12496     Expand `adddi3' and `subdi3' at rtl generation time into `add.f',
12497     `adc' etc.
12498
12499`-mindexed-loads'
12500     Enable the use of indexed loads.  This can be problematic because
12501     some optimizers then assume that indexed stores exist, which is not
12502     the case.
12503
12504`-mlra'
12505     Enable Local Register Allocation.  This is still experimental for
12506     ARC, so by default the compiler uses standard reload (i.e.
12507     `-mno-lra').
12508
12509`-mlra-priority-none'
12510     Don't indicate any priority for target registers.
12511
12512`-mlra-priority-compact'
12513     Indicate target register priority for r0..r3 / r12..r15.
12514
12515`-mlra-priority-noncompact'
12516     Reduce target regsiter priority for r0..r3 / r12..r15.
12517
12518`-mno-millicode'
12519     When optimizing for size (using `-Os'), prologues and epilogues
12520     that have to save or restore a large number of registers are often
12521     shortened by using call to a special function in libgcc; this is
12522     referred to as a _millicode_ call.  As these calls can pose
12523     performance issues, and/or cause linking issues when linking in a
12524     nonstandard way, this option is provided to turn off millicode call
12525     generation.
12526
12527`-mmixed-code'
12528     Tweak register allocation to help 16-bit instruction generation.
12529     This generally has the effect of decreasing the average
12530     instruction size while increasing the instruction count.
12531
12532`-mq-class'
12533     Enable 'q' instruction alternatives.  This is the default for
12534     `-Os'.
12535
12536`-mRcq'
12537     Enable Rcq constraint handling - most short code generation
12538     depends on this.  This is the default.
12539
12540`-mRcw'
12541     Enable Rcw constraint handling - ccfsm condexec mostly depends on
12542     this.  This is the default.
12543
12544`-msize-level=LEVEL'
12545     Fine-tune size optimization with regards to instruction lengths
12546     and alignment.  The recognized values for LEVEL are:
12547    `0'
12548          No size optimization.  This level is deprecated and treated
12549          like `1'.
12550
12551    `1'
12552          Short instructions are used opportunistically.
12553
12554    `2'
12555          In addition, alignment of loops and of code after barriers
12556          are dropped.
12557
12558    `3'
12559          In addition, optional data alignment is dropped, and the
12560          option `Os' is enabled.
12561
12562
12563     This defaults to `3' when `-Os' is in effect.  Otherwise, the
12564     behavior when this is not set is equivalent to level `1'.
12565
12566`-mtune=CPU'
12567     Set instruction scheduling parameters for CPU, overriding any
12568     implied by `-mcpu='.
12569
12570     Supported values for CPU are
12571
12572    `ARC600'
12573          Tune for ARC600 cpu.
12574
12575    `ARC601'
12576          Tune for ARC601 cpu.
12577
12578    `ARC700'
12579          Tune for ARC700 cpu with standard multiplier block.
12580
12581    `ARC700-xmac'
12582          Tune for ARC700 cpu with XMAC block.
12583
12584    `ARC725D'
12585          Tune for ARC725D cpu.
12586
12587    `ARC750D'
12588          Tune for ARC750D cpu.
12589
12590
12591`-mmultcost=NUM'
12592     Cost to assume for a multiply instruction, with `4' being equal to
12593     a normal instruction.
12594
12595`-munalign-prob-threshold=PROBABILITY'
12596     Set probability threshold for unaligning branches.  When tuning
12597     for `ARC700' and optimizing for speed, branches without filled
12598     delay slot are preferably emitted unaligned and long, unless
12599     profiling indicates that the probability for the branch to be taken
12600     is below PROBABILITY.  *Note Cross-profiling::.  The default is
12601     (REG_BR_PROB_BASE/2), i.e. 5000.
12602
12603
12604 The following options are maintained for backward compatibility, but
12605are now deprecated and will be removed in a future release:
12606
12607`-margonaut'
12608     Obsolete FPX.
12609
12610`-mbig-endian'
12611`-EB'
12612     Compile code for big endian targets.  Use of these options is now
12613     deprecated.  Users wanting big-endian code, should use the
12614     `arceb-elf32' and `arceb-linux-uclibc' targets when building the
12615     tool chain, for which big-endian is the default.
12616
12617`-mlittle-endian'
12618`-EL'
12619     Compile code for little endian targets.  Use of these options is
12620     now deprecated.  Users wanting little-endian code should use the
12621     `arc-elf32' and `arc-linux-uclibc' targets when building the tool
12622     chain, for which little-endian is the default.
12623
12624`-mbarrel_shifter'
12625     Replaced by `-mbarrel-shifter'.
12626
12627`-mdpfp_compact'
12628     Replaced by `-mdpfp-compact'.
12629
12630`-mdpfp_fast'
12631     Replaced by `-mdpfp-fast'.
12632
12633`-mdsp_packa'
12634     Replaced by `-mdsp-packa'.
12635
12636`-mEA'
12637     Replaced by `-mea'.
12638
12639`-mmac_24'
12640     Replaced by `-mmac-24'.
12641
12642`-mmac_d16'
12643     Replaced by `-mmac-d16'.
12644
12645`-mspfp_compact'
12646     Replaced by `-mspfp-compact'.
12647
12648`-mspfp_fast'
12649     Replaced by `-mspfp-fast'.
12650
12651`-mtune=CPU'
12652     Values `arc600', `arc601', `arc700' and `arc700-xmac' for CPU are
12653     replaced by `ARC600', `ARC601', `ARC700' and `ARC700-xmac'
12654     respectively
12655
12656`-multcost=NUM'
12657     Replaced by `-mmultcost'.
12658
12659
12660
12661File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
12662
126633.17.4 ARM Options
12664------------------
12665
12666These `-m' options are defined for the ARM port:
12667
12668`-mabi=NAME'
12669     Generate code for the specified ABI.  Permissible values are:
12670     `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
12671
12672`-mapcs-frame'
12673     Generate a stack frame that is compliant with the ARM Procedure
12674     Call Standard for all functions, even if this is not strictly
12675     necessary for correct execution of the code.  Specifying
12676     `-fomit-frame-pointer' with this option causes the stack frames
12677     not to be generated for leaf functions.  The default is
12678     `-mno-apcs-frame'.  This option is deprecated.
12679
12680`-mapcs'
12681     This is a synonym for `-mapcs-frame' and is deprecated.
12682
12683`-mthumb-interwork'
12684     Generate code that supports calling between the ARM and Thumb
12685     instruction sets.  Without this option, on pre-v5 architectures,
12686     the two instruction sets cannot be reliably used inside one
12687     program.  The default is `-mno-thumb-interwork', since slightly
12688     larger code is generated when `-mthumb-interwork' is specified.
12689     In AAPCS configurations this option is meaningless.
12690
12691`-mno-sched-prolog'
12692     Prevent the reordering of instructions in the function prologue,
12693     or the merging of those instruction with the instructions in the
12694     function's body.  This means that all functions start with a
12695     recognizable set of instructions (or in fact one of a choice from
12696     a small set of different function prologues), and this information
12697     can be used to locate the start of functions inside an executable
12698     piece of code.  The default is `-msched-prolog'.
12699
12700`-mfloat-abi=NAME'
12701     Specifies which floating-point ABI to use.  Permissible values
12702     are: `soft', `softfp' and `hard'.
12703
12704     Specifying `soft' causes GCC to generate output containing library
12705     calls for floating-point operations.  `softfp' allows the
12706     generation of code using hardware floating-point instructions, but
12707     still uses the soft-float calling conventions.  `hard' allows
12708     generation of floating-point instructions and uses FPU-specific
12709     calling conventions.
12710
12711     The default depends on the specific target configuration.  Note
12712     that the hard-float and soft-float ABIs are not link-compatible;
12713     you must compile your entire program with the same ABI, and link
12714     with a compatible set of libraries.
12715
12716`-mlittle-endian'
12717     Generate code for a processor running in little-endian mode.  This
12718     is the default for all standard configurations.
12719
12720`-mbig-endian'
12721     Generate code for a processor running in big-endian mode; the
12722     default is to compile code for a little-endian processor.
12723
12724`-march=NAME'
12725     This specifies the name of the target ARM architecture.  GCC uses
12726     this name to determine what kind of instructions it can emit when
12727     generating assembly code.  This option can be used in conjunction
12728     with or instead of the `-mcpu=' option.  Permissible names are:
12729     `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
12730     `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2',
12731     `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r',
12732     `armv7-m', `armv7e-m', `armv7ve', `armv8-a', `armv8-a+crc',
12733     `iwmmxt', `iwmmxt2', `ep9312'.
12734
12735     `-march=armv7ve' is the armv7-a architecture with virtualization
12736     extensions.
12737
12738     `-march=armv8-a+crc' enables code generation for the ARMv8-A
12739     architecture together with the optional CRC32 extensions.
12740
12741     `-march=native' causes the compiler to auto-detect the architecture
12742     of the build computer.  At present, this feature is only supported
12743     on GNU/Linux, and not all architectures are recognized.  If the
12744     auto-detect is unsuccessful the option has no effect.
12745
12746`-mtune=NAME'
12747     This option specifies the name of the target ARM processor for
12748     which GCC should tune the performance of the code.  For some ARM
12749     implementations better performance can be obtained by using this
12750     option.  Permissible names are: `arm2', `arm250', `arm3', `arm6',
12751     `arm60', `arm600', `arm610', `arm620', `arm7', `arm7m', `arm7d',
12752     `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', `arm700i',
12753     `arm710', `arm710c', `arm7100', `arm720', `arm7500', `arm7500fe',
12754     `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', `arm740t',
12755     `strongarm', `strongarm110', `strongarm1100', `strongarm1110',
12756     `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', `arm922t',
12757     `arm946e-s', `arm966e-s', `arm968e-s', `arm926ej-s', `arm940t',
12758     `arm9tdmi', `arm10tdmi', `arm1020t', `arm1026ej-s', `arm10e',
12759     `arm1020e', `arm1022e', `arm1136j-s', `arm1136jf-s', `mpcore',
12760     `mpcorenovfp', `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s',
12761     `arm1176jzf-s', `cortex-a5', `cortex-a7', `cortex-a8', `cortex-a9',
12762     `cortex-a12', `cortex-a15', `cortex-a53', `cortex-a57',
12763     `cortex-a72', `cortex-r4', `cortex-r4f', `cortex-r5', `cortex-r7',
12764     `cortex-m7', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0',
12765     `cortex-m0plus', `cortex-m1.small-multiply',
12766     `cortex-m0.small-multiply', `cortex-m0plus.small-multiply',
12767     `exynos-m1', `marvell-pj4', `xscale', `iwmmxt', `iwmmxt2',
12768     `ep9312', `fa526', `fa626', `fa606te', `fa626te', `fmp626',
12769     `fa726te', `xgene1'.
12770
12771     Additionally, this option can specify that GCC should tune the
12772     performance of the code for a big.LITTLE system.  Permissible
12773     names are: `cortex-a15.cortex-a7', `cortex-a57.cortex-a53',
12774     `cortex-a72.cortex-a53'.
12775
12776     `-mtune=generic-ARCH' specifies that GCC should tune the
12777     performance for a blend of processors within architecture ARCH.
12778     The aim is to generate code that run well on the current most
12779     popular processors, balancing between optimizations that benefit
12780     some CPUs in the range, and avoiding performance pitfalls of other
12781     CPUs.  The effects of this option may change in future GCC
12782     versions as CPU models come and go.
12783
12784     `-mtune=native' causes the compiler to auto-detect the CPU of the
12785     build computer.  At present, this feature is only supported on
12786     GNU/Linux, and not all architectures are recognized.  If the
12787     auto-detect is unsuccessful the option has no effect.
12788
12789`-mcpu=NAME'
12790     This specifies the name of the target ARM processor.  GCC uses
12791     this name to derive the name of the target ARM architecture (as if
12792     specified by `-march') and the ARM processor type for which to
12793     tune for performance (as if specified by `-mtune').  Where this
12794     option is used in conjunction with `-march' or `-mtune', those
12795     options take precedence over the appropriate part of this option.
12796
12797     Permissible names for this option are the same as those for
12798     `-mtune'.
12799
12800     `-mcpu=generic-ARCH' is also permissible, and is equivalent to
12801     `-march=ARCH -mtune=generic-ARCH'.  See `-mtune' for more
12802     information.
12803
12804     `-mcpu=native' causes the compiler to auto-detect the CPU of the
12805     build computer.  At present, this feature is only supported on
12806     GNU/Linux, and not all architectures are recognized.  If the
12807     auto-detect is unsuccessful the option has no effect.
12808
12809`-mfpu=NAME'
12810     This specifies what floating-point hardware (or hardware
12811     emulation) is available on the target.  Permissible names are:
12812     `vfp', `vfpv3', `vfpv3-fp16', `vfpv3-d16', `vfpv3-d16-fp16',
12813     `vfpv3xd', `vfpv3xd-fp16', `neon', `neon-fp16', `vfpv4',
12814     `vfpv4-d16', `fpv4-sp-d16', `neon-vfpv4', `fpv5-d16',
12815     `fpv5-sp-d16', `fp-armv8', `neon-fp-armv8', and
12816     `crypto-neon-fp-armv8'.
12817
12818     If `-msoft-float' is specified this specifies the format of
12819     floating-point values.
12820
12821     If the selected floating-point hardware includes the NEON extension
12822     (e.g. `-mfpu'=`neon'), note that floating-point operations are not
12823     generated by GCC's auto-vectorization pass unless
12824     `-funsafe-math-optimizations' is also specified.  This is because
12825     NEON hardware does not fully implement the IEEE 754 standard for
12826     floating-point arithmetic (in particular denormal values are
12827     treated as zero), so the use of NEON instructions may lead to a
12828     loss of precision.
12829
12830`-mfp16-format=NAME'
12831     Specify the format of the `__fp16' half-precision floating-point
12832     type.  Permissible names are `none', `ieee', and `alternative';
12833     the default is `none', in which case the `__fp16' type is not
12834     defined.  *Note Half-Precision::, for more information.
12835
12836`-mstructure-size-boundary=N'
12837     The sizes of all structures and unions are rounded up to a multiple
12838     of the number of bits set by this option.  Permissible values are
12839     8, 32 and 64.  The default value varies for different toolchains.
12840     For the COFF targeted toolchain the default value is 8.  A value
12841     of 64 is only allowed if the underlying ABI supports it.
12842
12843     Specifying a larger number can produce faster, more efficient
12844     code, but can also increase the size of the program.  Different
12845     values are potentially incompatible.  Code compiled with one value
12846     cannot necessarily expect to work with code or libraries compiled
12847     with another value, if they exchange information using structures
12848     or unions.
12849
12850`-mabort-on-noreturn'
12851     Generate a call to the function `abort' at the end of a `noreturn'
12852     function.  It is executed if the function tries to return.
12853
12854`-mlong-calls'
12855`-mno-long-calls'
12856     Tells the compiler to perform function calls by first loading the
12857     address of the function into a register and then performing a
12858     subroutine call on this register.  This switch is needed if the
12859     target function lies outside of the 64-megabyte addressing range
12860     of the offset-based version of subroutine call instruction.
12861
12862     Even if this switch is enabled, not all function calls are turned
12863     into long calls.  The heuristic is that static functions, functions
12864     that have the `short_call' attribute, functions that are inside
12865     the scope of a `#pragma no_long_calls' directive, and functions
12866     whose definitions have already been compiled within the current
12867     compilation unit are not turned into long calls.  The exceptions
12868     to this rule are that weak function definitions, functions with
12869     the `long_call' attribute or the `section' attribute, and
12870     functions that are within the scope of a `#pragma long_calls'
12871     directive are always turned into long calls.
12872
12873     This feature is not enabled by default.  Specifying
12874     `-mno-long-calls' restores the default behavior, as does placing
12875     the function calls within the scope of a `#pragma long_calls_off'
12876     directive.  Note these switches have no effect on how the compiler
12877     generates code to handle function calls via function pointers.
12878
12879`-msingle-pic-base'
12880     Treat the register used for PIC addressing as read-only, rather
12881     than loading it in the prologue for each function.  The runtime
12882     system is responsible for initializing this register with an
12883     appropriate value before execution begins.
12884
12885`-mpic-register=REG'
12886     Specify the register to be used for PIC addressing.  For standard
12887     PIC base case, the default is any suitable register determined by
12888     compiler.  For single PIC base case, the default is `R9' if target
12889     is EABI based or stack-checking is enabled, otherwise the default
12890     is `R10'.
12891
12892`-mpic-data-is-text-relative'
12893     Assume that each data segments are relative to text segment at
12894     load time.  Therefore, it permits addressing data using
12895     PC-relative operations.  This option is on by default for targets
12896     other than VxWorks RTP.
12897
12898`-mpoke-function-name'
12899     Write the name of each function into the text section, directly
12900     preceding the function prologue.  The generated code is similar to
12901     this:
12902
12903               t0
12904                   .ascii "arm_poke_function_name", 0
12905                   .align
12906               t1
12907                   .word 0xff000000 + (t1 - t0)
12908               arm_poke_function_name
12909                   mov     ip, sp
12910                   stmfd   sp!, {fp, ip, lr, pc}
12911                   sub     fp, ip, #4
12912
12913     When performing a stack backtrace, code can inspect the value of
12914     `pc' stored at `fp + 0'.  If the trace function then looks at
12915     location `pc - 12' and the top 8 bits are set, then we know that
12916     there is a function name embedded immediately preceding this
12917     location and has length `((pc[-3]) & 0xff000000)'.
12918
12919`-mthumb'
12920`-marm'
12921     Select between generating code that executes in ARM and Thumb
12922     states.  The default for most configurations is to generate code
12923     that executes in ARM state, but the default can be changed by
12924     configuring GCC with the `--with-mode='STATE configure option.
12925
12926`-mtpcs-frame'
12927     Generate a stack frame that is compliant with the Thumb Procedure
12928     Call Standard for all non-leaf functions.  (A leaf function is one
12929     that does not call any other functions.)  The default is
12930     `-mno-tpcs-frame'.
12931
12932`-mtpcs-leaf-frame'
12933     Generate a stack frame that is compliant with the Thumb Procedure
12934     Call Standard for all leaf functions.  (A leaf function is one
12935     that does not call any other functions.)  The default is
12936     `-mno-apcs-leaf-frame'.
12937
12938`-mcallee-super-interworking'
12939     Gives all externally visible functions in the file being compiled
12940     an ARM instruction set header which switches to Thumb mode before
12941     executing the rest of the function.  This allows these functions
12942     to be called from non-interworking code.  This option is not valid
12943     in AAPCS configurations because interworking is enabled by default.
12944
12945`-mcaller-super-interworking'
12946     Allows calls via function pointers (including virtual functions) to
12947     execute correctly regardless of whether the target code has been
12948     compiled for interworking or not.  There is a small overhead in
12949     the cost of executing a function pointer if this option is
12950     enabled.  This option is not valid in AAPCS configurations because
12951     interworking is enabled by default.
12952
12953`-mtp=NAME'
12954     Specify the access model for the thread local storage pointer.
12955     The valid models are `soft', which generates calls to
12956     `__aeabi_read_tp', `cp15', which fetches the thread pointer from
12957     `cp15' directly (supported in the arm6k architecture), and `auto',
12958     which uses the best available method for the selected processor.
12959     The default setting is `auto'.
12960
12961`-mtls-dialect=DIALECT'
12962     Specify the dialect to use for accessing thread local storage.  Two
12963     DIALECTs are supported--`gnu' and `gnu2'.  The `gnu' dialect
12964     selects the original GNU scheme for supporting local and global
12965     dynamic TLS models.  The `gnu2' dialect selects the GNU descriptor
12966     scheme, which provides better performance for shared libraries.
12967     The GNU descriptor scheme is compatible with the original scheme,
12968     but does require new assembler, linker and library support.
12969     Initial and local exec TLS models are unaffected by this option
12970     and always use the original scheme.
12971
12972`-mword-relocations'
12973     Only generate absolute relocations on word-sized values (i.e.
12974     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
12975     SymbianOS) where the runtime loader imposes this restriction, and
12976     when `-fpic' or `-fPIC' is specified.
12977
12978`-mfix-cortex-m3-ldrd'
12979     Some Cortex-M3 cores can cause data corruption when `ldrd'
12980     instructions with overlapping destination and base registers are
12981     used.  This option avoids generating these instructions.  This
12982     option is enabled by default when `-mcpu=cortex-m3' is specified.
12983
12984`-munaligned-access'
12985`-mno-unaligned-access'
12986     Enables (or disables) reading and writing of 16- and 32- bit values
12987     from addresses that are not 16- or 32- bit aligned.  By default
12988     unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
12989     architectures, and enabled for all other architectures.  If
12990     unaligned access is not enabled then words in packed data
12991     structures are accessed a byte at a time.
12992
12993     The ARM attribute `Tag_CPU_unaligned_access' is set in the
12994     generated object file to either true or false, depending upon the
12995     setting of this option.  If unaligned access is enabled then the
12996     preprocessor symbol `__ARM_FEATURE_UNALIGNED' is also defined.
12997
12998`-mneon-for-64bits'
12999     Enables using Neon to handle scalar 64-bits operations. This is
13000     disabled by default since the cost of moving data from core
13001     registers to Neon is high.
13002
13003`-mslow-flash-data'
13004     Assume loading data from flash is slower than fetching instruction.
13005     Therefore literal load is minimized for better performance.  This
13006     option is only supported when compiling for ARMv7 M-profile and
13007     off by default.
13008
13009`-masm-syntax-unified'
13010     Assume inline assembler is using unified asm syntax.  The default
13011     is currently off which implies divided syntax.  Currently this
13012     option is available only for Thumb1 and has no effect on ARM state
13013     and Thumb2.  However, this may change in future releases of GCC.
13014     Divided syntax should be considered deprecated.
13015
13016`-mrestrict-it'
13017     Restricts generation of IT blocks to conform to the rules of ARMv8.
13018     IT blocks can only contain a single 16-bit instruction from a
13019     select set of instructions. This option is on by default for ARMv8
13020     Thumb mode.
13021
13022`-mprint-tune-info'
13023     Print CPU tuning information as comment in assembler file.  This is
13024     an option used only for regression testing of the compiler and not
13025     intended for ordinary use in compiling code.  This option is
13026     disabled by default.
13027
13028
13029File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
13030
130313.17.5 AVR Options
13032------------------
13033
13034These options are defined for AVR implementations:
13035
13036`-mmcu=MCU'
13037     Specify Atmel AVR instruction set architectures (ISA) or MCU type.
13038
13039     The default for this option is `avr2'.
13040
13041     GCC supports the following AVR devices and ISAs:
13042
13043    `avr2'
13044          "Classic" devices with up to 8 KiB of program memory.
13045          MCU = `attiny22', `attiny26', `at90c8534', `at90s2313',
13046          `at90s2323', `at90s2333', `at90s2343', `at90s4414',
13047          `at90s4433', `at90s4434', `at90s8515', `at90s8535'.
13048
13049    `avr25'
13050          "Classic" devices with up to 8 KiB of program memory and with
13051          the `MOVW' instruction.
13052          MCU = `ata5272', `ata6616c', `attiny13', `attiny13a',
13053          `attiny2313', `attiny2313a', `attiny24', `attiny24a',
13054          `attiny25', `attiny261', `attiny261a', `attiny43u',
13055          `attiny4313', `attiny44', `attiny44a', `attiny441',
13056          `attiny45', `attiny461', `attiny461a', `attiny48',
13057          `attiny828', `attiny84', `attiny84a', `attiny841',
13058          `attiny85', `attiny861', `attiny861a', `attiny87',
13059          `attiny88', `at86rf401'.
13060
13061    `avr3'
13062          "Classic" devices with 16 KiB up to 64 KiB of  program memory.
13063          MCU = `at43usb355', `at76c711'.
13064
13065    `avr31'
13066          "Classic" devices with 128 KiB of program memory.
13067          MCU = `atmega103', `at43usb320'.
13068
13069    `avr35'
13070          "Classic" devices with 16 KiB up to 64 KiB of program memory
13071          and with the `MOVW' instruction.
13072          MCU = `ata5505', `ata6617c', `ata664251', `atmega16u2',
13073          `atmega32u2', `atmega8u2', `attiny1634', `attiny167',
13074          `at90usb162', `at90usb82'.
13075
13076    `avr4'
13077          "Enhanced" devices with up to 8 KiB of program memory.
13078          MCU = `ata6285', `ata6286', `ata6289', `ata6612c',
13079          `atmega48', `atmega48a', `atmega48p', `atmega48pa',
13080          `atmega8', `atmega8a', `atmega8hva', `atmega8515',
13081          `atmega8535', `atmega88', `atmega88a', `atmega88p',
13082          `atmega88pa', `at90pwm1', `at90pwm2', `at90pwm2b',
13083          `at90pwm3', `at90pwm3b', `at90pwm81'.
13084
13085    `avr5'
13086          "Enhanced" devices with 16 KiB up to 64 KiB of program memory.
13087          MCU = `ata5702m322', `ata5782', `ata5790', `ata5790n',
13088          `ata5795', `ata5831', `ata6613c', `ata6614q', `atmega16',
13089          `atmega16a', `atmega16hva', `atmega16hva2', `atmega16hvb',
13090          `atmega16hvbrevb', `atmega16m1', `atmega16u4', `atmega161',
13091          `atmega162', `atmega163', `atmega164a', `atmega164p',
13092          `atmega164pa', `atmega165', `atmega165a', `atmega165p',
13093          `atmega165pa', `atmega168', `atmega168a', `atmega168p',
13094          `atmega168pa', `atmega169', `atmega169a', `atmega169p',
13095          `atmega169pa', `atmega32', `atmega32a', `atmega32c1',
13096          `atmega32hvb', `atmega32hvbrevb', `atmega32m1', `atmega32u4',
13097          `atmega32u6', `atmega323', `atmega324a', `atmega324p',
13098          `atmega324pa', `atmega325', `atmega325a', `atmega325p',
13099          `atmega325pa', `atmega3250', `atmega3250a', `atmega3250p',
13100          `atmega3250pa', `atmega328', `atmega328p', `atmega329',
13101          `atmega329a', `atmega329p', `atmega329pa', `atmega3290',
13102          `atmega3290a', `atmega3290p', `atmega3290pa', `atmega406',
13103          `atmega64', `atmega64a', `atmega64c1', `atmega64hve',
13104          `atmega64hve2', `atmega64m1', `atmega64rfr2', `atmega640',
13105          `atmega644', `atmega644a', `atmega644p', `atmega644pa',
13106          `atmega644rfr2', `atmega645', `atmega645a', `atmega645p',
13107          `atmega6450', `atmega6450a', `atmega6450p', `atmega649',
13108          `atmega649a', `atmega649p', `atmega6490', `atmega6490a',
13109          `atmega6490p', `at90can32', `at90can64', `at90pwm161',
13110          `at90pwm216', `at90pwm316', `at90scr100', `at90usb646',
13111          `at90usb647', `at94k', `m3000'.
13112
13113    `avr51'
13114          "Enhanced" devices with 128 KiB of program memory.
13115          MCU = `atmega128', `atmega128a', `atmega128rfa1',
13116          `atmega128rfr2', `atmega1280', `atmega1281', `atmega1284',
13117          `atmega1284p', `atmega1284rfr2', `at90can128', `at90usb1286',
13118          `at90usb1287'.
13119
13120    `avr6'
13121          "Enhanced" devices with 3-byte PC, i.e. with more than
13122          128 KiB of program memory.
13123          MCU = `atmega256rfr2', `atmega2560', `atmega2561',
13124          `atmega2564rfr2'.
13125
13126    `avrxmega2'
13127          "XMEGA" devices with more than 8 KiB and up to 64 KiB of
13128          program memory.
13129          MCU = `atxmega16a4', `atxmega16a4u', `atxmega16c4',
13130          `atxmega16d4', `atxmega16e5', `atxmega32a4', `atxmega32a4u',
13131          `atxmega32c3', `atxmega32c4', `atxmega32d3', `atxmega32d4',
13132          `atxmega32e5', `atxmega8e5'.
13133
13134    `avrxmega4'
13135          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
13136          program memory.
13137          MCU = `atxmega64a3', `atxmega64a3u', `atxmega64a4u',
13138          `atxmega64b1', `atxmega64b3', `atxmega64c3', `atxmega64d3',
13139          `atxmega64d4'.
13140
13141    `avrxmega5'
13142          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
13143          program memory and more than 64 KiB of RAM.
13144          MCU = `atxmega64a1', `atxmega64a1u'.
13145
13146    `avrxmega6'
13147          "XMEGA" devices with more than 128 KiB of program memory.
13148          MCU = `atxmega128a3', `atxmega128a3u', `atxmega128b1',
13149          `atxmega128b3', `atxmega128c3', `atxmega128d3',
13150          `atxmega128d4', `atxmega192a3', `atxmega192a3u',
13151          `atxmega192c3', `atxmega192d3', `atxmega256a3',
13152          `atxmega256a3b', `atxmega256a3bu', `atxmega256a3u',
13153          `atxmega256c3', `atxmega256d3', `atxmega384c3',
13154          `atxmega384d3'.
13155
13156    `avrxmega7'
13157          "XMEGA" devices with more than 128 KiB of program memory and
13158          more than 64 KiB of RAM.
13159          MCU = `atxmega128a1', `atxmega128a1u', `atxmega128a4u'.
13160
13161    `avrtiny'
13162          "TINY" Tiny core devices with 512 B up to 4 KiB of program
13163          memory.
13164          MCU = `attiny10', `attiny20', `attiny4', `attiny40',
13165          `attiny5', `attiny9'.
13166
13167    `avr1'
13168          This ISA is implemented by the minimal AVR core and supported
13169          for assembler only.
13170          MCU = `attiny11', `attiny12', `attiny15', `attiny28',
13171          `at90s1200'.
13172
13173
13174`-maccumulate-args'
13175     Accumulate outgoing function arguments and acquire/release the
13176     needed stack space for outgoing function arguments once in function
13177     prologue/epilogue.  Without this option, outgoing arguments are
13178     pushed before calling a function and popped afterwards.
13179
13180     Popping the arguments after the function call can be expensive on
13181     AVR so that accumulating the stack space might lead to smaller
13182     executables because arguments need not to be removed from the
13183     stack after such a function call.
13184
13185     This option can lead to reduced code size for functions that
13186     perform several calls to functions that get their arguments on the
13187     stack like calls to printf-like functions.
13188
13189`-mbranch-cost=COST'
13190     Set the branch costs for conditional branch instructions to COST.
13191     Reasonable values for COST are small, non-negative integers. The
13192     default branch cost is 0.
13193
13194`-mcall-prologues'
13195     Functions prologues/epilogues are expanded as calls to appropriate
13196     subroutines.  Code size is smaller.
13197
13198`-mint8'
13199     Assume `int' to be 8-bit integer.  This affects the sizes of all
13200     types: a `char' is 1 byte, an `int' is 1 byte, a `long' is 2 bytes,
13201     and `long long' is 4 bytes.  Please note that this option does not
13202     conform to the C standards, but it results in smaller code size.
13203
13204`-mn-flash=NUM'
13205     Assume that the flash memory has a size of NUM times 64 KiB.
13206
13207`-mno-interrupts'
13208     Generated code is not compatible with hardware interrupts.  Code
13209     size is smaller.
13210
13211`-mrelax'
13212     Try to replace `CALL' resp. `JMP' instruction by the shorter
13213     `RCALL' resp. `RJMP' instruction if applicable.  Setting `-mrelax'
13214     just adds the `--mlink-relax' option to the assembler's command
13215     line and the `--relax' option to the linker's command line.
13216
13217     Jump relaxing is performed by the linker because jump offsets are
13218     not known before code is located. Therefore, the assembler code
13219     generated by the compiler is the same, but the instructions in the
13220     executable may differ from instructions in the assembler code.
13221
13222     Relaxing must be turned on if linker stubs are needed, see the
13223     section on `EIND' and linker stubs below.
13224
13225`-mrmw'
13226     Assume that the device supports the Read-Modify-Write instructions
13227     `XCH', `LAC', `LAS' and `LAT'.
13228
13229`-msp8'
13230     Treat the stack pointer register as an 8-bit register, i.e. assume
13231     the high byte of the stack pointer is zero.  In general, you don't
13232     need to set this option by hand.
13233
13234     This option is used internally by the compiler to select and build
13235     multilibs for architectures `avr2' and `avr25'.  These
13236     architectures mix devices with and without `SPH'.  For any setting
13237     other than `-mmcu=avr2' or `-mmcu=avr25' the compiler driver adds
13238     or removes this option from the compiler proper's command line,
13239     because the compiler then knows if the device or architecture has
13240     an 8-bit stack pointer and thus no `SPH' register or not.
13241
13242`-mstrict-X'
13243     Use address register `X' in a way proposed by the hardware.  This
13244     means that `X' is only used in indirect, post-increment or
13245     pre-decrement addressing.
13246
13247     Without this option, the `X' register may be used in the same way
13248     as `Y' or `Z' which then is emulated by additional instructions.
13249     For example, loading a value with `X+const' addressing with a
13250     small non-negative `const < 64' to a register RN is performed as
13251
13252          adiw r26, const   ; X += const
13253          ld   RN, X        ; RN = *X
13254          sbiw r26, const   ; X -= const
13255
13256`-mtiny-stack'
13257     Only change the lower 8 bits of the stack pointer.
13258
13259`-nodevicelib'
13260     Don't link against AVR-LibC's device specific library `libdev.a'.
13261
13262`-Waddr-space-convert'
13263     Warn about conversions between address spaces in the case where the
13264     resulting address space is not contained in the incoming address
13265     space.
13266
132673.17.5.1 `EIND' and Devices with More Than 128 Ki Bytes of Flash
13268................................................................
13269
13270Pointers in the implementation are 16 bits wide.  The address of a
13271function or label is represented as word address so that indirect jumps
13272and calls can target any code address in the range of 64 Ki words.
13273
13274 In order to facilitate indirect jump on devices with more than 128 Ki
13275bytes of program memory space, there is a special function register
13276called `EIND' that serves as most significant part of the target address
13277when `EICALL' or `EIJMP' instructions are used.
13278
13279 Indirect jumps and calls on these devices are handled as follows by
13280the compiler and are subject to some limitations:
13281
13282   * The compiler never sets `EIND'.
13283
13284   * The compiler uses `EIND' implicitely in `EICALL'/`EIJMP'
13285     instructions or might read `EIND' directly in order to emulate an
13286     indirect call/jump by means of a `RET' instruction.
13287
13288   * The compiler assumes that `EIND' never changes during the startup
13289     code or during the application. In particular, `EIND' is not
13290     saved/restored in function or interrupt service routine
13291     prologue/epilogue.
13292
13293   * For indirect calls to functions and computed goto, the linker
13294     generates _stubs_. Stubs are jump pads sometimes also called
13295     _trampolines_. Thus, the indirect call/jump jumps to such a stub.
13296     The stub contains a direct jump to the desired address.
13297
13298   * Linker relaxation must be turned on so that the linker generates
13299     the stubs correctly in all situations. See the compiler option
13300     `-mrelax' and the linker option `--relax'.  There are corner cases
13301     where the linker is supposed to generate stubs but aborts without
13302     relaxation and without a helpful error message.
13303
13304   * The default linker script is arranged for code with `EIND = 0'.
13305     If code is supposed to work for a setup with `EIND != 0', a custom
13306     linker script has to be used in order to place the sections whose
13307     name start with `.trampolines' into the segment where `EIND'
13308     points to.
13309
13310   * The startup code from libgcc never sets `EIND'.  Notice that
13311     startup code is a blend of code from libgcc and AVR-LibC.  For the
13312     impact of AVR-LibC on `EIND', see the
13313     AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).
13314
13315   * It is legitimate for user-specific startup code to set up `EIND'
13316     early, for example by means of initialization code located in
13317     section `.init3'. Such code runs prior to general startup code
13318     that initializes RAM and calls constructors, but after the bit of
13319     startup code from AVR-LibC that sets `EIND' to the segment where
13320     the vector table is located.
13321          #include <avr/io.h>
13322
13323          static void
13324          __attribute__((section(".init3"),naked,used,no_instrument_function))
13325          init3_set_eind (void)
13326          {
13327            __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
13328                            "out %i0,r24" :: "n" (&EIND) : "r24","memory");
13329          }
13330
13331     The `__trampolines_start' symbol is defined in the linker script.
13332
13333   * Stubs are generated automatically by the linker if the following
13334     two conditions are met:
13335        - The address of a label is taken by means of the `gs' modifier
13336          (short for _generate stubs_) like so:
13337               LDI r24, lo8(gs(FUNC))
13338               LDI r25, hi8(gs(FUNC))
13339
13340        - The final location of that label is in a code segment
13341          _outside_ the segment where the stubs are located.
13342
13343   * The compiler emits such `gs' modifiers for code labels in the
13344     following situations:
13345        - Taking address of a function or code label.
13346
13347        - Computed goto.
13348
13349        - If prologue-save function is used, see `-mcall-prologues'
13350          command-line option.
13351
13352        - Switch/case dispatch tables. If you do not want such dispatch
13353          tables you can specify the `-fno-jump-tables' command-line
13354          option.
13355
13356        - C and C++ constructors/destructors called during
13357          startup/shutdown.
13358
13359        - If the tools hit a `gs()' modifier explained above.
13360
13361   * Jumping to non-symbolic addresses like so is _not_ supported:
13362
13363          int main (void)
13364          {
13365              /* Call function at word address 0x2 */
13366              return ((int(*)(void)) 0x2)();
13367          }
13368
13369     Instead, a stub has to be set up, i.e. the function has to be
13370     called through a symbol (`func_4' in the example):
13371
13372          int main (void)
13373          {
13374              extern int func_4 (void);
13375
13376              /* Call function at byte address 0x4 */
13377              return func_4();
13378          }
13379
13380     and the application be linked with `-Wl,--defsym,func_4=0x4'.
13381     Alternatively, `func_4' can be defined in the linker script.
13382
133833.17.5.2 Handling of the `RAMPD', `RAMPX', `RAMPY' and `RAMPZ' Special Function Registers
13384.........................................................................................
13385
13386Some AVR devices support memories larger than the 64 KiB range that can
13387be accessed with 16-bit pointers.  To access memory locations outside
13388this 64 KiB range, the contentent of a `RAMP' register is used as high
13389part of the address: The `X', `Y', `Z' address register is concatenated
13390with the `RAMPX', `RAMPY', `RAMPZ' special function register,
13391respectively, to get a wide address. Similarly, `RAMPD' is used
13392together with direct addressing.
13393
13394   * The startup code initializes the `RAMP' special function registers
13395     with zero.
13396
13397   * If a *Note named address space: AVR Named Address Spaces. other
13398     than generic or `__flash' is used, then `RAMPZ' is set as needed
13399     before the operation.
13400
13401   * If the device supports RAM larger than 64 KiB and the compiler
13402     needs to change `RAMPZ' to accomplish an operation, `RAMPZ' is
13403     reset to zero after the operation.
13404
13405   * If the device comes with a specific `RAMP' register, the ISR
13406     prologue/epilogue saves/restores that SFR and initializes it with
13407     zero in case the ISR code might (implicitly) use it.
13408
13409   * RAM larger than 64 KiB is not supported by GCC for AVR targets.
13410     If you use inline assembler to read from locations outside the
13411     16-bit address range and change one of the `RAMP' registers, you
13412     must reset it to zero after the access.
13413
13414
134153.17.5.3 AVR Built-in Macros
13416............................
13417
13418GCC defines several built-in macros so that the user code can test for
13419the presence or absence of features.  Almost any of the following
13420built-in macros are deduced from device capabilities and thus triggered
13421by the `-mmcu=' command-line option.
13422
13423 For even more AVR-specific built-in macros see *Note AVR Named Address
13424Spaces:: and *Note AVR Built-in Functions::.
13425
13426`__AVR_ARCH__'
13427     Build-in macro that resolves to a decimal number that identifies
13428     the architecture and depends on the `-mmcu=MCU' option.  Possible
13429     values are:
13430
13431     `2', `25', `3', `31', `35', `4', `5', `51', `6'
13432
13433     for MCU=`avr2', `avr25', `avr3', `avr31', `avr35', `avr4', `avr5',
13434     `avr51', `avr6',
13435
13436     respectively and
13437
13438     `100', `102', `104', `105', `106', `107'
13439
13440     for MCU=`avrtiny', `avrxmega2', `avrxmega4', `avrxmega5',
13441     `avrxmega6', `avrxmega7', respectively.  If MCU specifies a
13442     device, this built-in macro is set accordingly. For example, with
13443     `-mmcu=atmega8' the macro is defined to `4'.
13444
13445`__AVR_DEVICE__'
13446     Setting `-mmcu=DEVICE' defines this built-in macro which reflects
13447     the device's name. For example, `-mmcu=atmega8' defines the
13448     built-in macro `__AVR_ATmega8__', `-mmcu=attiny261a' defines
13449     `__AVR_ATtiny261A__', etc.
13450
13451     The built-in macros' names follow the scheme `__AVR_DEVICE__'
13452     where DEVICE is the device name as from the AVR user manual. The
13453     difference between DEVICE in the built-in macro and DEVICE in
13454     `-mmcu=DEVICE' is that the latter is always lowercase.
13455
13456     If DEVICE is not a device but only a core architecture like
13457     `avr51', this macro is not defined.
13458
13459`__AVR_DEVICE_NAME__'
13460     Setting `-mmcu=DEVICE' defines this built-in macro to the device's
13461     name. For example, with `-mmcu=atmega8' the macro is defined to
13462     `atmega8'.
13463
13464     If DEVICE is not a device but only a core architecture like
13465     `avr51', this macro is not defined.
13466
13467`__AVR_XMEGA__'
13468     The device / architecture belongs to the XMEGA family of devices.
13469
13470`__AVR_HAVE_ELPM__'
13471     The device has the the `ELPM' instruction.
13472
13473`__AVR_HAVE_ELPMX__'
13474     The device has the `ELPM RN,Z' and `ELPM RN,Z+' instructions.
13475
13476`__AVR_HAVE_MOVW__'
13477     The device has the `MOVW' instruction to perform 16-bit
13478     register-register moves.
13479
13480`__AVR_HAVE_LPMX__'
13481     The device has the `LPM RN,Z' and `LPM RN,Z+' instructions.
13482
13483`__AVR_HAVE_MUL__'
13484     The device has a hardware multiplier.
13485
13486`__AVR_HAVE_JMP_CALL__'
13487     The device has the `JMP' and `CALL' instructions.  This is the
13488     case for devices with at least 16 KiB of program memory.
13489
13490`__AVR_HAVE_EIJMP_EICALL__'
13491`__AVR_3_BYTE_PC__'
13492     The device has the `EIJMP' and `EICALL' instructions.  This is the
13493     case for devices with more than 128 KiB of program memory.  This
13494     also means that the program counter (PC) is 3 bytes wide.
13495
13496`__AVR_2_BYTE_PC__'
13497     The program counter (PC) is 2 bytes wide. This is the case for
13498     devices with up to 128 KiB of program memory.
13499
13500`__AVR_HAVE_8BIT_SP__'
13501`__AVR_HAVE_16BIT_SP__'
13502     The stack pointer (SP) register is treated as 8-bit respectively
13503     16-bit register by the compiler.  The definition of these macros
13504     is affected by `-mtiny-stack'.
13505
13506`__AVR_HAVE_SPH__'
13507`__AVR_SP8__'
13508     The device has the SPH (high part of stack pointer) special
13509     function register or has an 8-bit stack pointer, respectively.
13510     The definition of these macros is affected by `-mmcu=' and in the
13511     cases of `-mmcu=avr2' and `-mmcu=avr25' also by `-msp8'.
13512
13513`__AVR_HAVE_RAMPD__'
13514`__AVR_HAVE_RAMPX__'
13515`__AVR_HAVE_RAMPY__'
13516`__AVR_HAVE_RAMPZ__'
13517     The device has the `RAMPD', `RAMPX', `RAMPY', `RAMPZ' special
13518     function register, respectively.
13519
13520`__NO_INTERRUPTS__'
13521     This macro reflects the `-mno-interrupts' command-line option.
13522
13523`__AVR_ERRATA_SKIP__'
13524`__AVR_ERRATA_SKIP_JMP_CALL__'
13525     Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
13526     instructions because of a hardware erratum.  Skip instructions are
13527     `SBRS', `SBRC', `SBIS', `SBIC' and `CPSE'.  The second macro is
13528     only defined if `__AVR_HAVE_JMP_CALL__' is also set.
13529
13530`__AVR_ISA_RMW__'
13531     The device has Read-Modify-Write instructions (XCH, LAC, LAS and
13532     LAT).
13533
13534`__AVR_SFR_OFFSET__=OFFSET'
13535     Instructions that can address I/O special function registers
13536     directly like `IN', `OUT', `SBI', etc. may use a different address
13537     as if addressed by an instruction to access RAM like `LD' or
13538     `STS'. This offset depends on the device architecture and has to
13539     be subtracted from the RAM address in order to get the respective
13540     I/O address.
13541
13542`__WITH_AVRLIBC__'
13543     The compiler is configured to be used together with AVR-Libc.  See
13544     the `--with-avrlibc' configure option.
13545
13546
13547
13548File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options
13549
135503.17.6 Blackfin Options
13551-----------------------
13552
13553`-mcpu=CPU[-SIREVISION]'
13554     Specifies the name of the target Blackfin processor.  Currently,
13555     CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522',
13556     `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532',
13557     `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542',
13558     `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m',
13559     `bf548m', `bf549m', `bf561', `bf592'.
13560
13561     The optional SIREVISION specifies the silicon revision of the
13562     target Blackfin processor.  Any workarounds available for the
13563     targeted silicon revision are enabled.  If SIREVISION is `none',
13564     no workarounds are enabled.  If SIREVISION is `any', all
13565     workarounds for the targeted processor are enabled.  The
13566     `__SILICON_REVISION__' macro is defined to two hexadecimal digits
13567     representing the major and minor numbers in the silicon revision.
13568     If SIREVISION is `none', the `__SILICON_REVISION__' is not
13569     defined.  If SIREVISION is `any', the `__SILICON_REVISION__' is
13570     defined to be `0xffff'.  If this optional SIREVISION is not used,
13571     GCC assumes the latest known silicon revision of the targeted
13572     Blackfin processor.
13573
13574     GCC defines a preprocessor macro for the specified CPU.  For the
13575     `bfin-elf' toolchain, this option causes the hardware BSP provided
13576     by libgloss to be linked in if `-msim' is not given.
13577
13578     Without this option, `bf532' is used as the processor by default.
13579
13580     Note that support for `bf561' is incomplete.  For `bf561', only
13581     the preprocessor macro is defined.
13582
13583`-msim'
13584     Specifies that the program will be run on the simulator.  This
13585     causes the simulator BSP provided by libgloss to be linked in.
13586     This option has effect only for `bfin-elf' toolchain.  Certain
13587     other options, such as `-mid-shared-library' and `-mfdpic', imply
13588     `-msim'.
13589
13590`-momit-leaf-frame-pointer'
13591     Don't keep the frame pointer in a register for leaf functions.
13592     This avoids the instructions to save, set up and restore frame
13593     pointers and makes an extra register available in leaf functions.
13594     The option `-fomit-frame-pointer' removes the frame pointer for
13595     all functions, which might make debugging harder.
13596
13597`-mspecld-anomaly'
13598     When enabled, the compiler ensures that the generated code does not
13599     contain speculative loads after jump instructions. If this option
13600     is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined.
13601
13602`-mno-specld-anomaly'
13603     Don't generate extra code to prevent speculative loads from
13604     occurring.
13605
13606`-mcsync-anomaly'
13607     When enabled, the compiler ensures that the generated code does not
13608     contain CSYNC or SSYNC instructions too soon after conditional
13609     branches.  If this option is used,
13610     `__WORKAROUND_SPECULATIVE_SYNCS' is defined.
13611
13612`-mno-csync-anomaly'
13613     Don't generate extra code to prevent CSYNC or SSYNC instructions
13614     from occurring too soon after a conditional branch.
13615
13616`-mlow-64k'
13617     When enabled, the compiler is free to take advantage of the
13618     knowledge that the entire program fits into the low 64k of memory.
13619
13620`-mno-low-64k'
13621     Assume that the program is arbitrarily large.  This is the default.
13622
13623`-mstack-check-l1'
13624     Do stack checking using information placed into L1 scratchpad
13625     memory by the uClinux kernel.
13626
13627`-mid-shared-library'
13628     Generate code that supports shared libraries via the library ID
13629     method.  This allows for execute in place and shared libraries in
13630     an environment without virtual memory management.  This option
13631     implies `-fPIC'.  With a `bfin-elf' target, this option implies
13632     `-msim'.
13633
13634`-mno-id-shared-library'
13635     Generate code that doesn't assume ID-based shared libraries are
13636     being used.  This is the default.
13637
13638`-mleaf-id-shared-library'
13639     Generate code that supports shared libraries via the library ID
13640     method, but assumes that this library or executable won't link
13641     against any other ID shared libraries.  That allows the compiler
13642     to use faster code for jumps and calls.
13643
13644`-mno-leaf-id-shared-library'
13645     Do not assume that the code being compiled won't link against any
13646     ID shared libraries.  Slower code is generated for jump and call
13647     insns.
13648
13649`-mshared-library-id=n'
13650     Specifies the identification number of the ID-based shared library
13651     being compiled.  Specifying a value of 0 generates more compact
13652     code; specifying other values forces the allocation of that number
13653     to the current library but is no more space- or time-efficient
13654     than omitting this option.
13655
13656`-msep-data'
13657     Generate code that allows the data segment to be located in a
13658     different area of memory from the text segment.  This allows for
13659     execute in place in an environment without virtual memory
13660     management by eliminating relocations against the text section.
13661
13662`-mno-sep-data'
13663     Generate code that assumes that the data segment follows the text
13664     segment.  This is the default.
13665
13666`-mlong-calls'
13667`-mno-long-calls'
13668     Tells the compiler to perform function calls by first loading the
13669     address of the function into a register and then performing a
13670     subroutine call on this register.  This switch is needed if the
13671     target function lies outside of the 24-bit addressing range of the
13672     offset-based version of subroutine call instruction.
13673
13674     This feature is not enabled by default.  Specifying
13675     `-mno-long-calls' restores the default behavior.  Note these
13676     switches have no effect on how the compiler generates code to
13677     handle function calls via function pointers.
13678
13679`-mfast-fp'
13680     Link with the fast floating-point library. This library relaxes
13681     some of the IEEE floating-point standard's rules for checking
13682     inputs against Not-a-Number (NAN), in the interest of performance.
13683
13684`-minline-plt'
13685     Enable inlining of PLT entries in function calls to functions that
13686     are not known to bind locally.  It has no effect without `-mfdpic'.
13687
13688`-mmulticore'
13689     Build a standalone application for multicore Blackfin processors.
13690     This option causes proper start files and link scripts supporting
13691     multicore to be used, and defines the macro `__BFIN_MULTICORE'.
13692     It can only be used with `-mcpu=bf561[-SIREVISION]'.
13693
13694     This option can be used with `-mcorea' or `-mcoreb', which selects
13695     the one-application-per-core programming model.  Without `-mcorea'
13696     or `-mcoreb', the single-application/dual-core programming model
13697     is used. In this model, the main function of Core B should be
13698     named as `coreb_main'.
13699
13700     If this option is not used, the single-core application programming
13701     model is used.
13702
13703`-mcorea'
13704     Build a standalone application for Core A of BF561 when using the
13705     one-application-per-core programming model. Proper start files and
13706     link scripts are used to support Core A, and the macro
13707     `__BFIN_COREA' is defined.  This option can only be used in
13708     conjunction with `-mmulticore'.
13709
13710`-mcoreb'
13711     Build a standalone application for Core B of BF561 when using the
13712     one-application-per-core programming model. Proper start files and
13713     link scripts are used to support Core B, and the macro
13714     `__BFIN_COREB' is defined. When this option is used, `coreb_main'
13715     should be used instead of `main'.  This option can only be used in
13716     conjunction with `-mmulticore'.
13717
13718`-msdram'
13719     Build a standalone application for SDRAM. Proper start files and
13720     link scripts are used to put the application into SDRAM, and the
13721     macro `__BFIN_SDRAM' is defined.  The loader should initialize
13722     SDRAM before loading the application.
13723
13724`-micplb'
13725     Assume that ICPLBs are enabled at run time.  This has an effect on
13726     certain anomaly workarounds.  For Linux targets, the default is to
13727     assume ICPLBs are enabled; for standalone applications the default
13728     is off.
13729
13730
13731File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options
13732
137333.17.7 C6X Options
13734------------------
13735
13736`-march=NAME'
13737     This specifies the name of the target architecture.  GCC uses this
13738     name to determine what kind of instructions it can emit when
13739     generating assembly code.  Permissible names are: `c62x', `c64x',
13740     `c64x+', `c67x', `c67x+', `c674x'.
13741
13742`-mbig-endian'
13743     Generate code for a big-endian target.
13744
13745`-mlittle-endian'
13746     Generate code for a little-endian target.  This is the default.
13747
13748`-msim'
13749     Choose startup files and linker script suitable for the simulator.
13750
13751`-msdata=default'
13752     Put small global and static data in the `.neardata' section, which
13753     is pointed to by register `B14'.  Put small uninitialized global
13754     and static data in the `.bss' section, which is adjacent to the
13755     `.neardata' section.  Put small read-only data into the `.rodata'
13756     section.  The corresponding sections used for large pieces of data
13757     are `.fardata', `.far' and `.const'.
13758
13759`-msdata=all'
13760     Put all data, not just small objects, into the sections reserved
13761     for small data, and use addressing relative to the `B14' register
13762     to access them.
13763
13764`-msdata=none'
13765     Make no use of the sections reserved for small data, and use
13766     absolute addresses to access all data.  Put all initialized global
13767     and static data in the `.fardata' section, and all uninitialized
13768     data in the `.far' section.  Put all constant data into the
13769     `.const' section.
13770
13771
13772File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options
13773
137743.17.8 CRIS Options
13775-------------------
13776
13777These options are defined specifically for the CRIS ports.
13778
13779`-march=ARCHITECTURE-TYPE'
13780`-mcpu=ARCHITECTURE-TYPE'
13781     Generate code for the specified architecture.  The choices for
13782     ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
13783     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
13784     cris-axis-linux-gnu, where the default is `v10'.
13785
13786`-mtune=ARCHITECTURE-TYPE'
13787     Tune to ARCHITECTURE-TYPE everything applicable about the generated
13788     code, except for the ABI and the set of available instructions.
13789     The choices for ARCHITECTURE-TYPE are the same as for
13790     `-march=ARCHITECTURE-TYPE'.
13791
13792`-mmax-stack-frame=N'
13793     Warn when the stack frame of a function exceeds N bytes.
13794
13795`-metrax4'
13796`-metrax100'
13797     The options `-metrax4' and `-metrax100' are synonyms for
13798     `-march=v3' and `-march=v8' respectively.
13799
13800`-mmul-bug-workaround'
13801`-mno-mul-bug-workaround'
13802     Work around a bug in the `muls' and `mulu' instructions for CPU
13803     models where it applies.  This option is active by default.
13804
13805`-mpdebug'
13806     Enable CRIS-specific verbose debug-related information in the
13807     assembly code.  This option also has the effect of turning off the
13808     `#NO_APP' formatted-code indicator to the assembler at the
13809     beginning of the assembly file.
13810
13811`-mcc-init'
13812     Do not use condition-code results from previous instruction;
13813     always emit compare and test instructions before use of condition
13814     codes.
13815
13816`-mno-side-effects'
13817     Do not emit instructions with side effects in addressing modes
13818     other than post-increment.
13819
13820`-mstack-align'
13821`-mno-stack-align'
13822`-mdata-align'
13823`-mno-data-align'
13824`-mconst-align'
13825`-mno-const-align'
13826     These options (`no-' options) arrange (eliminate arrangements) for
13827     the stack frame, individual data and constants to be aligned for
13828     the maximum single data access size for the chosen CPU model.  The
13829     default is to arrange for 32-bit alignment.  ABI details such as
13830     structure layout are not affected by these options.
13831
13832`-m32-bit'
13833`-m16-bit'
13834`-m8-bit'
13835     Similar to the stack- data- and const-align options above, these
13836     options arrange for stack frame, writable data and constants to
13837     all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
13838     alignment.
13839
13840`-mno-prologue-epilogue'
13841`-mprologue-epilogue'
13842     With `-mno-prologue-epilogue', the normal function prologue and
13843     epilogue which set up the stack frame are omitted and no return
13844     instructions or return sequences are generated in the code.  Use
13845     this option only together with visual inspection of the compiled
13846     code: no warnings or errors are generated when call-saved
13847     registers must be saved, or storage for local variables needs to
13848     be allocated.
13849
13850`-mno-gotplt'
13851`-mgotplt'
13852     With `-fpic' and `-fPIC', don't generate (do generate) instruction
13853     sequences that load addresses for functions from the PLT part of
13854     the GOT rather than (traditional on other architectures) calls to
13855     the PLT.  The default is `-mgotplt'.
13856
13857`-melf'
13858     Legacy no-op option only recognized with the cris-axis-elf and
13859     cris-axis-linux-gnu targets.
13860
13861`-mlinux'
13862     Legacy no-op option only recognized with the cris-axis-linux-gnu
13863     target.
13864
13865`-sim'
13866     This option, recognized for the cris-axis-elf, arranges to link
13867     with input-output functions from a simulator library.  Code,
13868     initialized data and zero-initialized data are allocated
13869     consecutively.
13870
13871`-sim2'
13872     Like `-sim', but pass linker options to locate initialized data at
13873     0x40000000 and zero-initialized data at 0x80000000.
13874
13875
13876File: gcc.info,  Node: CR16 Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
13877
138783.17.9 CR16 Options
13879-------------------
13880
13881These options are defined specifically for the CR16 ports.
13882
13883`-mmac'
13884     Enable the use of multiply-accumulate instructions. Disabled by
13885     default.
13886
13887`-mcr16cplus'
13888`-mcr16c'
13889     Generate code for CR16C or CR16C+ architecture. CR16C+ architecture
13890     is default.
13891
13892`-msim'
13893     Links the library libsim.a which is in compatible with simulator.
13894     Applicable to ELF compiler only.
13895
13896`-mint32'
13897     Choose integer type as 32-bit wide.
13898
13899`-mbit-ops'
13900     Generates `sbit'/`cbit' instructions for bit manipulations.
13901
13902`-mdata-model=MODEL'
13903     Choose a data model. The choices for MODEL are `near', `far' or
13904     `medium'. `medium' is default.  However, `far' is not valid with
13905     `-mcr16c', as the CR16C architecture does not support the far data
13906     model.
13907
13908
13909File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CR16 Options,  Up: Submodel Options
13910
139113.17.10 Darwin Options
13912----------------------
13913
13914These options are defined for all architectures running the Darwin
13915operating system.
13916
13917 FSF GCC on Darwin does not create "fat" object files; it creates an
13918object file for the single architecture that GCC was built to target.
13919Apple's GCC on Darwin does create "fat" files if multiple `-arch'
13920options are used; it does so by running the compiler or linker multiple
13921times and joining the results together with `lipo'.
13922
13923 The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
13924is determined by the flags that specify the ISA that GCC is targeting,
13925like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
13926used to override this.
13927
13928 The Darwin tools vary in their behavior when presented with an ISA
13929mismatch.  The assembler, `as', only permits instructions to be used
13930that are valid for the subtype of the file it is generating, so you
13931cannot put 64-bit instructions in a `ppc750' object file.  The linker
13932for shared libraries, `/usr/bin/libtool', fails and prints an error if
13933asked to create a shared library with a less restrictive subtype than
13934its input files (for instance, trying to put a `ppc970' object file in
13935a `ppc7400' library).  The linker for executables, `ld', quietly gives
13936the executable the most restrictive subtype of any of its input files.
13937
13938`-FDIR'
13939     Add the framework directory DIR to the head of the list of
13940     directories to be searched for header files.  These directories are
13941     interleaved with those specified by `-I' options and are scanned
13942     in a left-to-right order.
13943
13944     A framework directory is a directory with frameworks in it.  A
13945     framework is a directory with a `Headers' and/or `PrivateHeaders'
13946     directory contained directly in it that ends in `.framework'.  The
13947     name of a framework is the name of this directory excluding the
13948     `.framework'.  Headers associated with the framework are found in
13949     one of those two directories, with `Headers' being searched first.
13950     A subframework is a framework directory that is in a framework's
13951     `Frameworks' directory.  Includes of subframework headers can only
13952     appear in a header of a framework that contains the subframework,
13953     or in a sibling subframework header.  Two subframeworks are
13954     siblings if they occur in the same framework.  A subframework
13955     should not have the same name as a framework; a warning is issued
13956     if this is violated.  Currently a subframework cannot have
13957     subframeworks; in the future, the mechanism may be extended to
13958     support this.  The standard frameworks can be found in
13959     `/System/Library/Frameworks' and `/Library/Frameworks'.  An
13960     example include looks like `#include <Framework/header.h>', where
13961     `Framework' denotes the name of the framework and `header.h' is
13962     found in the `PrivateHeaders' or `Headers' directory.
13963
13964`-iframeworkDIR'
13965     Like `-F' except the directory is a treated as a system directory.
13966     The main difference between this `-iframework' and `-F' is that
13967     with `-iframework' the compiler does not warn about constructs
13968     contained within header files found via DIR.  This option is valid
13969     only for the C family of languages.
13970
13971`-gused'
13972     Emit debugging information for symbols that are used.  For stabs
13973     debugging format, this enables `-feliminate-unused-debug-symbols'.
13974     This is by default ON.
13975
13976`-gfull'
13977     Emit debugging information for all symbols and types.
13978
13979`-mmacosx-version-min=VERSION'
13980     The earliest version of MacOS X that this executable will run on
13981     is VERSION.  Typical values of VERSION include `10.1', `10.2', and
13982     `10.3.9'.
13983
13984     If the compiler was built to use the system's headers by default,
13985     then the default for this option is the system version on which the
13986     compiler is running, otherwise the default is to make choices that
13987     are compatible with as many systems and code bases as possible.
13988
13989`-mkernel'
13990     Enable kernel development mode.  The `-mkernel' option sets
13991     `-static', `-fno-common', `-fno-use-cxa-atexit',
13992     `-fno-exceptions', `-fno-non-call-exceptions', `-fapple-kext',
13993     `-fno-weak' and `-fno-rtti' where applicable.  This mode also sets
13994     `-mno-altivec', `-msoft-float', `-fno-builtin' and `-mlong-branch'
13995     for PowerPC targets.
13996
13997`-mone-byte-bool'
13998     Override the defaults for `bool' so that `sizeof(bool)==1'.  By
13999     default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
14000     and `1' when compiling for Darwin/x86, so this option has no
14001     effect on x86.
14002
14003     *Warning:* The `-mone-byte-bool' switch causes GCC to generate
14004     code that is not binary compatible with code generated without
14005     that switch.  Using this switch may require recompiling all other
14006     modules in a program, including system libraries.  Use this switch
14007     to conform to a non-default data model.
14008
14009`-mfix-and-continue'
14010`-ffix-and-continue'
14011`-findirect-data'
14012     Generate code suitable for fast turnaround development, such as to
14013     allow GDB to dynamically load `.o' files into already-running
14014     programs.  `-findirect-data' and `-ffix-and-continue' are provided
14015     for backwards compatibility.
14016
14017`-all_load'
14018     Loads all members of static archive libraries.  See man ld(1) for
14019     more information.
14020
14021`-arch_errors_fatal'
14022     Cause the errors having to do with files that have the wrong
14023     architecture to be fatal.
14024
14025`-bind_at_load'
14026     Causes the output file to be marked such that the dynamic linker
14027     will bind all undefined references when the file is loaded or
14028     launched.
14029
14030`-bundle'
14031     Produce a Mach-o bundle format file.  See man ld(1) for more
14032     information.
14033
14034`-bundle_loader EXECUTABLE'
14035     This option specifies the EXECUTABLE that will load the build
14036     output file being linked.  See man ld(1) for more information.
14037
14038`-dynamiclib'
14039     When passed this option, GCC produces a dynamic library instead of
14040     an executable when linking, using the Darwin `libtool' command.
14041
14042`-force_cpusubtype_ALL'
14043     This causes GCC's output file to have the `ALL' subtype, instead of
14044     one controlled by the `-mcpu' or `-march' option.
14045
14046`-allowable_client  CLIENT_NAME'
14047`-client_name'
14048`-compatibility_version'
14049`-current_version'
14050`-dead_strip'
14051`-dependency-file'
14052`-dylib_file'
14053`-dylinker_install_name'
14054`-dynamic'
14055`-exported_symbols_list'
14056`-filelist'
14057`-flat_namespace'
14058`-force_flat_namespace'
14059`-headerpad_max_install_names'
14060`-image_base'
14061`-init'
14062`-install_name'
14063`-keep_private_externs'
14064`-multi_module'
14065`-multiply_defined'
14066`-multiply_defined_unused'
14067`-noall_load'
14068`-no_dead_strip_inits_and_terms'
14069`-nofixprebinding'
14070`-nomultidefs'
14071`-noprebind'
14072`-noseglinkedit'
14073`-pagezero_size'
14074`-prebind'
14075`-prebind_all_twolevel_modules'
14076`-private_bundle'
14077`-read_only_relocs'
14078`-sectalign'
14079`-sectobjectsymbols'
14080`-whyload'
14081`-seg1addr'
14082`-sectcreate'
14083`-sectobjectsymbols'
14084`-sectorder'
14085`-segaddr'
14086`-segs_read_only_addr'
14087`-segs_read_write_addr'
14088`-seg_addr_table'
14089`-seg_addr_table_filename'
14090`-seglinkedit'
14091`-segprot'
14092`-segs_read_only_addr'
14093`-segs_read_write_addr'
14094`-single_module'
14095`-static'
14096`-sub_library'
14097`-sub_umbrella'
14098`-twolevel_namespace'
14099`-umbrella'
14100`-undefined'
14101`-unexported_symbols_list'
14102`-weak_reference_mismatches'
14103`-whatsloaded'
14104     These options are passed to the Darwin linker.  The Darwin linker
14105     man page describes them in detail.
14106
14107
14108File: gcc.info,  Node: DEC Alpha Options,  Next: FR30 Options,  Prev: Darwin Options,  Up: Submodel Options
14109
141103.17.11 DEC Alpha Options
14111-------------------------
14112
14113These `-m' options are defined for the DEC Alpha implementations:
14114
14115`-mno-soft-float'
14116`-msoft-float'
14117     Use (do not use) the hardware floating-point instructions for
14118     floating-point operations.  When `-msoft-float' is specified,
14119     functions in `libgcc.a' are used to perform floating-point
14120     operations.  Unless they are replaced by routines that emulate the
14121     floating-point operations, or compiled in such a way as to call
14122     such emulations routines, these routines issue floating-point
14123     operations.   If you are compiling for an Alpha without
14124     floating-point operations, you must ensure that the library is
14125     built so as not to call them.
14126
14127     Note that Alpha implementations without floating-point operations
14128     are required to have floating-point registers.
14129
14130`-mfp-reg'
14131`-mno-fp-regs'
14132     Generate code that uses (does not use) the floating-point register
14133     set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
14134     register set is not used, floating-point operands are passed in
14135     integer registers as if they were integers and floating-point
14136     results are passed in `$0' instead of `$f0'.  This is a
14137     non-standard calling sequence, so any function with a
14138     floating-point argument or return value called by code compiled
14139     with `-mno-fp-regs' must also be compiled with that option.
14140
14141     A typical use of this option is building a kernel that does not
14142     use, and hence need not save and restore, any floating-point
14143     registers.
14144
14145`-mieee'
14146     The Alpha architecture implements floating-point hardware
14147     optimized for maximum performance.  It is mostly compliant with
14148     the IEEE floating-point standard.  However, for full compliance,
14149     software assistance is required.  This option generates code fully
14150     IEEE-compliant code _except_ that the INEXACT-FLAG is not
14151     maintained (see below).  If this option is turned on, the
14152     preprocessor macro `_IEEE_FP' is defined during compilation.  The
14153     resulting code is less efficient but is able to correctly support
14154     denormalized numbers and exceptional IEEE values such as
14155     not-a-number and plus/minus infinity.  Other Alpha compilers call
14156     this option `-ieee_with_no_inexact'.
14157
14158`-mieee-with-inexact'
14159     This is like `-mieee' except the generated code also maintains the
14160     IEEE INEXACT-FLAG.  Turning on this option causes the generated
14161     code to implement fully-compliant IEEE math.  In addition to
14162     `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
14163     On some Alpha implementations the resulting code may execute
14164     significantly slower than the code generated by default.  Since
14165     there is very little code that depends on the INEXACT-FLAG, you
14166     should normally not specify this option.  Other Alpha compilers
14167     call this option `-ieee_with_inexact'.
14168
14169`-mfp-trap-mode=TRAP-MODE'
14170     This option controls what floating-point related traps are enabled.
14171     Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
14172     trap mode can be set to one of four values:
14173
14174    `n'
14175          This is the default (normal) setting.  The only traps that
14176          are enabled are the ones that cannot be disabled in software
14177          (e.g., division by zero trap).
14178
14179    `u'
14180          In addition to the traps enabled by `n', underflow traps are
14181          enabled as well.
14182
14183    `su'
14184          Like `u', but the instructions are marked to be safe for
14185          software completion (see Alpha architecture manual for
14186          details).
14187
14188    `sui'
14189          Like `su', but inexact traps are enabled as well.
14190
14191`-mfp-rounding-mode=ROUNDING-MODE'
14192     Selects the IEEE rounding mode.  Other Alpha compilers call this
14193     option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
14194
14195    `n'
14196          Normal IEEE rounding mode.  Floating-point numbers are
14197          rounded towards the nearest machine number or towards the
14198          even machine number in case of a tie.
14199
14200    `m'
14201          Round towards minus infinity.
14202
14203    `c'
14204          Chopped rounding mode.  Floating-point numbers are rounded
14205          towards zero.
14206
14207    `d'
14208          Dynamic rounding mode.  A field in the floating-point control
14209          register (FPCR, see Alpha architecture reference manual)
14210          controls the rounding mode in effect.  The C library
14211          initializes this register for rounding towards plus infinity.
14212          Thus, unless your program modifies the FPCR, `d' corresponds
14213          to round towards plus infinity.
14214
14215`-mtrap-precision=TRAP-PRECISION'
14216     In the Alpha architecture, floating-point traps are imprecise.
14217     This means without software assistance it is impossible to recover
14218     from a floating trap and program execution normally needs to be
14219     terminated.  GCC can generate code that can assist operating
14220     system trap handlers in determining the exact location that caused
14221     a floating-point trap.  Depending on the requirements of an
14222     application, different levels of precisions can be selected:
14223
14224    `p'
14225          Program precision.  This option is the default and means a
14226          trap handler can only identify which program caused a
14227          floating-point exception.
14228
14229    `f'
14230          Function precision.  The trap handler can determine the
14231          function that caused a floating-point exception.
14232
14233    `i'
14234          Instruction precision.  The trap handler can determine the
14235          exact instruction that caused a floating-point exception.
14236
14237     Other Alpha compilers provide the equivalent options called
14238     `-scope_safe' and `-resumption_safe'.
14239
14240`-mieee-conformant'
14241     This option marks the generated code as IEEE conformant.  You must
14242     not use this option unless you also specify `-mtrap-precision=i'
14243     and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
14244     effect is to emit the line `.eflag 48' in the function prologue of
14245     the generated assembly file.
14246
14247`-mbuild-constants'
14248     Normally GCC examines a 32- or 64-bit integer constant to see if
14249     it can construct it from smaller constants in two or three
14250     instructions.  If it cannot, it outputs the constant as a literal
14251     and generates code to load it from the data segment at run time.
14252
14253     Use this option to require GCC to construct _all_ integer constants
14254     using code, even if it takes more instructions (the maximum is
14255     six).
14256
14257     You typically use this option to build a shared library dynamic
14258     loader.  Itself a shared library, it must relocate itself in memory
14259     before it can find the variables and constants in its own data
14260     segment.
14261
14262`-mbwx'
14263`-mno-bwx'
14264`-mcix'
14265`-mno-cix'
14266`-mfix'
14267`-mno-fix'
14268`-mmax'
14269`-mno-max'
14270     Indicate whether GCC should generate code to use the optional BWX,
14271     CIX, FIX and MAX instruction sets.  The default is to use the
14272     instruction sets supported by the CPU type specified via `-mcpu='
14273     option or that of the CPU on which GCC was built if none is
14274     specified.
14275
14276`-mfloat-vax'
14277`-mfloat-ieee'
14278     Generate code that uses (does not use) VAX F and G floating-point
14279     arithmetic instead of IEEE single and double precision.
14280
14281`-mexplicit-relocs'
14282`-mno-explicit-relocs'
14283     Older Alpha assemblers provided no way to generate symbol
14284     relocations except via assembler macros.  Use of these macros does
14285     not allow optimal instruction scheduling.  GNU binutils as of
14286     version 2.12 supports a new syntax that allows the compiler to
14287     explicitly mark which relocations should apply to which
14288     instructions.  This option is mostly useful for debugging, as GCC
14289     detects the capabilities of the assembler when it is built and
14290     sets the default accordingly.
14291
14292`-msmall-data'
14293`-mlarge-data'
14294     When `-mexplicit-relocs' is in effect, static data is accessed via
14295     "gp-relative" relocations.  When `-msmall-data' is used, objects 8
14296     bytes long or smaller are placed in a "small data area" (the
14297     `.sdata' and `.sbss' sections) and are accessed via 16-bit
14298     relocations off of the `$gp' register.  This limits the size of
14299     the small data area to 64KB, but allows the variables to be
14300     directly accessed via a single instruction.
14301
14302     The default is `-mlarge-data'.  With this option the data area is
14303     limited to just below 2GB.  Programs that require more than 2GB of
14304     data must use `malloc' or `mmap' to allocate the data in the heap
14305     instead of in the program's data segment.
14306
14307     When generating code for shared libraries, `-fpic' implies
14308     `-msmall-data' and `-fPIC' implies `-mlarge-data'.
14309
14310`-msmall-text'
14311`-mlarge-text'
14312     When `-msmall-text' is used, the compiler assumes that the code of
14313     the entire program (or shared library) fits in 4MB, and is thus
14314     reachable with a branch instruction.  When `-msmall-data' is used,
14315     the compiler can assume that all local symbols share the same
14316     `$gp' value, and thus reduce the number of instructions required
14317     for a function call from 4 to 1.
14318
14319     The default is `-mlarge-text'.
14320
14321`-mcpu=CPU_TYPE'
14322     Set the instruction set and instruction scheduling parameters for
14323     machine type CPU_TYPE.  You can specify either the `EV' style name
14324     or the corresponding chip number.  GCC supports scheduling
14325     parameters for the EV4, EV5 and EV6 family of processors and
14326     chooses the default values for the instruction set from the
14327     processor you specify.  If you do not specify a processor type,
14328     GCC defaults to the processor on which the compiler was built.
14329
14330     Supported values for CPU_TYPE are
14331
14332    `ev4'
14333    `ev45'
14334    `21064'
14335          Schedules as an EV4 and has no instruction set extensions.
14336
14337    `ev5'
14338    `21164'
14339          Schedules as an EV5 and has no instruction set extensions.
14340
14341    `ev56'
14342    `21164a'
14343          Schedules as an EV5 and supports the BWX extension.
14344
14345    `pca56'
14346    `21164pc'
14347    `21164PC'
14348          Schedules as an EV5 and supports the BWX and MAX extensions.
14349
14350    `ev6'
14351    `21264'
14352          Schedules as an EV6 and supports the BWX, FIX, and MAX
14353          extensions.
14354
14355    `ev67'
14356    `21264a'
14357          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
14358          extensions.
14359
14360     Native toolchains also support the value `native', which selects
14361     the best architecture option for the host processor.
14362     `-mcpu=native' has no effect if GCC does not recognize the
14363     processor.
14364
14365`-mtune=CPU_TYPE'
14366     Set only the instruction scheduling parameters for machine type
14367     CPU_TYPE.  The instruction set is not changed.
14368
14369     Native toolchains also support the value `native', which selects
14370     the best architecture option for the host processor.
14371     `-mtune=native' has no effect if GCC does not recognize the
14372     processor.
14373
14374`-mmemory-latency=TIME'
14375     Sets the latency the scheduler should assume for typical memory
14376     references as seen by the application.  This number is highly
14377     dependent on the memory access patterns used by the application
14378     and the size of the external cache on the machine.
14379
14380     Valid options for TIME are
14381
14382    `NUMBER'
14383          A decimal number representing clock cycles.
14384
14385    `L1'
14386    `L2'
14387    `L3'
14388    `main'
14389          The compiler contains estimates of the number of clock cycles
14390          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
14391          (also called Dcache, Scache, and Bcache), as well as to main
14392          memory.  Note that L3 is only valid for EV5.
14393
14394
14395
14396File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options
14397
143983.17.12 FR30 Options
14399--------------------
14400
14401These options are defined specifically for the FR30 port.
14402
14403`-msmall-model'
14404     Use the small address space model.  This can produce smaller code,
14405     but it does assume that all symbolic values and addresses fit into
14406     a 20-bit range.
14407
14408`-mno-lsim'
14409     Assume that runtime support has been provided and so there is no
14410     need to include the simulator library (`libsim.a') on the linker
14411     command line.
14412
14413
14414
14415File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options
14416
144173.17.13 FRV Options
14418-------------------
14419
14420`-mgpr-32'
14421     Only use the first 32 general-purpose registers.
14422
14423`-mgpr-64'
14424     Use all 64 general-purpose registers.
14425
14426`-mfpr-32'
14427     Use only the first 32 floating-point registers.
14428
14429`-mfpr-64'
14430     Use all 64 floating-point registers.
14431
14432`-mhard-float'
14433     Use hardware instructions for floating-point operations.
14434
14435`-msoft-float'
14436     Use library routines for floating-point operations.
14437
14438`-malloc-cc'
14439     Dynamically allocate condition code registers.
14440
14441`-mfixed-cc'
14442     Do not try to dynamically allocate condition code registers, only
14443     use `icc0' and `fcc0'.
14444
14445`-mdword'
14446     Change ABI to use double word insns.
14447
14448`-mno-dword'
14449     Do not use double word instructions.
14450
14451`-mdouble'
14452     Use floating-point double instructions.
14453
14454`-mno-double'
14455     Do not use floating-point double instructions.
14456
14457`-mmedia'
14458     Use media instructions.
14459
14460`-mno-media'
14461     Do not use media instructions.
14462
14463`-mmuladd'
14464     Use multiply and add/subtract instructions.
14465
14466`-mno-muladd'
14467     Do not use multiply and add/subtract instructions.
14468
14469`-mfdpic'
14470     Select the FDPIC ABI, which uses function descriptors to represent
14471     pointers to functions.  Without any PIC/PIE-related options, it
14472     implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
14473     and small data are within a 12-bit range from the GOT base
14474     address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
14475     bits.  With a `bfin-elf' target, this option implies `-msim'.
14476
14477`-minline-plt'
14478     Enable inlining of PLT entries in function calls to functions that
14479     are not known to bind locally.  It has no effect without `-mfdpic'.
14480     It's enabled by default if optimizing for speed and compiling for
14481     shared libraries (i.e., `-fPIC' or `-fpic'), or when an
14482     optimization option such as `-O3' or above is present in the
14483     command line.
14484
14485`-mTLS'
14486     Assume a large TLS segment when generating thread-local code.
14487
14488`-mtls'
14489     Do not assume a large TLS segment when generating thread-local
14490     code.
14491
14492`-mgprel-ro'
14493     Enable the use of `GPREL' relocations in the FDPIC ABI for data
14494     that is known to be in read-only sections.  It's enabled by
14495     default, except for `-fpic' or `-fpie': even though it may help
14496     make the global offset table smaller, it trades 1 instruction for
14497     4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
14498     of which may be shared by multiple symbols, and it avoids the need
14499     for a GOT entry for the referenced symbol, so it's more likely to
14500     be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
14501
14502`-multilib-library-pic'
14503     Link with the (library, not FD) pic libraries.  It's implied by
14504     `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
14505     `-mfdpic'.  You should never have to use it explicitly.
14506
14507`-mlinked-fp'
14508     Follow the EABI requirement of always creating a frame pointer
14509     whenever a stack frame is allocated.  This option is enabled by
14510     default and can be disabled with `-mno-linked-fp'.
14511
14512`-mlong-calls'
14513     Use indirect addressing to call functions outside the current
14514     compilation unit.  This allows the functions to be placed anywhere
14515     within the 32-bit address space.
14516
14517`-malign-labels'
14518     Try to align labels to an 8-byte boundary by inserting NOPs into
14519     the previous packet.  This option only has an effect when VLIW
14520     packing is enabled.  It doesn't create new packets; it merely adds
14521     NOPs to existing ones.
14522
14523`-mlibrary-pic'
14524     Generate position-independent EABI code.
14525
14526`-macc-4'
14527     Use only the first four media accumulator registers.
14528
14529`-macc-8'
14530     Use all eight media accumulator registers.
14531
14532`-mpack'
14533     Pack VLIW instructions.
14534
14535`-mno-pack'
14536     Do not pack VLIW instructions.
14537
14538`-mno-eflags'
14539     Do not mark ABI switches in e_flags.
14540
14541`-mcond-move'
14542     Enable the use of conditional-move instructions (default).
14543
14544     This switch is mainly for debugging the compiler and will likely
14545     be removed in a future version.
14546
14547`-mno-cond-move'
14548     Disable the use of conditional-move instructions.
14549
14550     This switch is mainly for debugging the compiler and will likely
14551     be removed in a future version.
14552
14553`-mscc'
14554     Enable the use of conditional set instructions (default).
14555
14556     This switch is mainly for debugging the compiler and will likely
14557     be removed in a future version.
14558
14559`-mno-scc'
14560     Disable the use of conditional set instructions.
14561
14562     This switch is mainly for debugging the compiler and will likely
14563     be removed in a future version.
14564
14565`-mcond-exec'
14566     Enable the use of conditional execution (default).
14567
14568     This switch is mainly for debugging the compiler and will likely
14569     be removed in a future version.
14570
14571`-mno-cond-exec'
14572     Disable the use of conditional execution.
14573
14574     This switch is mainly for debugging the compiler and will likely
14575     be removed in a future version.
14576
14577`-mvliw-branch'
14578     Run a pass to pack branches into VLIW instructions (default).
14579
14580     This switch is mainly for debugging the compiler and will likely
14581     be removed in a future version.
14582
14583`-mno-vliw-branch'
14584     Do not run a pass to pack branches into VLIW instructions.
14585
14586     This switch is mainly for debugging the compiler and will likely
14587     be removed in a future version.
14588
14589`-mmulti-cond-exec'
14590     Enable optimization of `&&' and `||' in conditional execution
14591     (default).
14592
14593     This switch is mainly for debugging the compiler and will likely
14594     be removed in a future version.
14595
14596`-mno-multi-cond-exec'
14597     Disable optimization of `&&' and `||' in conditional execution.
14598
14599     This switch is mainly for debugging the compiler and will likely
14600     be removed in a future version.
14601
14602`-mnested-cond-exec'
14603     Enable nested conditional execution optimizations (default).
14604
14605     This switch is mainly for debugging the compiler and will likely
14606     be removed in a future version.
14607
14608`-mno-nested-cond-exec'
14609     Disable nested conditional execution optimizations.
14610
14611     This switch is mainly for debugging the compiler and will likely
14612     be removed in a future version.
14613
14614`-moptimize-membar'
14615     This switch removes redundant `membar' instructions from the
14616     compiler-generated code.  It is enabled by default.
14617
14618`-mno-optimize-membar'
14619     This switch disables the automatic removal of redundant `membar'
14620     instructions from the generated code.
14621
14622`-mtomcat-stats'
14623     Cause gas to print out tomcat statistics.
14624
14625`-mcpu=CPU'
14626     Select the processor type for which to generate code.  Possible
14627     values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
14628     `fr400', `fr300' and `simple'.
14629
14630
14631
14632File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
14633
146343.17.14 GNU/Linux Options
14635-------------------------
14636
14637These `-m' options are defined for GNU/Linux targets:
14638
14639`-mglibc'
14640     Use the GNU C library.  This is the default except on
14641     `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets.
14642
14643`-muclibc'
14644     Use uClibc C library.  This is the default on `*-*-linux-*uclibc*'
14645     targets.
14646
14647`-mbionic'
14648     Use Bionic C library.  This is the default on
14649     `*-*-linux-*android*' targets.
14650
14651`-mandroid'
14652     Compile code compatible with Android platform.  This is the
14653     default on `*-*-linux-*android*' targets.
14654
14655     When compiling, this option enables `-mbionic', `-fPIC',
14656     `-fno-exceptions' and `-fno-rtti' by default.  When linking, this
14657     option makes the GCC driver pass Android-specific options to the
14658     linker.  Finally, this option causes the preprocessor macro
14659     `__ANDROID__' to be defined.
14660
14661`-tno-android-cc'
14662     Disable compilation effects of `-mandroid', i.e., do not enable
14663     `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default.
14664
14665`-tno-android-ld'
14666     Disable linking effects of `-mandroid', i.e., pass standard Linux
14667     linking options to the linker.
14668
14669
14670
14671File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
14672
146733.17.15 H8/300 Options
14674----------------------
14675
14676These `-m' options are defined for the H8/300 implementations:
14677
14678`-mrelax'
14679     Shorten some address references at link time, when possible; uses
14680     the linker option `-relax'.  *Note `ld' and the H8/300:
14681     (ld)H8/300, for a fuller description.
14682
14683`-mh'
14684     Generate code for the H8/300H.
14685
14686`-ms'
14687     Generate code for the H8S.
14688
14689`-mn'
14690     Generate code for the H8S and H8/300H in the normal mode.  This
14691     switch must be used either with `-mh' or `-ms'.
14692
14693`-ms2600'
14694     Generate code for the H8S/2600.  This switch must be used with
14695     `-ms'.
14696
14697`-mexr'
14698     Extended registers are stored on stack before execution of function
14699     with monitor attribute. Default option is `-mexr'.  This option is
14700     valid only for H8S targets.
14701
14702`-mno-exr'
14703     Extended registers are not stored on stack before execution of
14704     function with monitor attribute. Default option is `-mno-exr'.
14705     This option is valid only for H8S targets.
14706
14707`-mint32'
14708     Make `int' data 32 bits by default.
14709
14710`-malign-300'
14711     On the H8/300H and H8S, use the same alignment rules as for the
14712     H8/300.  The default for the H8/300H and H8S is to align longs and
14713     floats on 4-byte boundaries.  `-malign-300' causes them to be
14714     aligned on 2-byte boundaries.  This option has no effect on the
14715     H8/300.
14716
14717
14718File: gcc.info,  Node: HPPA Options,  Next: IA-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
14719
147203.17.16 HPPA Options
14721--------------------
14722
14723These `-m' options are defined for the HPPA family of computers:
14724
14725`-march=ARCHITECTURE-TYPE'
14726     Generate code for the specified architecture.  The choices for
14727     ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
14728     `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
14729     an HP-UX system to determine the proper architecture option for
14730     your machine.  Code compiled for lower numbered architectures runs
14731     on higher numbered architectures, but not the other way around.
14732
14733`-mpa-risc-1-0'
14734`-mpa-risc-1-1'
14735`-mpa-risc-2-0'
14736     Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
14737     respectively.
14738
14739`-mjump-in-delay'
14740     This option is ignored and provided for compatibility purposes
14741     only.
14742
14743`-mdisable-fpregs'
14744     Prevent floating-point registers from being used in any manner.
14745     This is necessary for compiling kernels that perform lazy context
14746     switching of floating-point registers.  If you use this option and
14747     attempt to perform floating-point operations, the compiler aborts.
14748
14749`-mdisable-indexing'
14750     Prevent the compiler from using indexing address modes.  This
14751     avoids some rather obscure problems when compiling MIG generated
14752     code under MACH.
14753
14754`-mno-space-regs'
14755     Generate code that assumes the target has no space registers.
14756     This allows GCC to generate faster indirect calls and use unscaled
14757     index address modes.
14758
14759     Such code is suitable for level 0 PA systems and kernels.
14760
14761`-mfast-indirect-calls'
14762     Generate code that assumes calls never cross space boundaries.
14763     This allows GCC to emit code that performs faster indirect calls.
14764
14765     This option does not work in the presence of shared libraries or
14766     nested functions.
14767
14768`-mfixed-range=REGISTER-RANGE'
14769     Generate code treating the given register range as fixed registers.
14770     A fixed register is one that the register allocator cannot use.
14771     This is useful when compiling kernel code.  A register range is
14772     specified as two registers separated by a dash.  Multiple register
14773     ranges can be specified separated by a comma.
14774
14775`-mlong-load-store'
14776     Generate 3-instruction load and store sequences as sometimes
14777     required by the HP-UX 10 linker.  This is equivalent to the `+k'
14778     option to the HP compilers.
14779
14780`-mportable-runtime'
14781     Use the portable calling conventions proposed by HP for ELF
14782     systems.
14783
14784`-mgas'
14785     Enable the use of assembler directives only GAS understands.
14786
14787`-mschedule=CPU-TYPE'
14788     Schedule code according to the constraints for the machine type
14789     CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
14790     `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
14791     HP-UX system to determine the proper scheduling option for your
14792     machine.  The default scheduling is `8000'.
14793
14794`-mlinker-opt'
14795     Enable the optimization pass in the HP-UX linker.  Note this makes
14796     symbolic debugging impossible.  It also triggers a bug in the
14797     HP-UX 8 and HP-UX 9 linkers in which they give bogus error
14798     messages when linking some programs.
14799
14800`-msoft-float'
14801     Generate output containing library calls for floating point.
14802     *Warning:* the requisite libraries are not available for all HPPA
14803     targets.  Normally the facilities of the machine's usual C
14804     compiler are used, but this cannot be done directly in
14805     cross-compilation.  You must make your own arrangements to provide
14806     suitable library functions for cross-compilation.
14807
14808     `-msoft-float' changes the calling convention in the output file;
14809     therefore, it is only useful if you compile _all_ of a program with
14810     this option.  In particular, you need to compile `libgcc.a', the
14811     library that comes with GCC, with `-msoft-float' in order for this
14812     to work.
14813
14814`-msio'
14815     Generate the predefine, `_SIO', for server IO.  The default is
14816     `-mwsio'.  This generates the predefines, `__hp9000s700',
14817     `__hp9000s700__' and `_WSIO', for workstation IO.  These options
14818     are available under HP-UX and HI-UX.
14819
14820`-mgnu-ld'
14821     Use options specific to GNU `ld'.  This passes `-shared' to `ld'
14822     when building a shared library.  It is the default when GCC is
14823     configured, explicitly or implicitly, with the GNU linker.  This
14824     option does not affect which `ld' is called; it only changes what
14825     parameters are passed to that `ld'.  The `ld' that is called is
14826     determined by the `--with-ld' configure option, GCC's program
14827     search path, and finally by the user's `PATH'.  The linker used by
14828     GCC can be printed using `which `gcc -print-prog-name=ld`'.  This
14829     option is only available on the 64-bit HP-UX GCC, i.e. configured
14830     with `hppa*64*-*-hpux*'.
14831
14832`-mhp-ld'
14833     Use options specific to HP `ld'.  This passes `-b' to `ld' when
14834     building a shared library and passes `+Accept TypeMismatch' to
14835     `ld' on all links.  It is the default when GCC is configured,
14836     explicitly or implicitly, with the HP linker.  This option does
14837     not affect which `ld' is called; it only changes what parameters
14838     are passed to that `ld'.  The `ld' that is called is determined by
14839     the `--with-ld' configure option, GCC's program search path, and
14840     finally by the user's `PATH'.  The linker used by GCC can be
14841     printed using `which `gcc -print-prog-name=ld`'.  This option is
14842     only available on the 64-bit HP-UX GCC, i.e. configured with
14843     `hppa*64*-*-hpux*'.
14844
14845`-mlong-calls'
14846     Generate code that uses long call sequences.  This ensures that a
14847     call is always able to reach linker generated stubs.  The default
14848     is to generate long calls only when the distance from the call
14849     site to the beginning of the function or translation unit, as the
14850     case may be, exceeds a predefined limit set by the branch type
14851     being used.  The limits for normal calls are 7,600,000 and 240,000
14852     bytes, respectively for the PA 2.0 and PA 1.X architectures.
14853     Sibcalls are always limited at 240,000 bytes.
14854
14855     Distances are measured from the beginning of functions when using
14856     the `-ffunction-sections' option, or when using the `-mgas' and
14857     `-mno-portable-runtime' options together under HP-UX with the SOM
14858     linker.
14859
14860     It is normally not desirable to use this option as it degrades
14861     performance.  However, it may be useful in large applications,
14862     particularly when partial linking is used to build the application.
14863
14864     The types of long calls used depends on the capabilities of the
14865     assembler and linker, and the type of code being generated.  The
14866     impact on systems that support long absolute calls, and long pic
14867     symbol-difference or pc-relative calls should be relatively small.
14868     However, an indirect call is used on 32-bit ELF systems in pic code
14869     and it is quite long.
14870
14871`-munix=UNIX-STD'
14872     Generate compiler predefines and select a startfile for the
14873     specified UNIX standard.  The choices for UNIX-STD are `93', `95'
14874     and `98'.  `93' is supported on all HP-UX versions.  `95' is
14875     available on HP-UX 10.10 and later.  `98' is available on HP-UX
14876     11.11 and later.  The default values are `93' for HP-UX 10.00,
14877     `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
14878     later.
14879
14880     `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
14881     `-munix=95' provides additional predefines for `XOPEN_UNIX' and
14882     `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
14883     `-munix=98' provides additional predefines for `_XOPEN_UNIX',
14884     `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
14885     `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
14886
14887     It is _important_ to note that this option changes the interfaces
14888     for various library routines.  It also affects the operational
14889     behavior of the C library.  Thus, _extreme_ care is needed in
14890     using this option.
14891
14892     Library code that is intended to operate with more than one UNIX
14893     standard must test, set and restore the variable
14894     `__xpg4_extended_mask' as appropriate.  Most GNU software doesn't
14895     provide this capability.
14896
14897`-nolibdld'
14898     Suppress the generation of link options to search libdld.sl when
14899     the `-static' option is specified on HP-UX 10 and later.
14900
14901`-static'
14902     The HP-UX implementation of setlocale in libc has a dependency on
14903     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
14904     when the `-static' option is specified, special link options are
14905     needed to resolve this dependency.
14906
14907     On HP-UX 10 and later, the GCC driver adds the necessary options to
14908     link with libdld.sl when the `-static' option is specified.  This
14909     causes the resulting binary to be dynamic.  On the 64-bit port,
14910     the linkers generate dynamic binaries by default in any case.  The
14911     `-nolibdld' option can be used to prevent the GCC driver from
14912     adding these link options.
14913
14914`-threads'
14915     Add support for multithreading with the "dce thread" library under
14916     HP-UX.  This option sets flags for both the preprocessor and
14917     linker.
14918
14919
14920File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: HPPA Options,  Up: Submodel Options
14921
149223.17.17 IA-64 Options
14923---------------------
14924
14925These are the `-m' options defined for the Intel IA-64 architecture.
14926
14927`-mbig-endian'
14928     Generate code for a big-endian target.  This is the default for
14929     HP-UX.
14930
14931`-mlittle-endian'
14932     Generate code for a little-endian target.  This is the default for
14933     AIX5 and GNU/Linux.
14934
14935`-mgnu-as'
14936`-mno-gnu-as'
14937     Generate (or don't) code for the GNU assembler.  This is the
14938     default.
14939
14940`-mgnu-ld'
14941`-mno-gnu-ld'
14942     Generate (or don't) code for the GNU linker.  This is the default.
14943
14944`-mno-pic'
14945     Generate code that does not use a global pointer register.  The
14946     result is not position independent code, and violates the IA-64
14947     ABI.
14948
14949`-mvolatile-asm-stop'
14950`-mno-volatile-asm-stop'
14951     Generate (or don't) a stop bit immediately before and after
14952     volatile asm statements.
14953
14954`-mregister-names'
14955`-mno-register-names'
14956     Generate (or don't) `in', `loc', and `out' register names for the
14957     stacked registers.  This may make assembler output more readable.
14958
14959`-mno-sdata'
14960`-msdata'
14961     Disable (or enable) optimizations that use the small data section.
14962     This may be useful for working around optimizer bugs.
14963
14964`-mconstant-gp'
14965     Generate code that uses a single constant global pointer value.
14966     This is useful when compiling kernel code.
14967
14968`-mauto-pic'
14969     Generate code that is self-relocatable.  This implies
14970     `-mconstant-gp'.  This is useful when compiling firmware code.
14971
14972`-minline-float-divide-min-latency'
14973     Generate code for inline divides of floating-point values using
14974     the minimum latency algorithm.
14975
14976`-minline-float-divide-max-throughput'
14977     Generate code for inline divides of floating-point values using
14978     the maximum throughput algorithm.
14979
14980`-mno-inline-float-divide'
14981     Do not generate inline code for divides of floating-point values.
14982
14983`-minline-int-divide-min-latency'
14984     Generate code for inline divides of integer values using the
14985     minimum latency algorithm.
14986
14987`-minline-int-divide-max-throughput'
14988     Generate code for inline divides of integer values using the
14989     maximum throughput algorithm.
14990
14991`-mno-inline-int-divide'
14992     Do not generate inline code for divides of integer values.
14993
14994`-minline-sqrt-min-latency'
14995     Generate code for inline square roots using the minimum latency
14996     algorithm.
14997
14998`-minline-sqrt-max-throughput'
14999     Generate code for inline square roots using the maximum throughput
15000     algorithm.
15001
15002`-mno-inline-sqrt'
15003     Do not generate inline code for `sqrt'.
15004
15005`-mfused-madd'
15006`-mno-fused-madd'
15007     Do (don't) generate code that uses the fused multiply/add or
15008     multiply/subtract instructions.  The default is to use these
15009     instructions.
15010
15011`-mno-dwarf2-asm'
15012`-mdwarf2-asm'
15013     Don't (or do) generate assembler code for the DWARF 2 line number
15014     debugging info.  This may be useful when not using the GNU
15015     assembler.
15016
15017`-mearly-stop-bits'
15018`-mno-early-stop-bits'
15019     Allow stop bits to be placed earlier than immediately preceding the
15020     instruction that triggered the stop bit.  This can improve
15021     instruction scheduling, but does not always do so.
15022
15023`-mfixed-range=REGISTER-RANGE'
15024     Generate code treating the given register range as fixed registers.
15025     A fixed register is one that the register allocator cannot use.
15026     This is useful when compiling kernel code.  A register range is
15027     specified as two registers separated by a dash.  Multiple register
15028     ranges can be specified separated by a comma.
15029
15030`-mtls-size=TLS-SIZE'
15031     Specify bit size of immediate TLS offsets.  Valid values are 14,
15032     22, and 64.
15033
15034`-mtune=CPU-TYPE'
15035     Tune the instruction scheduling for a particular CPU, Valid values
15036     are `itanium', `itanium1', `merced', `itanium2', and `mckinley'.
15037
15038`-milp32'
15039`-mlp64'
15040     Generate code for a 32-bit or 64-bit environment.  The 32-bit
15041     environment sets int, long and pointer to 32 bits.  The 64-bit
15042     environment sets int to 32 bits and long and pointer to 64 bits.
15043     These are HP-UX specific flags.
15044
15045`-mno-sched-br-data-spec'
15046`-msched-br-data-spec'
15047     (Dis/En)able data speculative scheduling before reload.  This
15048     results in generation of `ld.a' instructions and the corresponding
15049     check instructions (`ld.c' / `chk.a').  The default is 'disable'.
15050
15051`-msched-ar-data-spec'
15052`-mno-sched-ar-data-spec'
15053     (En/Dis)able data speculative scheduling after reload.  This
15054     results in generation of `ld.a' instructions and the corresponding
15055     check instructions (`ld.c' / `chk.a').  The default is 'enable'.
15056
15057`-mno-sched-control-spec'
15058`-msched-control-spec'
15059     (Dis/En)able control speculative scheduling.  This feature is
15060     available only during region scheduling (i.e. before reload).
15061     This results in generation of the `ld.s' instructions and the
15062     corresponding check instructions `chk.s'.  The default is
15063     'disable'.
15064
15065`-msched-br-in-data-spec'
15066`-mno-sched-br-in-data-spec'
15067     (En/Dis)able speculative scheduling of the instructions that are
15068     dependent on the data speculative loads before reload.  This is
15069     effective only with `-msched-br-data-spec' enabled.  The default
15070     is 'enable'.
15071
15072`-msched-ar-in-data-spec'
15073`-mno-sched-ar-in-data-spec'
15074     (En/Dis)able speculative scheduling of the instructions that are
15075     dependent on the data speculative loads after reload.  This is
15076     effective only with `-msched-ar-data-spec' enabled.  The default
15077     is 'enable'.
15078
15079`-msched-in-control-spec'
15080`-mno-sched-in-control-spec'
15081     (En/Dis)able speculative scheduling of the instructions that are
15082     dependent on the control speculative loads.  This is effective
15083     only with `-msched-control-spec' enabled.  The default is 'enable'.
15084
15085`-mno-sched-prefer-non-data-spec-insns'
15086`-msched-prefer-non-data-spec-insns'
15087     If enabled, data-speculative instructions are chosen for schedule
15088     only if there are no other choices at the moment.  This makes the
15089     use of the data speculation much more conservative.  The default
15090     is 'disable'.
15091
15092`-mno-sched-prefer-non-control-spec-insns'
15093`-msched-prefer-non-control-spec-insns'
15094     If enabled, control-speculative instructions are chosen for
15095     schedule only if there are no other choices at the moment.  This
15096     makes the use of the control speculation much more conservative.
15097     The default is 'disable'.
15098
15099`-mno-sched-count-spec-in-critical-path'
15100`-msched-count-spec-in-critical-path'
15101     If enabled, speculative dependencies are considered during
15102     computation of the instructions priorities.  This makes the use of
15103     the speculation a bit more conservative.  The default is 'disable'.
15104
15105`-msched-spec-ldc'
15106     Use a simple data speculation check.  This option is on by default.
15107
15108`-msched-control-spec-ldc'
15109     Use a simple check for control speculation.  This option is on by
15110     default.
15111
15112`-msched-stop-bits-after-every-cycle'
15113     Place a stop bit after every cycle when scheduling.  This option
15114     is on by default.
15115
15116`-msched-fp-mem-deps-zero-cost'
15117     Assume that floating-point stores and loads are not likely to
15118     cause a conflict when placed into the same instruction group.
15119     This option is disabled by default.
15120
15121`-msel-sched-dont-check-control-spec'
15122     Generate checks for control speculation in selective scheduling.
15123     This flag is disabled by default.
15124
15125`-msched-max-memory-insns=MAX-INSNS'
15126     Limit on the number of memory insns per instruction group, giving
15127     lower priority to subsequent memory insns attempting to schedule
15128     in the same instruction group. Frequently useful to prevent cache
15129     bank conflicts.  The default value is 1.
15130
15131`-msched-max-memory-insns-hard-limit'
15132     Makes the limit specified by `msched-max-memory-insns' a hard
15133     limit, disallowing more than that number in an instruction group.
15134     Otherwise, the limit is "soft", meaning that non-memory operations
15135     are preferred when the limit is reached, but memory operations may
15136     still be scheduled.
15137
15138
15139
15140File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options
15141
151423.17.18 LM32 Options
15143--------------------
15144
15145These `-m' options are defined for the LatticeMico32 architecture:
15146
15147`-mbarrel-shift-enabled'
15148     Enable barrel-shift instructions.
15149
15150`-mdivide-enabled'
15151     Enable divide and modulus instructions.
15152
15153`-mmultiply-enabled'
15154     Enable multiply instructions.
15155
15156`-msign-extend-enabled'
15157     Enable sign extend instructions.
15158
15159`-muser-enabled'
15160     Enable user-defined instructions.
15161
15162
15163
15164File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options
15165
151663.17.19 M32C Options
15167--------------------
15168
15169`-mcpu=NAME'
15170     Select the CPU for which code is generated.  NAME may be one of
15171     `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
15172     series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
15173     series.
15174
15175`-msim'
15176     Specifies that the program will be run on the simulator.  This
15177     causes an alternate runtime library to be linked in which
15178     supports, for example, file I/O.  You must not use this option
15179     when generating programs that will run on real hardware; you must
15180     provide your own runtime library for whatever I/O functions are
15181     needed.
15182
15183`-memregs=NUMBER'
15184     Specifies the number of memory-based pseudo-registers GCC uses
15185     during code generation.  These pseudo-registers are used like real
15186     registers, so there is a tradeoff between GCC's ability to fit the
15187     code into available registers, and the performance penalty of using
15188     memory instead of registers.  Note that all modules in a program
15189     must be compiled with the same value for this option.  Because of
15190     that, you must not use this option with GCC's default runtime
15191     libraries.
15192
15193
15194
15195File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
15196
151973.17.20 M32R/D Options
15198----------------------
15199
15200These `-m' options are defined for Renesas M32R/D architectures:
15201
15202`-m32r2'
15203     Generate code for the M32R/2.
15204
15205`-m32rx'
15206     Generate code for the M32R/X.
15207
15208`-m32r'
15209     Generate code for the M32R.  This is the default.
15210
15211`-mmodel=small'
15212     Assume all objects live in the lower 16MB of memory (so that their
15213     addresses can be loaded with the `ld24' instruction), and assume
15214     all subroutines are reachable with the `bl' instruction.  This is
15215     the default.
15216
15217     The addressability of a particular object can be set with the
15218     `model' attribute.
15219
15220`-mmodel=medium'
15221     Assume objects may be anywhere in the 32-bit address space (the
15222     compiler generates `seth/add3' instructions to load their
15223     addresses), and assume all subroutines are reachable with the `bl'
15224     instruction.
15225
15226`-mmodel=large'
15227     Assume objects may be anywhere in the 32-bit address space (the
15228     compiler generates `seth/add3' instructions to load their
15229     addresses), and assume subroutines may not be reachable with the
15230     `bl' instruction (the compiler generates the much slower
15231     `seth/add3/jl' instruction sequence).
15232
15233`-msdata=none'
15234     Disable use of the small data area.  Variables are put into one of
15235     `.data', `.bss', or `.rodata' (unless the `section' attribute has
15236     been specified).  This is the default.
15237
15238     The small data area consists of sections `.sdata' and `.sbss'.
15239     Objects may be explicitly put in the small data area with the
15240     `section' attribute using one of these sections.
15241
15242`-msdata=sdata'
15243     Put small global and static data in the small data area, but do not
15244     generate special code to reference them.
15245
15246`-msdata=use'
15247     Put small global and static data in the small data area, and
15248     generate special instructions to reference them.
15249
15250`-G NUM'
15251     Put global and static objects less than or equal to NUM bytes into
15252     the small data or BSS sections instead of the normal data or BSS
15253     sections.  The default value of NUM is 8.  The `-msdata' option
15254     must be set to one of `sdata' or `use' for this option to have any
15255     effect.
15256
15257     All modules should be compiled with the same `-G NUM' value.
15258     Compiling with different values of NUM may or may not work; if it
15259     doesn't the linker gives an error message--incorrect code is not
15260     generated.
15261
15262`-mdebug'
15263     Makes the M32R-specific code in the compiler display some
15264     statistics that might help in debugging programs.
15265
15266`-malign-loops'
15267     Align all loops to a 32-byte boundary.
15268
15269`-mno-align-loops'
15270     Do not enforce a 32-byte alignment for loops.  This is the default.
15271
15272`-missue-rate=NUMBER'
15273     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
15274
15275`-mbranch-cost=NUMBER'
15276     NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
15277     over conditional code, if it is 2, then the opposite applies.
15278
15279`-mflush-trap=NUMBER'
15280     Specifies the trap number to use to flush the cache.  The default
15281     is 12.  Valid numbers are between 0 and 15 inclusive.
15282
15283`-mno-flush-trap'
15284     Specifies that the cache cannot be flushed by using a trap.
15285
15286`-mflush-func=NAME'
15287     Specifies the name of the operating system function to call to
15288     flush the cache.  The default is `_flush_cache', but a function
15289     call is only used if a trap is not available.
15290
15291`-mno-flush-func'
15292     Indicates that there is no OS function for flushing the cache.
15293
15294
15295
15296File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options
15297
152983.17.21 M680x0 Options
15299----------------------
15300
15301These are the `-m' options defined for M680x0 and ColdFire processors.
15302The default settings depend on which architecture was selected when the
15303compiler was configured; the defaults for the most common choices are
15304given below.
15305
15306`-march=ARCH'
15307     Generate code for a specific M680x0 or ColdFire instruction set
15308     architecture.  Permissible values of ARCH for M680x0 architectures
15309     are: `68000', `68010', `68020', `68030', `68040', `68060' and
15310     `cpu32'.  ColdFire architectures are selected according to
15311     Freescale's ISA classification and the permissible values are:
15312     `isaa', `isaaplus', `isab' and `isac'.
15313
15314     GCC defines a macro `__mcfARCH__' whenever it is generating code
15315     for a ColdFire target.  The ARCH in this macro is one of the
15316     `-march' arguments given above.
15317
15318     When used together, `-march' and `-mtune' select code that runs on
15319     a family of similar processors but that is optimized for a
15320     particular microarchitecture.
15321
15322`-mcpu=CPU'
15323     Generate code for a specific M680x0 or ColdFire processor.  The
15324     M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040',
15325     `68060', `68302', `68332' and `cpu32'.  The ColdFire CPUs are
15326     given by the table below, which also classifies the CPUs into
15327     families:
15328
15329     *Family*      *`-mcpu' arguments*
15330     `51'          `51' `51ac' `51ag' `51cn' `51em' `51je' `51jf' `51jg'
15331                   `51jm' `51mm' `51qe' `51qm'
15332     `5206'        `5202' `5204' `5206'
15333     `5206e'       `5206e'
15334     `5208'        `5207' `5208'
15335     `5211a'       `5210a' `5211a'
15336     `5213'        `5211' `5212' `5213'
15337     `5216'        `5214' `5216'
15338     `52235'       `52230' `52231' `52232' `52233' `52234' `52235'
15339     `5225'        `5224' `5225'
15340     `52259'       `52252' `52254' `52255' `52256' `52258' `52259'
15341     `5235'        `5232' `5233' `5234' `5235' `523x'
15342     `5249'        `5249'
15343     `5250'        `5250'
15344     `5271'        `5270' `5271'
15345     `5272'        `5272'
15346     `5275'        `5274' `5275'
15347     `5282'        `5280' `5281' `5282' `528x'
15348     `53017'       `53011' `53012' `53013' `53014' `53015' `53016'
15349                   `53017'
15350     `5307'        `5307'
15351     `5329'        `5327' `5328' `5329' `532x'
15352     `5373'        `5372' `5373' `537x'
15353     `5407'        `5407'
15354     `5475'        `5470' `5471' `5472' `5473' `5474' `5475' `547x'
15355                   `5480' `5481' `5482' `5483' `5484' `5485'
15356
15357     `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with
15358     CPU.  Other combinations of `-mcpu' and `-march' are rejected.
15359
15360     GCC defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is
15361     selected.  It also defines `__mcf_family_FAMILY', where the value
15362     of FAMILY is given by the table above.
15363
15364`-mtune=TUNE'
15365     Tune the code for a particular microarchitecture within the
15366     constraints set by `-march' and `-mcpu'.  The M680x0
15367     microarchitectures are: `68000', `68010', `68020', `68030',
15368     `68040', `68060' and `cpu32'.  The ColdFire microarchitectures
15369     are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'.
15370
15371     You can also use `-mtune=68020-40' for code that needs to run
15372     relatively well on 68020, 68030 and 68040 targets.
15373     `-mtune=68020-60' is similar but includes 68060 targets as well.
15374     These two options select the same tuning decisions as `-m68020-40'
15375     and `-m68020-60' respectively.
15376
15377     GCC defines the macros `__mcARCH' and `__mcARCH__' when tuning for
15378     680x0 architecture ARCH.  It also defines `mcARCH' unless either
15379     `-ansi' or a non-GNU `-std' option is used.  If GCC is tuning for
15380     a range of architectures, as selected by `-mtune=68020-40' or
15381     `-mtune=68020-60', it defines the macros for every architecture in
15382     the range.
15383
15384     GCC also defines the macro `__mUARCH__' when tuning for ColdFire
15385     microarchitecture UARCH, where UARCH is one of the arguments given
15386     above.
15387
15388`-m68000'
15389`-mc68000'
15390     Generate output for a 68000.  This is the default when the
15391     compiler is configured for 68000-based systems.  It is equivalent
15392     to `-march=68000'.
15393
15394     Use this option for microcontrollers with a 68000 or EC000 core,
15395     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
15396
15397`-m68010'
15398     Generate output for a 68010.  This is the default when the
15399     compiler is configured for 68010-based systems.  It is equivalent
15400     to `-march=68010'.
15401
15402`-m68020'
15403`-mc68020'
15404     Generate output for a 68020.  This is the default when the
15405     compiler is configured for 68020-based systems.  It is equivalent
15406     to `-march=68020'.
15407
15408`-m68030'
15409     Generate output for a 68030.  This is the default when the
15410     compiler is configured for 68030-based systems.  It is equivalent
15411     to `-march=68030'.
15412
15413`-m68040'
15414     Generate output for a 68040.  This is the default when the
15415     compiler is configured for 68040-based systems.  It is equivalent
15416     to `-march=68040'.
15417
15418     This option inhibits the use of 68881/68882 instructions that have
15419     to be emulated by software on the 68040.  Use this option if your
15420     68040 does not have code to emulate those instructions.
15421
15422`-m68060'
15423     Generate output for a 68060.  This is the default when the
15424     compiler is configured for 68060-based systems.  It is equivalent
15425     to `-march=68060'.
15426
15427     This option inhibits the use of 68020 and 68881/68882 instructions
15428     that have to be emulated by software on the 68060.  Use this
15429     option if your 68060 does not have code to emulate those
15430     instructions.
15431
15432`-mcpu32'
15433     Generate output for a CPU32.  This is the default when the
15434     compiler is configured for CPU32-based systems.  It is equivalent
15435     to `-march=cpu32'.
15436
15437     Use this option for microcontrollers with a CPU32 or CPU32+ core,
15438     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
15439     68341, 68349 and 68360.
15440
15441`-m5200'
15442     Generate output for a 520X ColdFire CPU.  This is the default when
15443     the compiler is configured for 520X-based systems.  It is
15444     equivalent to `-mcpu=5206', and is now deprecated in favor of that
15445     option.
15446
15447     Use this option for microcontroller with a 5200 core, including
15448     the MCF5202, MCF5203, MCF5204 and MCF5206.
15449
15450`-m5206e'
15451     Generate output for a 5206e ColdFire CPU.  The option is now
15452     deprecated in favor of the equivalent `-mcpu=5206e'.
15453
15454`-m528x'
15455     Generate output for a member of the ColdFire 528X family.  The
15456     option is now deprecated in favor of the equivalent `-mcpu=528x'.
15457
15458`-m5307'
15459     Generate output for a ColdFire 5307 CPU.  The option is now
15460     deprecated in favor of the equivalent `-mcpu=5307'.
15461
15462`-m5407'
15463     Generate output for a ColdFire 5407 CPU.  The option is now
15464     deprecated in favor of the equivalent `-mcpu=5407'.
15465
15466`-mcfv4e'
15467     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
15468     This includes use of hardware floating-point instructions.  The
15469     option is equivalent to `-mcpu=547x', and is now deprecated in
15470     favor of that option.
15471
15472`-m68020-40'
15473     Generate output for a 68040, without using any of the new
15474     instructions.  This results in code that can run relatively
15475     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
15476     generated code does use the 68881 instructions that are emulated
15477     on the 68040.
15478
15479     The option is equivalent to `-march=68020' `-mtune=68020-40'.
15480
15481`-m68020-60'
15482     Generate output for a 68060, without using any of the new
15483     instructions.  This results in code that can run relatively
15484     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
15485     generated code does use the 68881 instructions that are emulated
15486     on the 68060.
15487
15488     The option is equivalent to `-march=68020' `-mtune=68020-60'.
15489
15490`-mhard-float'
15491`-m68881'
15492     Generate floating-point instructions.  This is the default for
15493     68020 and above, and for ColdFire devices that have an FPU.  It
15494     defines the macro `__HAVE_68881__' on M680x0 targets and
15495     `__mcffpu__' on ColdFire targets.
15496
15497`-msoft-float'
15498     Do not generate floating-point instructions; use library calls
15499     instead.  This is the default for 68000, 68010, and 68832 targets.
15500     It is also the default for ColdFire devices that have no FPU.
15501
15502`-mdiv'
15503`-mno-div'
15504     Generate (do not generate) ColdFire hardware divide and remainder
15505     instructions.  If `-march' is used without `-mcpu', the default is
15506     "on" for ColdFire architectures and "off" for M680x0
15507     architectures.  Otherwise, the default is taken from the target CPU
15508     (either the default CPU, or the one specified by `-mcpu').  For
15509     example, the default is "off" for `-mcpu=5206' and "on" for
15510     `-mcpu=5206e'.
15511
15512     GCC defines the macro `__mcfhwdiv__' when this option is enabled.
15513
15514`-mshort'
15515     Consider type `int' to be 16 bits wide, like `short int'.
15516     Additionally, parameters passed on the stack are also aligned to a
15517     16-bit boundary even on targets whose API mandates promotion to
15518     32-bit.
15519
15520`-mno-short'
15521     Do not consider type `int' to be 16 bits wide.  This is the
15522     default.
15523
15524`-mnobitfield'
15525`-mno-bitfield'
15526     Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
15527     and `-m5200' options imply `-mnobitfield'.
15528
15529`-mbitfield'
15530     Do use the bit-field instructions.  The `-m68020' option implies
15531     `-mbitfield'.  This is the default if you use a configuration
15532     designed for a 68020.
15533
15534`-mrtd'
15535     Use a different function-calling convention, in which functions
15536     that take a fixed number of arguments return with the `rtd'
15537     instruction, which pops their arguments while returning.  This
15538     saves one instruction in the caller since there is no need to pop
15539     the arguments there.
15540
15541     This calling convention is incompatible with the one normally used
15542     on Unix, so you cannot use it if you need to call libraries
15543     compiled with the Unix compiler.
15544
15545     Also, you must provide function prototypes for all functions that
15546     take variable numbers of arguments (including `printf'); otherwise
15547     incorrect code is generated for calls to those functions.
15548
15549     In addition, seriously incorrect code results if you call a
15550     function with too many arguments.  (Normally, extra arguments are
15551     harmlessly ignored.)
15552
15553     The `rtd' instruction is supported by the 68010, 68020, 68030,
15554     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
15555
15556`-mno-rtd'
15557     Do not use the calling conventions selected by `-mrtd'.  This is
15558     the default.
15559
15560`-malign-int'
15561`-mno-align-int'
15562     Control whether GCC aligns `int', `long', `long long', `float',
15563     `double', and `long double' variables on a 32-bit boundary
15564     (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
15565     variables on 32-bit boundaries produces code that runs somewhat
15566     faster on processors with 32-bit busses at the expense of more
15567     memory.
15568
15569     *Warning:* if you use the `-malign-int' switch, GCC aligns
15570     structures containing the above types differently than most
15571     published application binary interface specifications for the m68k.
15572
15573`-mpcrel'
15574     Use the pc-relative addressing mode of the 68000 directly, instead
15575     of using a global offset table.  At present, this option implies
15576     `-fpic', allowing at most a 16-bit offset for pc-relative
15577     addressing.  `-fPIC' is not presently supported with `-mpcrel',
15578     though this could be supported for 68020 and higher processors.
15579
15580`-mno-strict-align'
15581`-mstrict-align'
15582     Do not (do) assume that unaligned memory references are handled by
15583     the system.
15584
15585`-msep-data'
15586     Generate code that allows the data segment to be located in a
15587     different area of memory from the text segment.  This allows for
15588     execute-in-place in an environment without virtual memory
15589     management.  This option implies `-fPIC'.
15590
15591`-mno-sep-data'
15592     Generate code that assumes that the data segment follows the text
15593     segment.  This is the default.
15594
15595`-mid-shared-library'
15596     Generate code that supports shared libraries via the library ID
15597     method.  This allows for execute-in-place and shared libraries in
15598     an environment without virtual memory management.  This option
15599     implies `-fPIC'.
15600
15601`-mno-id-shared-library'
15602     Generate code that doesn't assume ID-based shared libraries are
15603     being used.  This is the default.
15604
15605`-mshared-library-id=n'
15606     Specifies the identification number of the ID-based shared library
15607     being compiled.  Specifying a value of 0 generates more compact
15608     code; specifying other values forces the allocation of that number
15609     to the current library, but is no more space- or time-efficient
15610     than omitting this option.
15611
15612`-mxgot'
15613`-mno-xgot'
15614     When generating position-independent code for ColdFire, generate
15615     code that works if the GOT has more than 8192 entries.  This code
15616     is larger and slower than code generated without this option.  On
15617     M680x0 processors, this option is not needed; `-fPIC' suffices.
15618
15619     GCC normally uses a single instruction to load values from the GOT.
15620     While this is relatively efficient, it only works if the GOT is
15621     smaller than about 64k.  Anything larger causes the linker to
15622     report an error such as:
15623
15624          relocation truncated to fit: R_68K_GOT16O foobar
15625
15626     If this happens, you should recompile your code with `-mxgot'.  It
15627     should then work with very large GOTs.  However, code generated
15628     with `-mxgot' is less efficient, since it takes 4 instructions to
15629     fetch the value of a global symbol.
15630
15631     Note that some linkers, including newer versions of the GNU linker,
15632     can create multiple GOTs and sort GOT entries.  If you have such a
15633     linker, you should only need to use `-mxgot' when compiling a
15634     single object file that accesses more than 8192 GOT entries.  Very
15635     few do.
15636
15637     These options have no effect unless GCC is generating
15638     position-independent code.
15639
15640
15641
15642File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options
15643
156443.17.22 MCore Options
15645---------------------
15646
15647These are the `-m' options defined for the Motorola M*Core processors.
15648
15649`-mhardlit'
15650`-mno-hardlit'
15651     Inline constants into the code stream if it can be done in two
15652     instructions or less.
15653
15654`-mdiv'
15655`-mno-div'
15656     Use the divide instruction.  (Enabled by default).
15657
15658`-mrelax-immediate'
15659`-mno-relax-immediate'
15660     Allow arbitrary-sized immediates in bit operations.
15661
15662`-mwide-bitfields'
15663`-mno-wide-bitfields'
15664     Always treat bit-fields as `int'-sized.
15665
15666`-m4byte-functions'
15667`-mno-4byte-functions'
15668     Force all functions to be aligned to a 4-byte boundary.
15669
15670`-mcallgraph-data'
15671`-mno-callgraph-data'
15672     Emit callgraph information.
15673
15674`-mslow-bytes'
15675`-mno-slow-bytes'
15676     Prefer word access when reading byte quantities.
15677
15678`-mlittle-endian'
15679`-mbig-endian'
15680     Generate code for a little-endian target.
15681
15682`-m210'
15683`-m340'
15684     Generate code for the 210 processor.
15685
15686`-mno-lsim'
15687     Assume that runtime support has been provided and so omit the
15688     simulator library (`libsim.a)' from the linker command line.
15689
15690`-mstack-increment=SIZE'
15691     Set the maximum amount for a single stack increment operation.
15692     Large values can increase the speed of programs that contain
15693     functions that need a large amount of stack space, but they can
15694     also trigger a segmentation fault if the stack is extended too
15695     much.  The default value is 0x1000.
15696
15697
15698
15699File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options
15700
157013.17.23 MeP Options
15702-------------------
15703
15704`-mabsdiff'
15705     Enables the `abs' instruction, which is the absolute difference
15706     between two registers.
15707
15708`-mall-opts'
15709     Enables all the optional instructions--average, multiply, divide,
15710     bit operations, leading zero, absolute difference, min/max, clip,
15711     and saturation.
15712
15713`-maverage'
15714     Enables the `ave' instruction, which computes the average of two
15715     registers.
15716
15717`-mbased=N'
15718     Variables of size N bytes or smaller are placed in the `.based'
15719     section by default.  Based variables use the `$tp' register as a
15720     base register, and there is a 128-byte limit to the `.based'
15721     section.
15722
15723`-mbitops'
15724     Enables the bit operation instructions--bit test (`btstm'), set
15725     (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set
15726     (`tas').
15727
15728`-mc=NAME'
15729     Selects which section constant data is placed in.  NAME may be
15730     `tiny', `near', or `far'.
15731
15732`-mclip'
15733     Enables the `clip' instruction.  Note that `-mclip' is not useful
15734     unless you also provide `-mminmax'.
15735
15736`-mconfig=NAME'
15737     Selects one of the built-in core configurations.  Each MeP chip has
15738     one or more modules in it; each module has a core CPU and a
15739     variety of coprocessors, optional instructions, and peripherals.
15740     The `MeP-Integrator' tool, not part of GCC, provides these
15741     configurations through this option; using this option is the same
15742     as using all the corresponding command-line options.  The default
15743     configuration is `default'.
15744
15745`-mcop'
15746     Enables the coprocessor instructions.  By default, this is a 32-bit
15747     coprocessor.  Note that the coprocessor is normally enabled via the
15748     `-mconfig=' option.
15749
15750`-mcop32'
15751     Enables the 32-bit coprocessor's instructions.
15752
15753`-mcop64'
15754     Enables the 64-bit coprocessor's instructions.
15755
15756`-mivc2'
15757     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
15758
15759`-mdc'
15760     Causes constant variables to be placed in the `.near' section.
15761
15762`-mdiv'
15763     Enables the `div' and `divu' instructions.
15764
15765`-meb'
15766     Generate big-endian code.
15767
15768`-mel'
15769     Generate little-endian code.
15770
15771`-mio-volatile'
15772     Tells the compiler that any variable marked with the `io'
15773     attribute is to be considered volatile.
15774
15775`-ml'
15776     Causes variables to be assigned to the `.far' section by default.
15777
15778`-mleadz'
15779     Enables the `leadz' (leading zero) instruction.
15780
15781`-mm'
15782     Causes variables to be assigned to the `.near' section by default.
15783
15784`-mminmax'
15785     Enables the `min' and `max' instructions.
15786
15787`-mmult'
15788     Enables the multiplication and multiply-accumulate instructions.
15789
15790`-mno-opts'
15791     Disables all the optional instructions enabled by `-mall-opts'.
15792
15793`-mrepeat'
15794     Enables the `repeat' and `erepeat' instructions, used for
15795     low-overhead looping.
15796
15797`-ms'
15798     Causes all variables to default to the `.tiny' section.  Note that
15799     there is a 65536-byte limit to this section.  Accesses to these
15800     variables use the `%gp' base register.
15801
15802`-msatur'
15803     Enables the saturation instructions.  Note that the compiler does
15804     not currently generate these itself, but this option is included
15805     for compatibility with other tools, like `as'.
15806
15807`-msdram'
15808     Link the SDRAM-based runtime instead of the default ROM-based
15809     runtime.
15810
15811`-msim'
15812     Link the simulator run-time libraries.
15813
15814`-msimnovec'
15815     Link the simulator runtime libraries, excluding built-in support
15816     for reset and exception vectors and tables.
15817
15818`-mtf'
15819     Causes all functions to default to the `.far' section.  Without
15820     this option, functions default to the `.near' section.
15821
15822`-mtiny=N'
15823     Variables that are N bytes or smaller are allocated to the `.tiny'
15824     section.  These variables use the `$gp' base register.  The
15825     default for this option is 4, but note that there's a 65536-byte
15826     limit to the `.tiny' section.
15827
15828
15829
15830File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options
15831
158323.17.24 MicroBlaze Options
15833--------------------------
15834
15835`-msoft-float'
15836     Use software emulation for floating point (default).
15837
15838`-mhard-float'
15839     Use hardware floating-point instructions.
15840
15841`-mmemcpy'
15842     Do not optimize block moves, use `memcpy'.
15843
15844`-mno-clearbss'
15845     This option is deprecated.  Use `-fno-zero-initialized-in-bss'
15846     instead.
15847
15848`-mcpu=CPU-TYPE'
15849     Use features of, and schedule code for, the given CPU.  Supported
15850     values are in the format `vX.YY.Z', where X is a major version, YY
15851     is the minor version, and Z is compatibility code.  Example values
15852     are `v3.00.a', `v4.00.b', `v5.00.a', `v5.00.b', `v5.00.b',
15853     `v6.00.a'.
15854
15855`-mxl-soft-mul'
15856     Use software multiply emulation (default).
15857
15858`-mxl-soft-div'
15859     Use software emulation for divides (default).
15860
15861`-mxl-barrel-shift'
15862     Use the hardware barrel shifter.
15863
15864`-mxl-pattern-compare'
15865     Use pattern compare instructions.
15866
15867`-msmall-divides'
15868     Use table lookup optimization for small signed integer divisions.
15869
15870`-mxl-stack-check'
15871     This option is deprecated.  Use `-fstack-check' instead.
15872
15873`-mxl-gp-opt'
15874     Use GP-relative `.sdata'/`.sbss' sections.
15875
15876`-mxl-multiply-high'
15877     Use multiply high instructions for high part of 32x32 multiply.
15878
15879`-mxl-float-convert'
15880     Use hardware floating-point conversion instructions.
15881
15882`-mxl-float-sqrt'
15883     Use hardware floating-point square root instruction.
15884
15885`-mbig-endian'
15886     Generate code for a big-endian target.
15887
15888`-mlittle-endian'
15889     Generate code for a little-endian target.
15890
15891`-mxl-reorder'
15892     Use reorder instructions (swap and byte reversed load/store).
15893
15894`-mxl-mode-APP-MODEL'
15895     Select application model APP-MODEL.  Valid models are
15896    `executable'
15897          normal executable (default), uses startup code `crt0.o'.
15898
15899    `xmdstub'
15900          for use with Xilinx Microprocessor Debugger (XMD) based
15901          software intrusive debug agent called xmdstub. This uses
15902          startup file `crt1.o' and sets the start address of the
15903          program to 0x800.
15904
15905    `bootstrap'
15906          for applications that are loaded using a bootloader.  This
15907          model uses startup file `crt2.o' which does not contain a
15908          processor reset vector handler. This is suitable for
15909          transferring control on a processor reset to the bootloader
15910          rather than the application.
15911
15912    `novectors'
15913          for applications that do not require any of the MicroBlaze
15914          vectors. This option may be useful for applications running
15915          within a monitoring application. This model uses `crt3.o' as
15916          a startup file.
15917
15918     Option `-xl-mode-APP-MODEL' is a deprecated alias for
15919     `-mxl-mode-APP-MODEL'.
15920
15921
15922
15923File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options
15924
159253.17.25 MIPS Options
15926--------------------
15927
15928`-EB'
15929     Generate big-endian code.
15930
15931`-EL'
15932     Generate little-endian code.  This is the default for `mips*el-*-*'
15933     configurations.
15934
15935`-march=ARCH'
15936     Generate code that runs on ARCH, which can be the name of a
15937     generic MIPS ISA, or the name of a particular processor.  The ISA
15938     names are: `mips1', `mips2', `mips3', `mips4', `mips32',
15939     `mips32r2', `mips32r3', `mips32r5', `mips32r6', `mips64',
15940     `mips64r2', `mips64r3', `mips64r5' and `mips64r6'.  The processor
15941     names are: `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep',
15942     `4ksd', `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1',
15943     `24kec', `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1',
15944     `34kn', `74kc', `74kf2_1', `74kf1_1', `74kf3_2', `1004kc',
15945     `1004kf2_1', `1004kf1_1', `loongson2e', `loongson2f', `loongson3a',
15946     `m4k', `m14k', `m14kc', `m14ke', `m14kec', `octeon', `octeon+',
15947     `octeon2', `octeon3', `orion', `p5600', `r2000', `r3000', `r3900',
15948     `r4000', `r4400', `r4600', `r4650', `r4700', `r6000', `r8000',
15949     `rm7000', `rm9000', `r10000', `r12000', `r14000', `r16000', `sb1',
15950     `sr71000', `vr4100', `vr4111', `vr4120', `vr4130', `vr4300',
15951     `vr5000', `vr5400', `vr5500', `xlr' and `xlp'.  The special value
15952     `from-abi' selects the most compatible architecture for the
15953     selected ABI (that is, `mips1' for 32-bit ABIs and `mips3' for
15954     64-bit ABIs).
15955
15956     The native Linux/GNU toolchain also supports the value `native',
15957     which selects the best architecture option for the host processor.
15958     `-march=native' has no effect if GCC does not recognize the
15959     processor.
15960
15961     In processor names, a final `000' can be abbreviated as `k' (for
15962     example, `-march=r2k').  Prefixes are optional, and `vr' may be
15963     written `r'.
15964
15965     Names of the form `Nf2_1' refer to processors with FPUs clocked at
15966     half the rate of the core, names of the form `Nf1_1' refer to
15967     processors with FPUs clocked at the same rate as the core, and
15968     names of the form `Nf3_2' refer to processors with FPUs clocked a
15969     ratio of 3:2 with respect to the core.  For compatibility reasons,
15970     `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are
15971     accepted as synonyms for `Nf1_1'.
15972
15973     GCC defines two macros based on the value of this option.  The
15974     first is `_MIPS_ARCH', which gives the name of target
15975     architecture, as a string.  The second has the form
15976     `_MIPS_ARCH_FOO', where FOO is the capitalized value of
15977     `_MIPS_ARCH'.  For example, `-march=r2000' sets `_MIPS_ARCH' to
15978     `"r2000"' and defines the macro `_MIPS_ARCH_R2000'.
15979
15980     Note that the `_MIPS_ARCH' macro uses the processor names given
15981     above.  In other words, it has the full prefix and does not
15982     abbreviate `000' as `k'.  In the case of `from-abi', the macro
15983     names the resolved architecture (either `"mips1"' or `"mips3"').
15984     It names the default architecture when no `-march' option is given.
15985
15986`-mtune=ARCH'
15987     Optimize for ARCH.  Among other things, this option controls the
15988     way instructions are scheduled, and the perceived cost of
15989     arithmetic operations.  The list of ARCH values is the same as for
15990     `-march'.
15991
15992     When this option is not used, GCC optimizes for the processor
15993     specified by `-march'.  By using `-march' and `-mtune' together,
15994     it is possible to generate code that runs on a family of
15995     processors, but optimize the code for one particular member of
15996     that family.
15997
15998     `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
15999     which work in the same way as the `-march' ones described above.
16000
16001`-mips1'
16002     Equivalent to `-march=mips1'.
16003
16004`-mips2'
16005     Equivalent to `-march=mips2'.
16006
16007`-mips3'
16008     Equivalent to `-march=mips3'.
16009
16010`-mips4'
16011     Equivalent to `-march=mips4'.
16012
16013`-mips32'
16014     Equivalent to `-march=mips32'.
16015
16016`-mips32r3'
16017     Equivalent to `-march=mips32r3'.
16018
16019`-mips32r5'
16020     Equivalent to `-march=mips32r5'.
16021
16022`-mips32r6'
16023     Equivalent to `-march=mips32r6'.
16024
16025`-mips64'
16026     Equivalent to `-march=mips64'.
16027
16028`-mips64r2'
16029     Equivalent to `-march=mips64r2'.
16030
16031`-mips64r3'
16032     Equivalent to `-march=mips64r3'.
16033
16034`-mips64r5'
16035     Equivalent to `-march=mips64r5'.
16036
16037`-mips64r6'
16038     Equivalent to `-march=mips64r6'.
16039
16040`-mips16'
16041`-mno-mips16'
16042     Generate (do not generate) MIPS16 code.  If GCC is targeting a
16043     MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.
16044
16045     MIPS16 code generation can also be controlled on a per-function
16046     basis by means of `mips16' and `nomips16' attributes.  *Note
16047     Function Attributes::, for more information.
16048
16049`-mflip-mips16'
16050     Generate MIPS16 code on alternating functions.  This option is
16051     provided for regression testing of mixed MIPS16/non-MIPS16 code
16052     generation, and is not intended for ordinary use in compiling user
16053     code.
16054
16055`-minterlink-compressed'
16056
16057`-mno-interlink-compressed'
16058     Require (do not require) that code using the standard
16059     (uncompressed) MIPS ISA be link-compatible with MIPS16 and
16060     microMIPS code, and vice versa.
16061
16062     For example, code using the standard ISA encoding cannot jump
16063     directly to MIPS16 or microMIPS code; it must either use a call or
16064     an indirect jump.  `-minterlink-compressed' therefore disables
16065     direct jumps unless GCC knows that the target of the jump is not
16066     compressed.
16067
16068`-minterlink-mips16'
16069`-mno-interlink-mips16'
16070     Aliases of `-minterlink-compressed' and
16071     `-mno-interlink-compressed'.  These options predate the microMIPS
16072     ASE and are retained for backwards compatibility.
16073
16074`-mabi=32'
16075`-mabi=o64'
16076`-mabi=n32'
16077`-mabi=64'
16078`-mabi=eabi'
16079     Generate code for the given ABI.
16080
16081     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
16082     generates 64-bit code when you select a 64-bit architecture, but
16083     you can use `-mgp32' to get 32-bit code instead.
16084
16085     For information about the O64 ABI, see
16086     `http://gcc.gnu.org/projects/mipso64-abi.html'.
16087
16088     GCC supports a variant of the o32 ABI in which floating-point
16089     registers are 64 rather than 32 bits wide.  You can select this
16090     combination with `-mabi=32' `-mfp64'.  This ABI relies on the
16091     `mthc1' and `mfhc1' instructions and is therefore only supported
16092     for MIPS32R2, MIPS32R3 and MIPS32R5 processors.
16093
16094     The register assignments for arguments and return values remain the
16095     same, but each scalar value is passed in a single 64-bit register
16096     rather than a pair of 32-bit registers.  For example, scalar
16097     floating-point values are returned in `$f0' only, not a
16098     `$f0'/`$f1' pair.  The set of call-saved registers also remains
16099     the same in that the even-numbered double-precision registers are
16100     saved.
16101
16102     Two additional variants of the o32 ABI are supported to enable a
16103     transition from 32-bit to 64-bit registers.  These are FPXX
16104     (`-mfpxx') and FP64A (`-mfp64' `-mno-odd-spreg').  The FPXX
16105     extension mandates that all code must execute correctly when run
16106     using 32-bit or 64-bit registers.  The code can be interlinked
16107     with either FP32 or FP64, but not both.  The FP64A extension is
16108     similar to the FP64 extension but forbids the use of odd-numbered
16109     single-precision registers.  This can be used in conjunction with
16110     the `FRE' mode of FPUs in MIPS32R5 processors and allows both FP32
16111     and FP64A code to interlink and run in the same process without
16112     changing FPU modes.
16113
16114`-mabicalls'
16115`-mno-abicalls'
16116     Generate (do not generate) code that is suitable for SVR4-style
16117     dynamic objects.  `-mabicalls' is the default for SVR4-based
16118     systems.
16119
16120`-mshared'
16121`-mno-shared'
16122     Generate (do not generate) code that is fully position-independent,
16123     and that can therefore be linked into shared libraries.  This
16124     option only affects `-mabicalls'.
16125
16126     All `-mabicalls' code has traditionally been position-independent,
16127     regardless of options like `-fPIC' and `-fpic'.  However, as an
16128     extension, the GNU toolchain allows executables to use absolute
16129     accesses for locally-binding symbols.  It can also use shorter GP
16130     initialization sequences and generate direct calls to
16131     locally-defined functions.  This mode is selected by `-mno-shared'.
16132
16133     `-mno-shared' depends on binutils 2.16 or higher and generates
16134     objects that can only be linked by the GNU linker.  However, the
16135     option does not affect the ABI of the final executable; it only
16136     affects the ABI of relocatable objects.  Using `-mno-shared'
16137     generally makes executables both smaller and quicker.
16138
16139     `-mshared' is the default.
16140
16141`-mplt'
16142`-mno-plt'
16143     Assume (do not assume) that the static and dynamic linkers support
16144     PLTs and copy relocations.  This option only affects `-mno-shared
16145     -mabicalls'.  For the n64 ABI, this option has no effect without
16146     `-msym32'.
16147
16148     You can make `-mplt' the default by configuring GCC with
16149     `--with-mips-plt'.  The default is `-mno-plt' otherwise.
16150
16151`-mxgot'
16152`-mno-xgot'
16153     Lift (do not lift) the usual restrictions on the size of the global
16154     offset table.
16155
16156     GCC normally uses a single instruction to load values from the GOT.
16157     While this is relatively efficient, it only works if the GOT is
16158     smaller than about 64k.  Anything larger causes the linker to
16159     report an error such as:
16160
16161          relocation truncated to fit: R_MIPS_GOT16 foobar
16162
16163     If this happens, you should recompile your code with `-mxgot'.
16164     This works with very large GOTs, although the code is also less
16165     efficient, since it takes three instructions to fetch the value of
16166     a global symbol.
16167
16168     Note that some linkers can create multiple GOTs.  If you have such
16169     a linker, you should only need to use `-mxgot' when a single object
16170     file accesses more than 64k's worth of GOT entries.  Very few do.
16171
16172     These options have no effect unless GCC is generating position
16173     independent code.
16174
16175`-mgp32'
16176     Assume that general-purpose registers are 32 bits wide.
16177
16178`-mgp64'
16179     Assume that general-purpose registers are 64 bits wide.
16180
16181`-mfp32'
16182     Assume that floating-point registers are 32 bits wide.
16183
16184`-mfp64'
16185     Assume that floating-point registers are 64 bits wide.
16186
16187`-mfpxx'
16188     Do not assume the width of floating-point registers.
16189
16190`-mhard-float'
16191     Use floating-point coprocessor instructions.
16192
16193`-msoft-float'
16194     Do not use floating-point coprocessor instructions.  Implement
16195     floating-point calculations using library calls instead.
16196
16197`-mno-float'
16198     Equivalent to `-msoft-float', but additionally asserts that the
16199     program being compiled does not perform any floating-point
16200     operations.  This option is presently supported only by some
16201     bare-metal MIPS configurations, where it may select a special set
16202     of libraries that lack all floating-point support (including, for
16203     example, the floating-point `printf' formats).  If code compiled
16204     with `-mno-float' accidentally contains floating-point operations,
16205     it is likely to suffer a link-time or run-time failure.
16206
16207`-msingle-float'
16208     Assume that the floating-point coprocessor only supports
16209     single-precision operations.
16210
16211`-mdouble-float'
16212     Assume that the floating-point coprocessor supports
16213     double-precision operations.  This is the default.
16214
16215`-modd-spreg'
16216`-mno-odd-spreg'
16217     Enable the use of odd-numbered single-precision floating-point
16218     registers for the o32 ABI.  This is the default for processors
16219     that are known to support these registers.  When using the o32
16220     FPXX ABI, `-mno-odd-spreg' is set by default.
16221
16222`-mabs=2008'
16223`-mabs=legacy'
16224     These options control the treatment of the special not-a-number
16225     (NaN) IEEE 754 floating-point data with the `abs.fmt' and
16226     `neg.fmt' machine instructions.
16227
16228     By default or when `-mabs=legacy' is used the legacy treatment is
16229     selected.  In this case these instructions are considered
16230     arithmetic and avoided where correct operation is required and the
16231     input operand might be a NaN.  A longer sequence of instructions
16232     that manipulate the sign bit of floating-point datum manually is
16233     used instead unless the `-ffinite-math-only' option has also been
16234     specified.
16235
16236     The `-mabs=2008' option selects the IEEE 754-2008 treatment.  In
16237     this case these instructions are considered non-arithmetic and
16238     therefore operating correctly in all cases, including in
16239     particular where the input operand is a NaN.  These instructions
16240     are therefore always used for the respective operations.
16241
16242`-mnan=2008'
16243`-mnan=legacy'
16244     These options control the encoding of the special not-a-number
16245     (NaN) IEEE 754 floating-point data.
16246
16247     The `-mnan=legacy' option selects the legacy encoding.  In this
16248     case quiet NaNs (qNaNs) are denoted by the first bit of their
16249     trailing significand field being 0, whereas signalling NaNs
16250     (sNaNs) are denoted by the first bit of their trailing significand
16251     field being 1.
16252
16253     The `-mnan=2008' option selects the IEEE 754-2008 encoding.  In
16254     this case qNaNs are denoted by the first bit of their trailing
16255     significand field being 1, whereas sNaNs are denoted by the first
16256     bit of their trailing significand field being 0.
16257
16258     The default is `-mnan=legacy' unless GCC has been configured with
16259     `--with-nan=2008'.
16260
16261`-mllsc'
16262`-mno-llsc'
16263     Use (do not use) `ll', `sc', and `sync' instructions to implement
16264     atomic memory built-in functions.  When neither option is
16265     specified, GCC uses the instructions if the target architecture
16266     supports them.
16267
16268     `-mllsc' is useful if the runtime environment can emulate the
16269     instructions and `-mno-llsc' can be useful when compiling for
16270     nonstandard ISAs.  You can make either option the default by
16271     configuring GCC with `--with-llsc' and `--without-llsc'
16272     respectively.  `--with-llsc' is the default for some
16273     configurations; see the installation documentation for details.
16274
16275`-mdsp'
16276`-mno-dsp'
16277     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
16278     Built-in Functions::.  This option defines the preprocessor macro
16279     `__mips_dsp'.  It also defines `__mips_dsp_rev' to 1.
16280
16281`-mdspr2'
16282`-mno-dspr2'
16283     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
16284     Built-in Functions::.  This option defines the preprocessor macros
16285     `__mips_dsp' and `__mips_dspr2'.  It also defines `__mips_dsp_rev'
16286     to 2.
16287
16288`-msmartmips'
16289`-mno-smartmips'
16290     Use (do not use) the MIPS SmartMIPS ASE.
16291
16292`-mpaired-single'
16293`-mno-paired-single'
16294     Use (do not use) paired-single floating-point instructions.  *Note
16295     MIPS Paired-Single Support::.  This option requires hardware
16296     floating-point support to be enabled.
16297
16298`-mdmx'
16299`-mno-mdmx'
16300     Use (do not use) MIPS Digital Media Extension instructions.  This
16301     option can only be used when generating 64-bit code and requires
16302     hardware floating-point support to be enabled.
16303
16304`-mips3d'
16305`-mno-mips3d'
16306     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
16307     Functions::.  The option `-mips3d' implies `-mpaired-single'.
16308
16309`-mmicromips'
16310`-mno-micromips'
16311     Generate (do not generate) microMIPS code.
16312
16313     MicroMIPS code generation can also be controlled on a per-function
16314     basis by means of `micromips' and `nomicromips' attributes.  *Note
16315     Function Attributes::, for more information.
16316
16317`-mmt'
16318`-mno-mt'
16319     Use (do not use) MT Multithreading instructions.
16320
16321`-mmcu'
16322`-mno-mcu'
16323     Use (do not use) the MIPS MCU ASE instructions.
16324
16325`-meva'
16326`-mno-eva'
16327     Use (do not use) the MIPS Enhanced Virtual Addressing instructions.
16328
16329`-mvirt'
16330`-mno-virt'
16331     Use (do not use) the MIPS Virtualization Application Specific
16332     instructions.
16333
16334`-mxpa'
16335`-mno-xpa'
16336     Use (do not use) the MIPS eXtended Physical Address (XPA)
16337     instructions.
16338
16339`-mlong64'
16340     Force `long' types to be 64 bits wide.  See `-mlong32' for an
16341     explanation of the default and the way that the pointer size is
16342     determined.
16343
16344`-mlong32'
16345     Force `long', `int', and pointer types to be 32 bits wide.
16346
16347     The default size of `int's, `long's and pointers depends on the
16348     ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
16349     64-bit `long's, as does the 64-bit EABI; the others use 32-bit
16350     `long's.  Pointers are the same size as `long's, or the same size
16351     as integer registers, whichever is smaller.
16352
16353`-msym32'
16354`-mno-sym32'
16355     Assume (do not assume) that all symbols have 32-bit values,
16356     regardless of the selected ABI.  This option is useful in
16357     combination with `-mabi=64' and `-mno-abicalls' because it allows
16358     GCC to generate shorter and faster references to symbolic
16359     addresses.
16360
16361`-G NUM'
16362     Put definitions of externally-visible data in a small data section
16363     if that data is no bigger than NUM bytes.  GCC can then generate
16364     more efficient accesses to the data; see `-mgpopt' for details.
16365
16366     The default `-G' option depends on the configuration.
16367
16368`-mlocal-sdata'
16369`-mno-local-sdata'
16370     Extend (do not extend) the `-G' behavior to local data too, such
16371     as to static variables in C.  `-mlocal-sdata' is the default for
16372     all configurations.
16373
16374     If the linker complains that an application is using too much
16375     small data, you might want to try rebuilding the less
16376     performance-critical parts with `-mno-local-sdata'.  You might
16377     also want to build large libraries with `-mno-local-sdata', so
16378     that the libraries leave more room for the main program.
16379
16380`-mextern-sdata'
16381`-mno-extern-sdata'
16382     Assume (do not assume) that externally-defined data is in a small
16383     data section if the size of that data is within the `-G' limit.
16384     `-mextern-sdata' is the default for all configurations.
16385
16386     If you compile a module MOD with `-mextern-sdata' `-G NUM'
16387     `-mgpopt', and MOD references a variable VAR that is no bigger
16388     than NUM bytes, you must make sure that VAR is placed in a small
16389     data section.  If VAR is defined by another module, you must
16390     either compile that module with a high-enough `-G' setting or
16391     attach a `section' attribute to VAR's definition.  If VAR is
16392     common, you must link the application with a high-enough `-G'
16393     setting.
16394
16395     The easiest way of satisfying these restrictions is to compile and
16396     link every module with the same `-G' option.  However, you may
16397     wish to build a library that supports several different small data
16398     limits.  You can do this by compiling the library with the highest
16399     supported `-G' setting and additionally using `-mno-extern-sdata'
16400     to stop the library from making assumptions about
16401     externally-defined data.
16402
16403`-mgpopt'
16404`-mno-gpopt'
16405     Use (do not use) GP-relative accesses for symbols that are known
16406     to be in a small data section; see `-G', `-mlocal-sdata' and
16407     `-mextern-sdata'.  `-mgpopt' is the default for all configurations.
16408
16409     `-mno-gpopt' is useful for cases where the `$gp' register might
16410     not hold the value of `_gp'.  For example, if the code is part of
16411     a library that might be used in a boot monitor, programs that call
16412     boot monitor routines pass an unknown value in `$gp'.  (In such
16413     situations, the boot monitor itself is usually compiled with
16414     `-G0'.)
16415
16416     `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'.
16417
16418`-membedded-data'
16419`-mno-embedded-data'
16420     Allocate variables to the read-only data section first if
16421     possible, then next in the small data section if possible,
16422     otherwise in data.  This gives slightly slower code than the
16423     default, but reduces the amount of RAM required when executing,
16424     and thus may be preferred for some embedded systems.
16425
16426`-muninit-const-in-rodata'
16427`-mno-uninit-const-in-rodata'
16428     Put uninitialized `const' variables in the read-only data section.
16429     This option is only meaningful in conjunction with
16430     `-membedded-data'.
16431
16432`-mcode-readable=SETTING'
16433     Specify whether GCC may generate code that reads from executable
16434     sections.  There are three possible settings:
16435
16436    `-mcode-readable=yes'
16437          Instructions may freely access executable sections.  This is
16438          the default setting.
16439
16440    `-mcode-readable=pcrel'
16441          MIPS16 PC-relative load instructions can access executable
16442          sections, but other instructions must not do so.  This option
16443          is useful on 4KSc and 4KSd processors when the code TLBs have
16444          the Read Inhibit bit set.  It is also useful on processors
16445          that can be configured to have a dual instruction/data SRAM
16446          interface and that, like the M4K, automatically redirect
16447          PC-relative loads to the instruction RAM.
16448
16449    `-mcode-readable=no'
16450          Instructions must not access executable sections.  This
16451          option can be useful on targets that are configured to have a
16452          dual instruction/data SRAM interface but that (unlike the
16453          M4K) do not automatically redirect PC-relative loads to the
16454          instruction RAM.
16455
16456`-msplit-addresses'
16457`-mno-split-addresses'
16458     Enable (disable) use of the `%hi()' and `%lo()' assembler
16459     relocation operators.  This option has been superseded by
16460     `-mexplicit-relocs' but is retained for backwards compatibility.
16461
16462`-mexplicit-relocs'
16463`-mno-explicit-relocs'
16464     Use (do not use) assembler relocation operators when dealing with
16465     symbolic addresses.  The alternative, selected by
16466     `-mno-explicit-relocs', is to use assembler macros instead.
16467
16468     `-mexplicit-relocs' is the default if GCC was configured to use an
16469     assembler that supports relocation operators.
16470
16471`-mcheck-zero-division'
16472`-mno-check-zero-division'
16473     Trap (do not trap) on integer division by zero.
16474
16475     The default is `-mcheck-zero-division'.
16476
16477`-mdivide-traps'
16478`-mdivide-breaks'
16479     MIPS systems check for division by zero by generating either a
16480     conditional trap or a break instruction.  Using traps results in
16481     smaller code, but is only supported on MIPS II and later.  Also,
16482     some versions of the Linux kernel have a bug that prevents trap
16483     from generating the proper signal (`SIGFPE').  Use
16484     `-mdivide-traps' to allow conditional traps on architectures that
16485     support them and `-mdivide-breaks' to force the use of breaks.
16486
16487     The default is usually `-mdivide-traps', but this can be
16488     overridden at configure time using `--with-divide=breaks'.
16489     Divide-by-zero checks can be completely disabled using
16490     `-mno-check-zero-division'.
16491
16492`-mmemcpy'
16493`-mno-memcpy'
16494     Force (do not force) the use of `memcpy' for non-trivial block
16495     moves.  The default is `-mno-memcpy', which allows GCC to inline
16496     most constant-sized copies.
16497
16498`-mlong-calls'
16499`-mno-long-calls'
16500     Disable (do not disable) use of the `jal' instruction.  Calling
16501     functions using `jal' is more efficient but requires the caller
16502     and callee to be in the same 256 megabyte segment.
16503
16504     This option has no effect on abicalls code.  The default is
16505     `-mno-long-calls'.
16506
16507`-mmad'
16508`-mno-mad'
16509     Enable (disable) use of the `mad', `madu' and `mul' instructions,
16510     as provided by the R4650 ISA.
16511
16512`-mimadd'
16513`-mno-imadd'
16514     Enable (disable) use of the `madd' and `msub' integer
16515     instructions.  The default is `-mimadd' on architectures that
16516     support `madd' and `msub' except for the 74k architecture where it
16517     was found to generate slower code.
16518
16519`-mfused-madd'
16520`-mno-fused-madd'
16521     Enable (disable) use of the floating-point multiply-accumulate
16522     instructions, when they are available.  The default is
16523     `-mfused-madd'.
16524
16525     On the R8000 CPU when multiply-accumulate instructions are used,
16526     the intermediate product is calculated to infinite precision and
16527     is not subject to the FCSR Flush to Zero bit.  This may be
16528     undesirable in some circumstances.  On other processors the result
16529     is numerically identical to the equivalent computation using
16530     separate multiply, add, subtract and negate instructions.
16531
16532`-nocpp'
16533     Tell the MIPS assembler to not run its preprocessor over user
16534     assembler files (with a `.s' suffix) when assembling them.
16535
16536`-mfix-24k'
16537
16538`-mno-fix-24k'
16539     Work around the 24K E48 (lost data on stores during refill) errata.
16540     The workarounds are implemented by the assembler rather than by
16541     GCC.
16542
16543`-mfix-r4000'
16544`-mno-fix-r4000'
16545     Work around certain R4000 CPU errata:
16546        - A double-word or a variable shift may give an incorrect
16547          result if executed immediately after starting an integer
16548          division.
16549
16550        - A double-word or a variable shift may give an incorrect
16551          result if executed while an integer multiplication is in
16552          progress.
16553
16554        - An integer division may give an incorrect result if started
16555          in a delay slot of a taken branch or a jump.
16556
16557`-mfix-r4400'
16558`-mno-fix-r4400'
16559     Work around certain R4400 CPU errata:
16560        - A double-word or a variable shift may give an incorrect
16561          result if executed immediately after starting an integer
16562          division.
16563
16564`-mfix-r10000'
16565`-mno-fix-r10000'
16566     Work around certain R10000 errata:
16567        - `ll'/`sc' sequences may not behave atomically on revisions
16568          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
16569
16570     This option can only be used if the target architecture supports
16571     branch-likely instructions.  `-mfix-r10000' is the default when
16572     `-march=r10000' is used; `-mno-fix-r10000' is the default
16573     otherwise.
16574
16575`-mfix-rm7000'
16576`-mno-fix-rm7000'
16577     Work around the RM7000 `dmult'/`dmultu' errata.  The workarounds
16578     are implemented by the assembler rather than by GCC.
16579
16580`-mfix-vr4120'
16581`-mno-fix-vr4120'
16582     Work around certain VR4120 errata:
16583        - `dmultu' does not always produce the correct result.
16584
16585        - `div' and `ddiv' do not always produce the correct result if
16586          one of the operands is negative.
16587     The workarounds for the division errata rely on special functions
16588     in `libgcc.a'.  At present, these functions are only provided by
16589     the `mips64vr*-elf' configurations.
16590
16591     Other VR4120 errata require a NOP to be inserted between certain
16592     pairs of instructions.  These errata are handled by the assembler,
16593     not by GCC itself.
16594
16595`-mfix-vr4130'
16596     Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
16597     implemented by the assembler rather than by GCC, although GCC
16598     avoids using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
16599     `dmacc' and `dmacchi' instructions are available instead.
16600
16601`-mfix-sb1'
16602`-mno-fix-sb1'
16603     Work around certain SB-1 CPU core errata.  (This flag currently
16604     works around the SB-1 revision 2 "F1" and "F2" floating-point
16605     errata.)
16606
16607`-mr10k-cache-barrier=SETTING'
16608     Specify whether GCC should insert cache barriers to avoid the
16609     side-effects of speculation on R10K processors.
16610
16611     In common with many processors, the R10K tries to predict the
16612     outcome of a conditional branch and speculatively executes
16613     instructions from the "taken" branch.  It later aborts these
16614     instructions if the predicted outcome is wrong.  However, on the
16615     R10K, even aborted instructions can have side effects.
16616
16617     This problem only affects kernel stores and, depending on the
16618     system, kernel loads.  As an example, a speculatively-executed
16619     store may load the target memory into cache and mark the cache
16620     line as dirty, even if the store itself is later aborted.  If a
16621     DMA operation writes to the same area of memory before the "dirty"
16622     line is flushed, the cached data overwrites the DMA-ed data.  See
16623     the R10K processor manual for a full description, including other
16624     potential problems.
16625
16626     One workaround is to insert cache barrier instructions before
16627     every memory access that might be speculatively executed and that
16628     might have side effects even if aborted.
16629     `-mr10k-cache-barrier=SETTING' controls GCC's implementation of
16630     this workaround.  It assumes that aborted accesses to any byte in
16631     the following regions does not have side effects:
16632
16633       1. the memory occupied by the current function's stack frame;
16634
16635       2. the memory occupied by an incoming stack argument;
16636
16637       3. the memory occupied by an object with a link-time-constant
16638          address.
16639
16640     It is the kernel's responsibility to ensure that speculative
16641     accesses to these regions are indeed safe.
16642
16643     If the input program contains a function declaration such as:
16644
16645          void foo (void);
16646
16647     then the implementation of `foo' must allow `j foo' and `jal foo'
16648     to be executed speculatively.  GCC honors this restriction for
16649     functions it compiles itself.  It expects non-GCC functions (such
16650     as hand-written assembly code) to do the same.
16651
16652     The option has three forms:
16653
16654    `-mr10k-cache-barrier=load-store'
16655          Insert a cache barrier before a load or store that might be
16656          speculatively executed and that might have side effects even
16657          if aborted.
16658
16659    `-mr10k-cache-barrier=store'
16660          Insert a cache barrier before a store that might be
16661          speculatively executed and that might have side effects even
16662          if aborted.
16663
16664    `-mr10k-cache-barrier=none'
16665          Disable the insertion of cache barriers.  This is the default
16666          setting.
16667
16668`-mflush-func=FUNC'
16669`-mno-flush-func'
16670     Specifies the function to call to flush the I and D caches, or to
16671     not call any such function.  If called, the function must take the
16672     same arguments as the common `_flush_func', that is, the address
16673     of the memory range for which the cache is being flushed, the size
16674     of the memory range, and the number 3 (to flush both caches).  The
16675     default depends on the target GCC was configured for, but commonly
16676     is either `_flush_func' or `__cpu_flush'.
16677
16678`mbranch-cost=NUM'
16679     Set the cost of branches to roughly NUM "simple" instructions.
16680     This cost is only a heuristic and is not guaranteed to produce
16681     consistent results across releases.  A zero cost redundantly
16682     selects the default, which is based on the `-mtune' setting.
16683
16684`-mbranch-likely'
16685`-mno-branch-likely'
16686     Enable or disable use of Branch Likely instructions, regardless of
16687     the default for the selected architecture.  By default, Branch
16688     Likely instructions may be generated if they are supported by the
16689     selected architecture.  An exception is for the MIPS32 and MIPS64
16690     architectures and processors that implement those architectures;
16691     for those, Branch Likely instructions are not be generated by
16692     default because the MIPS32 and MIPS64 architectures specifically
16693     deprecate their use.
16694
16695`-mfp-exceptions'
16696`-mno-fp-exceptions'
16697     Specifies whether FP exceptions are enabled.  This affects how FP
16698     instructions are scheduled for some processors.  The default is
16699     that FP exceptions are enabled.
16700
16701     For instance, on the SB-1, if FP exceptions are disabled, and we
16702     are emitting 64-bit code, then we can use both FP pipes.
16703     Otherwise, we can only use one FP pipe.
16704
16705`-mvr4130-align'
16706`-mno-vr4130-align'
16707     The VR4130 pipeline is two-way superscalar, but can only issue two
16708     instructions together if the first one is 8-byte aligned.  When
16709     this option is enabled, GCC aligns pairs of instructions that it
16710     thinks should execute in parallel.
16711
16712     This option only has an effect when optimizing for the VR4130.  It
16713     normally makes code faster, but at the expense of making it bigger.
16714     It is enabled by default at optimization level `-O3'.
16715
16716`-msynci'
16717`-mno-synci'
16718     Enable (disable) generation of `synci' instructions on
16719     architectures that support it.  The `synci' instructions (if
16720     enabled) are generated when `__builtin___clear_cache' is compiled.
16721
16722     This option defaults to `-mno-synci', but the default can be
16723     overridden by configuring GCC with `--with-synci'.
16724
16725     When compiling code for single processor systems, it is generally
16726     safe to use `synci'.  However, on many multi-core (SMP) systems, it
16727     does not invalidate the instruction caches on all cores and may
16728     lead to undefined behavior.
16729
16730`-mrelax-pic-calls'
16731`-mno-relax-pic-calls'
16732     Try to turn PIC calls that are normally dispatched via register
16733     `$25' into direct calls.  This is only possible if the linker can
16734     resolve the destination at link-time and if the destination is
16735     within range for a direct call.
16736
16737     `-mrelax-pic-calls' is the default if GCC was configured to use an
16738     assembler and a linker that support the `.reloc' assembly
16739     directive and `-mexplicit-relocs' is in effect.  With
16740     `-mno-explicit-relocs', this optimization can be performed by the
16741     assembler and the linker alone without help from the compiler.
16742
16743`-mmcount-ra-address'
16744`-mno-mcount-ra-address'
16745     Emit (do not emit) code that allows `_mcount' to modify the
16746     calling function's return address.  When enabled, this option
16747     extends the usual `_mcount' interface with a new RA-ADDRESS
16748     parameter, which has type `intptr_t *' and is passed in register
16749     `$12'.  `_mcount' can then modify the return address by doing both
16750     of the following:
16751        * Returning the new address in register `$31'.
16752
16753        * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is
16754          nonnull.
16755
16756     The default is `-mno-mcount-ra-address'.
16757
16758
16759
16760File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
16761
167623.17.26 MMIX Options
16763--------------------
16764
16765These options are defined for the MMIX:
16766
16767`-mlibfuncs'
16768`-mno-libfuncs'
16769     Specify that intrinsic library functions are being compiled,
16770     passing all values in registers, no matter the size.
16771
16772`-mepsilon'
16773`-mno-epsilon'
16774     Generate floating-point comparison instructions that compare with
16775     respect to the `rE' epsilon register.
16776
16777`-mabi=mmixware'
16778`-mabi=gnu'
16779     Generate code that passes function parameters and return values
16780     that (in the called function) are seen as registers `$0' and up,
16781     as opposed to the GNU ABI which uses global registers `$231' and
16782     up.
16783
16784`-mzero-extend'
16785`-mno-zero-extend'
16786     When reading data from memory in sizes shorter than 64 bits, use
16787     (do not use) zero-extending load instructions by default, rather
16788     than sign-extending ones.
16789
16790`-mknuthdiv'
16791`-mno-knuthdiv'
16792     Make the result of a division yielding a remainder have the same
16793     sign as the divisor.  With the default, `-mno-knuthdiv', the sign
16794     of the remainder follows the sign of the dividend.  Both methods
16795     are arithmetically valid, the latter being almost exclusively used.
16796
16797`-mtoplevel-symbols'
16798`-mno-toplevel-symbols'
16799     Prepend (do not prepend) a `:' to all global symbols, so the
16800     assembly code can be used with the `PREFIX' assembly directive.
16801
16802`-melf'
16803     Generate an executable in the ELF format, rather than the default
16804     `mmo' format used by the `mmix' simulator.
16805
16806`-mbranch-predict'
16807`-mno-branch-predict'
16808     Use (do not use) the probable-branch instructions, when static
16809     branch prediction indicates a probable branch.
16810
16811`-mbase-addresses'
16812`-mno-base-addresses'
16813     Generate (do not generate) code that uses _base addresses_.  Using
16814     a base address automatically generates a request (handled by the
16815     assembler and the linker) for a constant to be set up in a global
16816     register.  The register is used for one or more base address
16817     requests within the range 0 to 255 from the value held in the
16818     register.  The generally leads to short and fast code, but the
16819     number of different data items that can be addressed is limited.
16820     This means that a program that uses lots of static data may
16821     require `-mno-base-addresses'.
16822
16823`-msingle-exit'
16824`-mno-single-exit'
16825     Force (do not force) generated code to have a single exit point in
16826     each function.
16827
16828
16829File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options
16830
168313.17.27 MN10300 Options
16832-----------------------
16833
16834These `-m' options are defined for Matsushita MN10300 architectures:
16835
16836`-mmult-bug'
16837     Generate code to avoid bugs in the multiply instructions for the
16838     MN10300 processors.  This is the default.
16839
16840`-mno-mult-bug'
16841     Do not generate code to avoid bugs in the multiply instructions
16842     for the MN10300 processors.
16843
16844`-mam33'
16845     Generate code using features specific to the AM33 processor.
16846
16847`-mno-am33'
16848     Do not generate code using features specific to the AM33
16849     processor.  This is the default.
16850
16851`-mam33-2'
16852     Generate code using features specific to the AM33/2.0 processor.
16853
16854`-mam34'
16855     Generate code using features specific to the AM34 processor.
16856
16857`-mtune=CPU-TYPE'
16858     Use the timing characteristics of the indicated CPU type when
16859     scheduling instructions.  This does not change the targeted
16860     processor type.  The CPU type must be one of `mn10300', `am33',
16861     `am33-2' or `am34'.
16862
16863`-mreturn-pointer-on-d0'
16864     When generating a function that returns a pointer, return the
16865     pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
16866     only in `a0', and attempts to call such functions without a
16867     prototype result in errors.  Note that this option is on by
16868     default; use `-mno-return-pointer-on-d0' to disable it.
16869
16870`-mno-crt0'
16871     Do not link in the C run-time initialization object file.
16872
16873`-mrelax'
16874     Indicate to the linker that it should perform a relaxation
16875     optimization pass to shorten branches, calls and absolute memory
16876     addresses.  This option only has an effect when used on the
16877     command line for the final link step.
16878
16879     This option makes symbolic debugging impossible.
16880
16881`-mliw'
16882     Allow the compiler to generate _Long Instruction Word_
16883     instructions if the target is the `AM33' or later.  This is the
16884     default.  This option defines the preprocessor macro `__LIW__'.
16885
16886`-mnoliw'
16887     Do not allow the compiler to generate _Long Instruction Word_
16888     instructions.  This option defines the preprocessor macro
16889     `__NO_LIW__'.
16890
16891`-msetlb'
16892     Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
16893     if the target is the `AM33' or later.  This is the default.  This
16894     option defines the preprocessor macro `__SETLB__'.
16895
16896`-mnosetlb'
16897     Do not allow the compiler to generate _SETLB_ or _Lcc_
16898     instructions.  This option defines the preprocessor macro
16899     `__NO_SETLB__'.
16900
16901
16902
16903File: gcc.info,  Node: Moxie Options,  Next: MSP430 Options,  Prev: MN10300 Options,  Up: Submodel Options
16904
169053.17.28 Moxie Options
16906---------------------
16907
16908`-meb'
16909     Generate big-endian code.  This is the default for `moxie-*-*'
16910     configurations.
16911
16912`-mel'
16913     Generate little-endian code.
16914
16915`-mmul.x'
16916     Generate mul.x and umul.x instructions.  This is the default for
16917     `moxiebox-*-*' configurations.
16918
16919`-mno-crt0'
16920     Do not link in the C run-time initialization object file.
16921
16922
16923
16924File: gcc.info,  Node: MSP430 Options,  Next: NDS32 Options,  Prev: Moxie Options,  Up: Submodel Options
16925
169263.17.29 MSP430 Options
16927----------------------
16928
16929These options are defined for the MSP430:
16930
16931`-masm-hex'
16932     Force assembly output to always use hex constants.  Normally such
16933     constants are signed decimals, but this option is available for
16934     testsuite and/or aesthetic purposes.
16935
16936`-mmcu='
16937     Select the MCU to target.  This is used to create a C preprocessor
16938     symbol based upon the MCU name, converted to upper case and pre-
16939     and post-fixed with `__'.  This in turn is used by the `msp430.h'
16940     header file to select an MCU-specific supplementary header file.
16941
16942     The option also sets the ISA to use.  If the MCU name is one that
16943     is known to only support the 430 ISA then that is selected,
16944     otherwise the 430X ISA is selected.  A generic MCU name of
16945     `msp430' can also be used to select the 430 ISA.  Similarly the
16946     generic `msp430x' MCU name selects the 430X ISA.
16947
16948     In addition an MCU-specific linker script is added to the linker
16949     command line.  The script's name is the name of the MCU with `.ld'
16950     appended.  Thus specifying `-mmcu=xxx' on the `gcc' command line
16951     defines the C preprocessor symbol `__XXX__' and cause the linker
16952     to search for a script called `xxx.ld'.
16953
16954     This option is also passed on to the assembler.
16955
16956`-mcpu='
16957     Specifies the ISA to use.  Accepted values are `msp430', `msp430x'
16958     and `msp430xv2'.  This option is deprecated.  The `-mmcu=' option
16959     should be used to select the ISA.
16960
16961`-msim'
16962     Link to the simulator runtime libraries and linker script.
16963     Overrides any scripts that would be selected by the `-mmcu='
16964     option.
16965
16966`-mlarge'
16967     Use large-model addressing (20-bit pointers, 32-bit `size_t').
16968
16969`-msmall'
16970     Use small-model addressing (16-bit pointers, 16-bit `size_t').
16971
16972`-mrelax'
16973     This option is passed to the assembler and linker, and allows the
16974     linker to perform certain optimizations that cannot be done until
16975     the final link.
16976
16977`mhwmult='
16978     Describes the type of hardware multiply supported by the target.
16979     Accepted values are `none' for no hardware multiply, `16bit' for
16980     the original 16-bit-only multiply supported by early MCUs.
16981     `32bit' for the 16/32-bit multiply supported by later MCUs and
16982     `f5series' for the 16/32-bit multiply supported by F5-series MCUs.
16983     A value of `auto' can also be given.  This tells GCC to deduce the
16984     hardware multiply support based upon the MCU name provided by the
16985     `-mmcu' option.  If no `-mmcu' option is specified then `32bit'
16986     hardware multiply support is assumed.  `auto' is the default
16987     setting.
16988
16989     Hardware multiplies are normally performed by calling a library
16990     routine.  This saves space in the generated code.  When compiling
16991     at `-O3' or higher however the hardware multiplier is invoked
16992     inline.  This makes for bigger, but faster code.
16993
16994     The hardware multiply routines disable interrupts whilst running
16995     and restore the previous interrupt state when they finish.  This
16996     makes them safe to use inside interrupt handlers as well as in
16997     normal code.
16998
16999`-minrt'
17000     Enable the use of a minimum runtime environment - no static
17001     initializers or constructors.  This is intended for
17002     memory-constrained devices.  The compiler includes special symbols
17003     in some objects that tell the linker and runtime which code
17004     fragments are required.
17005
17006
17007
17008File: gcc.info,  Node: NDS32 Options,  Next: Nios II Options,  Prev: MSP430 Options,  Up: Submodel Options
17009
170103.17.30 NDS32 Options
17011---------------------
17012
17013These options are defined for NDS32 implementations:
17014
17015`-mbig-endian'
17016     Generate code in big-endian mode.
17017
17018`-mlittle-endian'
17019     Generate code in little-endian mode.
17020
17021`-mreduced-regs'
17022     Use reduced-set registers for register allocation.
17023
17024`-mfull-regs'
17025     Use full-set registers for register allocation.
17026
17027`-mcmov'
17028     Generate conditional move instructions.
17029
17030`-mno-cmov'
17031     Do not generate conditional move instructions.
17032
17033`-mperf-ext'
17034     Generate performance extension instructions.
17035
17036`-mno-perf-ext'
17037     Do not generate performance extension instructions.
17038
17039`-mv3push'
17040     Generate v3 push25/pop25 instructions.
17041
17042`-mno-v3push'
17043     Do not generate v3 push25/pop25 instructions.
17044
17045`-m16-bit'
17046     Generate 16-bit instructions.
17047
17048`-mno-16-bit'
17049     Do not generate 16-bit instructions.
17050
17051`-misr-vector-size=NUM'
17052     Specify the size of each interrupt vector, which must be 4 or 16.
17053
17054`-mcache-block-size=NUM'
17055     Specify the size of each cache block, which must be a power of 2
17056     between 4 and 512.
17057
17058`-march=ARCH'
17059     Specify the name of the target architecture.
17060
17061`-mcmodel=CODE-MODEL'
17062     Set the code model to one of
17063    `small'
17064          All the data and read-only data segments must be within 512KB
17065          addressing space.  The text segment must be within 16MB
17066          addressing space.
17067
17068    `medium'
17069          The data segment must be within 512KB while the read-only
17070          data segment can be within 4GB addressing space.  The text
17071          segment should be still within 16MB addressing space.
17072
17073    `large'
17074          All the text and data segments can be within 4GB addressing
17075          space.
17076
17077`-mctor-dtor'
17078     Enable constructor/destructor feature.
17079
17080`-mrelax'
17081     Guide linker to relax instructions.
17082
17083
17084
17085File: gcc.info,  Node: Nios II Options,  Next: Nvidia PTX Options,  Prev: NDS32 Options,  Up: Submodel Options
17086
170873.17.31 Nios II Options
17088-----------------------
17089
17090These are the options defined for the Altera Nios II processor.
17091
17092`-G NUM'
17093     Put global and static objects less than or equal to NUM bytes into
17094     the small data or BSS sections instead of the normal data or BSS
17095     sections.  The default value of NUM is 8.
17096
17097`-mgpopt=OPTION'
17098
17099`-mgpopt'
17100`-mno-gpopt'
17101     Generate (do not generate) GP-relative accesses.  The following
17102     OPTION names are recognized:
17103
17104    `none'
17105          Do not generate GP-relative accesses.
17106
17107    `local'
17108          Generate GP-relative accesses for small data objects that are
17109          not external or weak.  Also use GP-relative addressing for
17110          objects that have been explicitly placed in a small data
17111          section via a `section' attribute.
17112
17113    `global'
17114          As for `local', but also generate GP-relative accesses for
17115          small data objects that are external or weak.  If you use
17116          this option, you must ensure that all parts of your program
17117          (including libraries) are compiled with the same `-G' setting.
17118
17119    `data'
17120          Generate GP-relative accesses for all data objects in the
17121          program.  If you use this option, the entire data and BSS
17122          segments of your program must fit in 64K of memory and you
17123          must use an appropriate linker script to allocate them within
17124          the addressible range of the global pointer.
17125
17126    `all'
17127          Generate GP-relative addresses for function pointers as well
17128          as data pointers.  If you use this option, the entire text,
17129          data, and BSS segments of your program must fit in 64K of
17130          memory and you must use an appropriate linker script to
17131          allocate them within the addressible range of the global
17132          pointer.
17133
17134
17135     `-mgpopt' is equivalent to `-mgpopt=local', and `-mno-gpopt' is
17136     equivalent to `-mgpopt=none'.
17137
17138     The default is `-mgpopt' except when `-fpic' or `-fPIC' is
17139     specified to generate position-independent code.  Note that the
17140     Nios II ABI does not permit GP-relative accesses from shared
17141     libraries.
17142
17143     You may need to specify `-mno-gpopt' explicitly when building
17144     programs that include large amounts of small data, including large
17145     GOT data sections.  In this case, the 16-bit offset for GP-relative
17146     addressing may not be large enough to allow access to the entire
17147     small data section.
17148
17149`-mel'
17150`-meb'
17151     Generate little-endian (default) or big-endian (experimental) code,
17152     respectively.
17153
17154`-mbypass-cache'
17155`-mno-bypass-cache'
17156     Force all load and store instructions to always bypass cache by
17157     using I/O variants of the instructions. The default is not to
17158     bypass the cache.
17159
17160`-mno-cache-volatile'
17161`-mcache-volatile'
17162     Volatile memory access bypass the cache using the I/O variants of
17163     the load and store instructions. The default is not to bypass the
17164     cache.
17165
17166`-mno-fast-sw-div'
17167`-mfast-sw-div'
17168     Do not use table-based fast divide for small numbers. The default
17169     is to use the fast divide at `-O3' and above.
17170
17171`-mno-hw-mul'
17172`-mhw-mul'
17173`-mno-hw-mulx'
17174`-mhw-mulx'
17175`-mno-hw-div'
17176`-mhw-div'
17177     Enable or disable emitting `mul', `mulx' and `div' family of
17178     instructions by the compiler. The default is to emit `mul' and not
17179     emit `div' and `mulx'.
17180
17181`-mcustom-INSN=N'
17182`-mno-custom-INSN'
17183     Each `-mcustom-INSN=N' option enables use of a custom instruction
17184     with encoding N when generating code that uses INSN.  For example,
17185     `-mcustom-fadds=253' generates custom instruction 253 for
17186     single-precision floating-point add operations instead of the
17187     default behavior of using a library call.
17188
17189     The following values of INSN are supported.  Except as otherwise
17190     noted, floating-point operations are expected to be implemented
17191     with normal IEEE 754 semantics and correspond directly to the C
17192     operators or the equivalent GCC built-in functions (*note Other
17193     Builtins::).
17194
17195     Single-precision floating point:
17196    `fadds', `fsubs', `fdivs', `fmuls'
17197          Binary arithmetic operations.
17198
17199    `fnegs'
17200          Unary negation.
17201
17202    `fabss'
17203          Unary absolute value.
17204
17205    `fcmpeqs', `fcmpges', `fcmpgts', `fcmples', `fcmplts', `fcmpnes'
17206          Comparison operations.
17207
17208    `fmins', `fmaxs'
17209          Floating-point minimum and maximum.  These instructions are
17210          only generated if `-ffinite-math-only' is specified.
17211
17212    `fsqrts'
17213          Unary square root operation.
17214
17215    `fcoss', `fsins', `ftans', `fatans', `fexps', `flogs'
17216          Floating-point trigonometric and exponential functions.
17217          These instructions are only generated if
17218          `-funsafe-math-optimizations' is also specified.
17219
17220
17221     Double-precision floating point:
17222    `faddd', `fsubd', `fdivd', `fmuld'
17223          Binary arithmetic operations.
17224
17225    `fnegd'
17226          Unary negation.
17227
17228    `fabsd'
17229          Unary absolute value.
17230
17231    `fcmpeqd', `fcmpged', `fcmpgtd', `fcmpled', `fcmpltd', `fcmpned'
17232          Comparison operations.
17233
17234    `fmind', `fmaxd'
17235          Double-precision minimum and maximum.  These instructions are
17236          only generated if `-ffinite-math-only' is specified.
17237
17238    `fsqrtd'
17239          Unary square root operation.
17240
17241    `fcosd', `fsind', `ftand', `fatand', `fexpd', `flogd'
17242          Double-precision trigonometric and exponential functions.
17243          These instructions are only generated if
17244          `-funsafe-math-optimizations' is also specified.
17245
17246
17247     Conversions:
17248    `fextsd'
17249          Conversion from single precision to double precision.
17250
17251    `ftruncds'
17252          Conversion from double precision to single precision.
17253
17254    `fixsi', `fixsu', `fixdi', `fixdu'
17255          Conversion from floating point to signed or unsigned integer
17256          types, with truncation towards zero.
17257
17258    `round'
17259          Conversion from single-precision floating point to signed
17260          integer, rounding to the nearest integer and ties away from
17261          zero.  This corresponds to the `__builtin_lroundf' function
17262          when `-fno-math-errno' is used.
17263
17264    `floatis', `floatus', `floatid', `floatud'
17265          Conversion from signed or unsigned integer types to
17266          floating-point types.
17267
17268
17269     In addition, all of the following transfer instructions for
17270     internal registers X and Y must be provided to use any of the
17271     double-precision floating-point instructions.  Custom instructions
17272     taking two double-precision source operands expect the first
17273     operand in the 64-bit register X.  The other operand (or only
17274     operand of a unary operation) is given to the custom arithmetic
17275     instruction with the least significant half in source register
17276     SRC1 and the most significant half in SRC2.  A custom instruction
17277     that returns a double-precision result returns the most
17278     significant 32 bits in the destination register and the other half
17279     in 32-bit register Y.  GCC automatically generates the necessary
17280     code sequences to write register X and/or read register Y when
17281     double-precision floating-point instructions are used.
17282
17283    `fwrx'
17284          Write SRC1 into the least significant half of X and SRC2 into
17285          the most significant half of X.
17286
17287    `fwry'
17288          Write SRC1 into Y.
17289
17290    `frdxhi', `frdxlo'
17291          Read the most or least (respectively) significant half of X
17292          and store it in DEST.
17293
17294    `frdy'
17295          Read the value of Y and store it into DEST.
17296
17297     Note that you can gain more local control over generation of Nios
17298     II custom instructions by using the `target("custom-INSN=N")' and
17299     `target("no-custom-INSN")' function attributes (*note Function
17300     Attributes::) or pragmas (*note Function Specific Option
17301     Pragmas::).
17302
17303`-mcustom-fpu-cfg=NAME'
17304     This option enables a predefined, named set of custom instruction
17305     encodings (see `-mcustom-INSN' above).  Currently, the following
17306     sets are defined:
17307
17308     `-mcustom-fpu-cfg=60-1' is equivalent to:
17309          -mcustom-fmuls=252
17310          -mcustom-fadds=253
17311          -mcustom-fsubs=254
17312          -fsingle-precision-constant
17313
17314     `-mcustom-fpu-cfg=60-2' is equivalent to:
17315          -mcustom-fmuls=252
17316          -mcustom-fadds=253
17317          -mcustom-fsubs=254
17318          -mcustom-fdivs=255
17319          -fsingle-precision-constant
17320
17321     `-mcustom-fpu-cfg=72-3' is equivalent to:
17322          -mcustom-floatus=243
17323          -mcustom-fixsi=244
17324          -mcustom-floatis=245
17325          -mcustom-fcmpgts=246
17326          -mcustom-fcmples=249
17327          -mcustom-fcmpeqs=250
17328          -mcustom-fcmpnes=251
17329          -mcustom-fmuls=252
17330          -mcustom-fadds=253
17331          -mcustom-fsubs=254
17332          -mcustom-fdivs=255
17333          -fsingle-precision-constant
17334
17335     Custom instruction assignments given by individual
17336     `-mcustom-INSN=' options override those given by
17337     `-mcustom-fpu-cfg=', regardless of the order of the options on the
17338     command line.
17339
17340     Note that you can gain more local control over selection of a FPU
17341     configuration by using the `target("custom-fpu-cfg=NAME")'
17342     function attribute (*note Function Attributes::) or pragma (*note
17343     Function Specific Option Pragmas::).
17344
17345
17346 These additional `-m' options are available for the Altera Nios II ELF
17347(bare-metal) target:
17348
17349`-mhal'
17350     Link with HAL BSP.  This suppresses linking with the GCC-provided
17351     C runtime startup and termination code, and is typically used in
17352     conjunction with `-msys-crt0=' to specify the location of the
17353     alternate startup code provided by the HAL BSP.
17354
17355`-msmallc'
17356     Link with a limited version of the C library, `-lsmallc', rather
17357     than Newlib.
17358
17359`-msys-crt0=STARTFILE'
17360     STARTFILE is the file name of the startfile (crt0) to use when
17361     linking.  This option is only useful in conjunction with `-mhal'.
17362
17363`-msys-lib=SYSTEMLIB'
17364     SYSTEMLIB is the library name of the library that provides
17365     low-level system calls required by the C library, e.g. `read' and
17366     `write'.  This option is typically used to link with a library
17367     provided by a HAL BSP.
17368
17369
17370
17371File: gcc.info,  Node: Nvidia PTX Options,  Next: PDP-11 Options,  Prev: Nios II Options,  Up: Submodel Options
17372
173733.17.32 Nvidia PTX Options
17374--------------------------
17375
17376These options are defined for Nvidia PTX:
17377
17378`-m32'
17379`-m64'
17380     Generate code for 32-bit or 64-bit ABI.
17381
17382`-mmainkernel'
17383     Link in code for a __main kernel.  This is for stand-alone instead
17384     of offloading execution.
17385
17386
17387
17388File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: Nvidia PTX Options,  Up: Submodel Options
17389
173903.17.33 PDP-11 Options
17391----------------------
17392
17393These options are defined for the PDP-11:
17394
17395`-mfpu'
17396     Use hardware FPP floating point.  This is the default.  (FIS
17397     floating point on the PDP-11/40 is not supported.)
17398
17399`-msoft-float'
17400     Do not use hardware floating point.
17401
17402`-mac0'
17403     Return floating-point results in ac0 (fr0 in Unix assembler
17404     syntax).
17405
17406`-mno-ac0'
17407     Return floating-point results in memory.  This is the default.
17408
17409`-m40'
17410     Generate code for a PDP-11/40.
17411
17412`-m45'
17413     Generate code for a PDP-11/45.  This is the default.
17414
17415`-m10'
17416     Generate code for a PDP-11/10.
17417
17418`-mbcopy-builtin'
17419     Use inline `movmemhi' patterns for copying memory.  This is the
17420     default.
17421
17422`-mbcopy'
17423     Do not use inline `movmemhi' patterns for copying memory.
17424
17425`-mint16'
17426`-mno-int32'
17427     Use 16-bit `int'.  This is the default.
17428
17429`-mint32'
17430`-mno-int16'
17431     Use 32-bit `int'.
17432
17433`-mfloat64'
17434`-mno-float32'
17435     Use 64-bit `float'.  This is the default.
17436
17437`-mfloat32'
17438`-mno-float64'
17439     Use 32-bit `float'.
17440
17441`-mabshi'
17442     Use `abshi2' pattern.  This is the default.
17443
17444`-mno-abshi'
17445     Do not use `abshi2' pattern.
17446
17447`-mbranch-expensive'
17448     Pretend that branches are expensive.  This is for experimenting
17449     with code generation only.
17450
17451`-mbranch-cheap'
17452     Do not pretend that branches are expensive.  This is the default.
17453
17454`-munix-asm'
17455     Use Unix assembler syntax.  This is the default when configured for
17456     `pdp11-*-bsd'.
17457
17458`-mdec-asm'
17459     Use DEC assembler syntax.  This is the default when configured for
17460     any PDP-11 target other than `pdp11-*-bsd'.
17461
17462
17463File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
17464
174653.17.34 picoChip Options
17466------------------------
17467
17468These `-m' options are defined for picoChip implementations:
17469
17470`-mae=AE_TYPE'
17471     Set the instruction set, register set, and instruction scheduling
17472     parameters for array element type AE_TYPE.  Supported values for
17473     AE_TYPE are `ANY', `MUL', and `MAC'.
17474
17475     `-mae=ANY' selects a completely generic AE type.  Code generated
17476     with this option runs on any of the other AE types.  The code is
17477     not as efficient as it would be if compiled for a specific AE
17478     type, and some types of operation (e.g., multiplication) do not
17479     work properly on all types of AE.
17480
17481     `-mae=MUL' selects a MUL AE type.  This is the most useful AE type
17482     for compiled code, and is the default.
17483
17484     `-mae=MAC' selects a DSP-style MAC AE.  Code compiled with this
17485     option may suffer from poor performance of byte (char)
17486     manipulation, since the DSP AE does not provide hardware support
17487     for byte load/stores.
17488
17489`-msymbol-as-address'
17490     Enable the compiler to directly use a symbol name as an address in
17491     a load/store instruction, without first loading it into a
17492     register.  Typically, the use of this option generates larger
17493     programs, which run faster than when the option isn't used.
17494     However, the results vary from program to program, so it is left
17495     as a user option, rather than being permanently enabled.
17496
17497`-mno-inefficient-warnings'
17498     Disables warnings about the generation of inefficient code.  These
17499     warnings can be generated, for example, when compiling code that
17500     performs byte-level memory operations on the MAC AE type.  The MAC
17501     AE has no hardware support for byte-level memory operations, so
17502     all byte load/stores must be synthesized from word load/store
17503     operations.  This is inefficient and a warning is generated to
17504     indicate that you should rewrite the code to avoid byte
17505     operations, or to target an AE type that has the necessary
17506     hardware support.  This option disables these warnings.
17507
17508
17509
17510File: gcc.info,  Node: PowerPC Options,  Next: RL78 Options,  Prev: picoChip Options,  Up: Submodel Options
17511
175123.17.35 PowerPC Options
17513-----------------------
17514
17515These are listed under *Note RS/6000 and PowerPC Options::.
17516
17517
17518File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: PowerPC Options,  Up: Submodel Options
17519
175203.17.36 RL78 Options
17521--------------------
17522
17523`-msim'
17524     Links in additional target libraries to support operation within a
17525     simulator.
17526
17527`-mmul=none'
17528`-mmul=g13'
17529`-mmul=rl78'
17530     Specifies the type of hardware multiplication support to be used.
17531     The default is `none', which uses software multiplication
17532     functions.  The `g13' option is for the hardware multiply/divide
17533     peripheral only on the RL78/G13 targets.  The `rl78' option is for
17534     the standard hardware multiplication defined in the RL78 software
17535     manual.
17536
17537`-m64bit-doubles'
17538`-m32bit-doubles'
17539     Make the `double' data type be 64 bits (`-m64bit-doubles') or 32
17540     bits (`-m32bit-doubles') in size.  The default is
17541     `-m32bit-doubles'.
17542
17543
17544
17545File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options
17546
175473.17.37 IBM RS/6000 and PowerPC Options
17548---------------------------------------
17549
17550These `-m' options are defined for the IBM RS/6000 and PowerPC:
17551`-mpowerpc-gpopt'
17552`-mno-powerpc-gpopt'
17553`-mpowerpc-gfxopt'
17554`-mno-powerpc-gfxopt'
17555`-mpowerpc64'
17556`-mno-powerpc64'
17557`-mmfcrf'
17558`-mno-mfcrf'
17559`-mpopcntb'
17560`-mno-popcntb'
17561`-mpopcntd'
17562`-mno-popcntd'
17563`-mfprnd'
17564`-mno-fprnd'
17565`-mcmpb'
17566`-mno-cmpb'
17567`-mmfpgpr'
17568`-mno-mfpgpr'
17569`-mhard-dfp'
17570`-mno-hard-dfp'
17571     You use these options to specify which instructions are available
17572     on the processor you are using.  The default value of these
17573     options is determined when configuring GCC.  Specifying the
17574     `-mcpu=CPU_TYPE' overrides the specification of these options.  We
17575     recommend you use the `-mcpu=CPU_TYPE' option rather than the
17576     options listed above.
17577
17578     Specifying `-mpowerpc-gpopt' allows GCC to use the optional
17579     PowerPC architecture instructions in the General Purpose group,
17580     including floating-point square root.  Specifying
17581     `-mpowerpc-gfxopt' allows GCC to use the optional PowerPC
17582     architecture instructions in the Graphics group, including
17583     floating-point select.
17584
17585     The `-mmfcrf' option allows GCC to generate the move from
17586     condition register field instruction implemented on the POWER4
17587     processor and other processors that support the PowerPC V2.01
17588     architecture.  The `-mpopcntb' option allows GCC to generate the
17589     popcount and double-precision FP reciprocal estimate instruction
17590     implemented on the POWER5 processor and other processors that
17591     support the PowerPC V2.02 architecture.  The `-mpopcntd' option
17592     allows GCC to generate the popcount instruction implemented on the
17593     POWER7 processor and other processors that support the PowerPC
17594     V2.06 architecture.  The `-mfprnd' option allows GCC to generate
17595     the FP round to integer instructions implemented on the POWER5+
17596     processor and other processors that support the PowerPC V2.03
17597     architecture.  The `-mcmpb' option allows GCC to generate the
17598     compare bytes instruction implemented on the POWER6 processor and
17599     other processors that support the PowerPC V2.05 architecture.  The
17600     `-mmfpgpr' option allows GCC to generate the FP move to/from
17601     general-purpose register instructions implemented on the POWER6X
17602     processor and other processors that support the extended PowerPC
17603     V2.05 architecture.  The `-mhard-dfp' option allows GCC to
17604     generate the decimal floating-point instructions implemented on
17605     some POWER processors.
17606
17607     The `-mpowerpc64' option allows GCC to generate the additional
17608     64-bit instructions that are found in the full PowerPC64
17609     architecture and to treat GPRs as 64-bit, doubleword quantities.
17610     GCC defaults to `-mno-powerpc64'.
17611
17612`-mcpu=CPU_TYPE'
17613     Set architecture type, register usage, and instruction scheduling
17614     parameters for machine type CPU_TYPE.  Supported values for
17615     CPU_TYPE are `401', `403', `405', `405fp', `440', `440fp', `464',
17616     `464fp', `476', `476fp', `505', `601', `602', `603', `603e',
17617     `604', `604e', `620', `630', `740', `7400', `7450', `750', `801',
17618     `821', `823', `860', `970', `8540', `a2', `e300c2', `e300c3',
17619     `e500mc', `e500mc64', `e5500', `e6500', `ec603e', `G3', `G4', `G5',
17620     `titan', `power3', `power4', `power5', `power5+', `power6',
17621     `power6x', `power7', `power8', `powerpc', `powerpc64',
17622     `powerpc64le', and `rs64'.
17623
17624     `-mcpu=powerpc', `-mcpu=powerpc64', and `-mcpu=powerpc64le'
17625     specify pure 32-bit PowerPC (either endian), 64-bit big endian
17626     PowerPC and 64-bit little endian PowerPC architecture machine
17627     types, with an appropriate, generic processor model assumed for
17628     scheduling purposes.
17629
17630     The other options specify a specific processor.  Code generated
17631     under those options runs best on that processor, and may not run
17632     at all on others.
17633
17634     The `-mcpu' options automatically enable or disable the following
17635     options:
17636
17637          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
17638          -mpopcntb -mpopcntd  -mpowerpc64
17639          -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
17640          -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
17641          -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector
17642          -mquad-memory -mquad-memory-atomic
17643
17644     The particular options set for any particular CPU varies between
17645     compiler versions, depending on what setting seems to produce
17646     optimal code for that CPU; it doesn't necessarily reflect the
17647     actual hardware's capabilities.  If you wish to set an individual
17648     option to a particular value, you may specify it after the `-mcpu'
17649     option, like `-mcpu=970 -mno-altivec'.
17650
17651     On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
17652     or disabled by the `-mcpu' option at present because AIX does not
17653     have full support for these options.  You may still enable or
17654     disable them individually if you're sure it'll work in your
17655     environment.
17656
17657`-mtune=CPU_TYPE'
17658     Set the instruction scheduling parameters for machine type
17659     CPU_TYPE, but do not set the architecture type or register usage,
17660     as `-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
17661     for `-mtune' as for `-mcpu'.  If both are specified, the code
17662     generated uses the architecture and registers set by `-mcpu', but
17663     the scheduling parameters set by `-mtune'.
17664
17665`-mcmodel=small'
17666     Generate PowerPC64 code for the small model: The TOC is limited to
17667     64k.
17668
17669`-mcmodel=medium'
17670     Generate PowerPC64 code for the medium model: The TOC and other
17671     static data may be up to a total of 4G in size.
17672
17673`-mcmodel=large'
17674     Generate PowerPC64 code for the large model: The TOC may be up to
17675     4G in size.  Other data and code is only limited by the 64-bit
17676     address space.
17677
17678`-maltivec'
17679`-mno-altivec'
17680     Generate code that uses (does not use) AltiVec instructions, and
17681     also enable the use of built-in functions that allow more direct
17682     access to the AltiVec instruction set.  You may also need to set
17683     `-mabi=altivec' to adjust the current ABI with AltiVec ABI
17684     enhancements.
17685
17686     When `-maltivec' is used, rather than `-maltivec=le' or
17687     `-maltivec=be', the element order for Altivec intrinsics such as
17688     `vec_splat', `vec_extract', and `vec_insert' match array element
17689     order corresponding to the endianness of the target.  That is,
17690     element zero identifies the leftmost element in a vector register
17691     when targeting a big-endian platform, and identifies the rightmost
17692     element in a vector register when targeting a little-endian
17693     platform.
17694
17695`-maltivec=be'
17696     Generate Altivec instructions using big-endian element order,
17697     regardless of whether the target is big- or little-endian.  This is
17698     the default when targeting a big-endian platform.
17699
17700     The element order is used to interpret element numbers in Altivec
17701     intrinsics such as `vec_splat', `vec_extract', and `vec_insert'.
17702     By default, these match array element order corresponding to the
17703     endianness for the target.
17704
17705`-maltivec=le'
17706     Generate Altivec instructions using little-endian element order,
17707     regardless of whether the target is big- or little-endian.  This is
17708     the default when targeting a little-endian platform.  This option
17709     is currently ignored when targeting a big-endian platform.
17710
17711     The element order is used to interpret element numbers in Altivec
17712     intrinsics such as `vec_splat', `vec_extract', and `vec_insert'.
17713     By default, these match array element order corresponding to the
17714     endianness for the target.
17715
17716`-mvrsave'
17717`-mno-vrsave'
17718     Generate VRSAVE instructions when generating AltiVec code.
17719
17720`-mgen-cell-microcode'
17721     Generate Cell microcode instructions.
17722
17723`-mwarn-cell-microcode'
17724     Warn when a Cell microcode instruction is emitted.  An example of
17725     a Cell microcode instruction is a variable shift.
17726
17727`-msecure-plt'
17728     Generate code that allows `ld' and `ld.so' to build executables
17729     and shared libraries with non-executable `.plt' and `.got'
17730     sections.  This is a PowerPC 32-bit SYSV ABI option.
17731
17732`-mbss-plt'
17733     Generate code that uses a BSS `.plt' section that `ld.so' fills
17734     in, and requires `.plt' and `.got' sections that are both writable
17735     and executable.  This is a PowerPC 32-bit SYSV ABI option.
17736
17737`-misel'
17738`-mno-isel'
17739     This switch enables or disables the generation of ISEL
17740     instructions.
17741
17742`-misel=YES/NO'
17743     This switch has been deprecated.  Use `-misel' and `-mno-isel'
17744     instead.
17745
17746`-mspe'
17747`-mno-spe'
17748     This switch enables or disables the generation of SPE simd
17749     instructions.
17750
17751`-mpaired'
17752`-mno-paired'
17753     This switch enables or disables the generation of PAIRED simd
17754     instructions.
17755
17756`-mspe=YES/NO'
17757     This option has been deprecated.  Use `-mspe' and `-mno-spe'
17758     instead.
17759
17760`-mvsx'
17761`-mno-vsx'
17762     Generate code that uses (does not use) vector/scalar (VSX)
17763     instructions, and also enable the use of built-in functions that
17764     allow more direct access to the VSX instruction set.
17765
17766`-mcrypto'
17767`-mno-crypto'
17768     Enable the use (disable) of the built-in functions that allow
17769     direct access to the cryptographic instructions that were added in
17770     version 2.07 of the PowerPC ISA.
17771
17772`-mdirect-move'
17773`-mno-direct-move'
17774     Generate code that uses (does not use) the instructions to move
17775     data between the general purpose registers and the vector/scalar
17776     (VSX) registers that were added in version 2.07 of the PowerPC ISA.
17777
17778`-mpower8-fusion'
17779`-mno-power8-fusion'
17780     Generate code that keeps (does not keeps) some integer operations
17781     adjacent so that the instructions can be fused together on power8
17782     and later processors.
17783
17784`-mpower8-vector'
17785`-mno-power8-vector'
17786     Generate code that uses (does not use) the vector and scalar
17787     instructions that were added in version 2.07 of the PowerPC ISA.
17788     Also enable the use of built-in functions that allow more direct
17789     access to the vector instructions.
17790
17791`-mquad-memory'
17792`-mno-quad-memory'
17793     Generate code that uses (does not use) the non-atomic quad word
17794     memory instructions.  The `-mquad-memory' option requires use of
17795     64-bit mode.
17796
17797`-mquad-memory-atomic'
17798`-mno-quad-memory-atomic'
17799     Generate code that uses (does not use) the atomic quad word memory
17800     instructions.  The `-mquad-memory-atomic' option requires use of
17801     64-bit mode.
17802
17803`-mupper-regs-df'
17804`-mno-upper-regs-df'
17805     Generate code that uses (does not use) the scalar double precision
17806     instructions that target all 64 registers in the vector/scalar
17807     floating point register set that were added in version 2.06 of the
17808     PowerPC ISA.  `-mupper-regs-df' is turned on by default if you use
17809     any of the `-mcpu=power7', `-mcpu=power8', or `-mvsx' options.
17810
17811`-mupper-regs-sf'
17812`-mno-upper-regs-sf'
17813     Generate code that uses (does not use) the scalar single precision
17814     instructions that target all 64 registers in the vector/scalar
17815     floating point register set that were added in version 2.07 of the
17816     PowerPC ISA.  `-mupper-regs-sf' is turned on by default if you use
17817     either of the `-mcpu=power8' or `-mpower8-vector' options.
17818
17819`-mupper-regs'
17820`-mno-upper-regs'
17821     Generate code that uses (does not use) the scalar instructions
17822     that target all 64 registers in the vector/scalar floating point
17823     register set, depending on the model of the machine.
17824
17825     If the `-mno-upper-regs' option is used, it turns off both
17826     `-mupper-regs-sf' and `-mupper-regs-df' options.
17827
17828`-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
17829`-mfloat-gprs'
17830     This switch enables or disables the generation of floating-point
17831     operations on the general-purpose registers for architectures that
17832     support it.
17833
17834     The argument `yes' or `single' enables the use of single-precision
17835     floating-point operations.
17836
17837     The argument `double' enables the use of single and
17838     double-precision floating-point operations.
17839
17840     The argument `no' disables floating-point operations on the
17841     general-purpose registers.
17842
17843     This option is currently only available on the MPC854x.
17844
17845`-m32'
17846`-m64'
17847     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
17848     targets (including GNU/Linux).  The 32-bit environment sets int,
17849     long and pointer to 32 bits and generates code that runs on any
17850     PowerPC variant.  The 64-bit environment sets int to 32 bits and
17851     long and pointer to 64 bits, and generates code for PowerPC64, as
17852     for `-mpowerpc64'.
17853
17854`-mfull-toc'
17855`-mno-fp-in-toc'
17856`-mno-sum-in-toc'
17857`-mminimal-toc'
17858     Modify generation of the TOC (Table Of Contents), which is created
17859     for every executable file.  The `-mfull-toc' option is selected by
17860     default.  In that case, GCC allocates at least one TOC entry for
17861     each unique non-automatic variable reference in your program.  GCC
17862     also places floating-point constants in the TOC.  However, only
17863     16,384 entries are available in the TOC.
17864
17865     If you receive a linker error message that saying you have
17866     overflowed the available TOC space, you can reduce the amount of
17867     TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
17868     options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
17869     constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
17870     code to calculate the sum of an address and a constant at run time
17871     instead of putting that sum into the TOC.  You may specify one or
17872     both of these options.  Each causes GCC to produce very slightly
17873     slower and larger code at the expense of conserving TOC space.
17874
17875     If you still run out of space in the TOC even when you specify
17876     both of these options, specify `-mminimal-toc' instead.  This
17877     option causes GCC to make only one TOC entry for every file.  When
17878     you specify this option, GCC produces code that is slower and
17879     larger but which uses extremely little TOC space.  You may wish to
17880     use this option only on files that contain less
17881     frequently-executed code.
17882
17883`-maix64'
17884`-maix32'
17885     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
17886     64-bit `long' type, and the infrastructure needed to support them.
17887     Specifying `-maix64' implies `-mpowerpc64', while `-maix32'
17888     disables the 64-bit ABI and implies `-mno-powerpc64'.  GCC
17889     defaults to `-maix32'.
17890
17891`-mxl-compat'
17892`-mno-xl-compat'
17893     Produce code that conforms more closely to IBM XL compiler
17894     semantics when using AIX-compatible ABI.  Pass floating-point
17895     arguments to prototyped functions beyond the register save area
17896     (RSA) on the stack in addition to argument FPRs.  Do not assume
17897     that most significant double in 128-bit long double value is
17898     properly rounded when comparing values and converting to double.
17899     Use XL symbol names for long double support routines.
17900
17901     The AIX calling convention was extended but not initially
17902     documented to handle an obscure K&R C case of calling a function
17903     that takes the address of its arguments with fewer arguments than
17904     declared.  IBM XL compilers access floating-point arguments that
17905     do not fit in the RSA from the stack when a subroutine is compiled
17906     without optimization.  Because always storing floating-point
17907     arguments on the stack is inefficient and rarely needed, this
17908     option is not enabled by default and only is necessary when
17909     calling subroutines compiled by IBM XL compilers without
17910     optimization.
17911
17912`-mpe'
17913     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
17914     application written to use message passing with special startup
17915     code to enable the application to run.  The system must have PE
17916     installed in the standard location (`/usr/lpp/ppe.poe/'), or the
17917     `specs' file must be overridden with the `-specs=' option to
17918     specify the appropriate directory location.  The Parallel
17919     Environment does not support threads, so the `-mpe' option and the
17920     `-pthread' option are incompatible.
17921
17922`-malign-natural'
17923`-malign-power'
17924     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
17925     `-malign-natural' overrides the ABI-defined alignment of larger
17926     types, such as floating-point doubles, on their natural size-based
17927     boundary.  The option `-malign-power' instructs GCC to follow the
17928     ABI-specified alignment rules.  GCC defaults to the standard
17929     alignment defined in the ABI.
17930
17931     On 64-bit Darwin, natural alignment is the default, and
17932     `-malign-power' is not supported.
17933
17934`-msoft-float'
17935`-mhard-float'
17936     Generate code that does not use (uses) the floating-point register
17937     set.  Software floating-point emulation is provided if you use the
17938     `-msoft-float' option, and pass the option to GCC when linking.
17939
17940`-msingle-float'
17941`-mdouble-float'
17942     Generate code for single- or double-precision floating-point
17943     operations.  `-mdouble-float' implies `-msingle-float'.
17944
17945`-msimple-fpu'
17946     Do not generate `sqrt' and `div' instructions for hardware
17947     floating-point unit.
17948
17949`-mfpu=NAME'
17950     Specify type of floating-point unit.  Valid values for NAME are
17951     `sp_lite' (equivalent to `-msingle-float -msimple-fpu'), `dp_lite'
17952     (equivalent to `-mdouble-float -msimple-fpu'), `sp_full'
17953     (equivalent to `-msingle-float'), and `dp_full' (equivalent to
17954     `-mdouble-float').
17955
17956`-mxilinx-fpu'
17957     Perform optimizations for the floating-point unit on Xilinx PPC
17958     405/440.
17959
17960`-mmultiple'
17961`-mno-multiple'
17962     Generate code that uses (does not use) the load multiple word
17963     instructions and the store multiple word instructions.  These
17964     instructions are generated by default on POWER systems, and not
17965     generated on PowerPC systems.  Do not use `-mmultiple' on
17966     little-endian PowerPC systems, since those instructions do not
17967     work when the processor is in little-endian mode.  The exceptions
17968     are PPC740 and PPC750 which permit these instructions in
17969     little-endian mode.
17970
17971`-mstring'
17972`-mno-string'
17973     Generate code that uses (does not use) the load string instructions
17974     and the store string word instructions to save multiple registers
17975     and do small block moves.  These instructions are generated by
17976     default on POWER systems, and not generated on PowerPC systems.
17977     Do not use `-mstring' on little-endian PowerPC systems, since those
17978     instructions do not work when the processor is in little-endian
17979     mode.  The exceptions are PPC740 and PPC750 which permit these
17980     instructions in little-endian mode.
17981
17982`-mupdate'
17983`-mno-update'
17984     Generate code that uses (does not use) the load or store
17985     instructions that update the base register to the address of the
17986     calculated memory location.  These instructions are generated by
17987     default.  If you use `-mno-update', there is a small window
17988     between the time that the stack pointer is updated and the address
17989     of the previous frame is stored, which means code that walks the
17990     stack frame across interrupts or signals may get corrupted data.
17991
17992`-mavoid-indexed-addresses'
17993`-mno-avoid-indexed-addresses'
17994     Generate code that tries to avoid (not avoid) the use of indexed
17995     load or store instructions. These instructions can incur a
17996     performance penalty on Power6 processors in certain situations,
17997     such as when stepping through large arrays that cross a 16M
17998     boundary.  This option is enabled by default when targeting Power6
17999     and disabled otherwise.
18000
18001`-mfused-madd'
18002`-mno-fused-madd'
18003     Generate code that uses (does not use) the floating-point multiply
18004     and accumulate instructions.  These instructions are generated by
18005     default if hardware floating point is used.  The machine-dependent
18006     `-mfused-madd' option is now mapped to the machine-independent
18007     `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
18008     `-ffp-contract=off'.
18009
18010`-mmulhw'
18011`-mno-mulhw'
18012     Generate code that uses (does not use) the half-word multiply and
18013     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
18014     processors.  These instructions are generated by default when
18015     targeting those processors.
18016
18017`-mdlmzb'
18018`-mno-dlmzb'
18019     Generate code that uses (does not use) the string-search `dlmzb'
18020     instruction on the IBM 405, 440, 464 and 476 processors.  This
18021     instruction is generated by default when targeting those
18022     processors.
18023
18024`-mno-bit-align'
18025`-mbit-align'
18026     On System V.4 and embedded PowerPC systems do not (do) force
18027     structures and unions that contain bit-fields to be aligned to the
18028     base type of the bit-field.
18029
18030     For example, by default a structure containing nothing but 8
18031     `unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
18032     and has a size of 4 bytes.  By using `-mno-bit-align', the
18033     structure is aligned to a 1-byte boundary and is 1 byte in size.
18034
18035`-mno-strict-align'
18036`-mstrict-align'
18037     On System V.4 and embedded PowerPC systems do not (do) assume that
18038     unaligned memory references are handled by the system.
18039
18040`-mrelocatable'
18041`-mno-relocatable'
18042     Generate code that allows (does not allow) a static executable to
18043     be relocated to a different address at run time.  A simple embedded
18044     PowerPC system loader should relocate the entire contents of
18045     `.got2' and 4-byte locations listed in the `.fixup' section, a
18046     table of 32-bit addresses generated by this option.  For this to
18047     work, all objects linked together must be compiled with
18048     `-mrelocatable' or `-mrelocatable-lib'.  `-mrelocatable' code
18049     aligns the stack to an 8-byte boundary.
18050
18051`-mrelocatable-lib'
18052`-mno-relocatable-lib'
18053     Like `-mrelocatable', `-mrelocatable-lib' generates a `.fixup'
18054     section to allow static executables to be relocated at run time,
18055     but `-mrelocatable-lib' does not use the smaller stack alignment
18056     of `-mrelocatable'.  Objects compiled with `-mrelocatable-lib' may
18057     be linked with objects compiled with any combination of the
18058     `-mrelocatable' options.
18059
18060`-mno-toc'
18061`-mtoc'
18062     On System V.4 and embedded PowerPC systems do not (do) assume that
18063     register 2 contains a pointer to a global area pointing to the
18064     addresses used in the program.
18065
18066`-mlittle'
18067`-mlittle-endian'
18068     On System V.4 and embedded PowerPC systems compile code for the
18069     processor in little-endian mode.  The `-mlittle-endian' option is
18070     the same as `-mlittle'.
18071
18072`-mbig'
18073`-mbig-endian'
18074     On System V.4 and embedded PowerPC systems compile code for the
18075     processor in big-endian mode.  The `-mbig-endian' option is the
18076     same as `-mbig'.
18077
18078`-mdynamic-no-pic'
18079     On Darwin and Mac OS X systems, compile code so that it is not
18080     relocatable, but that its external references are relocatable.  The
18081     resulting code is suitable for applications, but not shared
18082     libraries.
18083
18084`-msingle-pic-base'
18085     Treat the register used for PIC addressing as read-only, rather
18086     than loading it in the prologue for each function.  The runtime
18087     system is responsible for initializing this register with an
18088     appropriate value before execution begins.
18089
18090`-mprioritize-restricted-insns=PRIORITY'
18091     This option controls the priority that is assigned to
18092     dispatch-slot restricted instructions during the second scheduling
18093     pass.  The argument PRIORITY takes the value `0', `1', or `2' to
18094     assign no, highest, or second-highest (respectively) priority to
18095     dispatch-slot restricted instructions.
18096
18097`-msched-costly-dep=DEPENDENCE_TYPE'
18098     This option controls which dependences are considered costly by
18099     the target during instruction scheduling.  The argument
18100     DEPENDENCE_TYPE takes one of the following values:
18101
18102    `no'
18103          No dependence is costly.
18104
18105    `all'
18106          All dependences are costly.
18107
18108    `true_store_to_load'
18109          A true dependence from store to load is costly.
18110
18111    `store_to_load'
18112          Any dependence from store to load is costly.
18113
18114    NUMBER
18115          Any dependence for which the latency is greater than or equal
18116          to NUMBER is costly.
18117
18118`-minsert-sched-nops=SCHEME'
18119     This option controls which NOP insertion scheme is used during the
18120     second scheduling pass.  The argument SCHEME takes one of the
18121     following values:
18122
18123    `no'
18124          Don't insert NOPs.
18125
18126    `pad'
18127          Pad with NOPs any dispatch group that has vacant issue slots,
18128          according to the scheduler's grouping.
18129
18130    `regroup_exact'
18131          Insert NOPs to force costly dependent insns into separate
18132          groups.  Insert exactly as many NOPs as needed to force an
18133          insn to a new group, according to the estimated processor
18134          grouping.
18135
18136    NUMBER
18137          Insert NOPs to force costly dependent insns into separate
18138          groups.  Insert NUMBER NOPs to force an insn to a new group.
18139
18140`-mcall-sysv'
18141     On System V.4 and embedded PowerPC systems compile code using
18142     calling conventions that adhere to the March 1995 draft of the
18143     System V Application Binary Interface, PowerPC processor
18144     supplement.  This is the default unless you configured GCC using
18145     `powerpc-*-eabiaix'.
18146
18147`-mcall-sysv-eabi'
18148`-mcall-eabi'
18149     Specify both `-mcall-sysv' and `-meabi' options.
18150
18151`-mcall-sysv-noeabi'
18152     Specify both `-mcall-sysv' and `-mno-eabi' options.
18153
18154`-mcall-aixdesc'
18155     On System V.4 and embedded PowerPC systems compile code for the AIX
18156     operating system.
18157
18158`-mcall-linux'
18159     On System V.4 and embedded PowerPC systems compile code for the
18160     Linux-based GNU system.
18161
18162`-mcall-freebsd'
18163     On System V.4 and embedded PowerPC systems compile code for the
18164     FreeBSD operating system.
18165
18166`-mcall-netbsd'
18167     On System V.4 and embedded PowerPC systems compile code for the
18168     NetBSD operating system.
18169
18170`-mcall-openbsd'
18171     On System V.4 and embedded PowerPC systems compile code for the
18172     OpenBSD operating system.
18173
18174`-maix-struct-return'
18175     Return all structures in memory (as specified by the AIX ABI).
18176
18177`-msvr4-struct-return'
18178     Return structures smaller than 8 bytes in registers (as specified
18179     by the SVR4 ABI).
18180
18181`-mabi=ABI-TYPE'
18182     Extend the current ABI with a particular extension, or remove such
18183     extension.  Valid values are `altivec', `no-altivec', `spe',
18184     `no-spe', `ibmlongdouble', `ieeelongdouble', `elfv1', `elfv2'.
18185
18186`-mabi=spe'
18187     Extend the current ABI with SPE ABI extensions.  This does not
18188     change the default ABI, instead it adds the SPE ABI extensions to
18189     the current ABI.
18190
18191`-mabi=no-spe'
18192     Disable Book-E SPE ABI extensions for the current ABI.
18193
18194`-mabi=ibmlongdouble'
18195     Change the current ABI to use IBM extended-precision long double.
18196     This is a PowerPC 32-bit SYSV ABI option.
18197
18198`-mabi=ieeelongdouble'
18199     Change the current ABI to use IEEE extended-precision long double.
18200     This is a PowerPC 32-bit Linux ABI option.
18201
18202`-mabi=elfv1'
18203     Change the current ABI to use the ELFv1 ABI.  This is the default
18204     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
18205     ABI requires special system support and is likely to fail in
18206     spectacular ways.
18207
18208`-mabi=elfv2'
18209     Change the current ABI to use the ELFv2 ABI.  This is the default
18210     ABI for little-endian PowerPC 64-bit Linux.  Overriding the
18211     default ABI requires special system support and is likely to fail
18212     in spectacular ways.
18213
18214`-mprototype'
18215`-mno-prototype'
18216     On System V.4 and embedded PowerPC systems assume that all calls to
18217     variable argument functions are properly prototyped.  Otherwise,
18218     the compiler must insert an instruction before every
18219     non-prototyped call to set or clear bit 6 of the condition code
18220     register (`CR') to indicate whether floating-point values are
18221     passed in the floating-point registers in case the function takes
18222     variable arguments.  With `-mprototype', only calls to prototyped
18223     variable argument functions set or clear the bit.
18224
18225`-msim'
18226     On embedded PowerPC systems, assume that the startup module is
18227     called `sim-crt0.o' and that the standard C libraries are
18228     `libsim.a' and `libc.a'.  This is the default for
18229     `powerpc-*-eabisim' configurations.
18230
18231`-mmvme'
18232     On embedded PowerPC systems, assume that the startup module is
18233     called `crt0.o' and the standard C libraries are `libmvme.a' and
18234     `libc.a'.
18235
18236`-mads'
18237     On embedded PowerPC systems, assume that the startup module is
18238     called `crt0.o' and the standard C libraries are `libads.a' and
18239     `libc.a'.
18240
18241`-myellowknife'
18242     On embedded PowerPC systems, assume that the startup module is
18243     called `crt0.o' and the standard C libraries are `libyk.a' and
18244     `libc.a'.
18245
18246`-mvxworks'
18247     On System V.4 and embedded PowerPC systems, specify that you are
18248     compiling for a VxWorks system.
18249
18250`-memb'
18251     On embedded PowerPC systems, set the `PPC_EMB' bit in the ELF flags
18252     header to indicate that `eabi' extended relocations are used.
18253
18254`-meabi'
18255`-mno-eabi'
18256     On System V.4 and embedded PowerPC systems do (do not) adhere to
18257     the Embedded Applications Binary Interface (EABI), which is a set
18258     of modifications to the System V.4 specifications.  Selecting
18259     `-meabi' means that the stack is aligned to an 8-byte boundary, a
18260     function `__eabi' is called from `main' to set up the EABI
18261     environment, and the `-msdata' option can use both `r2' and `r13'
18262     to point to two separate small data areas.  Selecting `-mno-eabi'
18263     means that the stack is aligned to a 16-byte boundary, no EABI
18264     initialization function is called from `main', and the `-msdata'
18265     option only uses `r13' to point to a single small data area.  The
18266     `-meabi' option is on by default if you configured GCC using one
18267     of the `powerpc*-*-eabi*' options.
18268
18269`-msdata=eabi'
18270     On System V.4 and embedded PowerPC systems, put small initialized
18271     `const' global and static data in the `.sdata2' section, which is
18272     pointed to by register `r2'.  Put small initialized non-`const'
18273     global and static data in the `.sdata' section, which is pointed
18274     to by register `r13'.  Put small uninitialized global and static
18275     data in the `.sbss' section, which is adjacent to the `.sdata'
18276     section.  The `-msdata=eabi' option is incompatible with the
18277     `-mrelocatable' option.  The `-msdata=eabi' option also sets the
18278     `-memb' option.
18279
18280`-msdata=sysv'
18281     On System V.4 and embedded PowerPC systems, put small global and
18282     static data in the `.sdata' section, which is pointed to by
18283     register `r13'.  Put small uninitialized global and static data in
18284     the `.sbss' section, which is adjacent to the `.sdata' section.
18285     The `-msdata=sysv' option is incompatible with the `-mrelocatable'
18286     option.
18287
18288`-msdata=default'
18289`-msdata'
18290     On System V.4 and embedded PowerPC systems, if `-meabi' is used,
18291     compile code the same as `-msdata=eabi', otherwise compile code the
18292     same as `-msdata=sysv'.
18293
18294`-msdata=data'
18295     On System V.4 and embedded PowerPC systems, put small global data
18296     in the `.sdata' section.  Put small uninitialized global data in
18297     the `.sbss' section.  Do not use register `r13' to address small
18298     data however.  This is the default behavior unless other `-msdata'
18299     options are used.
18300
18301`-msdata=none'
18302`-mno-sdata'
18303     On embedded PowerPC systems, put all initialized global and static
18304     data in the `.data' section, and all uninitialized data in the
18305     `.bss' section.
18306
18307`-mblock-move-inline-limit=NUM'
18308     Inline all block moves (such as calls to `memcpy' or structure
18309     copies) less than or equal to NUM bytes.  The minimum value for
18310     NUM is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.
18311     The default value is target-specific.
18312
18313`-G NUM'
18314     On embedded PowerPC systems, put global and static items less than
18315     or equal to NUM bytes into the small data or BSS sections instead
18316     of the normal data or BSS section.  By default, NUM is 8.  The `-G
18317     NUM' switch is also passed to the linker.  All modules should be
18318     compiled with the same `-G NUM' value.
18319
18320`-mregnames'
18321`-mno-regnames'
18322     On System V.4 and embedded PowerPC systems do (do not) emit
18323     register names in the assembly language output using symbolic
18324     forms.
18325
18326`-mlongcall'
18327`-mno-longcall'
18328     By default assume that all calls are far away so that a longer and
18329     more expensive calling sequence is required.  This is required for
18330     calls farther than 32 megabytes (33,554,432 bytes) from the
18331     current location.  A short call is generated if the compiler knows
18332     the call cannot be that far away.  This setting can be overridden
18333     by the `shortcall' function attribute, or by `#pragma longcall(0)'.
18334
18335     Some linkers are capable of detecting out-of-range calls and
18336     generating glue code on the fly.  On these systems, long calls are
18337     unnecessary and generate slower code.  As of this writing, the AIX
18338     linker can do this, as can the GNU linker for PowerPC/64.  It is
18339     planned to add this feature to the GNU linker for 32-bit PowerPC
18340     systems as well.
18341
18342     On Darwin/PPC systems, `#pragma longcall' generates `jbsr callee,
18343     L42', plus a "branch island" (glue code).  The two target
18344     addresses represent the callee and the branch island.  The
18345     Darwin/PPC linker prefers the first address and generates a `bl
18346     callee' if the PPC `bl' instruction reaches the callee directly;
18347     otherwise, the linker generates `bl L42' to call the branch
18348     island.  The branch island is appended to the body of the calling
18349     function; it computes the full 32-bit address of the callee and
18350     jumps to it.
18351
18352     On Mach-O (Darwin) systems, this option directs the compiler emit
18353     to the glue for every direct call, and the Darwin linker decides
18354     whether to use or discard it.
18355
18356     In the future, GCC may ignore all longcall specifications when the
18357     linker is known to generate glue.
18358
18359`-mtls-markers'
18360`-mno-tls-markers'
18361     Mark (do not mark) calls to `__tls_get_addr' with a relocation
18362     specifying the function argument.  The relocation allows the
18363     linker to reliably associate function call with argument setup
18364     instructions for TLS optimization, which in turn allows GCC to
18365     better schedule the sequence.
18366
18367`-pthread'
18368     Adds support for multithreading with the "pthreads" library.  This
18369     option sets flags for both the preprocessor and linker.
18370
18371`-mrecip'
18372`-mno-recip'
18373     This option enables use of the reciprocal estimate and reciprocal
18374     square root estimate instructions with additional Newton-Raphson
18375     steps to increase precision instead of doing a divide or square
18376     root and divide for floating-point arguments.  You should use the
18377     `-ffast-math' option when using `-mrecip' (or at least
18378     `-funsafe-math-optimizations', `-finite-math-only',
18379     `-freciprocal-math' and `-fno-trapping-math').  Note that while
18380     the throughput of the sequence is generally higher than the
18381     throughput of the non-reciprocal instruction, the precision of the
18382     sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
18383     equals 0.99999994) for reciprocal square roots.
18384
18385`-mrecip=OPT'
18386     This option controls which reciprocal estimate instructions may be
18387     used.  OPT is a comma-separated list of options, which may be
18388     preceded by a `!' to invert the option:
18389
18390    `all'
18391          Enable all estimate instructions.
18392
18393    `default'
18394          Enable the default instructions, equivalent to `-mrecip'.
18395
18396    `none'
18397          Disable all estimate instructions, equivalent to `-mno-recip'.
18398
18399    `div'
18400          Enable the reciprocal approximation instructions for both
18401          single and double precision.
18402
18403    `divf'
18404          Enable the single-precision reciprocal approximation
18405          instructions.
18406
18407    `divd'
18408          Enable the double-precision reciprocal approximation
18409          instructions.
18410
18411    `rsqrt'
18412          Enable the reciprocal square root approximation instructions
18413          for both single and double precision.
18414
18415    `rsqrtf'
18416          Enable the single-precision reciprocal square root
18417          approximation instructions.
18418
18419    `rsqrtd'
18420          Enable the double-precision reciprocal square root
18421          approximation instructions.
18422
18423
18424     So, for example, `-mrecip=all,!rsqrtd' enables all of the
18425     reciprocal estimate instructions, except for the `FRSQRTE',
18426     `XSRSQRTEDP', and `XVRSQRTEDP' instructions which handle the
18427     double-precision reciprocal square root calculations.
18428
18429`-mrecip-precision'
18430`-mno-recip-precision'
18431     Assume (do not assume) that the reciprocal estimate instructions
18432     provide higher-precision estimates than is mandated by the PowerPC
18433     ABI.  Selecting `-mcpu=power6', `-mcpu=power7' or `-mcpu=power8'
18434     automatically selects `-mrecip-precision'.  The double-precision
18435     square root estimate instructions are not generated by default on
18436     low-precision machines, since they do not provide an estimate that
18437     converges after three steps.
18438
18439`-mveclibabi=TYPE'
18440     Specifies the ABI type to use for vectorizing intrinsics using an
18441     external library.  The only type supported at present is `mass',
18442     which specifies to use IBM's Mathematical Acceleration Subsystem
18443     (MASS) libraries for vectorizing intrinsics using external
18444     libraries.  GCC currently emits calls to `acosd2', `acosf4',
18445     `acoshd2', `acoshf4', `asind2', `asinf4', `asinhd2', `asinhf4',
18446     `atan2d2', `atan2f4', `atand2', `atanf4', `atanhd2', `atanhf4',
18447     `cbrtd2', `cbrtf4', `cosd2', `cosf4', `coshd2', `coshf4',
18448     `erfcd2', `erfcf4', `erfd2', `erff4', `exp2d2', `exp2f4', `expd2',
18449     `expf4', `expm1d2', `expm1f4', `hypotd2', `hypotf4', `lgammad2',
18450     `lgammaf4', `log10d2', `log10f4', `log1pd2', `log1pf4', `log2d2',
18451     `log2f4', `logd2', `logf4', `powd2', `powf4', `sind2', `sinf4',
18452     `sinhd2', `sinhf4', `sqrtd2', `sqrtf4', `tand2', `tanf4',
18453     `tanhd2', and `tanhf4' when generating code for power7.  Both
18454     `-ftree-vectorize' and `-funsafe-math-optimizations' must also be
18455     enabled.  The MASS libraries must be specified at link time.
18456
18457`-mfriz'
18458`-mno-friz'
18459     Generate (do not generate) the `friz' instruction when the
18460     `-funsafe-math-optimizations' option is used to optimize rounding
18461     of floating-point values to 64-bit integer and back to floating
18462     point.  The `friz' instruction does not return the same value if
18463     the floating-point number is too large to fit in an integer.
18464
18465`-mpointers-to-nested-functions'
18466`-mno-pointers-to-nested-functions'
18467     Generate (do not generate) code to load up the static chain
18468     register (`r11') when calling through a pointer on AIX and 64-bit
18469     Linux systems where a function pointer points to a 3-word
18470     descriptor giving the function address, TOC value to be loaded in
18471     register `r2', and static chain value to be loaded in register
18472     `r11'.  The `-mpointers-to-nested-functions' is on by default.
18473     You cannot call through pointers to nested functions or pointers
18474     to functions compiled in other languages that use the static chain
18475     if you use `-mno-pointers-to-nested-functions'.
18476
18477`-msave-toc-indirect'
18478`-mno-save-toc-indirect'
18479     Generate (do not generate) code to save the TOC value in the
18480     reserved stack location in the function prologue if the function
18481     calls through a pointer on AIX and 64-bit Linux systems.  If the
18482     TOC value is not saved in the prologue, it is saved just before
18483     the call through the pointer.  The `-mno-save-toc-indirect' option
18484     is the default.
18485
18486`-mcompat-align-parm'
18487`-mno-compat-align-parm'
18488     Generate (do not generate) code to pass structure parameters with a
18489     maximum alignment of 64 bits, for compatibility with older versions
18490     of GCC.
18491
18492     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
18493     structure parameter on a 128-bit boundary when that structure
18494     contained a member requiring 128-bit alignment.  This is corrected
18495     in more recent versions of GCC.  This option may be used to
18496     generate code that is compatible with functions compiled with
18497     older versions of GCC.
18498
18499     The `-mno-compat-align-parm' option is the default.
18500
18501
18502File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
18503
185043.17.38 RX Options
18505------------------
18506
18507These command-line options are defined for RX targets:
18508
18509`-m64bit-doubles'
18510`-m32bit-doubles'
18511     Make the `double' data type be 64 bits (`-m64bit-doubles') or 32
18512     bits (`-m32bit-doubles') in size.  The default is
18513     `-m32bit-doubles'.  _Note_ RX floating-point hardware only works
18514     on 32-bit values, which is why the default is `-m32bit-doubles'.
18515
18516`-fpu'
18517`-nofpu'
18518     Enables (`-fpu') or disables (`-nofpu') the use of RX
18519     floating-point hardware.  The default is enabled for the RX600
18520     series and disabled for the RX200 series.
18521
18522     Floating-point instructions are only generated for 32-bit
18523     floating-point values, however, so the FPU hardware is not used
18524     for doubles if the `-m64bit-doubles' option is used.
18525
18526     _Note_ If the `-fpu' option is enabled then
18527     `-funsafe-math-optimizations' is also enabled automatically.  This
18528     is because the RX FPU instructions are themselves unsafe.
18529
18530`-mcpu=NAME'
18531     Selects the type of RX CPU to be targeted.  Currently three types
18532     are supported, the generic `RX600' and `RX200' series hardware and
18533     the specific `RX610' CPU.  The default is `RX600'.
18534
18535     The only difference between `RX600' and `RX610' is that the
18536     `RX610' does not support the `MVTIPL' instruction.
18537
18538     The `RX200' series does not have a hardware floating-point unit
18539     and so `-nofpu' is enabled by default when this type is selected.
18540
18541`-mbig-endian-data'
18542`-mlittle-endian-data'
18543     Store data (but not code) in the big-endian format.  The default is
18544     `-mlittle-endian-data', i.e. to store data in the little-endian
18545     format.
18546
18547`-msmall-data-limit=N'
18548     Specifies the maximum size in bytes of global and static variables
18549     which can be placed into the small data area.  Using the small data
18550     area can lead to smaller and faster code, but the size of area is
18551     limited and it is up to the programmer to ensure that the area does
18552     not overflow.  Also when the small data area is used one of the
18553     RX's registers (usually `r13') is reserved for use pointing to this
18554     area, so it is no longer available for use by the compiler.  This
18555     could result in slower and/or larger code if variables are pushed
18556     onto the stack instead of being held in this register.
18557
18558     Note, common variables (variables that have not been initialized)
18559     and constants are not placed into the small data area as they are
18560     assigned to other sections in the output executable.
18561
18562     The default value is zero, which disables this feature.  Note, this
18563     feature is not enabled by default with higher optimization levels
18564     (`-O2' etc) because of the potentially detrimental effects of
18565     reserving a register.  It is up to the programmer to experiment and
18566     discover whether this feature is of benefit to their program.  See
18567     the description of the `-mpid' option for a description of how the
18568     actual register to hold the small data area pointer is chosen.
18569
18570`-msim'
18571`-mno-sim'
18572     Use the simulator runtime.  The default is to use the libgloss
18573     board-specific runtime.
18574
18575`-mas100-syntax'
18576`-mno-as100-syntax'
18577     When generating assembler output use a syntax that is compatible
18578     with Renesas's AS100 assembler.  This syntax can also be handled
18579     by the GAS assembler, but it has some restrictions so it is not
18580     generated by default.
18581
18582`-mmax-constant-size=N'
18583     Specifies the maximum size, in bytes, of a constant that can be
18584     used as an operand in a RX instruction.  Although the RX
18585     instruction set does allow constants of up to 4 bytes in length to
18586     be used in instructions, a longer value equates to a longer
18587     instruction.  Thus in some circumstances it can be beneficial to
18588     restrict the size of constants that are used in instructions.
18589     Constants that are too big are instead placed into a constant pool
18590     and referenced via register indirection.
18591
18592     The value N can be between 0 and 4.  A value of 0 (the default) or
18593     4 means that constants of any size are allowed.
18594
18595`-mrelax'
18596     Enable linker relaxation.  Linker relaxation is a process whereby
18597     the linker attempts to reduce the size of a program by finding
18598     shorter versions of various instructions.  Disabled by default.
18599
18600`-mint-register=N'
18601     Specify the number of registers to reserve for fast interrupt
18602     handler functions.  The value N can be between 0 and 4.  A value
18603     of 1 means that register `r13' is reserved for the exclusive use
18604     of fast interrupt handlers.  A value of 2 reserves `r13' and
18605     `r12'.  A value of 3 reserves `r13', `r12' and `r11', and a value
18606     of 4 reserves `r13' through `r10'.  A value of 0, the default,
18607     does not reserve any registers.
18608
18609`-msave-acc-in-interrupts'
18610     Specifies that interrupt handler functions should preserve the
18611     accumulator register.  This is only necessary if normal code might
18612     use the accumulator register, for example because it performs
18613     64-bit multiplications.  The default is to ignore the accumulator
18614     as this makes the interrupt handlers faster.
18615
18616`-mpid'
18617`-mno-pid'
18618     Enables the generation of position independent data.  When enabled
18619     any access to constant data is done via an offset from a base
18620     address held in a register.  This allows the location of constant
18621     data to be determined at run time without requiring the executable
18622     to be relocated, which is a benefit to embedded applications with
18623     tight memory constraints.  Data that can be modified is not
18624     affected by this option.
18625
18626     Note, using this feature reserves a register, usually `r13', for
18627     the constant data base address.  This can result in slower and/or
18628     larger code, especially in complicated functions.
18629
18630     The actual register chosen to hold the constant data base address
18631     depends upon whether the `-msmall-data-limit' and/or the
18632     `-mint-register' command-line options are enabled.  Starting with
18633     register `r13' and proceeding downwards, registers are allocated
18634     first to satisfy the requirements of `-mint-register', then
18635     `-mpid' and finally `-msmall-data-limit'.  Thus it is possible for
18636     the small data area register to be `r8' if both `-mint-register=4'
18637     and `-mpid' are specified on the command line.
18638
18639     By default this feature is not enabled.  The default can be
18640     restored via the `-mno-pid' command-line option.
18641
18642`-mno-warn-multiple-fast-interrupts'
18643`-mwarn-multiple-fast-interrupts'
18644     Prevents GCC from issuing a warning message if it finds more than
18645     one fast interrupt handler when it is compiling a file.  The
18646     default is to issue a warning for each extra fast interrupt
18647     handler found, as the RX only supports one such interrupt.
18648
18649
18650 _Note:_ The generic GCC command-line option `-ffixed-REG' has special
18651significance to the RX port when used with the `interrupt' function
18652attribute.  This attribute indicates a function intended to process
18653fast interrupts.  GCC ensures that it only uses the registers `r10',
18654`r11', `r12' and/or `r13' and only provided that the normal use of the
18655corresponding registers have been restricted via the `-ffixed-REG' or
18656`-mint-register' command-line options.
18657
18658
18659File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options
18660
186613.17.39 S/390 and zSeries Options
18662---------------------------------
18663
18664These are the `-m' options defined for the S/390 and zSeries
18665architecture.
18666
18667`-mhard-float'
18668`-msoft-float'
18669     Use (do not use) the hardware floating-point instructions and
18670     registers for floating-point operations.  When `-msoft-float' is
18671     specified, functions in `libgcc.a' are used to perform
18672     floating-point operations.  When `-mhard-float' is specified, the
18673     compiler generates IEEE floating-point instructions.  This is the
18674     default.
18675
18676`-mhard-dfp'
18677`-mno-hard-dfp'
18678     Use (do not use) the hardware decimal-floating-point instructions
18679     for decimal-floating-point operations.  When `-mno-hard-dfp' is
18680     specified, functions in `libgcc.a' are used to perform
18681     decimal-floating-point operations.  When `-mhard-dfp' is
18682     specified, the compiler generates decimal-floating-point hardware
18683     instructions.  This is the default for `-march=z9-ec' or higher.
18684
18685`-mlong-double-64'
18686`-mlong-double-128'
18687     These switches control the size of `long double' type. A size of
18688     64 bits makes the `long double' type equivalent to the `double'
18689     type. This is the default.
18690
18691`-mbackchain'
18692`-mno-backchain'
18693     Store (do not store) the address of the caller's frame as
18694     backchain pointer into the callee's stack frame.  A backchain may
18695     be needed to allow debugging using tools that do not understand
18696     DWARF 2 call frame information.  When `-mno-packed-stack' is in
18697     effect, the backchain pointer is stored at the bottom of the stack
18698     frame; when `-mpacked-stack' is in effect, the backchain is placed
18699     into the topmost word of the 96/160 byte register save area.
18700
18701     In general, code compiled with `-mbackchain' is call-compatible
18702     with code compiled with `-mmo-backchain'; however, use of the
18703     backchain for debugging purposes usually requires that the whole
18704     binary is built with `-mbackchain'.  Note that the combination of
18705     `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
18706     supported.  In order to build a linux kernel use `-msoft-float'.
18707
18708     The default is to not maintain the backchain.
18709
18710`-mpacked-stack'
18711`-mno-packed-stack'
18712     Use (do not use) the packed stack layout.  When
18713     `-mno-packed-stack' is specified, the compiler uses the all fields
18714     of the 96/160 byte register save area only for their default
18715     purpose; unused fields still take up stack space.  When
18716     `-mpacked-stack' is specified, register save slots are densely
18717     packed at the top of the register save area; unused space is
18718     reused for other purposes, allowing for more efficient use of the
18719     available stack space.  However, when `-mbackchain' is also in
18720     effect, the topmost word of the save area is always used to store
18721     the backchain, and the return address register is always saved two
18722     words below the backchain.
18723
18724     As long as the stack frame backchain is not used, code generated
18725     with `-mpacked-stack' is call-compatible with code generated with
18726     `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
18727     for S/390 or zSeries generated code that uses the stack frame
18728     backchain at run time, not just for debugging purposes.  Such code
18729     is not call-compatible with code compiled with `-mpacked-stack'.
18730     Also, note that the combination of `-mbackchain', `-mpacked-stack'
18731     and `-mhard-float' is not supported.  In order to build a linux
18732     kernel use `-msoft-float'.
18733
18734     The default is to not use the packed stack layout.
18735
18736`-msmall-exec'
18737`-mno-small-exec'
18738     Generate (or do not generate) code using the `bras' instruction to
18739     do subroutine calls.  This only works reliably if the total
18740     executable size does not exceed 64k.  The default is to use the
18741     `basr' instruction instead, which does not have this limitation.
18742
18743`-m64'
18744`-m31'
18745     When `-m31' is specified, generate code compliant to the GNU/Linux
18746     for S/390 ABI.  When `-m64' is specified, generate code compliant
18747     to the GNU/Linux for zSeries ABI.  This allows GCC in particular
18748     to generate 64-bit instructions.  For the `s390' targets, the
18749     default is `-m31', while the `s390x' targets default to `-m64'.
18750
18751`-mzarch'
18752`-mesa'
18753     When `-mzarch' is specified, generate code using the instructions
18754     available on z/Architecture.  When `-mesa' is specified, generate
18755     code using the instructions available on ESA/390.  Note that
18756     `-mesa' is not possible with `-m64'.  When generating code
18757     compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
18758     When generating code compliant to the GNU/Linux for zSeries ABI,
18759     the default is `-mzarch'.
18760
18761`-mmvcle'
18762`-mno-mvcle'
18763     Generate (or do not generate) code using the `mvcle' instruction
18764     to perform block moves.  When `-mno-mvcle' is specified, use a
18765     `mvc' loop instead.  This is the default unless optimizing for
18766     size.
18767
18768`-mdebug'
18769`-mno-debug'
18770     Print (or do not print) additional debug information when
18771     compiling.  The default is to not print debug information.
18772
18773`-march=CPU-TYPE'
18774     Generate code that runs on CPU-TYPE, which is the name of a system
18775     representing a certain processor type.  Possible values for
18776     CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec', `z10',
18777     `z196', `zEC12', and `z13'.  When generating code using the
18778     instructions available on z/Architecture, the default is
18779     `-march=z900'.  Otherwise, the default is `-march=g5'.
18780
18781`-mtune=CPU-TYPE'
18782     Tune to CPU-TYPE everything applicable about the generated code,
18783     except for the ABI and the set of available instructions.  The
18784     list of CPU-TYPE values is the same as for `-march'.  The default
18785     is the value used for `-march'.
18786
18787`-mtpf-trace'
18788`-mno-tpf-trace'
18789     Generate code that adds (does not add) in TPF OS specific branches
18790     to trace routines in the operating system.  This option is off by
18791     default, even when compiling for the TPF OS.
18792
18793`-mfused-madd'
18794`-mno-fused-madd'
18795     Generate code that uses (does not use) the floating-point multiply
18796     and accumulate instructions.  These instructions are generated by
18797     default if hardware floating point is used.
18798
18799`-mwarn-framesize=FRAMESIZE'
18800     Emit a warning if the current function exceeds the given frame
18801     size.  Because this is a compile-time check it doesn't need to be
18802     a real problem when the program runs.  It is intended to identify
18803     functions that most probably cause a stack overflow.  It is useful
18804     to be used in an environment with limited stack size e.g. the
18805     linux kernel.
18806
18807`-mwarn-dynamicstack'
18808     Emit a warning if the function calls `alloca' or uses
18809     dynamically-sized arrays.  This is generally a bad idea with a
18810     limited stack size.
18811
18812`-mstack-guard=STACK-GUARD'
18813`-mstack-size=STACK-SIZE'
18814     If these options are provided the S/390 back end emits additional
18815     instructions in the function prologue that trigger a trap if the
18816     stack size is STACK-GUARD bytes above the STACK-SIZE (remember
18817     that the stack on S/390 grows downward).  If the STACK-GUARD
18818     option is omitted the smallest power of 2 larger than the frame
18819     size of the compiled function is chosen.  These options are
18820     intended to be used to help debugging stack overflow problems.
18821     The additionally emitted code causes only little overhead and
18822     hence can also be used in production-like systems without greater
18823     performance degradation.  The given values have to be exact powers
18824     of 2 and STACK-SIZE has to be greater than STACK-GUARD without
18825     exceeding 64k.  In order to be efficient the extra code makes the
18826     assumption that the stack starts at an address aligned to the
18827     value given by STACK-SIZE.  The STACK-GUARD option can only be
18828     used in conjunction with STACK-SIZE.
18829
18830`-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS'
18831     If the hotpatch option is enabled, a "hot-patching" function
18832     prologue is generated for all functions in the compilation unit.
18833     The funtion label is prepended with the given number of two-byte
18834     NOP instructions (PRE-HALFWORDS, maximum 1000000).  After the
18835     label, 2 * POST-HALFWORDS bytes are appended, using the largest
18836     NOP like instructions the architecture allows (maximum 1000000).
18837
18838     If both arguments are zero, hotpatching is disabled.
18839
18840     This option can be overridden for individual functions with the
18841     `hotpatch' attribute.
18842
18843
18844File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
18845
188463.17.40 Score Options
18847---------------------
18848
18849These options are defined for Score implementations:
18850
18851`-meb'
18852     Compile code for big-endian mode.  This is the default.
18853
18854`-mel'
18855     Compile code for little-endian mode.
18856
18857`-mnhwloop'
18858     Disable generation of `bcnz' instructions.
18859
18860`-muls'
18861     Enable generation of unaligned load and store instructions.
18862
18863`-mmac'
18864     Enable the use of multiply-accumulate instructions. Disabled by
18865     default.
18866
18867`-mscore5'
18868     Specify the SCORE5 as the target architecture.
18869
18870`-mscore5u'
18871     Specify the SCORE5U of the target architecture.
18872
18873`-mscore7'
18874     Specify the SCORE7 as the target architecture. This is the default.
18875
18876`-mscore7d'
18877     Specify the SCORE7D as the target architecture.
18878
18879
18880File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options
18881
188823.17.41 SH Options
18883------------------
18884
18885These `-m' options are defined for the SH implementations:
18886
18887`-m1'
18888     Generate code for the SH1.
18889
18890`-m2'
18891     Generate code for the SH2.
18892
18893`-m2e'
18894     Generate code for the SH2e.
18895
18896`-m2a-nofpu'
18897     Generate code for the SH2a without FPU, or for a SH2a-FPU in such
18898     a way that the floating-point unit is not used.
18899
18900`-m2a-single-only'
18901     Generate code for the SH2a-FPU, in such a way that no
18902     double-precision floating-point operations are used.
18903
18904`-m2a-single'
18905     Generate code for the SH2a-FPU assuming the floating-point unit is
18906     in single-precision mode by default.
18907
18908`-m2a'
18909     Generate code for the SH2a-FPU assuming the floating-point unit is
18910     in double-precision mode by default.
18911
18912`-m3'
18913     Generate code for the SH3.
18914
18915`-m3e'
18916     Generate code for the SH3e.
18917
18918`-m4-nofpu'
18919     Generate code for the SH4 without a floating-point unit.
18920
18921`-m4-single-only'
18922     Generate code for the SH4 with a floating-point unit that only
18923     supports single-precision arithmetic.
18924
18925`-m4-single'
18926     Generate code for the SH4 assuming the floating-point unit is in
18927     single-precision mode by default.
18928
18929`-m4'
18930     Generate code for the SH4.
18931
18932`-m4-100'
18933     Generate code for SH4-100.
18934
18935`-m4-100-nofpu'
18936     Generate code for SH4-100 in such a way that the floating-point
18937     unit is not used.
18938
18939`-m4-100-single'
18940     Generate code for SH4-100 assuming the floating-point unit is in
18941     single-precision mode by default.
18942
18943`-m4-100-single-only'
18944     Generate code for SH4-100 in such a way that no double-precision
18945     floating-point operations are used.
18946
18947`-m4-200'
18948     Generate code for SH4-200.
18949
18950`-m4-200-nofpu'
18951     Generate code for SH4-200 without in such a way that the
18952     floating-point unit is not used.
18953
18954`-m4-200-single'
18955     Generate code for SH4-200 assuming the floating-point unit is in
18956     single-precision mode by default.
18957
18958`-m4-200-single-only'
18959     Generate code for SH4-200 in such a way that no double-precision
18960     floating-point operations are used.
18961
18962`-m4-300'
18963     Generate code for SH4-300.
18964
18965`-m4-300-nofpu'
18966     Generate code for SH4-300 without in such a way that the
18967     floating-point unit is not used.
18968
18969`-m4-300-single'
18970     Generate code for SH4-300 in such a way that no double-precision
18971     floating-point operations are used.
18972
18973`-m4-300-single-only'
18974     Generate code for SH4-300 in such a way that no double-precision
18975     floating-point operations are used.
18976
18977`-m4-340'
18978     Generate code for SH4-340 (no MMU, no FPU).
18979
18980`-m4-500'
18981     Generate code for SH4-500 (no FPU).  Passes `-isa=sh4-nofpu' to the
18982     assembler.
18983
18984`-m4a-nofpu'
18985     Generate code for the SH4al-dsp, or for a SH4a in such a way that
18986     the floating-point unit is not used.
18987
18988`-m4a-single-only'
18989     Generate code for the SH4a, in such a way that no double-precision
18990     floating-point operations are used.
18991
18992`-m4a-single'
18993     Generate code for the SH4a assuming the floating-point unit is in
18994     single-precision mode by default.
18995
18996`-m4a'
18997     Generate code for the SH4a.
18998
18999`-m4al'
19000     Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
19001     the assembler.  GCC doesn't generate any DSP instructions at the
19002     moment.
19003
19004`-m5-32media'
19005     Generate 32-bit code for SHmedia.
19006
19007`-m5-32media-nofpu'
19008     Generate 32-bit code for SHmedia in such a way that the
19009     floating-point unit is not used.
19010
19011`-m5-64media'
19012     Generate 64-bit code for SHmedia.
19013
19014`-m5-64media-nofpu'
19015     Generate 64-bit code for SHmedia in such a way that the
19016     floating-point unit is not used.
19017
19018`-m5-compact'
19019     Generate code for SHcompact.
19020
19021`-m5-compact-nofpu'
19022     Generate code for SHcompact in such a way that the floating-point
19023     unit is not used.
19024
19025`-mb'
19026     Compile code for the processor in big-endian mode.
19027
19028`-ml'
19029     Compile code for the processor in little-endian mode.
19030
19031`-mdalign'
19032     Align doubles at 64-bit boundaries.  Note that this changes the
19033     calling conventions, and thus some functions from the standard C
19034     library do not work unless you recompile it first with `-mdalign'.
19035
19036`-mrelax'
19037     Shorten some address references at link time, when possible; uses
19038     the linker option `-relax'.
19039
19040`-mbigtable'
19041     Use 32-bit offsets in `switch' tables.  The default is to use
19042     16-bit offsets.
19043
19044`-mbitops'
19045     Enable the use of bit manipulation instructions on SH2A.
19046
19047`-mfmovd'
19048     Enable the use of the instruction `fmovd'.  Check `-mdalign' for
19049     alignment constraints.
19050
19051`-mrenesas'
19052     Comply with the calling conventions defined by Renesas.
19053
19054`-mno-renesas'
19055     Comply with the calling conventions defined for GCC before the
19056     Renesas conventions were available.  This option is the default
19057     for all targets of the SH toolchain.
19058
19059`-mnomacsave'
19060     Mark the `MAC' register as call-clobbered, even if `-mrenesas' is
19061     given.
19062
19063`-mieee'
19064`-mno-ieee'
19065     Control the IEEE compliance of floating-point comparisons, which
19066     affects the handling of cases where the result of a comparison is
19067     unordered.  By default `-mieee' is implicitly enabled.  If
19068     `-ffinite-math-only' is enabled `-mno-ieee' is implicitly set,
19069     which results in faster floating-point greater-equal and
19070     less-equal comparisons.  The implcit settings can be overridden by
19071     specifying either `-mieee' or `-mno-ieee'.
19072
19073`-minline-ic_invalidate'
19074     Inline code to invalidate instruction cache entries after setting
19075     up nested function trampolines.  This option has no effect if
19076     `-musermode' is in effect and the selected code generation option
19077     (e.g. `-m4') does not allow the use of the `icbi' instruction.  If
19078     the selected code generation option does not allow the use of the
19079     `icbi' instruction, and `-musermode' is not in effect, the inlined
19080     code manipulates the instruction cache address array directly with
19081     an associative write.  This not only requires privileged mode at
19082     run time, but it also fails if the cache line had been mapped via
19083     the TLB and has become unmapped.
19084
19085`-misize'
19086     Dump instruction size and location in the assembly code.
19087
19088`-mpadstruct'
19089     This option is deprecated.  It pads structures to multiple of 4
19090     bytes, which is incompatible with the SH ABI.
19091
19092`-matomic-model=MODEL'
19093     Sets the model of atomic operations and additional parameters as a
19094     comma separated list.  For details on the atomic built-in
19095     functions see *Note __atomic Builtins::.  The following models and
19096     parameters are supported:
19097
19098    `none'
19099          Disable compiler generated atomic sequences and emit library
19100          calls for atomic operations.  This is the default if the
19101          target is not `sh*-*-linux*'.
19102
19103    `soft-gusa'
19104          Generate GNU/Linux compatible gUSA software atomic sequences
19105          for the atomic built-in functions.  The generated atomic
19106          sequences require additional support from the
19107          interrupt/exception handling code of the system and are only
19108          suitable for SH3* and SH4* single-core systems.  This option
19109          is enabled by default when the target is `sh*-*-linux*' and
19110          SH3* or SH4*.  When the target is SH4A, this option also
19111          partially utilizes the hardware atomic instructions `movli.l'
19112          and `movco.l' to create more efficient code, unless `strict'
19113          is specified.
19114
19115    `soft-tcb'
19116          Generate software atomic sequences that use a variable in the
19117          thread control block.  This is a variation of the gUSA
19118          sequences which can also be used on SH1* and SH2* targets.
19119          The generated atomic sequences require additional support
19120          from the interrupt/exception handling code of the system and
19121          are only suitable for single-core systems.  When using this
19122          model, the `gbr-offset=' parameter has to be specified as
19123          well.
19124
19125    `soft-imask'
19126          Generate software atomic sequences that temporarily disable
19127          interrupts by setting `SR.IMASK = 1111'.  This model works
19128          only when the program runs in privileged mode and is only
19129          suitable for single-core systems.  Additional support from
19130          the interrupt/exception handling code of the system is not
19131          required.  This model is enabled by default when the target is
19132          `sh*-*-linux*' and SH1* or SH2*.
19133
19134    `hard-llcs'
19135          Generate hardware atomic sequences using the `movli.l' and
19136          `movco.l' instructions only.  This is only available on SH4A
19137          and is suitable for multi-core systems.  Since the hardware
19138          instructions support only 32 bit atomic variables access to 8
19139          or 16 bit variables is emulated with 32 bit accesses.  Code
19140          compiled with this option is also compatible with other
19141          software atomic model interrupt/exception handling systems if
19142          executed on an SH4A system.  Additional support from the
19143          interrupt/exception handling code of the system is not
19144          required for this model.
19145
19146    `gbr-offset='
19147          This parameter specifies the offset in bytes of the variable
19148          in the thread control block structure that should be used by
19149          the generated atomic sequences when the `soft-tcb' model has
19150          been selected.  For other models this parameter is ignored.
19151          The specified value must be an integer multiple of four and
19152          in the range 0-1020.
19153
19154    `strict'
19155          This parameter prevents mixed usage of multiple atomic
19156          models, even if they are compatible, and makes the compiler
19157          generate atomic sequences of the specified model only.
19158
19159
19160`-mtas'
19161     Generate the `tas.b' opcode for `__atomic_test_and_set'.  Notice
19162     that depending on the particular hardware and software
19163     configuration this can degrade overall performance due to the
19164     operand cache line flushes that are implied by the `tas.b'
19165     instruction.  On multi-core SH4A processors the `tas.b'
19166     instruction must be used with caution since it can result in data
19167     corruption for certain cache configurations.
19168
19169`-mprefergot'
19170     When generating position-independent code, emit function calls
19171     using the Global Offset Table instead of the Procedure Linkage
19172     Table.
19173
19174`-musermode'
19175`-mno-usermode'
19176     Don't allow (allow) the compiler generating privileged mode code.
19177     Specifying `-musermode' also implies `-mno-inline-ic_invalidate'
19178     if the inlined code would not work in user mode.  `-musermode' is
19179     the default when the target is `sh*-*-linux*'.  If the target is
19180     SH1* or SH2* `-musermode' has no effect, since there is no user
19181     mode.
19182
19183`-multcost=NUMBER'
19184     Set the cost to assume for a multiply insn.
19185
19186`-mdiv=STRATEGY'
19187     Set the division strategy to be used for integer division
19188     operations.  For SHmedia STRATEGY can be one of:
19189
19190    `fp'
19191          Performs the operation in floating point.  This has a very
19192          high latency, but needs only a few instructions, so it might
19193          be a good choice if your code has enough easily-exploitable
19194          ILP to allow the compiler to schedule the floating-point
19195          instructions together with other instructions.  Division by
19196          zero causes a floating-point exception.
19197
19198    `inv'
19199          Uses integer operations to calculate the inverse of the
19200          divisor, and then multiplies the dividend with the inverse.
19201          This strategy allows CSE and hoisting of the inverse
19202          calculation.  Division by zero calculates an unspecified
19203          result, but does not trap.
19204
19205    `inv:minlat'
19206          A variant of `inv' where, if no CSE or hoisting opportunities
19207          have been found, or if the entire operation has been hoisted
19208          to the same place, the last stages of the inverse calculation
19209          are intertwined with the final multiply to reduce the overall
19210          latency, at the expense of using a few more instructions, and
19211          thus offering fewer scheduling opportunities with other code.
19212
19213    `call'
19214          Calls a library function that usually implements the
19215          `inv:minlat' strategy.  This gives high code density for
19216          `m5-*media-nofpu' compilations.
19217
19218    `call2'
19219          Uses a different entry point of the same library function,
19220          where it assumes that a pointer to a lookup table has already
19221          been set up, which exposes the pointer load to CSE and code
19222          hoisting optimizations.
19223
19224    `inv:call'
19225    `inv:call2'
19226    `inv:fp'
19227          Use the `inv' algorithm for initial code generation, but if
19228          the code stays unoptimized, revert to the `call', `call2', or
19229          `fp' strategies, respectively.  Note that the
19230          potentially-trapping side effect of division by zero is
19231          carried by a separate instruction, so it is possible that all
19232          the integer instructions are hoisted out, but the marker for
19233          the side effect stays where it is.  A recombination to
19234          floating-point operations or a call is not possible in that
19235          case.
19236
19237    `inv20u'
19238    `inv20l'
19239          Variants of the `inv:minlat' strategy.  In the case that the
19240          inverse calculation is not separated from the multiply, they
19241          speed up division where the dividend fits into 20 bits (plus
19242          sign where applicable) by inserting a test to skip a number
19243          of operations in this case; this test slows down the case of
19244          larger dividends.  `inv20u' assumes the case of a such a
19245          small dividend to be unlikely, and `inv20l' assumes it to be
19246          likely.
19247
19248
19249     For targets other than SHmedia STRATEGY can be one of:
19250
19251    `call-div1'
19252          Calls a library function that uses the single-step division
19253          instruction `div1' to perform the operation.  Division by
19254          zero calculates an unspecified result and does not trap.
19255          This is the default except for SH4, SH2A and SHcompact.
19256
19257    `call-fp'
19258          Calls a library function that performs the operation in
19259          double precision floating point.  Division by zero causes a
19260          floating-point exception.  This is the default for SHcompact
19261          with FPU.  Specifying this for targets that do not have a
19262          double precision FPU defaults to `call-div1'.
19263
19264    `call-table'
19265          Calls a library function that uses a lookup table for small
19266          divisors and the `div1' instruction with case distinction for
19267          larger divisors.  Division by zero calculates an unspecified
19268          result and does not trap.  This is the default for SH4.
19269          Specifying this for targets that do not have dynamic shift
19270          instructions defaults to `call-div1'.
19271
19272
19273     When a division strategy has not been specified the default
19274     strategy is selected based on the current target.  For SH2A the
19275     default strategy is to use the `divs' and `divu' instructions
19276     instead of library function calls.
19277
19278`-maccumulate-outgoing-args'
19279     Reserve space once for outgoing arguments in the function prologue
19280     rather than around each call.  Generally beneficial for
19281     performance and size.  Also needed for unwinding to avoid changing
19282     the stack frame around conditional code.
19283
19284`-mdivsi3_libfunc=NAME'
19285     Set the name of the library function used for 32-bit signed
19286     division to NAME.  This only affects the name used in the `call'
19287     and `inv:call' division strategies, and the compiler still expects
19288     the same sets of input/output/clobbered registers as if this
19289     option were not present.
19290
19291`-mfixed-range=REGISTER-RANGE'
19292     Generate code treating the given register range as fixed registers.
19293     A fixed register is one that the register allocator can not use.
19294     This is useful when compiling kernel code.  A register range is
19295     specified as two registers separated by a dash.  Multiple register
19296     ranges can be specified separated by a comma.
19297
19298`-mindexed-addressing'
19299     Enable the use of the indexed addressing mode for
19300     SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
19301     implement 32-bit wrap-around semantics for the indexed addressing
19302     mode.  The architecture allows the implementation of processors
19303     with 64-bit MMU, which the OS could use to get 32-bit addressing,
19304     but since no current hardware implementation supports this or any
19305     other way to make the indexed addressing mode safe to use in the
19306     32-bit ABI, the default is `-mno-indexed-addressing'.
19307
19308`-mgettrcost=NUMBER'
19309     Set the cost assumed for the `gettr' instruction to NUMBER.  The
19310     default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
19311
19312`-mpt-fixed'
19313     Assume `pt*' instructions won't trap.  This generally generates
19314     better-scheduled code, but is unsafe on current hardware.  The
19315     current architecture definition says that `ptabs' and `ptrel' trap
19316     when the target anded with 3 is 3.  This has the unintentional
19317     effect of making it unsafe to schedule these instructions before a
19318     branch, or hoist them out of a loop.  For example,
19319     `__do_global_ctors', a part of `libgcc' that runs constructors at
19320     program startup, calls functions in a list which is delimited by
19321     -1.  With the `-mpt-fixed' option, the `ptabs' is done before
19322     testing against -1.  That means that all the constructors run a
19323     bit more quickly, but when the loop comes to the end of the list,
19324     the program crashes because `ptabs' loads -1 into a target
19325     register.
19326
19327     Since this option is unsafe for any hardware implementing the
19328     current architecture specification, the default is
19329     `-mno-pt-fixed'.  Unless specified explicitly with `-mgettrcost',
19330     `-mno-pt-fixed' also implies `-mgettrcost=100'; this deters
19331     register allocation from using target registers for storing
19332     ordinary integers.
19333
19334`-minvalid-symbols'
19335     Assume symbols might be invalid.  Ordinary function symbols
19336     generated by the compiler are always valid to load with
19337     `movi'/`shori'/`ptabs' or `movi'/`shori'/`ptrel', but with
19338     assembler and/or linker tricks it is possible to generate symbols
19339     that cause `ptabs' or `ptrel' to trap.  This option is only
19340     meaningful when `-mno-pt-fixed' is in effect.  It prevents
19341     cross-basic-block CSE, hoisting and most scheduling of symbol
19342     loads.  The default is `-mno-invalid-symbols'.
19343
19344`-mbranch-cost=NUM'
19345     Assume NUM to be the cost for a branch instruction.  Higher numbers
19346     make the compiler try to generate more branch-free code if
19347     possible.  If not specified the value is selected depending on the
19348     processor type that is being compiled for.
19349
19350`-mzdcbranch'
19351`-mno-zdcbranch'
19352     Assume (do not assume) that zero displacement conditional branch
19353     instructions `bt' and `bf' are fast.  If `-mzdcbranch' is
19354     specified, the compiler prefers zero displacement branch code
19355     sequences.  This is enabled by default when generating code for
19356     SH4 and SH4A.  It can be explicitly disabled by specifying
19357     `-mno-zdcbranch'.
19358
19359`-mcbranch-force-delay-slot'
19360     Force the usage of delay slots for conditional branches, which
19361     stuffs the delay slot with a `nop' if a suitable instruction can't
19362     be found.  By default this option is disabled.  It can be enabled
19363     to work around hardware bugs as found in the original SH7055.
19364
19365`-mfused-madd'
19366`-mno-fused-madd'
19367     Generate code that uses (does not use) the floating-point multiply
19368     and accumulate instructions.  These instructions are generated by
19369     default if hardware floating point is used.  The machine-dependent
19370     `-mfused-madd' option is now mapped to the machine-independent
19371     `-ffp-contract=fast' option, and `-mno-fused-madd' is mapped to
19372     `-ffp-contract=off'.
19373
19374`-mfsca'
19375`-mno-fsca'
19376     Allow or disallow the compiler to emit the `fsca' instruction for
19377     sine and cosine approximations.  The option `-mfsca' must be used
19378     in combination with `-funsafe-math-optimizations'.  It is enabled
19379     by default when generating code for SH4A.  Using `-mno-fsca'
19380     disables sine and cosine approximations even if
19381     `-funsafe-math-optimizations' is in effect.
19382
19383`-mfsrra'
19384`-mno-fsrra'
19385     Allow or disallow the compiler to emit the `fsrra' instruction for
19386     reciprocal square root approximations.  The option `-mfsrra' must
19387     be used in combination with `-funsafe-math-optimizations' and
19388     `-ffinite-math-only'.  It is enabled by default when generating
19389     code for SH4A.  Using `-mno-fsrra' disables reciprocal square root
19390     approximations even if `-funsafe-math-optimizations' and
19391     `-ffinite-math-only' are in effect.
19392
19393`-mpretend-cmove'
19394     Prefer zero-displacement conditional branches for conditional move
19395     instruction patterns.  This can result in faster code on the SH4
19396     processor.
19397
19398
19399
19400File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options
19401
194023.17.42 Solaris 2 Options
19403-------------------------
19404
19405These `-m' options are supported on Solaris 2:
19406
19407`-mclear-hwcap'
19408     `-mclear-hwcap' tells the compiler to remove the hardware
19409     capabilities generated by the Solaris assembler.  This is only
19410     necessary when object files use ISA extensions not supported by
19411     the current machine, but check at runtime whether or not to use
19412     them.
19413
19414`-mimpure-text'
19415     `-mimpure-text', used in addition to `-shared', tells the compiler
19416     to not pass `-z text' to the linker when linking a shared object.
19417     Using this option, you can link position-dependent code into a
19418     shared object.
19419
19420     `-mimpure-text' suppresses the "relocations remain against
19421     allocatable but non-writable sections" linker error message.
19422     However, the necessary relocations trigger copy-on-write, and the
19423     shared object is not actually shared across processes.  Instead of
19424     using `-mimpure-text', you should compile all source code with
19425     `-fpic' or `-fPIC'.
19426
19427
19428 These switches are supported in addition to the above on Solaris 2:
19429
19430`-pthreads'
19431     Add support for multithreading using the POSIX threads library.
19432     This option sets flags for both the preprocessor and linker.  This
19433     option does not affect the thread safety of object code produced
19434     by the compiler or that of libraries supplied with it.
19435
19436`-pthread'
19437     This is a synonym for `-pthreads'.
19438
19439
19440File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options
19441
194423.17.43 SPARC Options
19443---------------------
19444
19445These `-m' options are supported on the SPARC:
19446
19447`-mno-app-regs'
19448`-mapp-regs'
19449     Specify `-mapp-regs' to generate output using the global registers
19450     2 through 4, which the SPARC SVR4 ABI reserves for applications.
19451     Like the global register 1, each global register 2 through 4 is
19452     then treated as an allocable register that is clobbered by
19453     function calls.  This is the default.
19454
19455     To be fully SVR4 ABI-compliant at the cost of some performance
19456     loss, specify `-mno-app-regs'.  You should compile libraries and
19457     system software with this option.
19458
19459`-mflat'
19460`-mno-flat'
19461     With `-mflat', the compiler does not generate save/restore
19462     instructions and uses a "flat" or single register window model.
19463     This model is compatible with the regular register window model.
19464     The local registers and the input registers (0-5) are still
19465     treated as "call-saved" registers and are saved on the stack as
19466     needed.
19467
19468     With `-mno-flat' (the default), the compiler generates save/restore
19469     instructions (except for leaf functions).  This is the normal
19470     operating mode.
19471
19472`-mfpu'
19473`-mhard-float'
19474     Generate output containing floating-point instructions.  This is
19475     the default.
19476
19477`-mno-fpu'
19478`-msoft-float'
19479     Generate output containing library calls for floating point.
19480     *Warning:* the requisite libraries are not available for all SPARC
19481     targets.  Normally the facilities of the machine's usual C
19482     compiler are used, but this cannot be done directly in
19483     cross-compilation.  You must make your own arrangements to provide
19484     suitable library functions for cross-compilation.  The embedded
19485     targets `sparc-*-aout' and `sparclite-*-*' do provide software
19486     floating-point support.
19487
19488     `-msoft-float' changes the calling convention in the output file;
19489     therefore, it is only useful if you compile _all_ of a program with
19490     this option.  In particular, you need to compile `libgcc.a', the
19491     library that comes with GCC, with `-msoft-float' in order for this
19492     to work.
19493
19494`-mhard-quad-float'
19495     Generate output containing quad-word (long double) floating-point
19496     instructions.
19497
19498`-msoft-quad-float'
19499     Generate output containing library calls for quad-word (long
19500     double) floating-point instructions.  The functions called are
19501     those specified in the SPARC ABI.  This is the default.
19502
19503     As of this writing, there are no SPARC implementations that have
19504     hardware support for the quad-word floating-point instructions.
19505     They all invoke a trap handler for one of these instructions, and
19506     then the trap handler emulates the effect of the instruction.
19507     Because of the trap handler overhead, this is much slower than
19508     calling the ABI library routines.  Thus the `-msoft-quad-float'
19509     option is the default.
19510
19511`-mno-unaligned-doubles'
19512`-munaligned-doubles'
19513     Assume that doubles have 8-byte alignment.  This is the default.
19514
19515     With `-munaligned-doubles', GCC assumes that doubles have 8-byte
19516     alignment only if they are contained in another type, or if they
19517     have an absolute address.  Otherwise, it assumes they have 4-byte
19518     alignment.  Specifying this option avoids some rare compatibility
19519     problems with code generated by other compilers.  It is not the
19520     default because it results in a performance loss, especially for
19521     floating-point code.
19522
19523`-muser-mode'
19524`-mno-user-mode'
19525     Do not generate code that can only run in supervisor mode.  This
19526     is relevant only for the `casa' instruction emitted for the LEON3
19527     processor.  This is the default.
19528
19529`-mno-faster-structs'
19530`-mfaster-structs'
19531     With `-mfaster-structs', the compiler assumes that structures
19532     should have 8-byte alignment.  This enables the use of pairs of
19533     `ldd' and `std' instructions for copies in structure assignment,
19534     in place of twice as many `ld' and `st' pairs.  However, the use
19535     of this changed alignment directly violates the SPARC ABI.  Thus,
19536     it's intended only for use on targets where the developer
19537     acknowledges that their resulting code is not directly in line with
19538     the rules of the ABI.
19539
19540`-mcpu=CPU_TYPE'
19541     Set the instruction set, register set, and instruction scheduling
19542     parameters for machine type CPU_TYPE.  Supported values for
19543     CPU_TYPE are `v7', `cypress', `v8', `supersparc', `hypersparc',
19544     `leon', `leon3', `leon3v7', `sparclite', `f930', `f934',
19545     `sparclite86x', `sparclet', `tsc701', `v9', `ultrasparc',
19546     `ultrasparc3', `niagara', `niagara2', `niagara3' and `niagara4'.
19547
19548     Native Solaris and GNU/Linux toolchains also support the value
19549     `native', which selects the best architecture option for the host
19550     processor.  `-mcpu=native' has no effect if GCC does not recognize
19551     the processor.
19552
19553     Default instruction scheduling parameters are used for values that
19554     select an architecture and not an implementation.  These are `v7',
19555     `v8', `sparclite', `sparclet', `v9'.
19556
19557     Here is a list of each supported architecture and their supported
19558     implementations.
19559
19560    v7
19561          cypress, leon3v7
19562
19563    v8
19564          supersparc, hypersparc, leon, leon3
19565
19566    sparclite
19567          f930, f934, sparclite86x
19568
19569    sparclet
19570          tsc701
19571
19572    v9
19573          ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
19574
19575     By default (unless configured otherwise), GCC generates code for
19576     the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
19577     the compiler additionally optimizes it for the Cypress CY7C602
19578     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
19579     also appropriate for the older SPARCStation 1, 2, IPX etc.
19580
19581     With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
19582     architecture.  The only difference from V7 code is that the
19583     compiler emits the integer multiply and integer divide
19584     instructions which exist in SPARC-V8 but not in SPARC-V7.  With
19585     `-mcpu=supersparc', the compiler additionally optimizes it for the
19586     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
19587     series.
19588
19589     With `-mcpu=sparclite', GCC generates code for the SPARClite
19590     variant of the SPARC architecture.  This adds the integer
19591     multiply, integer divide step and scan (`ffs') instructions which
19592     exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
19593     compiler additionally optimizes it for the Fujitsu MB86930 chip,
19594     which is the original SPARClite, with no FPU.  With `-mcpu=f934',
19595     the compiler additionally optimizes it for the Fujitsu MB86934
19596     chip, which is the more recent SPARClite with FPU.
19597
19598     With `-mcpu=sparclet', GCC generates code for the SPARClet variant
19599     of the SPARC architecture.  This adds the integer multiply,
19600     multiply/accumulate, integer divide step and scan (`ffs')
19601     instructions which exist in SPARClet but not in SPARC-V7.  With
19602     `-mcpu=tsc701', the compiler additionally optimizes it for the
19603     TEMIC SPARClet chip.
19604
19605     With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
19606     architecture.  This adds 64-bit integer and floating-point move
19607     instructions, 3 additional floating-point condition code registers
19608     and conditional move instructions.  With `-mcpu=ultrasparc', the
19609     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
19610     chips.  With `-mcpu=ultrasparc3', the compiler additionally
19611     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
19612     chips.  With `-mcpu=niagara', the compiler additionally optimizes
19613     it for Sun UltraSPARC T1 chips.  With `-mcpu=niagara2', the
19614     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
19615     With `-mcpu=niagara3', the compiler additionally optimizes it for
19616     Sun UltraSPARC T3 chips.  With `-mcpu=niagara4', the compiler
19617     additionally optimizes it for Sun UltraSPARC T4 chips.
19618
19619`-mtune=CPU_TYPE'
19620     Set the instruction scheduling parameters for machine type
19621     CPU_TYPE, but do not set the instruction set or register set that
19622     the option `-mcpu=CPU_TYPE' does.
19623
19624     The same values for `-mcpu=CPU_TYPE' can be used for
19625     `-mtune=CPU_TYPE', but the only useful values are those that
19626     select a particular CPU implementation.  Those are `cypress',
19627     `supersparc', `hypersparc', `leon', `leon3', `leon3v7', `f930',
19628     `f934', `sparclite86x', `tsc701', `ultrasparc', `ultrasparc3',
19629     `niagara', `niagara2', `niagara3' and `niagara4'.  With native
19630     Solaris and GNU/Linux toolchains, `native' can also be used.
19631
19632`-mv8plus'
19633`-mno-v8plus'
19634     With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
19635     difference from the V8 ABI is that the global and out registers are
19636     considered 64 bits wide.  This is enabled by default on Solaris in
19637     32-bit mode for all SPARC-V9 processors.
19638
19639`-mvis'
19640`-mno-vis'
19641     With `-mvis', GCC generates code that takes advantage of the
19642     UltraSPARC Visual Instruction Set extensions.  The default is
19643     `-mno-vis'.
19644
19645`-mvis2'
19646`-mno-vis2'
19647     With `-mvis2', GCC generates code that takes advantage of version
19648     2.0 of the UltraSPARC Visual Instruction Set extensions.  The
19649     default is `-mvis2' when targeting a cpu that supports such
19650     instructions, such as UltraSPARC-III and later.  Setting `-mvis2'
19651     also sets `-mvis'.
19652
19653`-mvis3'
19654`-mno-vis3'
19655     With `-mvis3', GCC generates code that takes advantage of version
19656     3.0 of the UltraSPARC Visual Instruction Set extensions.  The
19657     default is `-mvis3' when targeting a cpu that supports such
19658     instructions, such as niagara-3 and later.  Setting `-mvis3' also
19659     sets `-mvis2' and `-mvis'.
19660
19661`-mcbcond'
19662`-mno-cbcond'
19663     With `-mcbcond', GCC generates code that takes advantage of
19664     compare-and-branch instructions, as defined in the Sparc
19665     Architecture 2011.  The default is `-mcbcond' when targeting a cpu
19666     that supports such instructions, such as niagara-4 and later.
19667
19668`-mpopc'
19669`-mno-popc'
19670     With `-mpopc', GCC generates code that takes advantage of the
19671     UltraSPARC population count instruction.  The default is `-mpopc'
19672     when targeting a cpu that supports such instructions, such as
19673     Niagara-2 and later.
19674
19675`-mfmaf'
19676`-mno-fmaf'
19677     With `-mfmaf', GCC generates code that takes advantage of the
19678     UltraSPARC Fused Multiply-Add Floating-point extensions.  The
19679     default is `-mfmaf' when targeting a cpu that supports such
19680     instructions, such as Niagara-3 and later.
19681
19682`-mfix-at697f'
19683     Enable the documented workaround for the single erratum of the
19684     Atmel AT697F processor (which corresponds to erratum #13 of the
19685     AT697E processor).
19686
19687`-mfix-ut699'
19688     Enable the documented workarounds for the floating-point errata
19689     and the data cache nullify errata of the UT699 processor.
19690
19691 These `-m' options are supported in addition to the above on SPARC-V9
19692processors in 64-bit environments:
19693
19694`-m32'
19695`-m64'
19696     Generate code for a 32-bit or 64-bit environment.  The 32-bit
19697     environment sets int, long and pointer to 32 bits.  The 64-bit
19698     environment sets int to 32 bits and long and pointer to 64 bits.
19699
19700`-mcmodel=WHICH'
19701     Set the code model to one of
19702
19703    `medlow'
19704          The Medium/Low code model: 64-bit addresses, programs must be
19705          linked in the low 32 bits of memory.  Programs can be
19706          statically or dynamically linked.
19707
19708    `medmid'
19709          The Medium/Middle code model: 64-bit addresses, programs must
19710          be linked in the low 44 bits of memory, the text and data
19711          segments must be less than 2GB in size and the data segment
19712          must be located within 2GB of the text segment.
19713
19714    `medany'
19715          The Medium/Anywhere code model: 64-bit addresses, programs
19716          may be linked anywhere in memory, the text and data segments
19717          must be less than 2GB in size and the data segment must be
19718          located within 2GB of the text segment.
19719
19720    `embmedany'
19721          The Medium/Anywhere code model for embedded systems: 64-bit
19722          addresses, the text and data segments must be less than 2GB in
19723          size, both starting anywhere in memory (determined at link
19724          time).  The global register %g4 points to the base of the
19725          data segment.  Programs are statically linked and PIC is not
19726          supported.
19727
19728`-mmemory-model=MEM-MODEL'
19729     Set the memory model in force on the processor to one of
19730
19731    `default'
19732          The default memory model for the processor and operating
19733          system.
19734
19735    `rmo'
19736          Relaxed Memory Order
19737
19738    `pso'
19739          Partial Store Order
19740
19741    `tso'
19742          Total Store Order
19743
19744    `sc'
19745          Sequential Consistency
19746
19747     These memory models are formally defined in Appendix D of the
19748     Sparc V9 architecture manual, as set in the processor's
19749     `PSTATE.MM' field.
19750
19751`-mstack-bias'
19752`-mno-stack-bias'
19753     With `-mstack-bias', GCC assumes that the stack pointer, and frame
19754     pointer if present, are offset by -2047 which must be added back
19755     when making stack frame references.  This is the default in 64-bit
19756     mode.  Otherwise, assume no such offset is present.
19757
19758
19759File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options
19760
197613.17.44 SPU Options
19762-------------------
19763
19764These `-m' options are supported on the SPU:
19765
19766`-mwarn-reloc'
19767`-merror-reloc'
19768     The loader for SPU does not handle dynamic relocations.  By
19769     default, GCC gives an error when it generates code that requires a
19770     dynamic relocation.  `-mno-error-reloc' disables the error,
19771     `-mwarn-reloc' generates a warning instead.
19772
19773`-msafe-dma'
19774`-munsafe-dma'
19775     Instructions that initiate or test completion of DMA must not be
19776     reordered with respect to loads and stores of the memory that is
19777     being accessed.  With `-munsafe-dma' you must use the `volatile'
19778     keyword to protect memory accesses, but that can lead to
19779     inefficient code in places where the memory is known to not
19780     change.  Rather than mark the memory as volatile, you can use
19781     `-msafe-dma' to tell the compiler to treat the DMA instructions as
19782     potentially affecting all memory.
19783
19784`-mbranch-hints'
19785     By default, GCC generates a branch hint instruction to avoid
19786     pipeline stalls for always-taken or probably-taken branches.  A
19787     hint is not generated closer than 8 instructions away from its
19788     branch.  There is little reason to disable them, except for
19789     debugging purposes, or to make an object a little bit smaller.
19790
19791`-msmall-mem'
19792`-mlarge-mem'
19793     By default, GCC generates code assuming that addresses are never
19794     larger than 18 bits.  With `-mlarge-mem' code is generated that
19795     assumes a full 32-bit address.
19796
19797`-mstdmain'
19798     By default, GCC links against startup code that assumes the
19799     SPU-style main function interface (which has an unconventional
19800     parameter list).  With `-mstdmain', GCC links your program against
19801     startup code that assumes a C99-style interface to `main',
19802     including a local copy of `argv' strings.
19803
19804`-mfixed-range=REGISTER-RANGE'
19805     Generate code treating the given register range as fixed registers.
19806     A fixed register is one that the register allocator cannot use.
19807     This is useful when compiling kernel code.  A register range is
19808     specified as two registers separated by a dash.  Multiple register
19809     ranges can be specified separated by a comma.
19810
19811`-mea32'
19812`-mea64'
19813     Compile code assuming that pointers to the PPU address space
19814     accessed via the `__ea' named address space qualifier are either
19815     32 or 64 bits wide.  The default is 32 bits.  As this is an
19816     ABI-changing option, all object code in an executable must be
19817     compiled with the same setting.
19818
19819`-maddress-space-conversion'
19820`-mno-address-space-conversion'
19821     Allow/disallow treating the `__ea' address space as superset of
19822     the generic address space.  This enables explicit type casts
19823     between `__ea' and generic pointer as well as implicit conversions
19824     of generic pointers to `__ea' pointers.  The default is to allow
19825     address space pointer conversions.
19826
19827`-mcache-size=CACHE-SIZE'
19828     This option controls the version of libgcc that the compiler links
19829     to an executable and selects a software-managed cache for
19830     accessing variables in the `__ea' address space with a particular
19831     cache size.  Possible options for CACHE-SIZE are `8', `16', `32',
19832     `64' and `128'.  The default cache size is 64KB.
19833
19834`-matomic-updates'
19835`-mno-atomic-updates'
19836     This option controls the version of libgcc that the compiler links
19837     to an executable and selects whether atomic updates to the
19838     software-managed cache of PPU-side variables are used.  If you use
19839     atomic updates, changes to a PPU variable from SPU code using the
19840     `__ea' named address space qualifier do not interfere with changes
19841     to other PPU variables residing in the same cache line from PPU
19842     code.  If you do not use atomic updates, such interference may
19843     occur; however, writing back cache lines is more efficient.  The
19844     default behavior is to use atomic updates.
19845
19846`-mdual-nops'
19847`-mdual-nops=N'
19848     By default, GCC inserts nops to increase dual issue when it expects
19849     it to increase performance.  N can be a value from 0 to 10.  A
19850     smaller N inserts fewer nops.  10 is the default, 0 is the same as
19851     `-mno-dual-nops'.  Disabled with `-Os'.
19852
19853`-mhint-max-nops=N'
19854     Maximum number of nops to insert for a branch hint.  A branch hint
19855     must be at least 8 instructions away from the branch it is
19856     affecting.  GCC inserts up to N nops to enforce this, otherwise it
19857     does not generate the branch hint.
19858
19859`-mhint-max-distance=N'
19860     The encoding of the branch hint instruction limits the hint to be
19861     within 256 instructions of the branch it is affecting.  By
19862     default, GCC makes sure it is within 125.
19863
19864`-msafe-hints'
19865     Work around a hardware bug that causes the SPU to stall
19866     indefinitely.  By default, GCC inserts the `hbrp' instruction to
19867     make sure this stall won't happen.
19868
19869
19870
19871File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPU Options,  Up: Submodel Options
19872
198733.17.45 Options for System V
19874----------------------------
19875
19876These additional options are available on System V Release 4 for
19877compatibility with other compilers on those systems:
19878
19879`-G'
19880     Create a shared object.  It is recommended that `-symbolic' or
19881     `-shared' be used instead.
19882
19883`-Qy'
19884     Identify the versions of each tool used by the compiler, in a
19885     `.ident' assembler directive in the output.
19886
19887`-Qn'
19888     Refrain from adding `.ident' directives to the output file (this is
19889     the default).
19890
19891`-YP,DIRS'
19892     Search the directories DIRS, and no others, for libraries
19893     specified with `-l'.
19894
19895`-Ym,DIR'
19896     Look in the directory DIR to find the M4 preprocessor.  The
19897     assembler uses this option.
19898
19899
19900File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options
19901
199023.17.46 TILE-Gx Options
19903-----------------------
19904
19905These `-m' options are supported on the TILE-Gx:
19906
19907`-mcmodel=small'
19908     Generate code for the small model.  The distance for direct calls
19909     is limited to 500M in either direction.  PC-relative addresses are
19910     32 bits.  Absolute addresses support the full address range.
19911
19912`-mcmodel=large'
19913     Generate code for the large model.  There is no limitation on call
19914     distance, pc-relative addresses, or absolute addresses.
19915
19916`-mcpu=NAME'
19917     Selects the type of CPU to be targeted.  Currently the only
19918     supported type is `tilegx'.
19919
19920`-m32'
19921`-m64'
19922     Generate code for a 32-bit or 64-bit environment.  The 32-bit
19923     environment sets int, long, and pointer to 32 bits.  The 64-bit
19924     environment sets int to 32 bits and long and pointer to 64 bits.
19925
19926`-mbig-endian'
19927`-mlittle-endian'
19928     Generate code in big/little endian mode, respectively.
19929
19930
19931File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options
19932
199333.17.47 TILEPro Options
19934-----------------------
19935
19936These `-m' options are supported on the TILEPro:
19937
19938`-mcpu=NAME'
19939     Selects the type of CPU to be targeted.  Currently the only
19940     supported type is `tilepro'.
19941
19942`-m32'
19943     Generate code for a 32-bit environment, which sets int, long, and
19944     pointer to 32 bits.  This is the only supported behavior so the
19945     flag is essentially ignored.
19946
19947
19948File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options
19949
199503.17.48 V850 Options
19951--------------------
19952
19953These `-m' options are defined for V850 implementations:
19954
19955`-mlong-calls'
19956`-mno-long-calls'
19957     Treat all calls as being far away (near).  If calls are assumed to
19958     be far away, the compiler always loads the function's address into
19959     a register, and calls indirect through the pointer.
19960
19961`-mno-ep'
19962`-mep'
19963     Do not optimize (do optimize) basic blocks that use the same index
19964     pointer 4 or more times to copy pointer into the `ep' register, and
19965     use the shorter `sld' and `sst' instructions.  The `-mep' option
19966     is on by default if you optimize.
19967
19968`-mno-prolog-function'
19969`-mprolog-function'
19970     Do not use (do use) external functions to save and restore
19971     registers at the prologue and epilogue of a function.  The
19972     external functions are slower, but use less code space if more
19973     than one function saves the same number of registers.  The
19974     `-mprolog-function' option is on by default if you optimize.
19975
19976`-mspace'
19977     Try to make the code as small as possible.  At present, this just
19978     turns on the `-mep' and `-mprolog-function' options.
19979
19980`-mtda=N'
19981     Put static or global variables whose size is N bytes or less into
19982     the tiny data area that register `ep' points to.  The tiny data
19983     area can hold up to 256 bytes in total (128 bytes for byte
19984     references).
19985
19986`-msda=N'
19987     Put static or global variables whose size is N bytes or less into
19988     the small data area that register `gp' points to.  The small data
19989     area can hold up to 64 kilobytes.
19990
19991`-mzda=N'
19992     Put static or global variables whose size is N bytes or less into
19993     the first 32 kilobytes of memory.
19994
19995`-mv850'
19996     Specify that the target processor is the V850.
19997
19998`-mv850e3v5'
19999     Specify that the target processor is the V850E3V5.  The
20000     preprocessor constant `__v850e3v5__' is defined if this option is
20001     used.
20002
20003`-mv850e2v4'
20004     Specify that the target processor is the V850E3V5.  This is an
20005     alias for the `-mv850e3v5' option.
20006
20007`-mv850e2v3'
20008     Specify that the target processor is the V850E2V3.  The
20009     preprocessor constant `__v850e2v3__' is defined if this option is
20010     used.
20011
20012`-mv850e2'
20013     Specify that the target processor is the V850E2.  The preprocessor
20014     constant `__v850e2__' is defined if this option is used.
20015
20016`-mv850e1'
20017     Specify that the target processor is the V850E1.  The preprocessor
20018     constants `__v850e1__' and `__v850e__' are defined if this option
20019     is used.
20020
20021`-mv850es'
20022     Specify that the target processor is the V850ES.  This is an alias
20023     for the `-mv850e1' option.
20024
20025`-mv850e'
20026     Specify that the target processor is the V850E.  The preprocessor
20027     constant `__v850e__' is defined if this option is used.
20028
20029     If neither `-mv850' nor `-mv850e' nor `-mv850e1' nor `-mv850e2'
20030     nor `-mv850e2v3' nor `-mv850e3v5' are defined then a default
20031     target processor is chosen and the relevant `__v850*__'
20032     preprocessor constant is defined.
20033
20034     The preprocessor constants `__v850' and `__v851__' are always
20035     defined, regardless of which processor variant is the target.
20036
20037`-mdisable-callt'
20038`-mno-disable-callt'
20039     This option suppresses generation of the `CALLT' instruction for
20040     the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
20041     v850 architecture.
20042
20043     This option is enabled by default when the RH850 ABI is in use
20044     (see `-mrh850-abi'), and disabled by default when the GCC ABI is
20045     in use.  If `CALLT' instructions are being generated then the C
20046     preprocessor symbol `__V850_CALLT__' is defined.
20047
20048`-mrelax'
20049`-mno-relax'
20050     Pass on (or do not pass on) the `-mrelax' command-line option to
20051     the assembler.
20052
20053`-mlong-jumps'
20054`-mno-long-jumps'
20055     Disable (or re-enable) the generation of PC-relative jump
20056     instructions.
20057
20058`-msoft-float'
20059`-mhard-float'
20060     Disable (or re-enable) the generation of hardware floating point
20061     instructions.  This option is only significant when the target
20062     architecture is `V850E2V3' or higher.  If hardware floating point
20063     instructions are being generated then the C preprocessor symbol
20064     `__FPU_OK__' is defined, otherwise the symbol `__NO_FPU__' is
20065     defined.
20066
20067`-mloop'
20068     Enables the use of the e3v5 LOOP instruction.  The use of this
20069     instruction is not enabled by default when the e3v5 architecture is
20070     selected because its use is still experimental.
20071
20072`-mrh850-abi'
20073`-mghs'
20074     Enables support for the RH850 version of the V850 ABI.  This is the
20075     default.  With this version of the ABI the following rules apply:
20076
20077        * Integer sized structures and unions are returned via a memory
20078          pointer rather than a register.
20079
20080        * Large structures and unions (more than 8 bytes in size) are
20081          passed by value.
20082
20083        * Functions are aligned to 16-bit boundaries.
20084
20085        * The `-m8byte-align' command-line option is supported.
20086
20087        * The `-mdisable-callt' command-line option is enabled by
20088          default.  The `-mno-disable-callt' command-line option is not
20089          supported.
20090
20091     When this version of the ABI is enabled the C preprocessor symbol
20092     `__V850_RH850_ABI__' is defined.
20093
20094`-mgcc-abi'
20095     Enables support for the old GCC version of the V850 ABI.  With this
20096     version of the ABI the following rules apply:
20097
20098        * Integer sized structures and unions are returned in register
20099          `r10'.
20100
20101        * Large structures and unions (more than 8 bytes in size) are
20102          passed by reference.
20103
20104        * Functions are aligned to 32-bit boundaries, unless optimizing
20105          for size.
20106
20107        * The `-m8byte-align' command-line option is not supported.
20108
20109        * The `-mdisable-callt' command-line option is supported but not
20110          enabled by default.
20111
20112     When this version of the ABI is enabled the C preprocessor symbol
20113     `__V850_GCC_ABI__' is defined.
20114
20115`-m8byte-align'
20116`-mno-8byte-align'
20117     Enables support for `double' and `long long' types to be aligned
20118     on 8-byte boundaries.  The default is to restrict the alignment of
20119     all objects to at most 4-bytes.  When `-m8byte-align' is in effect
20120     the C preprocessor symbol `__V850_8BYTE_ALIGN__' is defined.
20121
20122`-mbig-switch'
20123     Generate code suitable for big switch tables.  Use this option
20124     only if the assembler/linker complain about out of range branches
20125     within a switch table.
20126
20127`-mapp-regs'
20128     This option causes r2 and r5 to be used in the code generated by
20129     the compiler.  This setting is the default.
20130
20131`-mno-app-regs'
20132     This option causes r2 and r5 to be treated as fixed registers.
20133
20134
20135
20136File: gcc.info,  Node: VAX Options,  Next: Visium Options,  Prev: V850 Options,  Up: Submodel Options
20137
201383.17.49 VAX Options
20139-------------------
20140
20141These `-m' options are defined for the VAX:
20142
20143`-munix'
20144     Do not output certain jump instructions (`aobleq' and so on) that
20145     the Unix assembler for the VAX cannot handle across long ranges.
20146
20147`-mgnu'
20148     Do output those jump instructions, on the assumption that the GNU
20149     assembler is being used.
20150
20151`-mg'
20152     Output code for G-format floating-point numbers instead of
20153     D-format.
20154
20155
20156File: gcc.info,  Node: Visium Options,  Next: VMS Options,  Prev: VAX Options,  Up: Submodel Options
20157
201583.17.50 Visium Options
20159----------------------
20160
20161`-mdebug'
20162     A program which performs file I/O and is destined to run on an MCM
20163     target should be linked with this option.  It causes the libraries
20164     libc.a and libdebug.a to be linked.  The program should be run on
20165     the target under the control of the GDB remote debugging stub.
20166
20167`-msim'
20168     A program which performs file I/O and is destined to run on the
20169     simulator should be linked with option.  This causes libraries
20170     libc.a and libsim.a to be linked.
20171
20172`-mfpu'
20173`-mhard-float'
20174     Generate code containing floating-point instructions.  This is the
20175     default.
20176
20177`-mno-fpu'
20178`-msoft-float'
20179     Generate code containing library calls for floating-point.
20180
20181     `-msoft-float' changes the calling convention in the output file;
20182     therefore, it is only useful if you compile _all_ of a program with
20183     this option.  In particular, you need to compile `libgcc.a', the
20184     library that comes with GCC, with `-msoft-float' in order for this
20185     to work.
20186
20187`-mcpu=CPU_TYPE'
20188     Set the instruction set, register set, and instruction scheduling
20189     parameters for machine type CPU_TYPE.  Supported values for
20190     CPU_TYPE are `mcm', `gr5' and `gr6'.
20191
20192     `mcm' is a synonym of `gr5' present for backward compatibility.
20193
20194     By default (unless configured otherwise), GCC generates code for
20195     the GR5 variant of the Visium architecture.
20196
20197     With `-mcpu=gr6', GCC generates code for the GR6 variant of the
20198     Visium architecture.  The only difference from GR5 code is that
20199     the compiler will generate block move instructions.
20200
20201`-mtune=CPU_TYPE'
20202     Set the instruction scheduling parameters for machine type
20203     CPU_TYPE, but do not set the instruction set or register set that
20204     the option `-mcpu=CPU_TYPE' would.
20205
20206`-msv-mode'
20207     Generate code for the supervisor mode, where there are no
20208     restrictions on the access to general registers.  This is the
20209     default.
20210
20211`-muser-mode'
20212     Generate code for the user mode, where the access to some general
20213     registers is forbidden: on the GR5, registers r24 to r31 cannot be
20214     accessed in this mode; on the GR6, only registers r29 to r31 are
20215     affected.
20216
20217
20218File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: Visium Options,  Up: Submodel Options
20219
202203.17.51 VMS Options
20221-------------------
20222
20223These `-m' options are defined for the VMS implementations:
20224
20225`-mvms-return-codes'
20226     Return VMS condition codes from `main'. The default is to return
20227     POSIX-style condition (e.g. error) codes.
20228
20229`-mdebug-main=PREFIX'
20230     Flag the first routine whose name starts with PREFIX as the main
20231     routine for the debugger.
20232
20233`-mmalloc64'
20234     Default to 64-bit memory allocation routines.
20235
20236`-mpointer-size=SIZE'
20237     Set the default size of pointers. Possible options for SIZE are
20238     `32' or `short' for 32 bit pointers, `64' or `long' for 64 bit
20239     pointers, and `no' for supporting only 32 bit pointers.  The later
20240     option disables `pragma pointer_size'.
20241
20242
20243File: gcc.info,  Node: VxWorks Options,  Next: x86 Options,  Prev: VMS Options,  Up: Submodel Options
20244
202453.17.52 VxWorks Options
20246-----------------------
20247
20248The options in this section are defined for all VxWorks targets.
20249Options specific to the target hardware are listed with the other
20250options for that target.
20251
20252`-mrtp'
20253     GCC can generate code for both VxWorks kernels and real time
20254     processes (RTPs).  This option switches from the former to the
20255     latter.  It also defines the preprocessor macro `__RTP__'.
20256
20257`-non-static'
20258     Link an RTP executable against shared libraries rather than static
20259     libraries.  The options `-static' and `-shared' can also be used
20260     for RTPs (*note Link Options::); `-static' is the default.
20261
20262`-Bstatic'
20263`-Bdynamic'
20264     These options are passed down to the linker.  They are defined for
20265     compatibility with Diab.
20266
20267`-Xbind-lazy'
20268     Enable lazy binding of function calls.  This option is equivalent
20269     to `-Wl,-z,now' and is defined for compatibility with Diab.
20270
20271`-Xbind-now'
20272     Disable lazy binding of function calls.  This option is the
20273     default and is defined for compatibility with Diab.
20274
20275
20276File: gcc.info,  Node: x86 Options,  Next: x86 Windows Options,  Prev: VxWorks Options,  Up: Submodel Options
20277
202783.17.53 x86 Options
20279-------------------
20280
20281These `-m' options are defined for the x86 family of computers.
20282
20283`-march=CPU-TYPE'
20284     Generate instructions for the machine type CPU-TYPE.  In contrast
20285     to `-mtune=CPU-TYPE', which merely tunes the generated code for
20286     the specified CPU-TYPE, `-march=CPU-TYPE' allows GCC to generate
20287     code that may not run at all on processors other than the one
20288     indicated.  Specifying `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
20289
20290     The choices for CPU-TYPE are:
20291
20292    `native'
20293          This selects the CPU to generate code for at compilation time
20294          by determining the processor type of the compiling machine.
20295          Using `-march=native' enables all instruction subsets
20296          supported by the local machine (hence the result might not
20297          run on different machines).  Using `-mtune=native' produces
20298          code optimized for the local machine under the constraints of
20299          the selected instruction set.
20300
20301    `i386'
20302          Original Intel i386 CPU.
20303
20304    `i486'
20305          Intel i486 CPU.  (No scheduling is implemented for this chip.)
20306
20307    `i586'
20308    `pentium'
20309          Intel Pentium CPU with no MMX support.
20310
20311    `pentium-mmx'
20312          Intel Pentium MMX CPU, based on Pentium core with MMX
20313          instruction set support.
20314
20315    `pentiumpro'
20316          Intel Pentium Pro CPU.
20317
20318    `i686'
20319          When used with `-march', the Pentium Pro instruction set is
20320          used, so the code runs on all i686 family chips.  When used
20321          with `-mtune', it has the same meaning as `generic'.
20322
20323    `pentium2'
20324          Intel Pentium II CPU, based on Pentium Pro core with MMX
20325          instruction set support.
20326
20327    `pentium3'
20328    `pentium3m'
20329          Intel Pentium III CPU, based on Pentium Pro core with MMX and
20330          SSE instruction set support.
20331
20332    `pentium-m'
20333          Intel Pentium M; low-power version of Intel Pentium III CPU
20334          with MMX, SSE and SSE2 instruction set support.  Used by
20335          Centrino notebooks.
20336
20337    `pentium4'
20338    `pentium4m'
20339          Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
20340          support.
20341
20342    `prescott'
20343          Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
20344          and SSE3 instruction set support.
20345
20346    `nocona'
20347          Improved version of Intel Pentium 4 CPU with 64-bit
20348          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
20349
20350    `core2'
20351          Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
20352          and SSSE3 instruction set support.
20353
20354    `nehalem'
20355          Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
20356          SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set
20357          support.
20358
20359    `westmere'
20360          Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
20361          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL
20362          instruction set support.
20363
20364    `sandybridge'
20365          Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE,
20366          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and
20367          PCLMUL instruction set support.
20368
20369    `ivybridge'
20370          Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
20371          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
20372          FSGSBASE, RDRND and F16C instruction set support.
20373
20374    `haswell'
20375          Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
20376          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
20377          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
20378          set support.
20379
20380    `broadwell'
20381          Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
20382          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
20383          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX
20384          and PREFETCHW instruction set support.
20385
20386    `bonnell'
20387          Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
20388          SSE2, SSE3 and SSSE3 instruction set support.
20389
20390    `silvermont'
20391          Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
20392          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and
20393          RDRND instruction set support.
20394
20395    `knl'
20396          Intel Knight's Landing CPU with 64-bit extensions, MOVBE,
20397          MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX,
20398          AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
20399          RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER and
20400          AVX512CD instruction set support.
20401
20402    `k6'
20403          AMD K6 CPU with MMX instruction set support.
20404
20405    `k6-2'
20406    `k6-3'
20407          Improved versions of AMD K6 CPU with MMX and 3DNow!
20408          instruction set support.
20409
20410    `athlon'
20411    `athlon-tbird'
20412          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
20413          prefetch instructions support.
20414
20415    `athlon-4'
20416    `athlon-xp'
20417    `athlon-mp'
20418          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
20419          full SSE instruction set support.
20420
20421    `k8'
20422    `opteron'
20423    `athlon64'
20424    `athlon-fx'
20425          Processors based on the AMD K8 core with x86-64 instruction
20426          set support, including the AMD Opteron, Athlon 64, and Athlon
20427          64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
20428          enhanced 3DNow! and 64-bit instruction set extensions.)
20429
20430    `k8-sse3'
20431    `opteron-sse3'
20432    `athlon64-sse3'
20433          Improved versions of AMD K8 cores with SSE3 instruction set
20434          support.
20435
20436    `amdfam10'
20437    `barcelona'
20438          CPUs based on AMD Family 10h cores with x86-64 instruction
20439          set support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A,
20440          3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set
20441          extensions.)
20442
20443    `bdver1'
20444          CPUs based on AMD Family 15h cores with x86-64 instruction
20445          set support.  (This supersets FMA4, AVX, XOP, LWP, AES,
20446          PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
20447          SSE4.2, ABM and 64-bit instruction set extensions.)
20448
20449    `bdver2'
20450          AMD Family 15h core based CPUs with x86-64 instruction set
20451          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX,
20452          XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
20453          SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
20454          extensions.)
20455
20456    `bdver3'
20457          AMD Family 15h core based CPUs with x86-64 instruction set
20458          support.  (This supersets BMI, TBM, F16C, FMA, FMA4,
20459          FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
20460          SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
20461          instruction set extensions.
20462
20463    `bdver4'
20464          AMD Family 15h core based CPUs with x86-64 instruction set
20465          support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
20466          FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE,
20467          MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and
20468          64-bit instruction set extensions.
20469
20470    `btver1'
20471          CPUs based on AMD Family 14h cores with x86-64 instruction
20472          set support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3,
20473          SSE4A, CX16, ABM and 64-bit instruction set extensions.)
20474
20475    `btver2'
20476          CPUs based on AMD Family 16h cores with x86-64 instruction
20477          set support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL,
20478          AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2,
20479          SSE, MMX and 64-bit instruction set extensions.
20480
20481    `winchip-c6'
20482          IDT WinChip C6 CPU, dealt in same way as i486 with additional
20483          MMX instruction set support.
20484
20485    `winchip2'
20486          IDT WinChip 2 CPU, dealt in same way as i486 with additional
20487          MMX and 3DNow!  instruction set support.
20488
20489    `c3'
20490          VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
20491          scheduling is implemented for this chip.)
20492
20493    `c3-2'
20494          VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
20495          support.  (No scheduling is implemented for this chip.)
20496
20497    `geode'
20498          AMD Geode embedded processor with MMX and 3DNow! instruction
20499          set support.
20500
20501`-mtune=CPU-TYPE'
20502     Tune to CPU-TYPE everything applicable about the generated code,
20503     except for the ABI and the set of available instructions.  While
20504     picking a specific CPU-TYPE schedules things appropriately for
20505     that particular chip, the compiler does not generate any code that
20506     cannot run on the default machine type unless you use a
20507     `-march=CPU-TYPE' option.  For example, if GCC is configured for
20508     i686-pc-linux-gnu then `-mtune=pentium4' generates code that is
20509     tuned for Pentium 4 but still runs on i686 machines.
20510
20511     The choices for CPU-TYPE are the same as for `-march'.  In
20512     addition, `-mtune' supports 2 extra choices for CPU-TYPE:
20513
20514    `generic'
20515          Produce code optimized for the most common IA32/AMD64/EM64T
20516          processors.  If you know the CPU on which your code will run,
20517          then you should use the corresponding `-mtune' or `-march'
20518          option instead of `-mtune=generic'.  But, if you do not know
20519          exactly what CPU users of your application will have, then
20520          you should use this option.
20521
20522          As new processors are deployed in the marketplace, the
20523          behavior of this option will change.  Therefore, if you
20524          upgrade to a newer version of GCC, code generation controlled
20525          by this option will change to reflect the processors that are
20526          most common at the time that version of GCC is released.
20527
20528          There is no `-march=generic' option because `-march'
20529          indicates the instruction set the compiler can use, and there
20530          is no generic instruction set applicable to all processors.
20531          In contrast, `-mtune' indicates the processor (or, in this
20532          case, collection of processors) for which the code is
20533          optimized.
20534
20535    `intel'
20536          Produce code optimized for the most current Intel processors,
20537          which are Haswell and Silvermont for this version of GCC.  If
20538          you know the CPU on which your code will run, then you should
20539          use the corresponding `-mtune' or `-march' option instead of
20540          `-mtune=intel'.  But, if you want your application performs
20541          better on both Haswell and Silvermont, then you should use
20542          this option.
20543
20544          As new Intel processors are deployed in the marketplace, the
20545          behavior of this option will change.  Therefore, if you
20546          upgrade to a newer version of GCC, code generation controlled
20547          by this option will change to reflect the most current Intel
20548          processors at the time that version of GCC is released.
20549
20550          There is no `-march=intel' option because `-march' indicates
20551          the instruction set the compiler can use, and there is no
20552          common instruction set applicable to all processors.  In
20553          contrast, `-mtune' indicates the processor (or, in this case,
20554          collection of processors) for which the code is optimized.
20555
20556`-mcpu=CPU-TYPE'
20557     A deprecated synonym for `-mtune'.
20558
20559`-mfpmath=UNIT'
20560     Generate floating-point arithmetic for selected unit UNIT.  The
20561     choices for UNIT are:
20562
20563    `387'
20564          Use the standard 387 floating-point coprocessor present on
20565          the majority of chips and emulated otherwise.  Code compiled
20566          with this option runs almost everywhere.  The temporary
20567          results are computed in 80-bit precision instead of the
20568          precision specified by the type, resulting in slightly
20569          different results compared to most of other chips.  See
20570          `-ffloat-store' for more detailed description.
20571
20572          This is the default choice for x86-32 targets.
20573
20574    `sse'
20575          Use scalar floating-point instructions present in the SSE
20576          instruction set.  This instruction set is supported by
20577          Pentium III and newer chips, and in the AMD line by Athlon-4,
20578          Athlon XP and Athlon MP chips.  The earlier version of the SSE
20579          instruction set supports only single-precision arithmetic,
20580          thus the double and extended-precision arithmetic are still
20581          done using 387.  A later version, present only in Pentium 4
20582          and AMD x86-64 chips, supports double-precision arithmetic
20583          too.
20584
20585          For the x86-32 compiler, you must use `-march=CPU-TYPE',
20586          `-msse' or `-msse2' switches to enable SSE extensions and
20587          make this option effective.  For the x86-64 compiler, these
20588          extensions are enabled by default.
20589
20590          The resulting code should be considerably faster in the
20591          majority of cases and avoid the numerical instability
20592          problems of 387 code, but may break some existing code that
20593          expects temporaries to be 80 bits.
20594
20595          This is the default choice for the x86-64 compiler.
20596
20597    `sse,387'
20598    `sse+387'
20599    `both'
20600          Attempt to utilize both instruction sets at once.  This
20601          effectively doubles the amount of available registers, and on
20602          chips with separate execution units for 387 and SSE the
20603          execution resources too.  Use this option with care, as it is
20604          still experimental, because the GCC register allocator does
20605          not model separate functional units well, resulting in
20606          unstable performance.
20607
20608`-masm=DIALECT'
20609     Output assembly instructions using selected DIALECT.  Also affects
20610     which dialect is used for basic `asm' (*note Basic Asm::) and
20611     extended `asm' (*note Extended Asm::). Supported choices (in
20612     dialect order) are `att' or `intel'. The default is `att'. Darwin
20613     does not support `intel'.
20614
20615`-mieee-fp'
20616`-mno-ieee-fp'
20617     Control whether or not the compiler uses IEEE floating-point
20618     comparisons.  These correctly handle the case where the result of a
20619     comparison is unordered.
20620
20621`-msoft-float'
20622     Generate output containing library calls for floating point.
20623
20624     *Warning:* the requisite libraries are not part of GCC.  Normally
20625     the facilities of the machine's usual C compiler are used, but
20626     this can't be done directly in cross-compilation.  You must make
20627     your own arrangements to provide suitable library functions for
20628     cross-compilation.
20629
20630     On machines where a function returns floating-point results in the
20631     80387 register stack, some floating-point opcodes may be emitted
20632     even if `-msoft-float' is used.
20633
20634`-mno-fp-ret-in-387'
20635     Do not use the FPU registers for return values of functions.
20636
20637     The usual calling convention has functions return values of types
20638     `float' and `double' in an FPU register, even if there is no FPU.
20639     The idea is that the operating system should emulate an FPU.
20640
20641     The option `-mno-fp-ret-in-387' causes such values to be returned
20642     in ordinary CPU registers instead.
20643
20644`-mno-fancy-math-387'
20645     Some 387 emulators do not support the `sin', `cos' and `sqrt'
20646     instructions for the 387.  Specify this option to avoid generating
20647     those instructions.  This option is the default on OpenBSD and
20648     NetBSD.  This option is overridden when `-march' indicates that
20649     the target CPU always has an FPU and so the instruction does not
20650     need emulation.  These instructions are not generated unless you
20651     also use the `-funsafe-math-optimizations' switch.
20652
20653`-malign-double'
20654`-mno-align-double'
20655     Control whether GCC aligns `double', `long double', and `long
20656     long' variables on a two-word boundary or a one-word boundary.
20657     Aligning `double' variables on a two-word boundary produces code
20658     that runs somewhat faster on a Pentium at the expense of more
20659     memory.
20660
20661     On x86-64, `-malign-double' is enabled by default.
20662
20663     *Warning:* if you use the `-malign-double' switch, structures
20664     containing the above types are aligned differently than the
20665     published application binary interface specifications for the
20666     x86-32 and are not binary compatible with structures in code
20667     compiled without that switch.
20668
20669`-m96bit-long-double'
20670`-m128bit-long-double'
20671     These switches control the size of `long double' type.  The x86-32
20672     application binary interface specifies the size to be 96 bits, so
20673     `-m96bit-long-double' is the default in 32-bit mode.
20674
20675     Modern architectures (Pentium and newer) prefer `long double' to
20676     be aligned to an 8- or 16-byte boundary.  In arrays or structures
20677     conforming to the ABI, this is not possible.  So specifying
20678     `-m128bit-long-double' aligns `long double' to a 16-byte boundary
20679     by padding the `long double' with an additional 32-bit zero.
20680
20681     In the x86-64 compiler, `-m128bit-long-double' is the default
20682     choice as its ABI specifies that `long double' is aligned on
20683     16-byte boundary.
20684
20685     Notice that neither of these options enable any extra precision
20686     over the x87 standard of 80 bits for a `long double'.
20687
20688     *Warning:* if you override the default value for your target ABI,
20689     this changes the size of structures and arrays containing `long
20690     double' variables, as well as modifying the function calling
20691     convention for functions taking `long double'.  Hence they are not
20692     binary-compatible with code compiled without that switch.
20693
20694`-mlong-double-64'
20695`-mlong-double-80'
20696`-mlong-double-128'
20697     These switches control the size of `long double' type. A size of
20698     64 bits makes the `long double' type equivalent to the `double'
20699     type. This is the default for 32-bit Bionic C library.  A size of
20700     128 bits makes the `long double' type equivalent to the
20701     `__float128' type. This is the default for 64-bit Bionic C library.
20702
20703     *Warning:* if you override the default value for your target ABI,
20704     this changes the size of structures and arrays containing `long
20705     double' variables, as well as modifying the function calling
20706     convention for functions taking `long double'.  Hence they are not
20707     binary-compatible with code compiled without that switch.
20708
20709`-malign-data=TYPE'
20710     Control how GCC aligns variables.  Supported values for TYPE are
20711     `compat' uses increased alignment value compatible uses GCC 4.8
20712     and earlier, `abi' uses alignment value as specified by the psABI,
20713     and `cacheline' uses increased alignment value to match the cache
20714     line size.  `compat' is the default.
20715
20716`-mlarge-data-threshold=THRESHOLD'
20717     When `-mcmodel=medium' is specified, data objects larger than
20718     THRESHOLD are placed in the large data section.  This value must
20719     be the same across all objects linked into the binary, and
20720     defaults to 65535.
20721
20722`-mrtd'
20723     Use a different function-calling convention, in which functions
20724     that take a fixed number of arguments return with the `ret NUM'
20725     instruction, which pops their arguments while returning.  This
20726     saves one instruction in the caller since there is no need to pop
20727     the arguments there.
20728
20729     You can specify that an individual function is called with this
20730     calling sequence with the function attribute `stdcall'.  You can
20731     also override the `-mrtd' option by using the function attribute
20732     `cdecl'.  *Note Function Attributes::.
20733
20734     *Warning:* this calling convention is incompatible with the one
20735     normally used on Unix, so you cannot use it if you need to call
20736     libraries compiled with the Unix compiler.
20737
20738     Also, you must provide function prototypes for all functions that
20739     take variable numbers of arguments (including `printf'); otherwise
20740     incorrect code is generated for calls to those functions.
20741
20742     In addition, seriously incorrect code results if you call a
20743     function with too many arguments.  (Normally, extra arguments are
20744     harmlessly ignored.)
20745
20746`-mregparm=NUM'
20747     Control how many registers are used to pass integer arguments.  By
20748     default, no registers are used to pass arguments, and at most 3
20749     registers can be used.  You can control this behavior for a
20750     specific function by using the function attribute `regparm'.
20751     *Note Function Attributes::.
20752
20753     *Warning:* if you use this switch, and NUM is nonzero, then you
20754     must build all modules with the same value, including any
20755     libraries.  This includes the system libraries and startup modules.
20756
20757`-msseregparm'
20758     Use SSE register passing conventions for float and double arguments
20759     and return values.  You can control this behavior for a specific
20760     function by using the function attribute `sseregparm'.  *Note
20761     Function Attributes::.
20762
20763     *Warning:* if you use this switch then you must build all modules
20764     with the same value, including any libraries.  This includes the
20765     system libraries and startup modules.
20766
20767`-mvect8-ret-in-mem'
20768     Return 8-byte vectors in memory instead of MMX registers.  This is
20769     the default on Solaris 8 and 9 and VxWorks to match the ABI of the
20770     Sun Studio compilers until version 12.  Later compiler versions
20771     (starting with Studio 12 Update 1) follow the ABI used by other
20772     x86 targets, which is the default on Solaris 10 and later.  _Only_
20773     use this option if you need to remain compatible with existing
20774     code produced by those previous compiler versions or older
20775     versions of GCC.
20776
20777`-mpc32'
20778`-mpc64'
20779`-mpc80'
20780     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
20781     `-mpc32' is specified, the significands of results of
20782     floating-point operations are rounded to 24 bits (single
20783     precision); `-mpc64' rounds the significands of results of
20784     floating-point operations to 53 bits (double precision) and
20785     `-mpc80' rounds the significands of results of floating-point
20786     operations to 64 bits (extended double precision), which is the
20787     default.  When this option is used, floating-point operations in
20788     higher precisions are not available to the programmer without
20789     setting the FPU control word explicitly.
20790
20791     Setting the rounding of floating-point operations to less than the
20792     default 80 bits can speed some programs by 2% or more.  Note that
20793     some mathematical libraries assume that extended-precision
20794     (80-bit) floating-point operations are enabled by default;
20795     routines in such libraries could suffer significant loss of
20796     accuracy, typically through so-called "catastrophic cancellation",
20797     when this option is used to set the precision to less than
20798     extended precision.
20799
20800`-mstackrealign'
20801     Realign the stack at entry.  On the x86, the `-mstackrealign'
20802     option generates an alternate prologue and epilogue that realigns
20803     the run-time stack if necessary.  This supports mixing legacy
20804     codes that keep 4-byte stack alignment with modern codes that keep
20805     16-byte stack alignment for SSE compatibility.  See also the
20806     attribute `force_align_arg_pointer', applicable to individual
20807     functions.
20808
20809`-mpreferred-stack-boundary=NUM'
20810     Attempt to keep the stack boundary aligned to a 2 raised to NUM
20811     byte boundary.  If `-mpreferred-stack-boundary' is not specified,
20812     the default is 4 (16 bytes or 128 bits).
20813
20814     *Warning:* When generating code for the x86-64 architecture with
20815     SSE extensions disabled, `-mpreferred-stack-boundary=3' can be
20816     used to keep the stack boundary aligned to 8 byte boundary.  Since
20817     x86-64 ABI require 16 byte stack alignment, this is ABI
20818     incompatible and intended to be used in controlled environment
20819     where stack space is important limitation.  This option leads to
20820     wrong code when functions compiled with 16 byte stack alignment
20821     (such as functions from a standard library) are called with
20822     misaligned stack.  In this case, SSE instructions may lead to
20823     misaligned memory access traps.  In addition, variable arguments
20824     are handled incorrectly for 16 byte aligned objects (including x87
20825     long double and __int128), leading to wrong results.  You must
20826     build all modules with `-mpreferred-stack-boundary=3', including
20827     any libraries.  This includes the system libraries and startup
20828     modules.
20829
20830`-mincoming-stack-boundary=NUM'
20831     Assume the incoming stack is aligned to a 2 raised to NUM byte
20832     boundary.  If `-mincoming-stack-boundary' is not specified, the
20833     one specified by `-mpreferred-stack-boundary' is used.
20834
20835     On Pentium and Pentium Pro, `double' and `long double' values
20836     should be aligned to an 8-byte boundary (see `-malign-double') or
20837     suffer significant run time performance penalties.  On Pentium
20838     III, the Streaming SIMD Extension (SSE) data type `__m128' may not
20839     work properly if it is not 16-byte aligned.
20840
20841     To ensure proper alignment of this values on the stack, the stack
20842     boundary must be as aligned as that required by any value stored
20843     on the stack.  Further, every function must be generated such that
20844     it keeps the stack aligned.  Thus calling a function compiled with
20845     a higher preferred stack boundary from a function compiled with a
20846     lower preferred stack boundary most likely misaligns the stack.
20847     It is recommended that libraries that use callbacks always use the
20848     default setting.
20849
20850     This extra alignment does consume extra stack space, and generally
20851     increases code size.  Code that is sensitive to stack space usage,
20852     such as embedded systems and operating system kernels, may want to
20853     reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
20854
20855`-mmmx'
20856`-msse'
20857`-msse2'
20858`-msse3'
20859`-mssse3'
20860`-msse4'
20861`-msse4a'
20862`-msse4.1'
20863`-msse4.2'
20864`-mavx'
20865`-mavx2'
20866`-mavx512f'
20867`-mavx512pf'
20868`-mavx512er'
20869`-mavx512cd'
20870`-msha'
20871`-maes'
20872`-mpclmul'
20873`-mclfushopt'
20874`-mfsgsbase'
20875`-mrdrnd'
20876`-mf16c'
20877`-mfma'
20878`-mfma4'
20879`-mno-fma4'
20880`-mprefetchwt1'
20881`-mxop'
20882`-mlwp'
20883`-m3dnow'
20884`-mpopcnt'
20885`-mabm'
20886`-mbmi'
20887`-mbmi2'
20888`-mlzcnt'
20889`-mfxsr'
20890`-mxsave'
20891`-mxsaveopt'
20892`-mxsavec'
20893`-mxsaves'
20894`-mrtm'
20895`-mtbm'
20896`-mmpx'
20897`-mmwaitx'
20898     These switches enable the use of instructions in the MMX, SSE,
20899     SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER,
20900     AVX512CD, SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A,
20901     FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT, RTM,
20902     MPX, MWAITX or 3DNow!  extended instruction sets.  Each has a
20903     corresponding `-mno-' option to disable use of these instructions.
20904
20905     These extensions are also available as built-in functions: see
20906     *Note x86 Built-in Functions::, for details of the functions
20907     enabled and disabled by these switches.
20908
20909     To generate SSE/SSE2 instructions automatically from floating-point
20910     code (as opposed to 387 instructions), see `-mfpmath=sse'.
20911
20912     GCC depresses SSEx instructions when `-mavx' is used. Instead, it
20913     generates new AVX instructions or AVX equivalence for all SSEx
20914     instructions when needed.
20915
20916     These options enable GCC to use these extended instructions in
20917     generated code, even without `-mfpmath=sse'.  Applications that
20918     perform run-time CPU detection must compile separate files for each
20919     supported architecture, using the appropriate flags.  In
20920     particular, the file containing the CPU detection code should be
20921     compiled without these options.
20922
20923`-mdump-tune-features'
20924     This option instructs GCC to dump the names of the x86 performance
20925     tuning features and default settings. The names can be used in
20926     `-mtune-ctrl=FEATURE-LIST'.
20927
20928`-mtune-ctrl=FEATURE-LIST'
20929     This option is used to do fine grain control of x86 code
20930     generation features.  FEATURE-LIST is a comma separated list of
20931     FEATURE names. See also `-mdump-tune-features'. When specified,
20932     the FEATURE is turned on if it is not preceded with `^',
20933     otherwise, it is turned off.  `-mtune-ctrl=FEATURE-LIST' is
20934     intended to be used by GCC developers. Using it may lead to code
20935     paths not covered by testing and can potentially result in
20936     compiler ICEs or runtime errors.
20937
20938`-mno-default'
20939     This option instructs GCC to turn off all tunable features. See
20940     also `-mtune-ctrl=FEATURE-LIST' and `-mdump-tune-features'.
20941
20942`-mcld'
20943     This option instructs GCC to emit a `cld' instruction in the
20944     prologue of functions that use string instructions.  String
20945     instructions depend on the DF flag to select between autoincrement
20946     or autodecrement mode.  While the ABI specifies the DF flag to be
20947     cleared on function entry, some operating systems violate this
20948     specification by not clearing the DF flag in their exception
20949     dispatchers.  The exception handler can be invoked with the DF flag
20950     set, which leads to wrong direction mode when string instructions
20951     are used.  This option can be enabled by default on 32-bit x86
20952     targets by configuring GCC with the `--enable-cld' configure
20953     option.  Generation of `cld' instructions can be suppressed with
20954     the `-mno-cld' compiler option in this case.
20955
20956`-mvzeroupper'
20957     This option instructs GCC to emit a `vzeroupper' instruction
20958     before a transfer of control flow out of the function to minimize
20959     the AVX to SSE transition penalty as well as remove unnecessary
20960     `zeroupper' intrinsics.
20961
20962`-mprefer-avx128'
20963     This option instructs GCC to use 128-bit AVX instructions instead
20964     of 256-bit AVX instructions in the auto-vectorizer.
20965
20966`-mcx16'
20967     This option enables GCC to generate `CMPXCHG16B' instructions.
20968     `CMPXCHG16B' allows for atomic operations on 128-bit double
20969     quadword (or oword) data types.  This is useful for
20970     high-resolution counters that can be updated by multiple
20971     processors (or cores).  This instruction is generated as part of
20972     atomic built-in functions: see *Note __sync Builtins:: or *Note
20973     __atomic Builtins:: for details.
20974
20975`-msahf'
20976     This option enables generation of `SAHF' instructions in 64-bit
20977     code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
20978     the introduction of Pentium 4 G1 step in December 2005, lacked the
20979     `LAHF' and `SAHF' instructions which are supported by AMD64.
20980     These are load and store instructions, respectively, for certain
20981     status flags.  In 64-bit mode, the `SAHF' instruction is used to
20982     optimize `fmod', `drem', and `remainder' built-in functions; see
20983     *Note Other Builtins:: for details.
20984
20985`-mmovbe'
20986     This option enables use of the `movbe' instruction to implement
20987     `__builtin_bswap32' and `__builtin_bswap64'.
20988
20989`-mcrc32'
20990     This option enables built-in functions `__builtin_ia32_crc32qi',
20991     `__builtin_ia32_crc32hi', `__builtin_ia32_crc32si' and
20992     `__builtin_ia32_crc32di' to generate the `crc32' machine
20993     instruction.
20994
20995`-mrecip'
20996     This option enables use of `RCPSS' and `RSQRTSS' instructions (and
20997     their vectorized variants `RCPPS' and `RSQRTPS') with an
20998     additional Newton-Raphson step to increase precision instead of
20999     `DIVSS' and `SQRTSS' (and their vectorized variants) for
21000     single-precision floating-point arguments.  These instructions are
21001     generated only when `-funsafe-math-optimizations' is enabled
21002     together with `-finite-math-only' and `-fno-trapping-math'.  Note
21003     that while the throughput of the sequence is higher than the
21004     throughput of the non-reciprocal instruction, the precision of the
21005     sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0
21006     equals 0.99999994).
21007
21008     Note that GCC implements `1.0f/sqrtf(X)' in terms of `RSQRTSS' (or
21009     `RSQRTPS') already with `-ffast-math' (or the above option
21010     combination), and doesn't need `-mrecip'.
21011
21012     Also note that GCC emits the above sequence with additional
21013     Newton-Raphson step for vectorized single-float division and
21014     vectorized `sqrtf(X)' already with `-ffast-math' (or the above
21015     option combination), and doesn't need `-mrecip'.
21016
21017`-mrecip=OPT'
21018     This option controls which reciprocal estimate instructions may be
21019     used.  OPT is a comma-separated list of options, which may be
21020     preceded by a `!' to invert the option:
21021
21022    `all'
21023          Enable all estimate instructions.
21024
21025    `default'
21026          Enable the default instructions, equivalent to `-mrecip'.
21027
21028    `none'
21029          Disable all estimate instructions, equivalent to `-mno-recip'.
21030
21031    `div'
21032          Enable the approximation for scalar division.
21033
21034    `vec-div'
21035          Enable the approximation for vectorized division.
21036
21037    `sqrt'
21038          Enable the approximation for scalar square root.
21039
21040    `vec-sqrt'
21041          Enable the approximation for vectorized square root.
21042
21043     So, for example, `-mrecip=all,!sqrt' enables all of the reciprocal
21044     approximations, except for square root.
21045
21046`-mveclibabi=TYPE'
21047     Specifies the ABI type to use for vectorizing intrinsics using an
21048     external library.  Supported values for TYPE are `svml' for the
21049     Intel short vector math library and `acml' for the AMD math core
21050     library.  To use this option, both `-ftree-vectorize' and
21051     `-funsafe-math-optimizations' have to be enabled, and an SVML or
21052     ACML ABI-compatible library must be specified at link time.
21053
21054     GCC currently emits calls to `vmldExp2', `vmldLn2', `vmldLog102',
21055     `vmldLog102', `vmldPow2', `vmldTanh2', `vmldTan2', `vmldAtan2',
21056     `vmldAtanh2', `vmldCbrt2', `vmldSinh2', `vmldSin2', `vmldAsinh2',
21057     `vmldAsin2', `vmldCosh2', `vmldCos2', `vmldAcosh2', `vmldAcos2',
21058     `vmlsExp4', `vmlsLn4', `vmlsLog104', `vmlsLog104', `vmlsPow4',
21059     `vmlsTanh4', `vmlsTan4', `vmlsAtan4', `vmlsAtanh4', `vmlsCbrt4',
21060     `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', `vmlsAsin4', `vmlsCosh4',
21061     `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' for corresponding
21062     function type when `-mveclibabi=svml' is used, and `__vrd2_sin',
21063     `__vrd2_cos', `__vrd2_exp', `__vrd2_log', `__vrd2_log2',
21064     `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', `__vrs4_expf',
21065     `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and `__vrs4_powf'
21066     for the corresponding function type when `-mveclibabi=acml' is
21067     used.
21068
21069`-mabi=NAME'
21070     Generate code for the specified calling convention.  Permissible
21071     values are `sysv' for the ABI used on GNU/Linux and other systems,
21072     and `ms' for the Microsoft ABI.  The default is to use the
21073     Microsoft ABI when targeting Microsoft Windows and the SysV ABI on
21074     all other systems.  You can control this behavior for specific
21075     functions by using the function attributes `ms_abi' and `sysv_abi'.
21076     *Note Function Attributes::.
21077
21078`-mtls-dialect=TYPE'
21079     Generate code to access thread-local storage using the `gnu' or
21080     `gnu2' conventions.  `gnu' is the conservative default; `gnu2' is
21081     more efficient, but it may add compile- and run-time requirements
21082     that cannot be satisfied on all systems.
21083
21084`-mpush-args'
21085`-mno-push-args'
21086     Use PUSH operations to store outgoing parameters.  This method is
21087     shorter and usually equally fast as method using SUB/MOV
21088     operations and is enabled by default.  In some cases disabling it
21089     may improve performance because of improved scheduling and reduced
21090     dependencies.
21091
21092`-maccumulate-outgoing-args'
21093     If enabled, the maximum amount of space required for outgoing
21094     arguments is computed in the function prologue.  This is faster on
21095     most modern CPUs because of reduced dependencies, improved
21096     scheduling and reduced stack usage when the preferred stack
21097     boundary is not equal to 2.  The drawback is a notable increase in
21098     code size.  This switch implies `-mno-push-args'.
21099
21100`-mthreads'
21101     Support thread-safe exception handling on MinGW.  Programs that
21102     rely on thread-safe exception handling must compile and link all
21103     code with the `-mthreads' option.  When compiling, `-mthreads'
21104     defines `-D_MT'; when linking, it links in a special thread helper
21105     library `-lmingwthrd' which cleans up per-thread
21106     exception-handling data.
21107
21108`-mno-align-stringops'
21109     Do not align the destination of inlined string operations.  This
21110     switch reduces code size and improves performance in case the
21111     destination is already aligned, but GCC doesn't know about it.
21112
21113`-minline-all-stringops'
21114     By default GCC inlines string operations only when the destination
21115     is known to be aligned to least a 4-byte boundary.  This enables
21116     more inlining and increases code size, but may improve performance
21117     of code that depends on fast `memcpy', `strlen', and `memset' for
21118     short lengths.
21119
21120`-minline-stringops-dynamically'
21121     For string operations of unknown size, use run-time checks with
21122     inline code for small blocks and a library call for large blocks.
21123
21124`-mstringop-strategy=ALG'
21125     Override the internal decision heuristic for the particular
21126     algorithm to use for inlining string operations.  The allowed
21127     values for ALG are:
21128
21129    `rep_byte'
21130    `rep_4byte'
21131    `rep_8byte'
21132          Expand using i386 `rep' prefix of the specified size.
21133
21134    `byte_loop'
21135    `loop'
21136    `unrolled_loop'
21137          Expand into an inline loop.
21138
21139    `libcall'
21140          Always use a library call.
21141
21142`-mmemcpy-strategy=STRATEGY'
21143     Override the internal decision heuristic to decide if
21144     `__builtin_memcpy' should be inlined and what inline algorithm to
21145     use when the expected size of the copy operation is known. STRATEGY
21146     is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN triplets.
21147     ALG is specified in `-mstringop-strategy', MAX_SIZE specifies the
21148     max byte size with which inline algorithm ALG is allowed.  For the
21149     last triplet, the MAX_SIZE must be `-1'. The MAX_SIZE of the
21150     triplets in the list must be specified in increasing order.  The
21151     minimal byte size for ALG is `0' for the first triplet and
21152     `MAX_SIZE + 1' of the preceding range.
21153
21154`-mmemset-strategy=STRATEGY'
21155     The option is similar to `-mmemcpy-strategy=' except that it is to
21156     control `__builtin_memset' expansion.
21157
21158`-momit-leaf-frame-pointer'
21159     Don't keep the frame pointer in a register for leaf functions.
21160     This avoids the instructions to save, set up, and restore frame
21161     pointers and makes an extra register available in leaf functions.
21162     The option `-fomit-leaf-frame-pointer' removes the frame pointer
21163     for leaf functions, which might make debugging harder.
21164
21165`-mtls-direct-seg-refs'
21166`-mno-tls-direct-seg-refs'
21167     Controls whether TLS variables may be accessed with offsets from
21168     the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
21169     whether the thread base pointer must be added.  Whether or not this
21170     is valid depends on the operating system, and whether it maps the
21171     segment to cover the entire TLS area.
21172
21173     For systems that use the GNU C Library, the default is on.
21174
21175`-msse2avx'
21176`-mno-sse2avx'
21177     Specify that the assembler should encode SSE instructions with VEX
21178     prefix.  The option `-mavx' turns this on by default.
21179
21180`-mfentry'
21181`-mno-fentry'
21182     If profiling is active (`-pg'), put the profiling counter call
21183     before the prologue.  Note: On x86 architectures the attribute
21184     `ms_hook_prologue' isn't possible at the moment for `-mfentry' and
21185     `-pg'.
21186
21187`-mrecord-mcount'
21188`-mno-record-mcount'
21189     If profiling is active (`-pg'), generate a __mcount_loc section
21190     that contains pointers to each profiling call. This is useful for
21191     automatically patching and out calls.
21192
21193`-mnop-mcount'
21194`-mno-nop-mcount'
21195     If profiling is active (`-pg'), generate the calls to the
21196     profiling functions as nops. This is useful when they should be
21197     patched in later dynamically. This is likely only useful together
21198     with `-mrecord-mcount'.
21199
21200`-mskip-rax-setup'
21201`-mno-skip-rax-setup'
21202     When generating code for the x86-64 architecture with SSE
21203     extensions disabled, `-mskip-rax-setup' can be used to skip
21204     setting up RAX register when there are no variable arguments
21205     passed in vector registers.
21206
21207     *Warning:* Since RAX register is used to avoid unnecessarily
21208     saving vector registers on stack when passing variable arguments,
21209     the impacts of this option are callees may waste some stack space,
21210     misbehave or jump to a random location.  GCC 4.4 or newer don't
21211     have those issues, regardless the RAX register value.
21212
21213`-m8bit-idiv'
21214`-mno-8bit-idiv'
21215     On some processors, like Intel Atom, 8-bit unsigned integer divide
21216     is much faster than 32-bit/64-bit integer divide.  This option
21217     generates a run-time check.  If both dividend and divisor are
21218     within range of 0 to 255, 8-bit unsigned integer divide is used
21219     instead of 32-bit/64-bit integer divide.
21220
21221`-mavx256-split-unaligned-load'
21222`-mavx256-split-unaligned-store'
21223     Split 32-byte AVX unaligned load and store.
21224
21225`-mstack-protector-guard=GUARD'
21226     Generate stack protection code using canary at GUARD.  Supported
21227     locations are `global' for global canary or `tls' for per-thread
21228     canary in the TLS block (the default).  This option has effect
21229     only when `-fstack-protector' or `-fstack-protector-all' is
21230     specified.
21231
21232
21233 These `-m' switches are supported in addition to the above on x86-64
21234processors in 64-bit environments.
21235
21236`-m32'
21237`-m64'
21238`-mx32'
21239`-m16'
21240     Generate code for a 16-bit, 32-bit or 64-bit environment.  The
21241     `-m32' option sets `int', `long', and pointer types to 32 bits, and
21242     generates code that runs on any i386 system.
21243
21244     The `-m64' option sets `int' to 32 bits and `long' and pointer
21245     types to 64 bits, and generates code for the x86-64 architecture.
21246     For Darwin only the `-m64' option also turns off the `-fno-pic'
21247     and `-mdynamic-no-pic' options.
21248
21249     The `-mx32' option sets `int', `long', and pointer types to 32
21250     bits, and generates code for the x86-64 architecture.
21251
21252     The `-m16' option is the same as `-m32', except for that it
21253     outputs the `.code16gcc' assembly directive at the beginning of
21254     the assembly output so that the binary can run in 16-bit mode.
21255
21256`-mno-red-zone'
21257     Do not use a so-called "red zone" for x86-64 code.  The red zone
21258     is mandated by the x86-64 ABI; it is a 128-byte area beyond the
21259     location of the stack pointer that is not modified by signal or
21260     interrupt handlers and therefore can be used for temporary data
21261     without adjusting the stack pointer.  The flag `-mno-red-zone'
21262     disables this red zone.
21263
21264`-mcmodel=small'
21265     Generate code for the small code model: the program and its
21266     symbols must be linked in the lower 2 GB of the address space.
21267     Pointers are 64 bits.  Programs can be statically or dynamically
21268     linked.  This is the default code model.
21269
21270`-mcmodel=kernel'
21271     Generate code for the kernel code model.  The kernel runs in the
21272     negative 2 GB of the address space.  This model has to be used for
21273     Linux kernel code.
21274
21275`-mcmodel=medium'
21276     Generate code for the medium model: the program is linked in the
21277     lower 2 GB of the address space.  Small symbols are also placed
21278     there.  Symbols with sizes larger than `-mlarge-data-threshold'
21279     are put into large data or BSS sections and can be located above
21280     2GB.  Programs can be statically or dynamically linked.
21281
21282`-mcmodel=large'
21283     Generate code for the large model.  This model makes no assumptions
21284     about addresses and sizes of sections.
21285
21286`-maddress-mode=long'
21287     Generate code for long address mode.  This is only supported for
21288     64-bit and x32 environments.  It is the default address mode for
21289     64-bit environments.
21290
21291`-maddress-mode=short'
21292     Generate code for short address mode.  This is only supported for
21293     32-bit and x32 environments.  It is the default address mode for
21294     32-bit and x32 environments.
21295
21296
21297File: gcc.info,  Node: x86 Windows Options,  Next: Xstormy16 Options,  Prev: x86 Options,  Up: Submodel Options
21298
212993.17.54 x86 Windows Options
21300---------------------------
21301
21302These additional options are available for Microsoft Windows targets:
21303
21304`-mconsole'
21305     This option specifies that a console application is to be
21306     generated, by instructing the linker to set the PE header
21307     subsystem type required for console applications.  This option is
21308     available for Cygwin and MinGW targets and is enabled by default
21309     on those targets.
21310
21311`-mdll'
21312     This option is available for Cygwin and MinGW targets.  It
21313     specifies that a DLL--a dynamic link library--is to be generated,
21314     enabling the selection of the required runtime startup object and
21315     entry point.
21316
21317`-mnop-fun-dllimport'
21318     This option is available for Cygwin and MinGW targets.  It
21319     specifies that the `dllimport' attribute should be ignored.
21320
21321`-mthread'
21322     This option is available for MinGW targets. It specifies that
21323     MinGW-specific thread support is to be used.
21324
21325`-municode'
21326     This option is available for MinGW-w64 targets.  It causes the
21327     `UNICODE' preprocessor macro to be predefined, and chooses
21328     Unicode-capable runtime startup code.
21329
21330`-mwin32'
21331     This option is available for Cygwin and MinGW targets.  It
21332     specifies that the typical Microsoft Windows predefined macros are
21333     to be set in the pre-processor, but does not influence the choice
21334     of runtime library/startup code.
21335
21336`-mwindows'
21337     This option is available for Cygwin and MinGW targets.  It
21338     specifies that a GUI application is to be generated by instructing
21339     the linker to set the PE header subsystem type appropriately.
21340
21341`-fno-set-stack-executable'
21342     This option is available for MinGW targets. It specifies that the
21343     executable flag for the stack used by nested functions isn't set.
21344     This is necessary for binaries running in kernel mode of Microsoft
21345     Windows, as there the User32 API, which is used to set executable
21346     privileges, isn't available.
21347
21348`-fwritable-relocated-rdata'
21349     This option is available for MinGW and Cygwin targets.  It
21350     specifies that relocated-data in read-only section is put into
21351     .data section.  This is a necessary for older runtimes not
21352     supporting modification of .rdata sections for pseudo-relocation.
21353
21354`-mpe-aligned-commons'
21355     This option is available for Cygwin and MinGW targets.  It
21356     specifies that the GNU extension to the PE file format that
21357     permits the correct alignment of COMMON variables should be used
21358     when generating code.  It is enabled by default if GCC detects
21359     that the target assembler found during configuration supports the
21360     feature.
21361
21362 See also under *Note x86 Options:: for standard options.
21363
21364
21365File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86 Windows Options,  Up: Submodel Options
21366
213673.17.55 Xstormy16 Options
21368-------------------------
21369
21370These options are defined for Xstormy16:
21371
21372`-msim'
21373     Choose startup files and linker script suitable for the simulator.
21374
21375
21376File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
21377
213783.17.56 Xtensa Options
21379----------------------
21380
21381These options are supported for Xtensa targets:
21382
21383`-mconst16'
21384`-mno-const16'
21385     Enable or disable use of `CONST16' instructions for loading
21386     constant values.  The `CONST16' instruction is currently not a
21387     standard option from Tensilica.  When enabled, `CONST16'
21388     instructions are always used in place of the standard `L32R'
21389     instructions.  The use of `CONST16' is enabled by default only if
21390     the `L32R' instruction is not available.
21391
21392`-mfused-madd'
21393`-mno-fused-madd'
21394     Enable or disable use of fused multiply/add and multiply/subtract
21395     instructions in the floating-point option.  This has no effect if
21396     the floating-point option is not also enabled.  Disabling fused
21397     multiply/add and multiply/subtract instructions forces the
21398     compiler to use separate instructions for the multiply and
21399     add/subtract operations.  This may be desirable in some cases
21400     where strict IEEE 754-compliant results are required: the fused
21401     multiply add/subtract instructions do not round the intermediate
21402     result, thereby producing results with _more_ bits of precision
21403     than specified by the IEEE standard.  Disabling fused multiply
21404     add/subtract instructions also ensures that the program output is
21405     not sensitive to the compiler's ability to combine multiply and
21406     add/subtract operations.
21407
21408`-mserialize-volatile'
21409`-mno-serialize-volatile'
21410     When this option is enabled, GCC inserts `MEMW' instructions before
21411     `volatile' memory references to guarantee sequential consistency.
21412     The default is `-mserialize-volatile'.  Use
21413     `-mno-serialize-volatile' to omit the `MEMW' instructions.
21414
21415`-mforce-no-pic'
21416     For targets, like GNU/Linux, where all user-mode Xtensa code must
21417     be position-independent code (PIC), this option disables PIC for
21418     compiling kernel code.
21419
21420`-mtext-section-literals'
21421`-mno-text-section-literals'
21422     These options control the treatment of literal pools.  The default
21423     is `-mno-text-section-literals', which places literals in a
21424     separate section in the output file.  This allows the literal pool
21425     to be placed in a data RAM/ROM, and it also allows the linker to
21426     combine literal pools from separate object files to remove
21427     redundant literals and improve code size.  With
21428     `-mtext-section-literals', the literals are interspersed in the
21429     text section in order to keep them as close as possible to their
21430     references.  This may be necessary for large assembly files.
21431
21432`-mtarget-align'
21433`-mno-target-align'
21434     When this option is enabled, GCC instructs the assembler to
21435     automatically align instructions to reduce branch penalties at the
21436     expense of some code density.  The assembler attempts to widen
21437     density instructions to align branch targets and the instructions
21438     following call instructions.  If there are not enough preceding
21439     safe density instructions to align a target, no widening is
21440     performed.  The default is `-mtarget-align'.  These options do not
21441     affect the treatment of auto-aligned instructions like `LOOP',
21442     which the assembler always aligns, either by widening density
21443     instructions or by inserting NOP instructions.
21444
21445`-mlongcalls'
21446`-mno-longcalls'
21447     When this option is enabled, GCC instructs the assembler to
21448     translate direct calls to indirect calls unless it can determine
21449     that the target of a direct call is in the range allowed by the
21450     call instruction.  This translation typically occurs for calls to
21451     functions in other source files.  Specifically, the assembler
21452     translates a direct `CALL' instruction into an `L32R' followed by
21453     a `CALLX' instruction.  The default is `-mno-longcalls'.  This
21454     option should be used in programs where the call target can
21455     potentially be out of range.  This option is implemented in the
21456     assembler, not the compiler, so the assembly code generated by GCC
21457     still shows direct call instructions--look at the disassembled
21458     object code to see the actual instructions.  Note that the
21459     assembler uses an indirect call for every cross-file call, not
21460     just those that really are out of range.
21461
21462
21463File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
21464
214653.17.57 zSeries Options
21466-----------------------
21467
21468These are listed under *Note S/390 and zSeries Options::.
21469
21470
21471File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
21472
214733.18 Options for Code Generation Conventions
21474============================================
21475
21476These machine-independent options control the interface conventions
21477used in code generation.
21478
21479 Most of them have both positive and negative forms; the negative form
21480of `-ffoo' is `-fno-foo'.  In the table below, only one of the forms is
21481listed--the one that is not the default.  You can figure out the other
21482form by either removing `no-' or adding it.
21483
21484`-fbounds-check'
21485     For front ends that support it, generate additional code to check
21486     that indices used to access arrays are within the declared range.
21487     This is currently only supported by the Java and Fortran front
21488     ends, where this option defaults to true and false respectively.
21489
21490`-fstack-reuse=REUSE-LEVEL'
21491     This option controls stack space reuse for user declared
21492     local/auto variables and compiler generated temporaries.
21493     REUSE_LEVEL can be `all', `named_vars', or `none'. `all' enables
21494     stack reuse for all local variables and temporaries, `named_vars'
21495     enables the reuse only for user defined local variables with
21496     names, and `none' disables stack reuse completely. The default
21497     value is `all'. The option is needed when the program extends the
21498     lifetime of a scoped local variable or a compiler generated
21499     temporary beyond the end point defined by the language.  When a
21500     lifetime of a variable ends, and if the variable lives in memory,
21501     the optimizing compiler has the freedom to reuse its stack space
21502     with other temporaries or scoped local variables whose live range
21503     does not overlap with it. Legacy code extending local lifetime is
21504     likely to break with the stack reuse optimization.
21505
21506     For example,
21507
21508             int *p;
21509             {
21510               int local1;
21511
21512               p = &local1;
21513               local1 = 10;
21514               ....
21515             }
21516             {
21517                int local2;
21518                local2 = 20;
21519                ...
21520             }
21521
21522             if (*p == 10)  // out of scope use of local1
21523               {
21524
21525               }
21526
21527     Another example:
21528
21529             struct A
21530             {
21531                 A(int k) : i(k), j(k) { }
21532                 int i;
21533                 int j;
21534             };
21535
21536             A *ap;
21537
21538             void foo(const A& ar)
21539             {
21540                ap = &ar;
21541             }
21542
21543             void bar()
21544             {
21545                foo(A(10)); // temp object's lifetime ends when foo returns
21546
21547                {
21548                  A a(20);
21549                  ....
21550                }
21551                ap->i+= 10;  // ap references out of scope temp whose space
21552                             // is reused with a. What is the value of ap->i?
21553             }
21554
21555     The lifetime of a compiler generated temporary is well defined by
21556     the C++ standard. When a lifetime of a temporary ends, and if the
21557     temporary lives in memory, the optimizing compiler has the freedom
21558     to reuse its stack space with other temporaries or scoped local
21559     variables whose live range does not overlap with it. However some
21560     of the legacy code relies on the behavior of older compilers in
21561     which temporaries' stack space is not reused, the aggressive stack
21562     reuse can lead to runtime errors. This option is used to control
21563     the temporary stack reuse optimization.
21564
21565`-ftrapv'
21566     This option generates traps for signed overflow on addition,
21567     subtraction, multiplication operations.
21568
21569`-fwrapv'
21570     This option instructs the compiler to assume that signed arithmetic
21571     overflow of addition, subtraction and multiplication wraps around
21572     using twos-complement representation.  This flag enables some
21573     optimizations and disables others.  This option is enabled by
21574     default for the Java front end, as required by the Java language
21575     specification.
21576
21577`-fexceptions'
21578     Enable exception handling.  Generates extra code needed to
21579     propagate exceptions.  For some targets, this implies GCC
21580     generates frame unwind information for all functions, which can
21581     produce significant data size overhead, although it does not
21582     affect execution.  If you do not specify this option, GCC enables
21583     it by default for languages like C++ that normally require
21584     exception handling, and disables it for languages like C that do
21585     not normally require it.  However, you may need to enable this
21586     option when compiling C code that needs to interoperate properly
21587     with exception handlers written in C++.  You may also wish to
21588     disable this option if you are compiling older C++ programs that
21589     don't use exception handling.
21590
21591`-fnon-call-exceptions'
21592     Generate code that allows trapping instructions to throw
21593     exceptions.  Note that this requires platform-specific runtime
21594     support that does not exist everywhere.  Moreover, it only allows
21595     _trapping_ instructions to throw exceptions, i.e. memory
21596     references or floating-point instructions.  It does not allow
21597     exceptions to be thrown from arbitrary signal handlers such as
21598     `SIGALRM'.
21599
21600`-fdelete-dead-exceptions'
21601     Consider that instructions that may throw exceptions but don't
21602     otherwise contribute to the execution of the program can be
21603     optimized away.  This option is enabled by default for the Ada
21604     front end, as permitted by the Ada language specification.
21605     Optimization passes that cause dead exceptions to be removed are
21606     enabled independently at different optimization levels.
21607
21608`-funwind-tables'
21609     Similar to `-fexceptions', except that it just generates any needed
21610     static data, but does not affect the generated code in any other
21611     way.  You normally do not need to enable this option; instead, a
21612     language processor that needs this handling enables it on your
21613     behalf.
21614
21615`-fasynchronous-unwind-tables'
21616     Generate unwind table in DWARF 2 format, if supported by target
21617     machine.  The table is exact at each instruction boundary, so it
21618     can be used for stack unwinding from asynchronous events (such as
21619     debugger or garbage collector).
21620
21621`-fno-gnu-unique'
21622     On systems with recent GNU assembler and C library, the C++
21623     compiler uses the `STB_GNU_UNIQUE' binding to make sure that
21624     definitions of template static data members and static local
21625     variables in inline functions are unique even in the presence of
21626     `RTLD_LOCAL'; this is necessary to avoid problems with a library
21627     used by two different `RTLD_LOCAL' plugins depending on a
21628     definition in one of them and therefore disagreeing with the other
21629     one about the binding of the symbol.  But this causes `dlclose' to
21630     be ignored for affected DSOs; if your program relies on
21631     reinitialization of a DSO via `dlclose' and `dlopen', you can use
21632     `-fno-gnu-unique'.
21633
21634`-fpcc-struct-return'
21635     Return "short" `struct' and `union' values in memory like longer
21636     ones, rather than in registers.  This convention is less
21637     efficient, but it has the advantage of allowing intercallability
21638     between GCC-compiled files and files compiled with other
21639     compilers, particularly the Portable C Compiler (pcc).
21640
21641     The precise convention for returning structures in memory depends
21642     on the target configuration macros.
21643
21644     Short structures and unions are those whose size and alignment
21645     match that of some integer type.
21646
21647     *Warning:* code compiled with the `-fpcc-struct-return' switch is
21648     not binary compatible with code compiled with the
21649     `-freg-struct-return' switch.  Use it to conform to a non-default
21650     application binary interface.
21651
21652`-freg-struct-return'
21653     Return `struct' and `union' values in registers when possible.
21654     This is more efficient for small structures than
21655     `-fpcc-struct-return'.
21656
21657     If you specify neither `-fpcc-struct-return' nor
21658     `-freg-struct-return', GCC defaults to whichever convention is
21659     standard for the target.  If there is no standard convention, GCC
21660     defaults to `-fpcc-struct-return', except on targets where GCC is
21661     the principal compiler.  In those cases, we can choose the
21662     standard, and we chose the more efficient register return
21663     alternative.
21664
21665     *Warning:* code compiled with the `-freg-struct-return' switch is
21666     not binary compatible with code compiled with the
21667     `-fpcc-struct-return' switch.  Use it to conform to a non-default
21668     application binary interface.
21669
21670`-fshort-enums'
21671     Allocate to an `enum' type only as many bytes as it needs for the
21672     declared range of possible values.  Specifically, the `enum' type
21673     is equivalent to the smallest integer type that has enough room.
21674
21675     *Warning:* the `-fshort-enums' switch causes GCC to generate code
21676     that is not binary compatible with code generated without that
21677     switch.  Use it to conform to a non-default application binary
21678     interface.
21679
21680`-fshort-double'
21681     Use the same size for `double' as for `float'.
21682
21683     *Warning:* the `-fshort-double' switch causes GCC to generate code
21684     that is not binary compatible with code generated without that
21685     switch.  Use it to conform to a non-default application binary
21686     interface.
21687
21688`-fshort-wchar'
21689     Override the underlying type for `wchar_t' to be `short unsigned
21690     int' instead of the default for the target.  This option is useful
21691     for building programs to run under WINE.
21692
21693     *Warning:* the `-fshort-wchar' switch causes GCC to generate code
21694     that is not binary compatible with code generated without that
21695     switch.  Use it to conform to a non-default application binary
21696     interface.
21697
21698`-fno-common'
21699     In C code, controls the placement of uninitialized global
21700     variables.  Unix C compilers have traditionally permitted multiple
21701     definitions of such variables in different compilation units by
21702     placing the variables in a common block.  This is the behavior
21703     specified by `-fcommon', and is the default for GCC on most
21704     targets.  On the other hand, this behavior is not required by ISO
21705     C, and on some targets may carry a speed or code size penalty on
21706     variable references.  The `-fno-common' option specifies that the
21707     compiler should place uninitialized global variables in the data
21708     section of the object file, rather than generating them as common
21709     blocks.  This has the effect that if the same variable is declared
21710     (without `extern') in two different compilations, you get a
21711     multiple-definition error when you link them.  In this case, you
21712     must compile with `-fcommon' instead.  Compiling with
21713     `-fno-common' is useful on targets for which it provides better
21714     performance, or if you wish to verify that the program will work
21715     on other systems that always treat uninitialized variable
21716     declarations this way.
21717
21718`-fno-ident'
21719     Ignore the `#ident' directive.
21720
21721`-finhibit-size-directive'
21722     Don't output a `.size' assembler directive, or anything else that
21723     would cause trouble if the function is split in the middle, and the
21724     two halves are placed at locations far apart in memory.  This
21725     option is used when compiling `crtstuff.c'; you should not need to
21726     use it for anything else.
21727
21728`-fverbose-asm'
21729     Put extra commentary information in the generated assembly code to
21730     make it more readable.  This option is generally only of use to
21731     those who actually need to read the generated assembly code
21732     (perhaps while debugging the compiler itself).
21733
21734     `-fno-verbose-asm', the default, causes the extra information to
21735     be omitted and is useful when comparing two assembler files.
21736
21737`-frecord-gcc-switches'
21738     This switch causes the command line used to invoke the compiler to
21739     be recorded into the object file that is being created.  This
21740     switch is only implemented on some targets and the exact format of
21741     the recording is target and binary file format dependent, but it
21742     usually takes the form of a section containing ASCII text.  This
21743     switch is related to the `-fverbose-asm' switch, but that switch
21744     only records information in the assembler output file as comments,
21745     so it never reaches the object file.  See also
21746     `-grecord-gcc-switches' for another way of storing compiler
21747     options into the object file.
21748
21749`-fpic'
21750     Generate position-independent code (PIC) suitable for use in a
21751     shared library, if supported for the target machine.  Such code
21752     accesses all constant addresses through a global offset table
21753     (GOT).  The dynamic loader resolves the GOT entries when the
21754     program starts (the dynamic loader is not part of GCC; it is part
21755     of the operating system).  If the GOT size for the linked
21756     executable exceeds a machine-specific maximum size, you get an
21757     error message from the linker indicating that `-fpic' does not
21758     work; in that case, recompile with `-fPIC' instead.  (These
21759     maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
21760     x86 has no such limit.)
21761
21762     Position-independent code requires special support, and therefore
21763     works only on certain machines.  For the x86, GCC supports PIC for
21764     System V but not for the Sun 386i.  Code generated for the IBM
21765     RS/6000 is always position-independent.
21766
21767     When this flag is set, the macros `__pic__' and `__PIC__' are
21768     defined to 1.
21769
21770`-fPIC'
21771     If supported for the target machine, emit position-independent
21772     code, suitable for dynamic linking and avoiding any limit on the
21773     size of the global offset table.  This option makes a difference
21774     on the m68k, PowerPC and SPARC.
21775
21776     Position-independent code requires special support, and therefore
21777     works only on certain machines.
21778
21779     When this flag is set, the macros `__pic__' and `__PIC__' are
21780     defined to 2.
21781
21782`-fpie'
21783`-fPIE'
21784     These options are similar to `-fpic' and `-fPIC', but generated
21785     position independent code can be only linked into executables.
21786     Usually these options are used when `-pie' GCC option is used
21787     during linking.
21788
21789     `-fpie' and `-fPIE' both define the macros `__pie__' and
21790     `__PIE__'.  The macros have the value 1 for `-fpie' and 2 for
21791     `-fPIE'.
21792
21793`-fno-jump-tables'
21794     Do not use jump tables for switch statements even where it would be
21795     more efficient than other code generation strategies.  This option
21796     is of use in conjunction with `-fpic' or `-fPIC' for building code
21797     that forms part of a dynamic linker and cannot reference the
21798     address of a jump table.  On some targets, jump tables do not
21799     require a GOT and this option is not needed.
21800
21801`-ffixed-REG'
21802     Treat the register named REG as a fixed register; generated code
21803     should never refer to it (except perhaps as a stack pointer, frame
21804     pointer or in some other fixed role).
21805
21806     REG must be the name of a register.  The register names accepted
21807     are machine-specific and are defined in the `REGISTER_NAMES' macro
21808     in the machine description macro file.
21809
21810     This flag does not have a negative form, because it specifies a
21811     three-way choice.
21812
21813`-fcall-used-REG'
21814     Treat the register named REG as an allocable register that is
21815     clobbered by function calls.  It may be allocated for temporaries
21816     or variables that do not live across a call.  Functions compiled
21817     this way do not save and restore the register REG.
21818
21819     It is an error to use this flag with the frame pointer or stack
21820     pointer.  Use of this flag for other registers that have fixed
21821     pervasive roles in the machine's execution model produces
21822     disastrous results.
21823
21824     This flag does not have a negative form, because it specifies a
21825     three-way choice.
21826
21827`-fcall-saved-REG'
21828     Treat the register named REG as an allocable register saved by
21829     functions.  It may be allocated even for temporaries or variables
21830     that live across a call.  Functions compiled this way save and
21831     restore the register REG if they use it.
21832
21833     It is an error to use this flag with the frame pointer or stack
21834     pointer.  Use of this flag for other registers that have fixed
21835     pervasive roles in the machine's execution model produces
21836     disastrous results.
21837
21838     A different sort of disaster results from the use of this flag for
21839     a register in which function values may be returned.
21840
21841     This flag does not have a negative form, because it specifies a
21842     three-way choice.
21843
21844`-fpack-struct[=N]'
21845     Without a value specified, pack all structure members together
21846     without holes.  When a value is specified (which must be a small
21847     power of two), pack structure members according to this value,
21848     representing the maximum alignment (that is, objects with default
21849     alignment requirements larger than this are output potentially
21850     unaligned at the next fitting location.
21851
21852     *Warning:* the `-fpack-struct' switch causes GCC to generate code
21853     that is not binary compatible with code generated without that
21854     switch.  Additionally, it makes the code suboptimal.  Use it to
21855     conform to a non-default application binary interface.
21856
21857`-finstrument-functions'
21858     Generate instrumentation calls for entry and exit to functions.
21859     Just after function entry and just before function exit, the
21860     following profiling functions are called with the address of the
21861     current function and its call site.  (On some platforms,
21862     `__builtin_return_address' does not work beyond the current
21863     function, so the call site information may not be available to the
21864     profiling functions otherwise.)
21865
21866          void __cyg_profile_func_enter (void *this_fn,
21867                                         void *call_site);
21868          void __cyg_profile_func_exit  (void *this_fn,
21869                                         void *call_site);
21870
21871     The first argument is the address of the start of the current
21872     function, which may be looked up exactly in the symbol table.
21873
21874     This instrumentation is also done for functions expanded inline in
21875     other functions.  The profiling calls indicate where,
21876     conceptually, the inline function is entered and exited.  This
21877     means that addressable versions of such functions must be
21878     available.  If all your uses of a function are expanded inline,
21879     this may mean an additional expansion of code size.  If you use
21880     `extern inline' in your C code, an addressable version of such
21881     functions must be provided.  (This is normally the case anyway,
21882     but if you get lucky and the optimizer always expands the
21883     functions inline, you might have gotten away without providing
21884     static copies.)
21885
21886     A function may be given the attribute `no_instrument_function', in
21887     which case this instrumentation is not done.  This can be used, for
21888     example, for the profiling functions listed above, high-priority
21889     interrupt routines, and any functions from which the profiling
21890     functions cannot safely be called (perhaps signal handlers, if the
21891     profiling routines generate output or allocate memory).
21892
21893`-finstrument-functions-exclude-file-list=FILE,FILE,...'
21894     Set the list of functions that are excluded from instrumentation
21895     (see the description of `-finstrument-functions').  If the file
21896     that contains a function definition matches with one of FILE, then
21897     that function is not instrumented.  The match is done on
21898     substrings: if the FILE parameter is a substring of the file name,
21899     it is considered to be a match.
21900
21901     For example:
21902
21903          -finstrument-functions-exclude-file-list=/bits/stl,include/sys
21904
21905     excludes any inline function defined in files whose pathnames
21906     contain `/bits/stl' or `include/sys'.
21907
21908     If, for some reason, you want to include letter `,' in one of SYM,
21909     write `\,'. For example,
21910     `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
21911     single quote surrounding the option).
21912
21913`-finstrument-functions-exclude-function-list=SYM,SYM,...'
21914     This is similar to `-finstrument-functions-exclude-file-list', but
21915     this option sets the list of function names to be excluded from
21916     instrumentation.  The function name to be matched is its
21917     user-visible name, such as `vector<int> blah(const vector<int>
21918     &)', not the internal mangled name (e.g.,
21919     `_Z4blahRSt6vectorIiSaIiEE').  The match is done on substrings: if
21920     the SYM parameter is a substring of the function name, it is
21921     considered to be a match.  For C99 and C++ extended identifiers,
21922     the function name must be given in UTF-8, not using universal
21923     character names.
21924
21925`-fstack-check'
21926     Generate code to verify that you do not go beyond the boundary of
21927     the stack.  You should specify this flag if you are running in an
21928     environment with multiple threads, but you only rarely need to
21929     specify it in a single-threaded environment since stack overflow
21930     is automatically detected on nearly all systems if there is only
21931     one stack.
21932
21933     Note that this switch does not actually cause checking to be done;
21934     the operating system or the language runtime must do that.  The
21935     switch causes generation of code to ensure that they see the stack
21936     being extended.
21937
21938     You can additionally specify a string parameter: `no' means no
21939     checking, `generic' means force the use of old-style checking,
21940     `specific' means use the best checking method and is equivalent to
21941     bare `-fstack-check'.
21942
21943     Old-style checking is a generic mechanism that requires no specific
21944     target support in the compiler but comes with the following
21945     drawbacks:
21946
21947       1. Modified allocation strategy for large objects: they are
21948          always allocated dynamically if their size exceeds a fixed
21949          threshold.
21950
21951       2. Fixed limit on the size of the static frame of functions:
21952          when it is topped by a particular function, stack checking is
21953          not reliable and a warning is issued by the compiler.
21954
21955       3. Inefficiency: because of both the modified allocation
21956          strategy and the generic implementation, code performance is
21957          hampered.
21958
21959     Note that old-style stack checking is also the fallback method for
21960     `specific' if no target support has been added in the compiler.
21961
21962`-fstack-limit-register=REG'
21963`-fstack-limit-symbol=SYM'
21964`-fno-stack-limit'
21965     Generate code to ensure that the stack does not grow beyond a
21966     certain value, either the value of a register or the address of a
21967     symbol.  If a larger stack is required, a signal is raised at run
21968     time.  For most targets, the signal is raised before the stack
21969     overruns the boundary, so it is possible to catch the signal
21970     without taking special precautions.
21971
21972     For instance, if the stack starts at absolute address `0x80000000'
21973     and grows downwards, you can use the flags
21974     `-fstack-limit-symbol=__stack_limit' and
21975     `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
21976     of 128KB.  Note that this may only work with the GNU linker.
21977
21978`-fsplit-stack'
21979     Generate code to automatically split the stack before it overflows.
21980     The resulting program has a discontiguous stack which can only
21981     overflow if the program is unable to allocate any more memory.
21982     This is most useful when running threaded programs, as it is no
21983     longer necessary to calculate a good stack size to use for each
21984     thread.  This is currently only implemented for the x86 targets
21985     running GNU/Linux.
21986
21987     When code compiled with `-fsplit-stack' calls code compiled
21988     without `-fsplit-stack', there may not be much stack space
21989     available for the latter code to run.  If compiling all code,
21990     including library code, with `-fsplit-stack' is not an option,
21991     then the linker can fix up these calls so that the code compiled
21992     without `-fsplit-stack' always has a large stack.  Support for
21993     this is implemented in the gold linker in GNU binutils release 2.21
21994     and later.
21995
21996`-fleading-underscore'
21997     This option and its counterpart, `-fno-leading-underscore',
21998     forcibly change the way C symbols are represented in the object
21999     file.  One use is to help link with legacy assembly code.
22000
22001     *Warning:* the `-fleading-underscore' switch causes GCC to
22002     generate code that is not binary compatible with code generated
22003     without that switch.  Use it to conform to a non-default
22004     application binary interface.  Not all targets provide complete
22005     support for this switch.
22006
22007`-ftls-model=MODEL'
22008     Alter the thread-local storage model to be used (*note
22009     Thread-Local::).  The MODEL argument should be one of
22010     `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
22011     Note that the choice is subject to optimization: the compiler may
22012     use a more efficient model for symbols not visible outside of the
22013     translation unit, or if `-fpic' is not given on the command line.
22014
22015     The default without `-fpic' is `initial-exec'; with `-fpic' the
22016     default is `global-dynamic'.
22017
22018`-fvisibility=[default|internal|hidden|protected]'
22019     Set the default ELF image symbol visibility to the specified
22020     option--all symbols are marked with this unless overridden within
22021     the code.  Using this feature can very substantially improve
22022     linking and load times of shared object libraries, produce more
22023     optimized code, provide near-perfect API export and prevent symbol
22024     clashes.  It is *strongly* recommended that you use this in any
22025     shared objects you distribute.
22026
22027     Despite the nomenclature, `default' always means public; i.e.,
22028     available to be linked against from outside the shared object.
22029     `protected' and `internal' are pretty useless in real-world usage
22030     so the only other commonly used option is `hidden'.  The default
22031     if `-fvisibility' isn't specified is `default', i.e., make every
22032     symbol public.
22033
22034     A good explanation of the benefits offered by ensuring ELF symbols
22035     have the correct visibility is given by "How To Write Shared
22036     Libraries" by Ulrich Drepper (which can be found at
22037     `http://www.akkadia.org/drepper/')--however a superior solution
22038     made possible by this option to marking things hidden when the
22039     default is public is to make the default hidden and mark things
22040     public.  This is the norm with DLLs on Windows and with
22041     `-fvisibility=hidden' and `__attribute__
22042     ((visibility("default")))' instead of `__declspec(dllexport)' you
22043     get almost identical semantics with identical syntax.  This is a
22044     great boon to those working with cross-platform projects.
22045
22046     For those adding visibility support to existing code, you may find
22047     `#pragma GCC visibility' of use.  This works by you enclosing the
22048     declarations you wish to set visibility for with (for example)
22049     `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
22050     pop'.  Bear in mind that symbol visibility should be viewed *as
22051     part of the API interface contract* and thus all new code should
22052     always specify visibility when it is not the default; i.e.,
22053     declarations only for use within the local DSO should *always* be
22054     marked explicitly as hidden as so to avoid PLT indirection
22055     overheads--making this abundantly clear also aids readability and
22056     self-documentation of the code.  Note that due to ISO C++
22057     specification requirements, `operator new' and `operator delete'
22058     must always be of default visibility.
22059
22060     Be aware that headers from outside your project, in particular
22061     system headers and headers from any other library you use, may not
22062     be expecting to be compiled with visibility other than the
22063     default.  You may need to explicitly say `#pragma GCC visibility
22064     push(default)' before including any such headers.
22065
22066     `extern' declarations are not affected by `-fvisibility', so a lot
22067     of code can be recompiled with `-fvisibility=hidden' with no
22068     modifications.  However, this means that calls to `extern'
22069     functions with no explicit visibility use the PLT, so it is more
22070     effective to use `__attribute ((visibility))' and/or `#pragma GCC
22071     visibility' to tell the compiler which `extern' declarations
22072     should be treated as hidden.
22073
22074     Note that `-fvisibility' does affect C++ vague linkage entities.
22075     This means that, for instance, an exception class that is be
22076     thrown between DSOs must be explicitly marked with default
22077     visibility so that the `type_info' nodes are unified between the
22078     DSOs.
22079
22080     An overview of these techniques, their benefits and how to use them
22081     is at `http://gcc.gnu.org/wiki/Visibility'.
22082
22083`-fstrict-volatile-bitfields'
22084     This option should be used if accesses to volatile bit-fields (or
22085     other structure fields, although the compiler usually honors those
22086     types anyway) should use a single access of the width of the
22087     field's type, aligned to a natural alignment if possible.  For
22088     example, targets with memory-mapped peripheral registers might
22089     require all such accesses to be 16 bits wide; with this flag you
22090     can declare all peripheral bit-fields as `unsigned short'
22091     (assuming short is 16 bits on these targets) to force GCC to use
22092     16-bit accesses instead of, perhaps, a more efficient 32-bit
22093     access.
22094
22095     If this option is disabled, the compiler uses the most efficient
22096     instruction.  In the previous example, that might be a 32-bit load
22097     instruction, even though that accesses bytes that do not contain
22098     any portion of the bit-field, or memory-mapped registers unrelated
22099     to the one being updated.
22100
22101     In some cases, such as when the `packed' attribute is applied to a
22102     structure field, it may not be possible to access the field with a
22103     single read or write that is correctly aligned for the target
22104     machine.  In this case GCC falls back to generating multiple
22105     accesses rather than code that will fault or truncate the result
22106     at run time.
22107
22108     Note:  Due to restrictions of the C/C++11 memory model, write
22109     accesses are not allowed to touch non bit-field members.  It is
22110     therefore recommended to define all bits of the field's type as
22111     bit-field members.
22112
22113     The default value of this option is determined by the application
22114     binary interface for the target processor.
22115
22116`-fsync-libcalls'
22117     This option controls whether any out-of-line instance of the
22118     `__sync' family of functions may be used to implement the C++11
22119     `__atomic' family of functions.
22120
22121     The default value of this option is enabled, thus the only useful
22122     form of the option is `-fno-sync-libcalls'.  This option is used in
22123     the implementation of the `libatomic' runtime library.
22124
22125
22126
22127File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
22128
221293.19 Environment Variables Affecting GCC
22130========================================
22131
22132This section describes several environment variables that affect how GCC
22133operates.  Some of them work by specifying directories or prefixes to
22134use when searching for various kinds of files.  Some are used to
22135specify other aspects of the compilation environment.
22136
22137 Note that you can also specify places to search using options such as
22138`-B', `-I' and `-L' (*note Directory Options::).  These take precedence
22139over places specified using environment variables, which in turn take
22140precedence over those specified by the configuration of GCC.  *Note
22141Controlling the Compilation Driver `gcc': (gccint)Driver.
22142
22143`LANG'
22144`LC_CTYPE'
22145`LC_MESSAGES'
22146`LC_ALL'
22147     These environment variables control the way that GCC uses
22148     localization information which allows GCC to work with different
22149     national conventions.  GCC inspects the locale categories
22150     `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
22151     These locale categories can be set to any value supported by your
22152     installation.  A typical value is `en_GB.UTF-8' for English in the
22153     United Kingdom encoded in UTF-8.
22154
22155     The `LC_CTYPE' environment variable specifies character
22156     classification.  GCC uses it to determine the character boundaries
22157     in a string; this is needed for some multibyte encodings that
22158     contain quote and escape characters that are otherwise interpreted
22159     as a string end or escape.
22160
22161     The `LC_MESSAGES' environment variable specifies the language to
22162     use in diagnostic messages.
22163
22164     If the `LC_ALL' environment variable is set, it overrides the value
22165     of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
22166     `LC_MESSAGES' default to the value of the `LANG' environment
22167     variable.  If none of these variables are set, GCC defaults to
22168     traditional C English behavior.
22169
22170`TMPDIR'
22171     If `TMPDIR' is set, it specifies the directory to use for temporary
22172     files.  GCC uses temporary files to hold the output of one stage of
22173     compilation which is to be used as input to the next stage: for
22174     example, the output of the preprocessor, which is the input to the
22175     compiler proper.
22176
22177`GCC_COMPARE_DEBUG'
22178     Setting `GCC_COMPARE_DEBUG' is nearly equivalent to passing
22179     `-fcompare-debug' to the compiler driver.  See the documentation
22180     of this option for more details.
22181
22182`GCC_EXEC_PREFIX'
22183     If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
22184     names of the subprograms executed by the compiler.  No slash is
22185     added when this prefix is combined with the name of a subprogram,
22186     but you can specify a prefix that ends with a slash if you wish.
22187
22188     If `GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
22189     appropriate prefix to use based on the pathname it is invoked with.
22190
22191     If GCC cannot find the subprogram using the specified prefix, it
22192     tries looking in the usual places for the subprogram.
22193
22194     The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
22195     PREFIX is the prefix to the installed compiler. In many cases
22196     PREFIX is the value of `prefix' when you ran the `configure'
22197     script.
22198
22199     Other prefixes specified with `-B' take precedence over this
22200     prefix.
22201
22202     This prefix is also used for finding files such as `crt0.o' that
22203     are used for linking.
22204
22205     In addition, the prefix is used in an unusual way in finding the
22206     directories to search for header files.  For each of the standard
22207     directories whose name normally begins with `/usr/local/lib/gcc'
22208     (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
22209     replacing that beginning with the specified prefix to produce an
22210     alternate directory name.  Thus, with `-Bfoo/', GCC searches
22211     `foo/bar' just before it searches the standard directory
22212     `/usr/local/lib/bar'.  If a standard directory begins with the
22213     configured PREFIX then the value of PREFIX is replaced by
22214     `GCC_EXEC_PREFIX' when looking for header files.
22215
22216`COMPILER_PATH'
22217     The value of `COMPILER_PATH' is a colon-separated list of
22218     directories, much like `PATH'.  GCC tries the directories thus
22219     specified when searching for subprograms, if it can't find the
22220     subprograms using `GCC_EXEC_PREFIX'.
22221
22222`LIBRARY_PATH'
22223     The value of `LIBRARY_PATH' is a colon-separated list of
22224     directories, much like `PATH'.  When configured as a native
22225     compiler, GCC tries the directories thus specified when searching
22226     for special linker files, if it can't find them using
22227     `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
22228     when searching for ordinary libraries for the `-l' option (but
22229     directories specified with `-L' come first).
22230
22231`LANG'
22232     This variable is used to pass locale information to the compiler.
22233     One way in which this information is used is to determine the
22234     character set to be used when character literals, string literals
22235     and comments are parsed in C and C++.  When the compiler is
22236     configured to allow multibyte characters, the following values for
22237     `LANG' are recognized:
22238
22239    `C-JIS'
22240          Recognize JIS characters.
22241
22242    `C-SJIS'
22243          Recognize SJIS characters.
22244
22245    `C-EUCJP'
22246          Recognize EUCJP characters.
22247
22248     If `LANG' is not defined, or if it has some other value, then the
22249     compiler uses `mblen' and `mbtowc' as defined by the default
22250     locale to recognize and translate multibyte characters.
22251
22252Some additional environment variables affect the behavior of the
22253preprocessor.
22254
22255`CPATH'
22256`C_INCLUDE_PATH'
22257`CPLUS_INCLUDE_PATH'
22258`OBJC_INCLUDE_PATH'
22259     Each variable's value is a list of directories separated by a
22260     special character, much like `PATH', in which to look for header
22261     files.  The special character, `PATH_SEPARATOR', is
22262     target-dependent and determined at GCC build time.  For Microsoft
22263     Windows-based targets it is a semicolon, and for almost all other
22264     targets it is a colon.
22265
22266     `CPATH' specifies a list of directories to be searched as if
22267     specified with `-I', but after any paths given with `-I' options
22268     on the command line.  This environment variable is used regardless
22269     of which language is being preprocessed.
22270
22271     The remaining environment variables apply only when preprocessing
22272     the particular language indicated.  Each specifies a list of
22273     directories to be searched as if specified with `-isystem', but
22274     after any paths given with `-isystem' options on the command line.
22275
22276     In all these variables, an empty element instructs the compiler to
22277     search its current working directory.  Empty elements can appear
22278     at the beginning or end of a path.  For instance, if the value of
22279     `CPATH' is `:/special/include', that has the same effect as
22280     `-I. -I/special/include'.
22281
22282`DEPENDENCIES_OUTPUT'
22283     If this variable is set, its value specifies how to output
22284     dependencies for Make based on the non-system header files
22285     processed by the compiler.  System header files are ignored in the
22286     dependency output.
22287
22288     The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
22289     which case the Make rules are written to that file, guessing the
22290     target name from the source file name.  Or the value can have the
22291     form `FILE TARGET', in which case the rules are written to file
22292     FILE using TARGET as the target name.
22293
22294     In other words, this environment variable is equivalent to
22295     combining the options `-MM' and `-MF' (*note Preprocessor
22296     Options::), with an optional `-MT' switch too.
22297
22298`SUNPRO_DEPENDENCIES'
22299     This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
22300     except that system header files are not ignored, so it implies
22301     `-M' rather than `-MM'.  However, the dependence on the main input
22302     file is omitted.  *Note Preprocessor Options::.
22303
22304`CPP_RESTRICTED'
22305     If this variable is defined, cpp will skip any include file which
22306     is not a regular file, and will continue searching for the
22307     requested name (this is always done if the found file is a
22308     directory).  *Note Preprocessor Options::.
22309
22310
22311
22312File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC
22313
223143.20 Using Precompiled Headers
22315==============================
22316
22317Often large projects have many header files that are included in every
22318source file.  The time the compiler takes to process these header files
22319over and over again can account for nearly all of the time required to
22320build the project.  To make builds faster, GCC allows you to
22321"precompile" a header file.
22322
22323 To create a precompiled header file, simply compile it as you would any
22324other file, if necessary using the `-x' option to make the driver treat
22325it as a C or C++ header file.  You may want to use a tool like `make'
22326to keep the precompiled header up-to-date when the headers it contains
22327change.
22328
22329 A precompiled header file is searched for when `#include' is seen in
22330the compilation.  As it searches for the included file (*note Search
22331Path: (cpp)Search Path.) the compiler looks for a precompiled header in
22332each directory just before it looks for the include file in that
22333directory.  The name searched for is the name specified in the
22334`#include' with `.gch' appended.  If the precompiled header file can't
22335be used, it is ignored.
22336
22337 For instance, if you have `#include "all.h"', and you have `all.h.gch'
22338in the same directory as `all.h', then the precompiled header file is
22339used if possible, and the original header is used otherwise.
22340
22341 Alternatively, you might decide to put the precompiled header file in a
22342directory and use `-I' to ensure that directory is searched before (or
22343instead of) the directory containing the original header.  Then, if you
22344want to check that the precompiled header file is always used, you can
22345put a file of the same name as the original header in this directory
22346containing an `#error' command.
22347
22348 This also works with `-include'.  So yet another way to use
22349precompiled headers, good for projects not designed with precompiled
22350header files in mind, is to simply take most of the header files used by
22351a project, include them from another header file, precompile that header
22352file, and `-include' the precompiled header.  If the header files have
22353guards against multiple inclusion, they are skipped because they've
22354already been included (in the precompiled header).
22355
22356 If you need to precompile the same header file for different
22357languages, targets, or compiler options, you can instead make a
22358_directory_ named like `all.h.gch', and put each precompiled header in
22359the directory, perhaps using `-o'.  It doesn't matter what you call the
22360files in the directory; every precompiled header in the directory is
22361considered.  The first precompiled header encountered in the directory
22362that is valid for this compilation is used; they're searched in no
22363particular order.
22364
22365 There are many other possibilities, limited only by your imagination,
22366good sense, and the constraints of your build system.
22367
22368 A precompiled header file can be used only when these conditions apply:
22369
22370   * Only one precompiled header can be used in a particular
22371     compilation.
22372
22373   * A precompiled header can't be used once the first C token is seen.
22374     You can have preprocessor directives before a precompiled header;
22375     you cannot include a precompiled header from inside another header.
22376
22377   * The precompiled header file must be produced for the same language
22378     as the current compilation.  You can't use a C precompiled header
22379     for a C++ compilation.
22380
22381   * The precompiled header file must have been produced by the same
22382     compiler binary as the current compilation is using.
22383
22384   * Any macros defined before the precompiled header is included must
22385     either be defined in the same way as when the precompiled header
22386     was generated, or must not affect the precompiled header, which
22387     usually means that they don't appear in the precompiled header at
22388     all.
22389
22390     The `-D' option is one way to define a macro before a precompiled
22391     header is included; using a `#define' can also do it.  There are
22392     also some options that define macros implicitly, like `-O' and
22393     `-Wdeprecated'; the same rule applies to macros defined this way.
22394
22395   * If debugging information is output when using the precompiled
22396     header, using `-g' or similar, the same kind of debugging
22397     information must have been output when building the precompiled
22398     header.  However, a precompiled header built using `-g' can be
22399     used in a compilation when no debugging information is being
22400     output.
22401
22402   * The same `-m' options must generally be used when building and
22403     using the precompiled header.  *Note Submodel Options::, for any
22404     cases where this rule is relaxed.
22405
22406   * Each of the following options must be the same when building and
22407     using the precompiled header:
22408
22409          -fexceptions
22410
22411   * Some other command-line options starting with `-f', `-p', or `-O'
22412     must be defined in the same way as when the precompiled header was
22413     generated.  At present, it's not clear which options are safe to
22414     change and which are not; the safest choice is to use exactly the
22415     same options when generating and using the precompiled header.
22416     The following are known to be safe:
22417
22418          -fmessage-length=  -fpreprocessed  -fsched-interblock
22419          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
22420          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
22421          -pedantic-errors
22422
22423
22424 For all of these except the last, the compiler automatically ignores
22425the precompiled header if the conditions aren't met.  If you find an
22426option combination that doesn't work and doesn't cause the precompiled
22427header to be ignored, please consider filing a bug report, see *Note
22428Bugs::.
22429
22430 If you do use differing options when generating and using the
22431precompiled header, the actual behavior is a mixture of the behavior
22432for the options.  For instance, if you use `-g' to generate the
22433precompiled header but not when using it, you may or may not get
22434debugging information for routines in the precompiled header.
22435
22436
22437File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top
22438
224394 C Implementation-Defined Behavior
22440***********************************
22441
22442A conforming implementation of ISO C is required to document its choice
22443of behavior in each of the areas that are designated "implementation
22444defined".  The following lists all such areas, along with the section
22445numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC
224469899:2011 standards.  Some areas are only implementation-defined in one
22447version of the standard.
22448
22449 Some choices depend on the externally determined ABI for the platform
22450(including standard character encodings) which GCC follows; these are
22451listed as "determined by ABI" below.  *Note Binary Compatibility:
22452Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
22453are documented in the preprocessor manual.  *Note
22454Implementation-defined behavior: (cpp)Implementation-defined behavior.
22455Some choices are made by the library and operating system (or other
22456environment when compiling for a freestanding environment); refer to
22457their documentation for details.
22458
22459* Menu:
22460
22461* Translation implementation::
22462* Environment implementation::
22463* Identifiers implementation::
22464* Characters implementation::
22465* Integers implementation::
22466* Floating point implementation::
22467* Arrays and pointers implementation::
22468* Hints implementation::
22469* Structures unions enumerations and bit-fields implementation::
22470* Qualifiers implementation::
22471* Declarators implementation::
22472* Statements implementation::
22473* Preprocessing directives implementation::
22474* Library functions implementation::
22475* Architecture implementation::
22476* Locale-specific behavior implementation::
22477
22478
22479File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
22480
224814.1 Translation
22482===============
22483
22484   * `How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90,
22485     C99 and C11 5.1.1.3).'
22486
22487     Diagnostics consist of all the output sent to stderr by GCC.
22488
22489   * `Whether each nonempty sequence of white-space characters other
22490     than new-line is retained or replaced by one space character in
22491     translation phase 3 (C90, C99 and C11 5.1.1.2).'
22492
22493     *Note Implementation-defined behavior: (cpp)Implementation-defined
22494     behavior.
22495
22496
22497
22498File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
22499
225004.2 Environment
22501===============
22502
22503The behavior of most of these points are dependent on the implementation
22504of the C library, and are not defined by GCC itself.
22505
22506   * `The mapping between physical source file multibyte characters and
22507     the source character set in translation phase 1 (C90, C99 and C11
22508     5.1.1.2).'
22509
22510     *Note Implementation-defined behavior: (cpp)Implementation-defined
22511     behavior.
22512
22513
22514
22515File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
22516
225174.3 Identifiers
22518===============
22519
22520   * `Which additional multibyte characters may appear in identifiers
22521     and their correspondence to universal character names (C99 and C11
22522     6.4.2).'
22523
22524     *Note Implementation-defined behavior: (cpp)Implementation-defined
22525     behavior.
22526
22527   * `The number of significant initial characters in an identifier
22528     (C90 6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).'
22529
22530     For internal names, all characters are significant.  For external
22531     names, the number of significant characters are defined by the
22532     linker; for almost all targets, all characters are significant.
22533
22534   * `Whether case distinctions are significant in an identifier with
22535     external linkage (C90 6.1.2).'
22536
22537     This is a property of the linker.  C99 and C11 require that case
22538     distinctions are always significant in identifiers with external
22539     linkage and systems without this property are not supported by GCC.
22540
22541
22542
22543File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
22544
225454.4 Characters
22546==============
22547
22548   * `The number of bits in a byte (C90 3.4, C99 and C11 3.6).'
22549
22550     Determined by ABI.
22551
22552   * `The values of the members of the execution character set (C90,
22553     C99 and C11 5.2.1).'
22554
22555     Determined by ABI.
22556
22557   * `The unique value of the member of the execution character set
22558     produced for each of the standard alphabetic escape sequences
22559     (C90, C99 and C11 5.2.2).'
22560
22561     Determined by ABI.
22562
22563   * `The value of a `char' object into which has been stored any
22564     character other than a member of the basic execution character set
22565     (C90 6.1.2.5, C99 and C11 6.2.5).'
22566
22567     Determined by ABI.
22568
22569   * `Which of `signed char' or `unsigned char' has the same range,
22570     representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
22571     6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).'
22572
22573     Determined by ABI.  The options `-funsigned-char' and
22574     `-fsigned-char' change the default.  *Note Options Controlling C
22575     Dialect: C Dialect Options.
22576
22577   * `The mapping of members of the source character set (in character
22578     constants and string literals) to members of the execution
22579     character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11
22580     5.1.1.2).'
22581
22582     Determined by ABI.
22583
22584   * `The value of an integer character constant containing more than
22585     one character or containing a character or escape sequence that
22586     does not map to a single-byte execution character (C90 6.1.3.4,
22587     C99 and C11 6.4.4.4).'
22588
22589     *Note Implementation-defined behavior: (cpp)Implementation-defined
22590     behavior.
22591
22592   * `The value of a wide character constant containing more than one
22593     multibyte character or a single multibyte character that maps to
22594     multiple members of the extended execution character set, or
22595     containing a multibyte character or escape sequence not
22596     represented in the extended execution character set (C90 6.1.3.4,
22597     C99 and C11 6.4.4.4).'
22598
22599     *Note Implementation-defined behavior: (cpp)Implementation-defined
22600     behavior.
22601
22602   * `The current locale used to convert a wide character constant
22603     consisting of a single multibyte character that maps to a member
22604     of the extended execution character set into a corresponding wide
22605     character code (C90 6.1.3.4, C99 and C11 6.4.4.4).'
22606
22607     *Note Implementation-defined behavior: (cpp)Implementation-defined
22608     behavior.
22609
22610   * `Whether differently-prefixed wide string literal tokens can be
22611     concatenated and, if so, the treatment of the resulting multibyte
22612     character sequence (C11 6.4.5).'
22613
22614     Such tokens may not be concatenated.
22615
22616   * `The current locale used to convert a wide string literal into
22617     corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).'
22618
22619     *Note Implementation-defined behavior: (cpp)Implementation-defined
22620     behavior.
22621
22622   * `The value of a string literal containing a multibyte character or
22623     escape sequence not represented in the execution character set
22624     (C90 6.1.4, C99 and C11 6.4.5).'
22625
22626     *Note Implementation-defined behavior: (cpp)Implementation-defined
22627     behavior.
22628
22629   * `The encoding of any of `wchar_t', `char16_t', and `char32_t'
22630     where the corresponding standard encoding macro
22631     (`__STDC_ISO_10646__', `__STDC_UTF_16__', or `__STDC_UTF_32__') is
22632     not defined (C11 6.10.8.2).'
22633
22634     *Note Implementation-defined behavior: (cpp)Implementation-defined
22635     behavior.  `char16_t' and `char32_t' literals are always encoded
22636     in UTF-16 and UTF-32 respectively.
22637
22638
22639
22640File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
22641
226424.5 Integers
22643============
22644
22645   * `Any extended integer types that exist in the implementation (C99
22646     and C11 6.2.5).'
22647
22648     GCC does not support any extended integer types.
22649
22650   * `Whether signed integer types are represented using sign and
22651     magnitude, two's complement, or one's complement, and whether the
22652     extraordinary value is a trap representation or an ordinary value
22653     (C99 and C11 6.2.6.2).'
22654
22655     GCC supports only two's complement integer types, and all bit
22656     patterns are ordinary values.
22657
22658   * `The rank of any extended integer type relative to another extended
22659     integer type with the same precision (C99 and C11 6.3.1.1).'
22660
22661     GCC does not support any extended integer types.
22662
22663   * `The result of, or the signal raised by, converting an integer to a
22664     signed integer type when the value cannot be represented in an
22665     object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).'
22666
22667     For conversion to a type of width N, the value is reduced modulo
22668     2^N to be within range of the type; no signal is raised.
22669
22670   * `The results of some bitwise operations on signed integers (C90
22671     6.3, C99 and C11 6.5).'
22672
22673     Bitwise operators act on the representation of the value including
22674     both the sign and value bits, where the sign bit is considered
22675     immediately above the highest-value value bit.  Signed `>>' acts
22676     on negative numbers by sign extension.
22677
22678     GCC does not use the latitude given in C99 and C11 only to treat
22679     certain aspects of signed `<<' as undefined, but this is subject to
22680     change.
22681
22682   * `The sign of the remainder on integer division (C90 6.3.5).'
22683
22684     GCC always follows the C99 and C11 requirement that the result of
22685     division is truncated towards zero.
22686
22687
22688
22689File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
22690
226914.6 Floating Point
22692==================
22693
22694   * `The accuracy of the floating-point operations and of the library
22695     functions in `<math.h>' and `<complex.h>' that return
22696     floating-point results (C90, C99 and C11 5.2.4.2.2).'
22697
22698     The accuracy is unknown.
22699
22700   * `The rounding behaviors characterized by non-standard values of
22701     `FLT_ROUNDS'  (C90, C99 and C11 5.2.4.2.2).'
22702
22703     GCC does not use such values.
22704
22705   * `The evaluation methods characterized by non-standard negative
22706     values of `FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).'
22707
22708     GCC does not use such values.
22709
22710   * `The direction of rounding when an integer is converted to a
22711     floating-point number that cannot exactly represent the original
22712     value (C90 6.2.1.3, C99 and C11 6.3.1.4).'
22713
22714     C99 Annex F is followed.
22715
22716   * `The direction of rounding when a floating-point number is
22717     converted to a narrower floating-point number (C90 6.2.1.4, C99
22718     and C11 6.3.1.5).'
22719
22720     C99 Annex F is followed.
22721
22722   * `How the nearest representable value or the larger or smaller
22723     representable value immediately adjacent to the nearest
22724     representable value is chosen for certain floating constants (C90
22725     6.1.3.1, C99 and C11 6.4.4.2).'
22726
22727     C99 Annex F is followed.
22728
22729   * `Whether and how floating expressions are contracted when not
22730     disallowed by the `FP_CONTRACT' pragma (C99 and C11 6.5).'
22731
22732     Expressions are currently only contracted if `-ffp-contract=fast',
22733     `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
22734     subject to change.
22735
22736   * `The default state for the `FENV_ACCESS' pragma (C99 and C11
22737     7.6.1).'
22738
22739     This pragma is not implemented, but the default is to "off" unless
22740     `-frounding-math' is used in which case it is "on".
22741
22742   * `Additional floating-point exceptions, rounding modes,
22743     environments, and classifications, and their macro names (C99 and
22744     C11 7.6, C99 and C11 7.12).'
22745
22746     This is dependent on the implementation of the C library, and is
22747     not defined by GCC itself.
22748
22749   * `The default state for the `FP_CONTRACT' pragma (C99 and C11
22750     7.12.2).'
22751
22752     This pragma is not implemented.  Expressions are currently only
22753     contracted if `-ffp-contract=fast', `-funsafe-math-optimizations'
22754     or `-ffast-math' are used.  This is subject to change.
22755
22756   * `Whether the "inexact" floating-point exception can be raised when
22757     the rounded result actually does equal the mathematical result in
22758     an IEC 60559 conformant implementation (C99 F.9).'
22759
22760     This is dependent on the implementation of the C library, and is
22761     not defined by GCC itself.
22762
22763   * `Whether the "underflow" (and "inexact") floating-point exception
22764     can be raised when a result is tiny but not inexact in an IEC
22765     60559 conformant implementation (C99 F.9).'
22766
22767     This is dependent on the implementation of the C library, and is
22768     not defined by GCC itself.
22769
22770
22771
22772File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
22773
227744.7 Arrays and Pointers
22775=======================
22776
22777   * `The result of converting a pointer to an integer or vice versa
22778     (C90 6.3.4, C99 and C11 6.3.2.3).'
22779
22780     A cast from pointer to integer discards most-significant bits if
22781     the pointer representation is larger than the integer type,
22782     sign-extends(1) if the pointer representation is smaller than the
22783     integer type, otherwise the bits are unchanged.
22784
22785     A cast from integer to pointer discards most-significant bits if
22786     the pointer representation is smaller than the integer type,
22787     extends according to the signedness of the integer type if the
22788     pointer representation is larger than the integer type, otherwise
22789     the bits are unchanged.
22790
22791     When casting from pointer to integer and back again, the resulting
22792     pointer must reference the same object as the original pointer,
22793     otherwise the behavior is undefined.  That is, one may not use
22794     integer arithmetic to avoid the undefined behavior of pointer
22795     arithmetic as proscribed in C99 and C11 6.5.6/8.
22796
22797   * `The size of the result of subtracting two pointers to elements of
22798     the same array (C90 6.3.6, C99 and C11 6.5.6).'
22799
22800     The value is as specified in the standard and the type is
22801     determined by the ABI.
22802
22803
22804 ---------- Footnotes ----------
22805
22806 (1) Future versions of GCC may zero-extend, or use a target-defined
22807`ptr_extend' pattern.  Do not rely on sign extension.
22808
22809
22810File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
22811
228124.8 Hints
22813=========
22814
22815   * `The extent to which suggestions made by using the `register'
22816     storage-class specifier are effective (C90 6.5.1, C99 and C11
22817     6.7.1).'
22818
22819     The `register' specifier affects code generation only in these
22820     ways:
22821
22822        * When used as part of the register variable extension, see
22823          *Note Explicit Reg Vars::.
22824
22825        * When `-O0' is in use, the compiler allocates distinct stack
22826          memory for all variables that do not have the `register'
22827          storage-class specifier; if `register' is specified, the
22828          variable may have a shorter lifespan than the code would
22829          indicate and may never be placed in memory.
22830
22831        * On some rare x86 targets, `setjmp' doesn't save the registers
22832          in all circumstances.  In those cases, GCC doesn't allocate
22833          any variables in registers unless they are marked `register'.
22834
22835
22836   * `The extent to which suggestions made by using the inline function
22837     specifier are effective (C99 and C11 6.7.4).'
22838
22839     GCC will not inline any functions if the `-fno-inline' option is
22840     used or if `-O0' is used.  Otherwise, GCC may still be unable to
22841     inline a function for many reasons; the `-Winline' option may be
22842     used to determine if a function has not been inlined and why not.
22843
22844
22845
22846File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
22847
228484.9 Structures, Unions, Enumerations, and Bit-Fields
22849====================================================
22850
22851   * `A member of a union object is accessed using a member of a
22852     different type (C90 6.3.2.3).'
22853
22854     The relevant bytes of the representation of the object are treated
22855     as an object of the type used for the access.  *Note
22856     Type-punning::.  This may be a trap representation.
22857
22858   * `Whether a "plain" `int' bit-field is treated as a `signed int'
22859     bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
22860     6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).'
22861
22862     By default it is treated as `signed int' but this may be changed
22863     by the `-funsigned-bitfields' option.
22864
22865   * `Allowable bit-field types other than `_Bool', `signed int', and
22866     `unsigned int' (C99 and C11 6.7.2.1).'
22867
22868     Other integer types, such as `long int', and enumerated types are
22869     permitted even in strictly conforming mode.
22870
22871   * `Whether atomic types are permitted for bit-fields (C11 6.7.2.1).'
22872
22873     Atomic types are not permitted for bit-fields.
22874
22875   * `Whether a bit-field can straddle a storage-unit boundary (C90
22876     6.5.2.1, C99 and C11 6.7.2.1).'
22877
22878     Determined by ABI.
22879
22880   * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
22881     C99 and C11 6.7.2.1).'
22882
22883     Determined by ABI.
22884
22885   * `The alignment of non-bit-field members of structures (C90
22886     6.5.2.1, C99 and C11 6.7.2.1).'
22887
22888     Determined by ABI.
22889
22890   * `The integer type compatible with each enumerated type (C90
22891     6.5.2.2, C99 and C11 6.7.2.2).'
22892
22893     Normally, the type is `unsigned int' if there are no negative
22894     values in the enumeration, otherwise `int'.  If `-fshort-enums' is
22895     specified, then if there are negative values it is the first of
22896     `signed char', `short' and `int' that can represent all the
22897     values, otherwise it is the first of `unsigned char', `unsigned
22898     short' and `unsigned int' that can represent all the values.
22899
22900     On some targets, `-fshort-enums' is the default; this is
22901     determined by the ABI.
22902
22903
22904
22905File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
22906
229074.10 Qualifiers
22908===============
22909
22910   * `What constitutes an access to an object that has
22911     volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).'
22912
22913     Such an object is normally accessed by pointers and used for
22914     accessing hardware.  In most expressions, it is intuitively
22915     obvious what is a read and what is a write.  For example
22916
22917          volatile int *dst = SOMEVALUE;
22918          volatile int *src = SOMEOTHERVALUE;
22919          *dst = *src;
22920
22921     will cause a read of the volatile object pointed to by SRC and
22922     store the value into the volatile object pointed to by DST.  There
22923     is no guarantee that these reads and writes are atomic, especially
22924     for objects larger than `int'.
22925
22926     However, if the volatile storage is not being modified, and the
22927     value of the volatile storage is not used, then the situation is
22928     less obvious.  For example
22929
22930          volatile int *src = SOMEVALUE;
22931          *src;
22932
22933     According to the C standard, such an expression is an rvalue whose
22934     type is the unqualified version of its original type, i.e. `int'.
22935     Whether GCC interprets this as a read of the volatile object being
22936     pointed to or only as a request to evaluate the expression for its
22937     side-effects depends on this type.
22938
22939     If it is a scalar type, or on most targets an aggregate type whose
22940     only member object is of a scalar type, or a union type whose
22941     member objects are of scalar types, the expression is interpreted
22942     by GCC as a read of the volatile object; in the other cases, the
22943     expression is only evaluated for its side-effects.
22944
22945
22946
22947File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
22948
229494.11 Declarators
22950================
22951
22952   * `The maximum number of declarators that may modify an arithmetic,
22953     structure or union type (C90 6.5.4).'
22954
22955     GCC is only limited by available memory.
22956
22957
22958
22959File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
22960
229614.12 Statements
22962===============
22963
22964   * `The maximum number of `case' values in a `switch' statement (C90
22965     6.6.4.2).'
22966
22967     GCC is only limited by available memory.
22968
22969
22970
22971File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
22972
229734.13 Preprocessing Directives
22974=============================
22975
22976*Note Implementation-defined behavior: (cpp)Implementation-defined
22977behavior, for details of these aspects of implementation-defined
22978behavior.
22979
22980   * `The locations within `#pragma' directives where header name
22981     preprocessing tokens are recognized (C11 6.4, C11 6.4.7).'
22982
22983   * `How sequences in both forms of header names are mapped to headers
22984     or external source file names (C90 6.1.7, C99 and C11 6.4.7).'
22985
22986   * `Whether the value of a character constant in a constant expression
22987     that controls conditional inclusion matches the value of the same
22988     character constant in the execution character set (C90 6.8.1, C99
22989     and C11 6.10.1).'
22990
22991   * `Whether the value of a single-character character constant in a
22992     constant expression that controls conditional inclusion may have a
22993     negative value (C90 6.8.1, C99 and C11 6.10.1).'
22994
22995   * `The places that are searched for an included `<>' delimited
22996     header, and how the places are specified or the header is
22997     identified (C90 6.8.2, C99 and C11 6.10.2).'
22998
22999   * `How the named source file is searched for in an included `""'
23000     delimited header (C90 6.8.2, C99 and C11 6.10.2).'
23001
23002   * `The method by which preprocessing tokens (possibly resulting from
23003     macro expansion) in a `#include' directive are combined into a
23004     header name (C90 6.8.2, C99 and C11 6.10.2).'
23005
23006   * `The nesting limit for `#include' processing (C90 6.8.2, C99 and
23007     C11 6.10.2).'
23008
23009   * `Whether the `#' operator inserts a `\' character before the `\'
23010     character that begins a universal character name in a character
23011     constant or string literal (C99 and C11 6.10.3.2).'
23012
23013   * `The behavior on each recognized non-`STDC #pragma' directive (C90
23014     6.8.6, C99 and C11 6.10.6).'
23015
23016     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
23017     GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
23018     details of target-specific pragmas.
23019
23020   * `The definitions for `__DATE__' and `__TIME__' when respectively,
23021     the date and time of translation are not available (C90 6.8.8, C99
23022     6.10.8, C11 6.10.8.1).'
23023
23024
23025
23026File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
23027
230284.14 Library Functions
23029======================
23030
23031The behavior of most of these points are dependent on the implementation
23032of the C library, and are not defined by GCC itself.
23033
23034   * `The null pointer constant to which the macro `NULL' expands (C90
23035     7.1.6, C99 7.17, C11 7.19).'
23036
23037     In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
23038     provide the other headers which define `NULL' and some library
23039     implementations may use other definitions in those headers.
23040
23041
23042
23043File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
23044
230454.15 Architecture
23046=================
23047
23048   * `The values or expressions assigned to the macros specified in the
23049     headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90, C99 and
23050     C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).'
23051
23052     Determined by ABI.
23053
23054   * `The result of attempting to indirectly access an object with
23055     automatic or thread storage duration from a thread other than the
23056     one with which it is associated (C11 6.2.4).'
23057
23058     Such accesses are supported, subject to the same requirements for
23059     synchronization for concurrent accesses as for concurrent accesses
23060     to any object.
23061
23062   * `The number, order, and encoding of bytes in any object (when not
23063     explicitly specified in this International Standard) (C99 and C11
23064     6.2.6.1).'
23065
23066     Determined by ABI.
23067
23068   * `Whether any extended alignments are supported and the contexts in
23069     which they are supported (C11 6.2.8).'
23070
23071     Extended alignments up to 2^28 (bytes) are supported for objects
23072     of automatic storage duration.  Alignments supported for objects
23073     of static and thread storage duration are determined by the ABI.
23074
23075   * `Valid alignment values other than those returned by an _Alignof
23076     expression for fundamental types, if any (C11 6.2.8).'
23077
23078     Valid alignments are powers of 2 up to and including 2^28.
23079
23080   * `The value of the result of the `sizeof' and `_Alignof' operators
23081     (C90 6.3.3.4, C99 and C11 6.5.3.4).'
23082
23083     Determined by ABI.
23084
23085
23086
23087File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
23088
230894.16 Locale-Specific Behavior
23090=============================
23091
23092The behavior of these points are dependent on the implementation of the
23093C library, and are not defined by GCC itself.
23094
23095
23096File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top
23097
230985 C++ Implementation-Defined Behavior
23099*************************************
23100
23101A conforming implementation of ISO C++ is required to document its
23102choice of behavior in each of the areas that are designated
23103"implementation defined".  The following lists all such areas, along
23104with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
2310514882:2003 standards.  Some areas are only implementation-defined in
23106one version of the standard.
23107
23108 Some choices depend on the externally determined ABI for the platform
23109(including standard character encodings) which GCC follows; these are
23110listed as "determined by ABI" below.  *Note Binary Compatibility:
23111Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
23112are documented in the preprocessor manual.  *Note
23113Implementation-defined behavior: (cpp)Implementation-defined behavior.
23114Some choices are documented in the corresponding document for the C
23115language.  *Note C Implementation::.  Some choices are made by the
23116library and operating system (or other environment when compiling for a
23117freestanding environment); refer to their documentation for details.
23118
23119* Menu:
23120
23121* Conditionally-supported behavior::
23122* Exception handling::
23123
23124
23125File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation
23126
231275.1 Conditionally-Supported Behavior
23128====================================
23129
23130`Each implementation shall include documentation that identifies all
23131conditionally-supported constructs that it does not support (C++0x
231321.4).'
23133
23134   * `Whether an argument of class type with a non-trivial copy
23135     constructor or destructor can be passed to ... (C++0x 5.2.2).'
23136
23137     Such argument passing is supported, using the same
23138     pass-by-invisible-reference approach used for normal function
23139     arguments of such types.
23140
23141
23142
23143File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation
23144
231455.2 Exception Handling
23146======================
23147
23148   * `In the situation where no matching handler is found, it is
23149     implementation-defined whether or not the stack is unwound before
23150     std::terminate() is called (C++98 15.5.1).'
23151
23152     The stack is not unwound before std::terminate is called.
23153
23154
23155
23156File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top
23157
231586 Extensions to the C Language Family
23159*************************************
23160
23161GNU C provides several language features not found in ISO standard C.
23162(The `-pedantic' option directs GCC to print a warning message if any
23163of these features is used.)  To test for the availability of these
23164features in conditional compilation, check for a predefined macro
23165`__GNUC__', which is always defined under GCC.
23166
23167 These extensions are available in C and Objective-C.  Most of them are
23168also available in C++.  *Note Extensions to the C++ Language: C++
23169Extensions, for extensions that apply _only_ to C++.
23170
23171 Some features that are in ISO C99 but not C90 or C++ are also, as
23172extensions, accepted by GCC in C90 mode and in C++.
23173
23174* Menu:
23175
23176* Statement Exprs::     Putting statements and declarations inside expressions.
23177* Local Labels::        Labels local to a block.
23178* Labels as Values::    Getting pointers to labels, and computed gotos.
23179* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
23180* Constructing Calls::  Dispatching a call to another function.
23181* Typeof::              `typeof': referring to the type of an expression.
23182* Conditionals::        Omitting the middle operand of a `?:' expression.
23183* __int128::		128-bit integers---`__int128'.
23184* Long Long::           Double-word integers---`long long int'.
23185* Complex::             Data types for complex numbers.
23186* Floating Types::      Additional Floating Types.
23187* Half-Precision::      Half-Precision Floating Point.
23188* Decimal Float::       Decimal Floating Types.
23189* Hex Floats::          Hexadecimal floating-point constants.
23190* Fixed-Point::         Fixed-Point Types.
23191* Named Address Spaces::Named address spaces.
23192* Zero Length::         Zero-length arrays.
23193* Empty Structures::    Structures with no members.
23194* Variable Length::     Arrays whose length is computed at run time.
23195* Variadic Macros::     Macros with a variable number of arguments.
23196* Escaped Newlines::    Slightly looser rules for escaped newlines.
23197* Subscripting::        Any array can be subscripted, even if not an lvalue.
23198* Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
23199* Pointers to Arrays::  Pointers to arrays with qualifiers work as expected.
23200* Initializers::        Non-constant initializers.
23201* Compound Literals::   Compound literals give structures, unions
23202                        or arrays as values.
23203* Designated Inits::    Labeling elements of initializers.
23204* Case Ranges::         `case 1 ... 9' and such.
23205* Cast to Union::       Casting to union type from any member of the union.
23206* Mixed Declarations::  Mixing declarations and code.
23207* Function Attributes:: Declaring that functions have no side effects,
23208                        or that they can never return.
23209* Label Attributes::    Specifying attributes on labels.
23210* Attribute Syntax::    Formal syntax for attributes.
23211* Function Prototypes:: Prototype declarations and old-style definitions.
23212* C++ Comments::        C++ comments are recognized.
23213* Dollar Signs::        Dollar sign is allowed in identifiers.
23214* Character Escapes::   `\e' stands for the character <ESC>.
23215* Variable Attributes:: Specifying attributes of variables.
23216* Type Attributes::     Specifying attributes of types.
23217* Alignment::           Inquiring about the alignment of a type or variable.
23218* Inline::              Defining inline functions (as fast as macros).
23219* Volatiles::           What constitutes an access to a volatile object.
23220* Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
23221* Alternate Keywords::  `__const__', `__asm__', etc., for header files.
23222* Incomplete Enums::    `enum foo;', with details to follow.
23223* Function Names::      Printable strings which are the name of the current
23224                        function.
23225* Return Address::      Getting the return or frame address of a function.
23226* Vector Extensions::   Using vector instructions through built-in functions.
23227* Offsetof::            Special syntax for implementing `offsetof'.
23228* __sync Builtins::     Legacy built-in functions for atomic memory access.
23229* __atomic Builtins::   Atomic built-in functions with memory model.
23230* Integer Overflow Builtins:: Built-in functions to perform arithmetics and
23231                        arithmetic overflow checking.
23232* x86 specific memory model extensions for transactional memory:: x86 memory models.
23233* Object Size Checking:: Built-in functions for limited buffer overflow
23234                        checking.
23235* Pointer Bounds Checker builtins:: Built-in functions for Pointer Bounds Checker.
23236* Cilk Plus Builtins::  Built-in functions for the Cilk Plus language extension.
23237* Other Builtins::      Other built-in functions.
23238* Target Builtins::     Built-in functions specific to particular targets.
23239* Target Format Checks:: Format checks specific to particular targets.
23240* Pragmas::             Pragmas accepted by GCC.
23241* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
23242* Thread-Local::        Per-thread variables.
23243* Binary constants::    Binary constants using the `0b' prefix.
23244
23245
23246File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
23247
232486.1 Statements and Declarations in Expressions
23249==============================================
23250
23251A compound statement enclosed in parentheses may appear as an expression
23252in GNU C.  This allows you to use loops, switches, and local variables
23253within an expression.
23254
23255 Recall that a compound statement is a sequence of statements surrounded
23256by braces; in this construct, parentheses go around the braces.  For
23257example:
23258
23259     ({ int y = foo (); int z;
23260        if (y > 0) z = y;
23261        else z = - y;
23262        z; })
23263
23264is a valid (though slightly more complex than necessary) expression for
23265the absolute value of `foo ()'.
23266
23267 The last thing in the compound statement should be an expression
23268followed by a semicolon; the value of this subexpression serves as the
23269value of the entire construct.  (If you use some other kind of statement
23270last within the braces, the construct has type `void', and thus
23271effectively no value.)
23272
23273 This feature is especially useful in making macro definitions "safe"
23274(so that they evaluate each operand exactly once).  For example, the
23275"maximum" function is commonly defined as a macro in standard C as
23276follows:
23277
23278     #define max(a,b) ((a) > (b) ? (a) : (b))
23279
23280But this definition computes either A or B twice, with bad results if
23281the operand has side effects.  In GNU C, if you know the type of the
23282operands (here taken as `int'), you can define the macro safely as
23283follows:
23284
23285     #define maxint(a,b) \
23286       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
23287
23288 Embedded statements are not allowed in constant expressions, such as
23289the value of an enumeration constant, the width of a bit-field, or the
23290initial value of a static variable.
23291
23292 If you don't know the type of the operand, you can still do this, but
23293you must use `typeof' or `__auto_type' (*note Typeof::).
23294
23295 In G++, the result value of a statement expression undergoes array and
23296function pointer decay, and is returned by value to the enclosing
23297expression.  For instance, if `A' is a class, then
23298
23299             A a;
23300
23301             ({a;}).Foo ()
23302
23303constructs a temporary `A' object to hold the result of the statement
23304expression, and that is used to invoke `Foo'.  Therefore the `this'
23305pointer observed by `Foo' is not the address of `a'.
23306
23307 In a statement expression, any temporaries created within a statement
23308are destroyed at that statement's end.  This makes statement
23309expressions inside macros slightly different from function calls.  In
23310the latter case temporaries introduced during argument evaluation are
23311destroyed at the end of the statement that includes the function call.
23312In the statement expression case they are destroyed during the
23313statement expression.  For instance,
23314
23315     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
23316     template<typename T> T function(T a) { T b = a; return b + 3; }
23317
23318     void foo ()
23319     {
23320       macro (X ());
23321       function (X ());
23322     }
23323
23324has different places where temporaries are destroyed.  For the `macro'
23325case, the temporary `X' is destroyed just after the initialization of
23326`b'.  In the `function' case that temporary is destroyed when the
23327function returns.
23328
23329 These considerations mean that it is probably a bad idea to use
23330statement expressions of this form in header files that are designed to
23331work with C++.  (Note that some versions of the GNU C Library contained
23332header files using statement expressions that lead to precisely this
23333bug.)
23334
23335 Jumping into a statement expression with `goto' or using a `switch'
23336statement outside the statement expression with a `case' or `default'
23337label inside the statement expression is not permitted.  Jumping into a
23338statement expression with a computed `goto' (*note Labels as Values::)
23339has undefined behavior.  Jumping out of a statement expression is
23340permitted, but if the statement expression is part of a larger
23341expression then it is unspecified which other subexpressions of that
23342expression have been evaluated except where the language definition
23343requires certain subexpressions to be evaluated before or after the
23344statement expression.  In any case, as with a function call, the
23345evaluation of a statement expression is not interleaved with the
23346evaluation of other parts of the containing expression.  For example,
23347
23348       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
23349
23350calls `foo' and `bar1' and does not call `baz' but may or may not call
23351`bar2'.  If `bar2' is called, it is called after `foo' and before
23352`bar1'.
23353
23354
23355File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
23356
233576.2 Locally Declared Labels
23358===========================
23359
23360GCC allows you to declare "local labels" in any nested block scope.  A
23361local label is just like an ordinary label, but you can only reference
23362it (with a `goto' statement, or by taking its address) within the block
23363in which it is declared.
23364
23365 A local label declaration looks like this:
23366
23367     __label__ LABEL;
23368
23369or
23370
23371     __label__ LABEL1, LABEL2, /* ... */;
23372
23373 Local label declarations must come at the beginning of the block,
23374before any ordinary declarations or statements.
23375
23376 The label declaration defines the label _name_, but does not define
23377the label itself.  You must do this in the usual way, with `LABEL:',
23378within the statements of the statement expression.
23379
23380 The local label feature is useful for complex macros.  If a macro
23381contains nested loops, a `goto' can be useful for breaking out of them.
23382However, an ordinary label whose scope is the whole function cannot be
23383used: if the macro can be expanded several times in one function, the
23384label is multiply defined in that function.  A local label avoids this
23385problem.  For example:
23386
23387     #define SEARCH(value, array, target)              \
23388     do {                                              \
23389       __label__ found;                                \
23390       typeof (target) _SEARCH_target = (target);      \
23391       typeof (*(array)) *_SEARCH_array = (array);     \
23392       int i, j;                                       \
23393       int value;                                      \
23394       for (i = 0; i < max; i++)                       \
23395         for (j = 0; j < max; j++)                     \
23396           if (_SEARCH_array[i][j] == _SEARCH_target)  \
23397             { (value) = i; goto found; }              \
23398       (value) = -1;                                   \
23399      found:;                                          \
23400     } while (0)
23401
23402 This could also be written using a statement expression:
23403
23404     #define SEARCH(array, target)                     \
23405     ({                                                \
23406       __label__ found;                                \
23407       typeof (target) _SEARCH_target = (target);      \
23408       typeof (*(array)) *_SEARCH_array = (array);     \
23409       int i, j;                                       \
23410       int value;                                      \
23411       for (i = 0; i < max; i++)                       \
23412         for (j = 0; j < max; j++)                     \
23413           if (_SEARCH_array[i][j] == _SEARCH_target)  \
23414             { value = i; goto found; }                \
23415       value = -1;                                     \
23416      found:                                           \
23417       value;                                          \
23418     })
23419
23420 Local label declarations also make the labels they declare visible to
23421nested functions, if there are any.  *Note Nested Functions::, for
23422details.
23423
23424
23425File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
23426
234276.3 Labels as Values
23428====================
23429
23430You can get the address of a label defined in the current function (or
23431a containing function) with the unary operator `&&'.  The value has
23432type `void *'.  This value is a constant and can be used wherever a
23433constant of that type is valid.  For example:
23434
23435     void *ptr;
23436     /* ... */
23437     ptr = &&foo;
23438
23439 To use these values, you need to be able to jump to one.  This is done
23440with the computed goto statement(1), `goto *EXP;'.  For example,
23441
23442     goto *ptr;
23443
23444Any expression of type `void *' is allowed.
23445
23446 One way of using these constants is in initializing a static array that
23447serves as a jump table:
23448
23449     static void *array[] = { &&foo, &&bar, &&hack };
23450
23451Then you can select a label with indexing, like this:
23452
23453     goto *array[i];
23454
23455Note that this does not check whether the subscript is in bounds--array
23456indexing in C never does that.
23457
23458 Such an array of label values serves a purpose much like that of the
23459`switch' statement.  The `switch' statement is cleaner, so use that
23460rather than an array unless the problem does not fit a `switch'
23461statement very well.
23462
23463 Another use of label values is in an interpreter for threaded code.
23464The labels within the interpreter function can be stored in the
23465threaded code for super-fast dispatching.
23466
23467 You may not use this mechanism to jump to code in a different function.
23468If you do that, totally unpredictable things happen.  The best way to
23469avoid this is to store the label address only in automatic variables and
23470never pass it as an argument.
23471
23472 An alternate way to write the above example is
23473
23474     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
23475                                  &&hack - &&foo };
23476     goto *(&&foo + array[i]);
23477
23478This is more friendly to code living in shared libraries, as it reduces
23479the number of dynamic relocations that are needed, and by consequence,
23480allows the data to be read-only.  This alternative with label
23481differences is not supported for the AVR target, please use the first
23482approach for AVR programs.
23483
23484 The `&&foo' expressions for the same label might have different values
23485if the containing function is inlined or cloned.  If a program relies
23486on them being always the same,
23487`__attribute__((__noinline__,__noclone__))' should be used to prevent
23488inlining and cloning.  If `&&foo' is used in a static variable
23489initializer, inlining and cloning is forbidden.
23490
23491 ---------- Footnotes ----------
23492
23493 (1) The analogous feature in Fortran is called an assigned goto, but
23494that name seems inappropriate in C, where one can do more than simply
23495store label addresses in label variables.
23496
23497
23498File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
23499
235006.4 Nested Functions
23501====================
23502
23503A "nested function" is a function defined inside another function.
23504Nested functions are supported as an extension in GNU C, but are not
23505supported by GNU C++.
23506
23507 The nested function's name is local to the block where it is defined.
23508For example, here we define a nested function named `square', and call
23509it twice:
23510
23511     foo (double a, double b)
23512     {
23513       double square (double z) { return z * z; }
23514
23515       return square (a) + square (b);
23516     }
23517
23518 The nested function can access all the variables of the containing
23519function that are visible at the point of its definition.  This is
23520called "lexical scoping".  For example, here we show a nested function
23521which uses an inherited variable named `offset':
23522
23523     bar (int *array, int offset, int size)
23524     {
23525       int access (int *array, int index)
23526         { return array[index + offset]; }
23527       int i;
23528       /* ... */
23529       for (i = 0; i < size; i++)
23530         /* ... */ access (array, i) /* ... */
23531     }
23532
23533 Nested function definitions are permitted within functions in the
23534places where variable definitions are allowed; that is, in any block,
23535mixed with the other declarations and statements in the block.
23536
23537 It is possible to call the nested function from outside the scope of
23538its name by storing its address or passing the address to another
23539function:
23540
23541     hack (int *array, int size)
23542     {
23543       void store (int index, int value)
23544         { array[index] = value; }
23545
23546       intermediate (store, size);
23547     }
23548
23549 Here, the function `intermediate' receives the address of `store' as
23550an argument.  If `intermediate' calls `store', the arguments given to
23551`store' are used to store into `array'.  But this technique works only
23552so long as the containing function (`hack', in this example) does not
23553exit.
23554
23555 If you try to call the nested function through its address after the
23556containing function exits, all hell breaks loose.  If you try to call
23557it after a containing scope level exits, and if it refers to some of
23558the variables that are no longer in scope, you may be lucky, but it's
23559not wise to take the risk.  If, however, the nested function does not
23560refer to anything that has gone out of scope, you should be safe.
23561
23562 GCC implements taking the address of a nested function using a
23563technique called "trampolines".  This technique was described in
23564`Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
23565Proceedings, October 17-21, 1988).
23566
23567 A nested function can jump to a label inherited from a containing
23568function, provided the label is explicitly declared in the containing
23569function (*note Local Labels::).  Such a jump returns instantly to the
23570containing function, exiting the nested function that did the `goto'
23571and any intermediate functions as well.  Here is an example:
23572
23573     bar (int *array, int offset, int size)
23574     {
23575       __label__ failure;
23576       int access (int *array, int index)
23577         {
23578           if (index > size)
23579             goto failure;
23580           return array[index + offset];
23581         }
23582       int i;
23583       /* ... */
23584       for (i = 0; i < size; i++)
23585         /* ... */ access (array, i) /* ... */
23586       /* ... */
23587       return 0;
23588
23589      /* Control comes here from `access'
23590         if it detects an error.  */
23591      failure:
23592       return -1;
23593     }
23594
23595 A nested function always has no linkage.  Declaring one with `extern'
23596or `static' is erroneous.  If you need to declare the nested function
23597before its definition, use `auto' (which is otherwise meaningless for
23598function declarations).
23599
23600     bar (int *array, int offset, int size)
23601     {
23602       __label__ failure;
23603       auto int access (int *, int);
23604       /* ... */
23605       int access (int *array, int index)
23606         {
23607           if (index > size)
23608             goto failure;
23609           return array[index + offset];
23610         }
23611       /* ... */
23612     }
23613
23614
23615File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
23616
236176.5 Constructing Function Calls
23618===============================
23619
23620Using the built-in functions described below, you can record the
23621arguments a function received, and call another function with the same
23622arguments, without knowing the number or types of the arguments.
23623
23624 You can also record the return value of that function call, and later
23625return that value, without knowing what data type the function tried to
23626return (as long as your caller expects that data type).
23627
23628 However, these built-in functions may interact badly with some
23629sophisticated features or other extensions of the language.  It is,
23630therefore, not recommended to use them outside very simple functions
23631acting as mere forwarders for their arguments.
23632
23633 -- Built-in Function: void * __builtin_apply_args ()
23634     This built-in function returns a pointer to data describing how to
23635     perform a call with the same arguments as are passed to the
23636     current function.
23637
23638     The function saves the arg pointer register, structure value
23639     address, and all registers that might be used to pass arguments to
23640     a function into a block of memory allocated on the stack.  Then it
23641     returns the address of that block.
23642
23643 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
23644          *ARGUMENTS, size_t SIZE)
23645     This built-in function invokes FUNCTION with a copy of the
23646     parameters described by ARGUMENTS and SIZE.
23647
23648     The value of ARGUMENTS should be the value returned by
23649     `__builtin_apply_args'.  The argument SIZE specifies the size of
23650     the stack argument data, in bytes.
23651
23652     This function returns a pointer to data describing how to return
23653     whatever value is returned by FUNCTION.  The data is saved in a
23654     block of memory allocated on the stack.
23655
23656     It is not always simple to compute the proper value for SIZE.  The
23657     value is used by `__builtin_apply' to compute the amount of data
23658     that should be pushed on the stack and copied from the incoming
23659     argument area.
23660
23661 -- Built-in Function: void __builtin_return (void *RESULT)
23662     This built-in function returns the value described by RESULT from
23663     the containing function.  You should specify, for RESULT, a value
23664     returned by `__builtin_apply'.
23665
23666 -- Built-in Function:  __builtin_va_arg_pack ()
23667     This built-in function represents all anonymous arguments of an
23668     inline function.  It can be used only in inline functions that are
23669     always inlined, never compiled as a separate function, such as
23670     those using `__attribute__ ((__always_inline__))' or
23671     `__attribute__ ((__gnu_inline__))' extern inline functions.  It
23672     must be only passed as last argument to some other function with
23673     variable arguments.  This is useful for writing small wrapper
23674     inlines for variable argument functions, when using preprocessor
23675     macros is undesirable.  For example:
23676          extern int myprintf (FILE *f, const char *format, ...);
23677          extern inline __attribute__ ((__gnu_inline__)) int
23678          myprintf (FILE *f, const char *format, ...)
23679          {
23680            int r = fprintf (f, "myprintf: ");
23681            if (r < 0)
23682              return r;
23683            int s = fprintf (f, format, __builtin_va_arg_pack ());
23684            if (s < 0)
23685              return s;
23686            return r + s;
23687          }
23688
23689 -- Built-in Function: size_t __builtin_va_arg_pack_len ()
23690     This built-in function returns the number of anonymous arguments of
23691     an inline function.  It can be used only in inline functions that
23692     are always inlined, never compiled as a separate function, such as
23693     those using `__attribute__ ((__always_inline__))' or
23694     `__attribute__ ((__gnu_inline__))' extern inline functions.  For
23695     example following does link- or run-time checking of open
23696     arguments for optimized code:
23697          #ifdef __OPTIMIZE__
23698          extern inline __attribute__((__gnu_inline__)) int
23699          myopen (const char *path, int oflag, ...)
23700          {
23701            if (__builtin_va_arg_pack_len () > 1)
23702              warn_open_too_many_arguments ();
23703
23704            if (__builtin_constant_p (oflag))
23705              {
23706                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
23707                  {
23708                    warn_open_missing_mode ();
23709                    return __open_2 (path, oflag);
23710                  }
23711                return open (path, oflag, __builtin_va_arg_pack ());
23712              }
23713
23714            if (__builtin_va_arg_pack_len () < 1)
23715              return __open_2 (path, oflag);
23716
23717            return open (path, oflag, __builtin_va_arg_pack ());
23718          }
23719          #endif
23720
23721
23722File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
23723
237246.6 Referring to a Type with `typeof'
23725=====================================
23726
23727Another way to refer to the type of an expression is with `typeof'.
23728The syntax of using of this keyword looks like `sizeof', but the
23729construct acts semantically like a type name defined with `typedef'.
23730
23731 There are two ways of writing the argument to `typeof': with an
23732expression or with a type.  Here is an example with an expression:
23733
23734     typeof (x[0](1))
23735
23736This assumes that `x' is an array of pointers to functions; the type
23737described is that of the values of the functions.
23738
23739 Here is an example with a typename as the argument:
23740
23741     typeof (int *)
23742
23743Here the type described is that of pointers to `int'.
23744
23745 If you are writing a header file that must work when included in ISO C
23746programs, write `__typeof__' instead of `typeof'.  *Note Alternate
23747Keywords::.
23748
23749 A `typeof' construct can be used anywhere a typedef name can be used.
23750For example, you can use it in a declaration, in a cast, or inside of
23751`sizeof' or `typeof'.
23752
23753 The operand of `typeof' is evaluated for its side effects if and only
23754if it is an expression of variably modified type or the name of such a
23755type.
23756
23757 `typeof' is often useful in conjunction with statement expressions
23758(*note Statement Exprs::).  Here is how the two together can be used to
23759define a safe "maximum" macro which operates on any arithmetic type and
23760evaluates each of its arguments exactly once:
23761
23762     #define max(a,b) \
23763       ({ typeof (a) _a = (a); \
23764           typeof (b) _b = (b); \
23765         _a > _b ? _a : _b; })
23766
23767 The reason for using names that start with underscores for the local
23768variables is to avoid conflicts with variable names that occur within
23769the expressions that are substituted for `a' and `b'.  Eventually we
23770hope to design a new form of declaration syntax that allows you to
23771declare variables whose scopes start only after their initializers;
23772this will be a more reliable way to prevent such conflicts.
23773
23774Some more examples of the use of `typeof':
23775
23776   * This declares `y' with the type of what `x' points to.
23777
23778          typeof (*x) y;
23779
23780   * This declares `y' as an array of such values.
23781
23782          typeof (*x) y[4];
23783
23784   * This declares `y' as an array of pointers to characters:
23785
23786          typeof (typeof (char *)[4]) y;
23787
23788     It is equivalent to the following traditional C declaration:
23789
23790          char *y[4];
23791
23792     To see the meaning of the declaration using `typeof', and why it
23793     might be a useful way to write, rewrite it with these macros:
23794
23795          #define pointer(T)  typeof(T *)
23796          #define array(T, N) typeof(T [N])
23797
23798     Now the declaration can be rewritten this way:
23799
23800          array (pointer (char), 4) y;
23801
23802     Thus, `array (pointer (char), 4)' is the type of arrays of 4
23803     pointers to `char'.
23804
23805 In GNU C, but not GNU C++, you may also declare the type of a variable
23806as `__auto_type'.  In that case, the declaration must declare only one
23807variable, whose declarator must just be an identifier, the declaration
23808must be initialized, and the type of the variable is determined by the
23809initializer; the name of the variable is not in scope until after the
23810initializer.  (In C++, you should use C++11 `auto' for this purpose.)
23811Using `__auto_type', the "maximum" macro above could be written as:
23812
23813     #define max(a,b) \
23814       ({ __auto_type _a = (a); \
23815           __auto_type _b = (b); \
23816         _a > _b ? _a : _b; })
23817
23818 Using `__auto_type' instead of `typeof' has two advantages:
23819
23820   * Each argument to the macro appears only once in the expansion of
23821     the macro.  This prevents the size of the macro expansion growing
23822     exponentially when calls to such macros are nested inside
23823     arguments of such macros.
23824
23825   * If the argument to the macro has variably modified type, it is
23826     evaluated only once when using `__auto_type', but twice if
23827     `typeof' is used.
23828
23829
23830File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions
23831
238326.7 Conditionals with Omitted Operands
23833======================================
23834
23835The middle operand in a conditional expression may be omitted.  Then if
23836the first operand is nonzero, its value is the value of the conditional
23837expression.
23838
23839 Therefore, the expression
23840
23841     x ? : y
23842
23843has the value of `x' if that is nonzero; otherwise, the value of `y'.
23844
23845 This example is perfectly equivalent to
23846
23847     x ? x : y
23848
23849In this simple case, the ability to omit the middle operand is not
23850especially useful.  When it becomes useful is when the first operand
23851does, or may (if it is a macro argument), contain a side effect.  Then
23852repeating the operand in the middle would perform the side effect
23853twice.  Omitting the middle operand uses the value already computed
23854without the undesirable effects of recomputing it.
23855
23856
23857File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions
23858
238596.8 128-bit Integers
23860====================
23861
23862As an extension the integer scalar type `__int128' is supported for
23863targets which have an integer mode wide enough to hold 128 bits.
23864Simply write `__int128' for a signed 128-bit integer, or `unsigned
23865__int128' for an unsigned 128-bit integer.  There is no support in GCC
23866for expressing an integer constant of type `__int128' for targets with
23867`long long' integer less than 128 bits wide.
23868
23869
23870File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions
23871
238726.9 Double-Word Integers
23873========================
23874
23875ISO C99 supports data types for integers that are at least 64 bits wide,
23876and as an extension GCC supports them in C90 mode and in C++.  Simply
23877write `long long int' for a signed integer, or `unsigned long long int'
23878for an unsigned integer.  To make an integer constant of type `long
23879long int', add the suffix `LL' to the integer.  To make an integer
23880constant of type `unsigned long long int', add the suffix `ULL' to the
23881integer.
23882
23883 You can use these types in arithmetic like any other integer types.
23884Addition, subtraction, and bitwise boolean operations on these types
23885are open-coded on all types of machines.  Multiplication is open-coded
23886if the machine supports a fullword-to-doubleword widening multiply
23887instruction.  Division and shifts are open-coded only on machines that
23888provide special support.  The operations that are not open-coded use
23889special library routines that come with GCC.
23890
23891 There may be pitfalls when you use `long long' types for function
23892arguments without function prototypes.  If a function expects type
23893`int' for its argument, and you pass a value of type `long long int',
23894confusion results because the caller and the subroutine disagree about
23895the number of bytes for the argument.  Likewise, if the function
23896expects `long long int' and you pass `int'.  The best way to avoid such
23897problems is to use prototypes.
23898
23899
23900File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions
23901
239026.10 Complex Numbers
23903====================
23904
23905ISO C99 supports complex floating data types, and as an extension GCC
23906supports them in C90 mode and in C++.  GCC also supports complex
23907integer data types which are not part of ISO C99.  You can declare
23908complex types using the keyword `_Complex'.  As an extension, the older
23909GNU keyword `__complex__' is also supported.
23910
23911 For example, `_Complex double x;' declares `x' as a variable whose
23912real part and imaginary part are both of type `double'.  `_Complex
23913short int y;' declares `y' to have real and imaginary parts of type
23914`short int'; this is not likely to be useful, but it shows that the set
23915of complex types is complete.
23916
23917 To write a constant with a complex data type, use the suffix `i' or
23918`j' (either one; they are equivalent).  For example, `2.5fi' has type
23919`_Complex float' and `3i' has type `_Complex int'.  Such a constant
23920always has a pure imaginary value, but you can form any complex value
23921you like by adding one to a real constant.  This is a GNU extension; if
23922you have an ISO C99 conforming C library (such as the GNU C Library),
23923and want to construct complex constants of floating type, you should
23924include `<complex.h>' and use the macros `I' or `_Complex_I' instead.
23925
23926 To extract the real part of a complex-valued expression EXP, write
23927`__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
23928part.  This is a GNU extension; for values of floating type, you should
23929use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
23930`cimag' and `cimagl', declared in `<complex.h>' and also provided as
23931built-in functions by GCC.
23932
23933 The operator `~' performs complex conjugation when used on a value
23934with a complex type.  This is a GNU extension; for values of floating
23935type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
23936declared in `<complex.h>' and also provided as built-in functions by
23937GCC.
23938
23939 GCC can allocate complex automatic variables in a noncontiguous
23940fashion; it's even possible for the real part to be in a register while
23941the imaginary part is on the stack (or vice versa).  Only the DWARF 2
23942debug info format can represent this, so use of DWARF 2 is recommended.
23943If you are using the stabs debug info format, GCC describes a
23944noncontiguous complex variable as if it were two separate variables of
23945noncomplex type.  If the variable's actual name is `foo', the two
23946fictitious variables are named `foo$real' and `foo$imag'.  You can
23947examine and set these two fictitious variables with your debugger.
23948
23949
23950File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions
23951
239526.11 Additional Floating Types
23953==============================
23954
23955As an extension, GNU C supports additional floating types, `__float80'
23956and `__float128' to support 80-bit (`XFmode') and 128-bit (`TFmode')
23957floating types.  Support for additional types includes the arithmetic
23958operators: add, subtract, multiply, divide; unary arithmetic operators;
23959relational operators; equality operators; and conversions to and from
23960integer and other floating types.  Use a suffix `w' or `W' in a literal
23961constant of type `__float80' and `q' or `Q' for `_float128'.  You can
23962declare complex types using the corresponding internal complex type,
23963`XCmode' for `__float80' type and `TCmode' for `__float128' type:
23964
23965     typedef _Complex float __attribute__((mode(TC))) _Complex128;
23966     typedef _Complex float __attribute__((mode(XC))) _Complex80;
23967
23968 Not all targets support additional floating-point types.  `__float80'
23969and `__float128' types are supported on x86 and IA-64 targets.  The
23970`__float128' type is supported on hppa HP-UX targets.
23971
23972
23973File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions
23974
239756.12 Half-Precision Floating Point
23976==================================
23977
23978On ARM targets, GCC supports half-precision (16-bit) floating point via
23979the `__fp16' type.  You must enable this type explicitly with the
23980`-mfp16-format' command-line option in order to use it.
23981
23982 ARM supports two incompatible representations for half-precision
23983floating-point values.  You must choose one of the representations and
23984use it consistently in your program.
23985
23986 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format.
23987This format can represent normalized values in the range of 2^-14 to
2398865504.  There are 11 bits of significand precision, approximately 3
23989decimal digits.
23990
23991 Specifying `-mfp16-format=alternative' selects the ARM alternative
23992format.  This representation is similar to the IEEE format, but does
23993not support infinities or NaNs.  Instead, the range of exponents is
23994extended, so that this format can represent normalized values in the
23995range of 2^-14 to 131008.
23996
23997 The `__fp16' type is a storage format only.  For purposes of
23998arithmetic and other operations, `__fp16' values in C or C++
23999expressions are automatically promoted to `float'.  In addition, you
24000cannot declare a function with a return value or parameters of type
24001`__fp16'.
24002
24003 Note that conversions from `double' to `__fp16' involve an
24004intermediate conversion to `float'.  Because of rounding, this can
24005sometimes produce a different result than a direct conversion.
24006
24007 ARM provides hardware support for conversions between `__fp16' and
24008`float' values as an extension to VFP and NEON (Advanced SIMD).  GCC
24009generates code using these hardware instructions if you compile with
24010options to select an FPU that provides them; for example,
24011`-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the
24012`-mfp16-format' option to select a half-precision format.
24013
24014 Language-level support for the `__fp16' data type is independent of
24015whether GCC generates code using hardware floating-point instructions.
24016In cases where hardware support is not specified, GCC implements
24017conversions between `__fp16' and `float' values as library calls.
24018
24019
24020File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions
24021
240226.13 Decimal Floating Types
24023===========================
24024
24025As an extension, GNU C supports decimal floating types as defined in
24026the N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating
24027types in GCC will evolve as the draft technical report changes.
24028Calling conventions for any target might also change.  Not all targets
24029support decimal floating types.
24030
24031 The decimal floating types are `_Decimal32', `_Decimal64', and
24032`_Decimal128'.  They use a radix of ten, unlike the floating types
24033`float', `double', and `long double' whose radix is not specified by
24034the C standard but is usually two.
24035
24036 Support for decimal floating types includes the arithmetic operators
24037add, subtract, multiply, divide; unary arithmetic operators; relational
24038operators; equality operators; and conversions to and from integer and
24039other floating types.  Use a suffix `df' or `DF' in a literal constant
24040of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
24041for `_Decimal128'.
24042
24043 GCC support of decimal float as specified by the draft technical report
24044is incomplete:
24045
24046   * When the value of a decimal floating type cannot be represented in
24047     the integer type to which it is being converted, the result is
24048     undefined rather than the result value specified by the draft
24049     technical report.
24050
24051   * GCC does not provide the C library functionality associated with
24052     `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which
24053     must come from a separate C library implementation.  Because of
24054     this the GNU C compiler does not define macro `__STDC_DEC_FP__' to
24055     indicate that the implementation conforms to the technical report.
24056
24057 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
24058the DWARF 2 debug information format.
24059
24060
24061File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions
24062
240636.14 Hex Floats
24064===============
24065
24066ISO C99 supports floating-point numbers written not only in the usual
24067decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
24068written in hexadecimal format.  As a GNU extension, GCC supports this
24069in C90 mode (except in some cases when strictly conforming) and in C++.
24070In that format the `0x' hex introducer and the `p' or `P' exponent
24071field are mandatory.  The exponent is a decimal number that indicates
24072the power of 2 by which the significant part is multiplied.  Thus
24073`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
24074is the same as `1.55e1'.
24075
24076 Unlike for floating-point numbers in the decimal notation the exponent
24077is always required in the hexadecimal notation.  Otherwise the compiler
24078would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
24079could mean `1.0f' or `1.9375' since `f' is also the extension for
24080floating-point constants of type `float'.
24081
24082
24083File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions
24084
240856.15 Fixed-Point Types
24086======================
24087
24088As an extension, GNU C supports fixed-point types as defined in the
24089N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
24090will evolve as the draft technical report changes.  Calling conventions
24091for any target might also change.  Not all targets support fixed-point
24092types.
24093
24094 The fixed-point types are `short _Fract', `_Fract', `long _Fract',
24095`long long _Fract', `unsigned short _Fract', `unsigned _Fract',
24096`unsigned long _Fract', `unsigned long long _Fract', `_Sat short
24097_Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract',
24098`_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned
24099long _Fract', `_Sat unsigned long long _Fract', `short _Accum',
24100`_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum',
24101`unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum',
24102`_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long
24103_Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat
24104unsigned long _Accum', `_Sat unsigned long long _Accum'.
24105
24106 Fixed-point data values contain fractional and optional integral parts.
24107The format of fixed-point data varies and depends on the target machine.
24108
24109 Support for fixed-point types includes:
24110   * prefix and postfix increment and decrement operators (`++', `--')
24111
24112   * unary arithmetic operators (`+', `-', `!')
24113
24114   * binary arithmetic operators (`+', `-', `*', `/')
24115
24116   * binary shift operators (`<<', `>>')
24117
24118   * relational operators (`<', `<=', `>=', `>')
24119
24120   * equality operators (`==', `!=')
24121
24122   * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=')
24123
24124   * conversions to and from integer, floating-point, or fixed-point
24125     types
24126
24127 Use a suffix in a fixed-point literal constant:
24128   * `hr' or `HR' for `short _Fract' and `_Sat short _Fract'
24129
24130   * `r' or `R' for `_Fract' and `_Sat _Fract'
24131
24132   * `lr' or `LR' for `long _Fract' and `_Sat long _Fract'
24133
24134   * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract'
24135
24136   * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned
24137     short _Fract'
24138
24139   * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract'
24140
24141   * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long
24142     _Fract'
24143
24144   * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat
24145     unsigned long long _Fract'
24146
24147   * `hk' or `HK' for `short _Accum' and `_Sat short _Accum'
24148
24149   * `k' or `K' for `_Accum' and `_Sat _Accum'
24150
24151   * `lk' or `LK' for `long _Accum' and `_Sat long _Accum'
24152
24153   * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum'
24154
24155   * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned
24156     short _Accum'
24157
24158   * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum'
24159
24160   * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long
24161     _Accum'
24162
24163   * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat
24164     unsigned long long _Accum'
24165
24166 GCC support of fixed-point types as specified by the draft technical
24167report is incomplete:
24168
24169   * Pragmas to control overflow and rounding behaviors are not
24170     implemented.
24171
24172 Fixed-point types are supported by the DWARF 2 debug information
24173format.
24174
24175
24176File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions
24177
241786.16 Named Address Spaces
24179=========================
24180
24181As an extension, GNU C supports named address spaces as defined in the
24182N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
24183GCC will evolve as the draft technical report changes.  Calling
24184conventions for any target might also change.  At present, only the
24185AVR, SPU, M32C, and RL78 targets support address spaces other than the
24186generic address space.
24187
24188 Address space identifiers may be used exactly like any other C type
24189qualifier (e.g., `const' or `volatile').  See the N1275 document for
24190more details.
24191
241926.16.1 AVR Named Address Spaces
24193-------------------------------
24194
24195On the AVR target, there are several address spaces that can be used in
24196order to put read-only data into the flash memory and access that data
24197by means of the special instructions `LPM' or `ELPM' needed to read
24198from flash.
24199
24200 Per default, any data including read-only data is located in RAM (the
24201generic address space) so that non-generic address spaces are needed to
24202locate read-only data in flash memory _and_ to generate the right
24203instructions to access this data without using (inline) assembler code.
24204
24205`__flash'
24206     The `__flash' qualifier locates data in the `.progmem.data'
24207     section. Data is read using the `LPM' instruction. Pointers to
24208     this address space are 16 bits wide.
24209
24210`__flash1'
24211`__flash2'
24212`__flash3'
24213`__flash4'
24214`__flash5'
24215     These are 16-bit address spaces locating data in section
24216     `.progmemN.data' where N refers to address space `__flashN'.  The
24217     compiler sets the `RAMPZ' segment register appropriately before
24218     reading data by means of the `ELPM' instruction.
24219
24220`__memx'
24221     This is a 24-bit address space that linearizes flash and RAM: If
24222     the high bit of the address is set, data is read from RAM using
24223     the lower two bytes as RAM address.  If the high bit of the
24224     address is clear, data is read from flash with `RAMPZ' set
24225     according to the high byte of the address.  *Note
24226     `__builtin_avr_flash_segment': AVR Built-in Functions.
24227
24228     Objects in this address space are located in `.progmemx.data'.
24229
24230 Example
24231
24232     char my_read (const __flash char ** p)
24233     {
24234         /* p is a pointer to RAM that points to a pointer to flash.
24235            The first indirection of p reads that flash pointer
24236            from RAM and the second indirection reads a char from this
24237            flash address.  */
24238
24239         return **p;
24240     }
24241
24242     /* Locate array[] in flash memory */
24243     const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };
24244
24245     int i = 1;
24246
24247     int main (void)
24248     {
24249        /* Return 17 by reading from flash memory */
24250        return array[array[i]];
24251     }
24252
24253For each named address space supported by avr-gcc there is an equally
24254named but uppercase built-in macro defined.  The purpose is to
24255facilitate testing if respective address space support is available or
24256not:
24257
24258     #ifdef __FLASH
24259     const __flash int var = 1;
24260
24261     int read_var (void)
24262     {
24263         return var;
24264     }
24265     #else
24266     #include <avr/pgmspace.h> /* From AVR-LibC */
24267
24268     const int var PROGMEM = 1;
24269
24270     int read_var (void)
24271     {
24272         return (int) pgm_read_word (&var);
24273     }
24274     #endif /* __FLASH */
24275
24276Notice that attribute *Note `progmem': AVR Variable Attributes.
24277locates data in flash but accesses to these data read from generic
24278address space, i.e.  from RAM, so that you need special accessors like
24279`pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
24280together with attribute `progmem'.
24281
24282Limitations and caveats
24283
24284   * Reading across the 64 KiB section boundary of the `__flash' or
24285     `__flashN' address spaces shows undefined behavior. The only
24286     address space that supports reading across the 64 KiB flash
24287     segment boundaries is `__memx'.
24288
24289   * If you use one of the `__flashN' address spaces you must arrange
24290     your linker script to locate the `.progmemN.data' sections
24291     according to your needs.
24292
24293   * Any data or pointers to the non-generic address spaces must be
24294     qualified as `const', i.e. as read-only data.  This still applies
24295     if the data in one of these address spaces like software version
24296     number or calibration lookup table are intended to be changed
24297     after load time by, say, a boot loader. In this case the right
24298     qualification is `const' `volatile' so that the compiler must not
24299     optimize away known values or insert them as immediates into
24300     operands of instructions.
24301
24302   * The following code initializes a variable `pfoo' located in static
24303     storage with a 24-bit address:
24304          extern const __memx char foo;
24305          const __memx void *pfoo = &foo;
24306
24307     Such code requires at least binutils 2.23, see
24308     PR13503 (http://sourceware.org/PR13503).
24309
24310
243116.16.2 M32C Named Address Spaces
24312--------------------------------
24313
24314On the M32C target, with the R8C and M16C CPU variants, variables
24315qualified with `__far' are accessed using 32-bit addresses in order to
24316access memory beyond the first 64 Ki bytes.  If `__far' is used with
24317the M32CM or M32C CPU variants, it has no effect.
24318
243196.16.3 RL78 Named Address Spaces
24320--------------------------------
24321
24322On the RL78 target, variables qualified with `__far' are accessed with
2432332-bit pointers (20-bit addresses) rather than the default 16-bit
24324addresses.  Non-far variables are assumed to appear in the topmost
2432564 KiB of the address space.
24326
243276.16.4 SPU Named Address Spaces
24328-------------------------------
24329
24330On the SPU target variables may be declared as belonging to another
24331address space by qualifying the type with the `__ea' address space
24332identifier:
24333
24334     extern int __ea i;
24335
24336The compiler generates special code to access the variable `i'.  It may
24337use runtime library support, or generate special machine instructions
24338to access that address space.
24339
24340
24341File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions
24342
243436.17 Arrays of Length Zero
24344==========================
24345
24346Zero-length arrays are allowed in GNU C.  They are very useful as the
24347last element of a structure that is really a header for a
24348variable-length object:
24349
24350     struct line {
24351       int length;
24352       char contents[0];
24353     };
24354
24355     struct line *thisline = (struct line *)
24356       malloc (sizeof (struct line) + this_length);
24357     thisline->length = this_length;
24358
24359 In ISO C90, you would have to give `contents' a length of 1, which
24360means either you waste space or complicate the argument to `malloc'.
24361
24362 In ISO C99, you would use a "flexible array member", which is slightly
24363different in syntax and semantics:
24364
24365   * Flexible array members are written as `contents[]' without the `0'.
24366
24367   * Flexible array members have incomplete type, and so the `sizeof'
24368     operator may not be applied.  As a quirk of the original
24369     implementation of zero-length arrays, `sizeof' evaluates to zero.
24370
24371   * Flexible array members may only appear as the last member of a
24372     `struct' that is otherwise non-empty.
24373
24374   * A structure containing a flexible array member, or a union
24375     containing such a structure (possibly recursively), may not be a
24376     member of a structure or an element of an array.  (However, these
24377     uses are permitted by GCC as extensions.)
24378
24379 Non-empty initialization of zero-length arrays is treated like any
24380case where there are more initializer elements than the array holds, in
24381that a suitable warning about "excess elements in array" is given, and
24382the excess elements (all of them, in this case) are ignored.
24383
24384 GCC allows static initialization of flexible array members.  This is
24385equivalent to defining a new structure containing the original
24386structure followed by an array of sufficient size to contain the data.
24387E.g. in the following, `f1' is constructed as if it were declared like
24388`f2'.
24389
24390     struct f1 {
24391       int x; int y[];
24392     } f1 = { 1, { 2, 3, 4 } };
24393
24394     struct f2 {
24395       struct f1 f1; int data[3];
24396     } f2 = { { 1 }, { 2, 3, 4 } };
24397
24398The convenience of this extension is that `f1' has the desired type,
24399eliminating the need to consistently refer to `f2.f1'.
24400
24401 This has symmetry with normal static arrays, in that an array of
24402unknown size is also written with `[]'.
24403
24404 Of course, this extension only makes sense if the extra data comes at
24405the end of a top-level object, as otherwise we would be overwriting
24406data at subsequent offsets.  To avoid undue complication and confusion
24407with initialization of deeply nested arrays, we simply disallow any
24408non-empty initialization except when the structure is the top-level
24409object.  For example:
24410
24411     struct foo { int x; int y[]; };
24412     struct bar { struct foo z; };
24413
24414     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
24415     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
24416     struct bar c = { { 1, { } } };            // Valid.
24417     struct foo d[1] = { { 1, { 2, 3, 4 } } };  // Invalid.
24418
24419
24420File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions
24421
244226.18 Structures with No Members
24423===============================
24424
24425GCC permits a C structure to have no members:
24426
24427     struct empty {
24428     };
24429
24430 The structure has size zero.  In C++, empty structures are part of the
24431language.  G++ treats empty structures as if they had a single member
24432of type `char'.
24433
24434
24435File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions
24436
244376.19 Arrays of Variable Length
24438==============================
24439
24440Variable-length automatic arrays are allowed in ISO C99, and as an
24441extension GCC accepts them in C90 mode and in C++.  These arrays are
24442declared like any other automatic arrays, but with a length that is not
24443a constant expression.  The storage is allocated at the point of
24444declaration and deallocated when the block scope containing the
24445declaration exits.  For example:
24446
24447     FILE *
24448     concat_fopen (char *s1, char *s2, char *mode)
24449     {
24450       char str[strlen (s1) + strlen (s2) + 1];
24451       strcpy (str, s1);
24452       strcat (str, s2);
24453       return fopen (str, mode);
24454     }
24455
24456 Jumping or breaking out of the scope of the array name deallocates the
24457storage.  Jumping into the scope is not allowed; you get an error
24458message for it.
24459
24460 As an extension, GCC accepts variable-length arrays as a member of a
24461structure or a union.  For example:
24462
24463     void
24464     foo (int n)
24465     {
24466       struct S { int x[n]; };
24467     }
24468
24469 You can use the function `alloca' to get an effect much like
24470variable-length arrays.  The function `alloca' is available in many
24471other C implementations (but not in all).  On the other hand,
24472variable-length arrays are more elegant.
24473
24474 There are other differences between these two methods.  Space allocated
24475with `alloca' exists until the containing _function_ returns.  The
24476space for a variable-length array is deallocated as soon as the array
24477name's scope ends.  (If you use both variable-length arrays and
24478`alloca' in the same function, deallocation of a variable-length array
24479also deallocates anything more recently allocated with `alloca'.)
24480
24481 You can also use variable-length arrays as arguments to functions:
24482
24483     struct entry
24484     tester (int len, char data[len][len])
24485     {
24486       /* ... */
24487     }
24488
24489 The length of an array is computed once when the storage is allocated
24490and is remembered for the scope of the array in case you access it with
24491`sizeof'.
24492
24493 If you want to pass the array first and the length afterward, you can
24494use a forward declaration in the parameter list--another GNU extension.
24495
24496     struct entry
24497     tester (int len; char data[len][len], int len)
24498     {
24499       /* ... */
24500     }
24501
24502 The `int len' before the semicolon is a "parameter forward
24503declaration", and it serves the purpose of making the name `len' known
24504when the declaration of `data' is parsed.
24505
24506 You can write any number of such parameter forward declarations in the
24507parameter list.  They can be separated by commas or semicolons, but the
24508last one must end with a semicolon, which is followed by the "real"
24509parameter declarations.  Each forward declaration must match a "real"
24510declaration in parameter name and data type.  ISO C99 does not support
24511parameter forward declarations.
24512
24513
24514File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions
24515
245166.20 Macros with a Variable Number of Arguments.
24517================================================
24518
24519In the ISO C standard of 1999, a macro can be declared to accept a
24520variable number of arguments much as a function can.  The syntax for
24521defining the macro is similar to that of a function.  Here is an
24522example:
24523
24524     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
24525
24526Here `...' is a "variable argument".  In the invocation of such a
24527macro, it represents the zero or more tokens until the closing
24528parenthesis that ends the invocation, including any commas.  This set of
24529tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
24530it appears.  See the CPP manual for more information.
24531
24532 GCC has long supported variadic macros, and used a different syntax
24533that allowed you to give a name to the variable arguments just like any
24534other argument.  Here is an example:
24535
24536     #define debug(format, args...) fprintf (stderr, format, args)
24537
24538This is in all ways equivalent to the ISO C example above, but arguably
24539more readable and descriptive.
24540
24541 GNU CPP has two further variadic macro extensions, and permits them to
24542be used with either of the above forms of macro definition.
24543
24544 In standard C, you are not allowed to leave the variable argument out
24545entirely; but you are allowed to pass an empty argument.  For example,
24546this invocation is invalid in ISO C, because there is no comma after
24547the string:
24548
24549     debug ("A message")
24550
24551 GNU CPP permits you to completely omit the variable arguments in this
24552way.  In the above examples, the compiler would complain, though since
24553the expansion of the macro still has the extra comma after the format
24554string.
24555
24556 To help solve this problem, CPP behaves specially for variable
24557arguments used with the token paste operator, `##'.  If instead you
24558write
24559
24560     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
24561
24562and if the variable arguments are omitted or empty, the `##' operator
24563causes the preprocessor to remove the comma before it.  If you do
24564provide some variable arguments in your macro invocation, GNU CPP does
24565not complain about the paste operation and instead places the variable
24566arguments after the comma.  Just like any other pasted macro argument,
24567these arguments are not macro expanded.
24568
24569
24570File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
24571
245726.21 Slightly Looser Rules for Escaped Newlines
24573===============================================
24574
24575The preprocessor treatment of escaped newlines is more relaxed than
24576that specified by the C90 standard, which requires the newline to
24577immediately follow a backslash.  GCC's implementation allows whitespace
24578in the form of spaces, horizontal and vertical tabs, and form feeds
24579between the backslash and the subsequent newline.  The preprocessor
24580issues a warning, but treats it as a valid escaped newline and combines
24581the two lines to form a single logical line.  This works within
24582comments and tokens, as well as between tokens.  Comments are _not_
24583treated as whitespace for the purposes of this relaxation, since they
24584have not yet been replaced with spaces.
24585
24586
24587File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
24588
245896.22 Non-Lvalue Arrays May Have Subscripts
24590==========================================
24591
24592In ISO C99, arrays that are not lvalues still decay to pointers, and
24593may be subscripted, although they may not be modified or used after the
24594next sequence point and the unary `&' operator may not be applied to
24595them.  As an extension, GNU C allows such arrays to be subscripted in
24596C90 mode, though otherwise they do not decay to pointers outside C99
24597mode.  For example, this is valid in GNU C though not valid in C90:
24598
24599     struct foo {int a[4];};
24600
24601     struct foo f();
24602
24603     bar (int index)
24604     {
24605       return f().a[index];
24606     }
24607
24608
24609File: gcc.info,  Node: Pointer Arith,  Next: Pointers to Arrays,  Prev: Subscripting,  Up: C Extensions
24610
246116.23 Arithmetic on `void'- and Function-Pointers
24612================================================
24613
24614In GNU C, addition and subtraction operations are supported on pointers
24615to `void' and on pointers to functions.  This is done by treating the
24616size of a `void' or of a function as 1.
24617
24618 A consequence of this is that `sizeof' is also allowed on `void' and
24619on function types, and returns 1.
24620
24621 The option `-Wpointer-arith' requests a warning if these extensions
24622are used.
24623
24624
24625File: gcc.info,  Node: Pointers to Arrays,  Next: Initializers,  Prev: Pointer Arith,  Up: C Extensions
24626
246276.24 Pointers to Arrays with Qualifiers Work as Expected
24628========================================================
24629
24630In GNU C, pointers to arrays with qualifiers work similar to pointers
24631to other qualified types. For example, a value of type `int (*)[5]' can
24632be used to initialize a variable of type `const int (*)[5]'.  These
24633types are incompatible in ISO C because the `const' qualifier is
24634formally attached to the element type of the array and not the array
24635itself.
24636
24637     extern void
24638     transpose (int N, int M, double out[M][N], const double in[N][M]);
24639     double x[3][2];
24640     double y[2][3];
24641     ...
24642     transpose(3, 2, y, x);
24643
24644
24645File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointers to Arrays,  Up: C Extensions
24646
246476.25 Non-Constant Initializers
24648==============================
24649
24650As in standard C++ and ISO C99, the elements of an aggregate
24651initializer for an automatic variable are not required to be constant
24652expressions in GNU C.  Here is an example of an initializer with
24653run-time varying elements:
24654
24655     foo (float f, float g)
24656     {
24657       float beat_freqs[2] = { f-g, f+g };
24658       /* ... */
24659     }
24660
24661
24662File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
24663
246646.26 Compound Literals
24665======================
24666
24667ISO C99 supports compound literals.  A compound literal looks like a
24668cast containing an initializer.  Its value is an object of the type
24669specified in the cast, containing the elements specified in the
24670initializer; it is an lvalue.  As an extension, GCC supports compound
24671literals in C90 mode and in C++, though the semantics are somewhat
24672different in C++.
24673
24674 Usually, the specified type is a structure.  Assume that `struct foo'
24675and `structure' are declared as shown:
24676
24677     struct foo {int a; char b[2];} structure;
24678
24679Here is an example of constructing a `struct foo' with a compound
24680literal:
24681
24682     structure = ((struct foo) {x + y, 'a', 0});
24683
24684This is equivalent to writing the following:
24685
24686     {
24687       struct foo temp = {x + y, 'a', 0};
24688       structure = temp;
24689     }
24690
24691 You can also construct an array, though this is dangerous in C++, as
24692explained below.  If all the elements of the compound literal are (made
24693up of) simple constant expressions, suitable for use in initializers of
24694objects of static storage duration, then the compound literal can be
24695coerced to a pointer to its first element and used in such an
24696initializer, as shown here:
24697
24698     char **foo = (char *[]) { "x", "y", "z" };
24699
24700 Compound literals for scalar types and union types are also allowed,
24701but then the compound literal is equivalent to a cast.
24702
24703 As a GNU extension, GCC allows initialization of objects with static
24704storage duration by compound literals (which is not possible in ISO
24705C99, because the initializer is not a constant).  It is handled as if
24706the object is initialized only with the bracket enclosed list if the
24707types of the compound literal and the object match.  The initializer
24708list of the compound literal must be constant.  If the object being
24709initialized has array type of unknown size, the size is determined by
24710compound literal size.
24711
24712     static struct foo x = (struct foo) {1, 'a', 'b'};
24713     static int y[] = (int []) {1, 2, 3};
24714     static int z[] = (int [3]) {1};
24715
24716The above lines are equivalent to the following:
24717     static struct foo x = {1, 'a', 'b'};
24718     static int y[] = {1, 2, 3};
24719     static int z[] = {1, 0, 0};
24720
24721 In C, a compound literal designates an unnamed object with static or
24722automatic storage duration.  In C++, a compound literal designates a
24723temporary object, which only lives until the end of its
24724full-expression.  As a result, well-defined C code that takes the
24725address of a subobject of a compound literal can be undefined in C++,
24726so the C++ compiler rejects the conversion of a temporary array to a
24727pointer.  For instance, if the array compound literal example above
24728appeared inside a function, any subsequent use of `foo' in C++ has
24729undefined behavior because the lifetime of the array ends after the
24730declaration of `foo'.
24731
24732 As an optimization, the C++ compiler sometimes gives array compound
24733literals longer lifetimes: when the array either appears outside a
24734function or has const-qualified type.  If `foo' and its initializer had
24735elements of `char *const' type rather than `char *', or if `foo' were a
24736global variable, the array would have static storage duration.  But it
24737is probably safest just to avoid the use of array compound literals in
24738code compiled as C++.
24739
24740
24741File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions
24742
247436.27 Designated Initializers
24744============================
24745
24746Standard C90 requires the elements of an initializer to appear in a
24747fixed order, the same as the order of the elements in the array or
24748structure being initialized.
24749
24750 In ISO C99 you can give the elements in any order, specifying the array
24751indices or structure field names they apply to, and GNU C allows this as
24752an extension in C90 mode as well.  This extension is not implemented in
24753GNU C++.
24754
24755 To specify an array index, write `[INDEX] =' before the element value.
24756For example,
24757
24758     int a[6] = { [4] = 29, [2] = 15 };
24759
24760is equivalent to
24761
24762     int a[6] = { 0, 0, 15, 0, 29, 0 };
24763
24764The index values must be constant expressions, even if the array being
24765initialized is automatic.
24766
24767 An alternative syntax for this that has been obsolete since GCC 2.5 but
24768GCC still accepts is to write `[INDEX]' before the element value, with
24769no `='.
24770
24771 To initialize a range of elements to the same value, write `[FIRST ...
24772LAST] = VALUE'.  This is a GNU extension.  For example,
24773
24774     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
24775
24776If the value in it has side-effects, the side-effects happen only once,
24777not for each initialized field by the range initializer.
24778
24779Note that the length of the array is the highest value specified plus
24780one.
24781
24782 In a structure initializer, specify the name of a field to initialize
24783with `.FIELDNAME =' before the element value.  For example, given the
24784following structure,
24785
24786     struct point { int x, y; };
24787
24788the following initialization
24789
24790     struct point p = { .y = yvalue, .x = xvalue };
24791
24792is equivalent to
24793
24794     struct point p = { xvalue, yvalue };
24795
24796 Another syntax that has the same meaning, obsolete since GCC 2.5, is
24797`FIELDNAME:', as shown here:
24798
24799     struct point p = { y: yvalue, x: xvalue };
24800
24801 Omitted field members are implicitly initialized the same as objects
24802that have static storage duration.
24803
24804 The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
24805also use a designator (or the obsolete colon syntax) when initializing
24806a union, to specify which element of the union should be used.  For
24807example,
24808
24809     union foo { int i; double d; };
24810
24811     union foo f = { .d = 4 };
24812
24813converts 4 to a `double' to store it in the union using the second
24814element.  By contrast, casting 4 to type `union foo' stores it into the
24815union as the integer `i', since it is an integer.  (*Note Cast to
24816Union::.)
24817
24818 You can combine this technique of naming elements with ordinary C
24819initialization of successive elements.  Each initializer element that
24820does not have a designator applies to the next consecutive element of
24821the array or structure.  For example,
24822
24823     int a[6] = { [1] = v1, v2, [4] = v4 };
24824
24825is equivalent to
24826
24827     int a[6] = { 0, v1, v2, 0, v4, 0 };
24828
24829 Labeling the elements of an array initializer is especially useful
24830when the indices are characters or belong to an `enum' type.  For
24831example:
24832
24833     int whitespace[256]
24834       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
24835           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
24836
24837 You can also write a series of `.FIELDNAME' and `[INDEX]' designators
24838before an `=' to specify a nested subobject to initialize; the list is
24839taken relative to the subobject corresponding to the closest
24840surrounding brace pair.  For example, with the `struct point'
24841declaration above:
24842
24843     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
24844
24845If the same field is initialized multiple times, it has the value from
24846the last initialization.  If any such overridden initialization has
24847side-effect, it is unspecified whether the side-effect happens or not.
24848Currently, GCC discards them and issues a warning.
24849
24850
24851File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions
24852
248536.28 Case Ranges
24854================
24855
24856You can specify a range of consecutive values in a single `case' label,
24857like this:
24858
24859     case LOW ... HIGH:
24860
24861This has the same effect as the proper number of individual `case'
24862labels, one for each integer value from LOW to HIGH, inclusive.
24863
24864 This feature is especially useful for ranges of ASCII character codes:
24865
24866     case 'A' ... 'Z':
24867
24868 *Be careful:* Write spaces around the `...', for otherwise it may be
24869parsed wrong when you use it with integer values.  For example, write
24870this:
24871
24872     case 1 ... 5:
24873
24874rather than this:
24875
24876     case 1...5:
24877
24878
24879File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions
24880
248816.29 Cast to a Union Type
24882=========================
24883
24884A cast to union type is similar to other casts, except that the type
24885specified is a union type.  You can specify the type either with `union
24886TAG' or with a typedef name.  A cast to union is actually a
24887constructor, not a cast, and hence does not yield an lvalue like normal
24888casts.  (*Note Compound Literals::.)
24889
24890 The types that may be cast to the union type are those of the members
24891of the union.  Thus, given the following union and variables:
24892
24893     union foo { int i; double d; };
24894     int x;
24895     double y;
24896
24897both `x' and `y' can be cast to type `union foo'.
24898
24899 Using the cast as the right-hand side of an assignment to a variable of
24900union type is equivalent to storing in a member of the union:
24901
24902     union foo u;
24903     /* ... */
24904     u = (union foo) x  ==  u.i = x
24905     u = (union foo) y  ==  u.d = y
24906
24907 You can also use the union cast as a function argument:
24908
24909     void hack (union foo);
24910     /* ... */
24911     hack ((union foo) x);
24912
24913
24914File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
24915
249166.30 Mixed Declarations and Code
24917================================
24918
24919ISO C99 and ISO C++ allow declarations and code to be freely mixed
24920within compound statements.  As an extension, GNU C also allows this in
24921C90 mode.  For example, you could do:
24922
24923     int i;
24924     /* ... */
24925     i++;
24926     int j = i + 2;
24927
24928 Each identifier is visible from where it is declared until the end of
24929the enclosing block.
24930
24931
24932File: gcc.info,  Node: Function Attributes,  Next: Label Attributes,  Prev: Mixed Declarations,  Up: C Extensions
24933
249346.31 Declaring Attributes of Functions
24935======================================
24936
24937In GNU C, you declare certain things about functions called in your
24938program which help the compiler optimize function calls and check your
24939code more carefully.
24940
24941 The keyword `__attribute__' allows you to specify special attributes
24942when making a declaration.  This keyword is followed by an attribute
24943specification inside double parentheses.  The following attributes are
24944currently defined for functions on all targets: `aligned',
24945`alloc_size', `alloc_align', `assume_aligned', `noreturn',
24946`returns_twice', `noinline', `noclone', `no_icf', `always_inline',
24947`flatten', `pure', `const', `nothrow', `sentinel', `format',
24948`format_arg', `no_instrument_function', `no_split_stack', `section',
24949`constructor', `destructor', `used', `unused', `deprecated', `weak',
24950`malloc', `alias', `ifunc', `warn_unused_result', `nonnull',
24951`returns_nonnull', `gnu_inline', `externally_visible', `hot', `cold',
24952`artificial', `no_sanitize_address', `no_address_safety_analysis',
24953`no_sanitize_thread', `no_sanitize_undefined', `no_reorder',
24954`bnd_legacy', `bnd_instrument', `stack_protect', `error' and `warning'.
24955Several other attributes are defined for functions on particular target
24956systems.  Other attributes, including `section' are supported for
24957variables declarations (*note Variable Attributes::), labels (*note
24958Label Attributes::) and for types (*note Type Attributes::).
24959
24960 GCC plugins may provide their own attributes.
24961
24962 You may also specify attributes with `__' preceding and following each
24963keyword.  This allows you to use them in header files without being
24964concerned about a possible macro of the same name.  For example, you
24965may use `__noreturn__' instead of `noreturn'.
24966
24967 *Note Attribute Syntax::, for details of the exact syntax for using
24968attributes.
24969
24970`alias ("TARGET")'
24971     The `alias' attribute causes the declaration to be emitted as an
24972     alias for another symbol, which must be specified.  For instance,
24973
24974          void __f () { /* Do something. */; }
24975          void f () __attribute__ ((weak, alias ("__f")));
24976
24977     defines `f' to be a weak alias for `__f'.  In C++, the mangled
24978     name for the target must be used.  It is an error if `__f' is not
24979     defined in the same translation unit.
24980
24981     Not all target machines support this attribute.
24982
24983`aligned (ALIGNMENT)'
24984     This attribute specifies a minimum alignment for the function,
24985     measured in bytes.
24986
24987     You cannot use this attribute to decrease the alignment of a
24988     function, only to increase it.  However, when you explicitly
24989     specify a function alignment this overrides the effect of the
24990     `-falign-functions' (*note Optimize Options::) option for this
24991     function.
24992
24993     Note that the effectiveness of `aligned' attributes may be limited
24994     by inherent limitations in your linker.  On many systems, the
24995     linker is only able to arrange for functions to be aligned up to a
24996     certain maximum alignment.  (For some linkers, the maximum
24997     supported alignment may be very very small.)  See your linker
24998     documentation for further information.
24999
25000     The `aligned' attribute can also be used for variables and fields
25001     (*note Variable Attributes::.)
25002
25003`alloc_size'
25004     The `alloc_size' attribute is used to tell the compiler that the
25005     function return value points to memory, where the size is given by
25006     one or two of the functions parameters.  GCC uses this information
25007     to improve the correctness of `__builtin_object_size'.
25008
25009     The function parameter(s) denoting the allocated size are
25010     specified by one or two integer arguments supplied to the
25011     attribute.  The allocated size is either the value of the single
25012     function argument specified or the product of the two function
25013     arguments specified.  Argument numbering starts at one.
25014
25015     For instance,
25016
25017          void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
25018          void* my_realloc(void*, size_t) __attribute__((alloc_size(2)))
25019
25020     declares that `my_calloc' returns memory of the size given by the
25021     product of parameter 1 and 2 and that `my_realloc' returns memory
25022     of the size given by parameter 2.
25023
25024`alloc_align'
25025     The `alloc_align' attribute is used to tell the compiler that the
25026     function return value points to memory, where the returned pointer
25027     minimum alignment is given by one of the functions parameters.
25028     GCC uses this information to improve pointer alignment analysis.
25029
25030     The function parameter denoting the allocated alignment is
25031     specified by one integer argument, whose number is the argument of
25032     the attribute.  Argument numbering starts at one.
25033
25034     For instance,
25035
25036          void* my_memalign(size_t, size_t) __attribute__((alloc_align(1)))
25037
25038     declares that `my_memalign' returns memory with minimum alignment
25039     given by parameter 1.
25040
25041`assume_aligned'
25042     The `assume_aligned' attribute is used to tell the compiler that
25043     the function return value points to memory, where the returned
25044     pointer minimum alignment is given by the first argument.  If the
25045     attribute has two arguments, the second argument is misalignment
25046     offset.
25047
25048     For instance
25049
25050          void* my_alloc1(size_t) __attribute__((assume_aligned(16)))
25051          void* my_alloc2(size_t) __attribute__((assume_aligned(32, 8)))
25052
25053     declares that `my_alloc1' returns 16-byte aligned pointer and that
25054     `my_alloc2' returns a pointer whose value modulo 32 is equal to 8.
25055
25056`always_inline'
25057     Generally, functions are not inlined unless optimization is
25058     specified.  For functions declared inline, this attribute inlines
25059     the function independent of any restrictions that otherwise apply
25060     to inlining.  Failure to inline such a function is diagnosed as an
25061     error.  Note that if such a function is called indirectly the
25062     compiler may or may not inline it depending on optimization level
25063     and a failure to inline an indirect call may or may not be
25064     diagnosed.
25065
25066`gnu_inline'
25067     This attribute should be used with a function that is also declared
25068     with the `inline' keyword.  It directs GCC to treat the function
25069     as if it were defined in gnu90 mode even when compiling in C99 or
25070     gnu99 mode.
25071
25072     If the function is declared `extern', then this definition of the
25073     function is used only for inlining.  In no case is the function
25074     compiled as a standalone function, not even if you take its address
25075     explicitly.  Such an address becomes an external reference, as if
25076     you had only declared the function, and had not defined it.  This
25077     has almost the effect of a macro.  The way to use this is to put a
25078     function definition in a header file with this attribute, and put
25079     another copy of the function, without `extern', in a library file.
25080     The definition in the header file causes most calls to the
25081     function to be inlined.  If any uses of the function remain, they
25082     refer to the single copy in the library.  Note that the two
25083     definitions of the functions need not be precisely the same,
25084     although if they do not have the same effect your program may
25085     behave oddly.
25086
25087     In C, if the function is neither `extern' nor `static', then the
25088     function is compiled as a standalone function, as well as being
25089     inlined where possible.
25090
25091     This is how GCC traditionally handled functions declared `inline'.
25092     Since ISO C99 specifies a different semantics for `inline', this
25093     function attribute is provided as a transition measure and as a
25094     useful feature in its own right.  This attribute is available in
25095     GCC 4.1.3 and later.  It is available if either of the
25096     preprocessor macros `__GNUC_GNU_INLINE__' or
25097     `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
25098     As Fast As a Macro: Inline.
25099
25100     In C++, this attribute does not depend on `extern' in any way, but
25101     it still requires the `inline' keyword to enable its special
25102     behavior.
25103
25104`artificial'
25105     This attribute is useful for small inline wrappers that if possible
25106     should appear during debugging as a unit.  Depending on the debug
25107     info format it either means marking the function as artificial or
25108     using the caller location for all instructions within the inlined
25109     body.
25110
25111`bank_switch'
25112     When added to an interrupt handler with the M32C port, causes the
25113     prologue and epilogue to use bank switching to preserve the
25114     registers rather than saving them on the stack.
25115
25116`flatten'
25117     Generally, inlining into a function is limited.  For a function
25118     marked with this attribute, every call inside this function is
25119     inlined, if possible.  Whether the function itself is considered
25120     for inlining depends on its size and the current inlining
25121     parameters.
25122
25123`error ("MESSAGE")'
25124     If this attribute is used on a function declaration and a call to
25125     such a function is not eliminated through dead code elimination or
25126     other optimizations, an error that includes MESSAGE is diagnosed.
25127     This is useful for compile-time checking, especially together with
25128     `__builtin_constant_p' and inline functions where checking the
25129     inline function arguments is not possible through `extern char
25130     [(condition) ? 1 : -1];' tricks.  While it is possible to leave
25131     the function undefined and thus invoke a link failure, when using
25132     this attribute the problem is diagnosed earlier and with exact
25133     location of the call even in presence of inline functions or when
25134     not emitting debugging information.
25135
25136`warning ("MESSAGE")'
25137     If this attribute is used on a function declaration and a call to
25138     such a function is not eliminated through dead code elimination or
25139     other optimizations, a warning that includes MESSAGE is diagnosed.
25140     This is useful for compile-time checking, especially together
25141     with `__builtin_constant_p' and inline functions.  While it is
25142     possible to define the function with a message in `.gnu.warning*'
25143     section, when using this attribute the problem is diagnosed
25144     earlier and with exact location of the call even in presence of
25145     inline functions or when not emitting debugging information.
25146
25147`cdecl'
25148     On the x86-32 targets, the `cdecl' attribute causes the compiler to
25149     assume that the calling function pops off the stack space used to
25150     pass arguments.  This is useful to override the effects of the
25151     `-mrtd' switch.
25152
25153`const'
25154     Many functions do not examine any values except their arguments,
25155     and have no effects except the return value.  Basically this is
25156     just slightly more strict class than the `pure' attribute below,
25157     since function is not allowed to read global memory.
25158
25159     Note that a function that has pointer arguments and examines the
25160     data pointed to must _not_ be declared `const'.  Likewise, a
25161     function that calls a non-`const' function usually must not be
25162     `const'.  It does not make sense for a `const' function to return
25163     `void'.
25164
25165`constructor'
25166`destructor'
25167`constructor (PRIORITY)'
25168`destructor (PRIORITY)'
25169     The `constructor' attribute causes the function to be called
25170     automatically before execution enters `main ()'.  Similarly, the
25171     `destructor' attribute causes the function to be called
25172     automatically after `main ()' completes or `exit ()' is called.
25173     Functions with these attributes are useful for initializing data
25174     that is used implicitly during the execution of the program.
25175
25176     You may provide an optional integer priority to control the order
25177     in which constructor and destructor functions are run.  A
25178     constructor with a smaller priority number runs before a
25179     constructor with a larger priority number; the opposite
25180     relationship holds for destructors.  So, if you have a constructor
25181     that allocates a resource and a destructor that deallocates the
25182     same resource, both functions typically have the same priority.
25183     The priorities for constructor and destructor functions are the
25184     same as those specified for namespace-scope C++ objects (*note C++
25185     Attributes::).
25186
25187     These attributes are not currently implemented for Objective-C.
25188
25189`deprecated'
25190`deprecated (MSG)'
25191     The `deprecated' attribute results in a warning if the function is
25192     used anywhere in the source file.  This is useful when identifying
25193     functions that are expected to be removed in a future version of a
25194     program.  The warning also includes the location of the declaration
25195     of the deprecated function, to enable users to easily find further
25196     information about why the function is deprecated, or what they
25197     should do instead.  Note that the warnings only occurs for uses:
25198
25199          int old_fn () __attribute__ ((deprecated));
25200          int old_fn ();
25201          int (*fn_ptr)() = old_fn;
25202
25203     results in a warning on line 3 but not line 2.  The optional MSG
25204     argument, which must be a string, is printed in the warning if
25205     present.
25206
25207     The `deprecated' attribute can also be used for variables and
25208     types (*note Variable Attributes::, *note Type Attributes::.)
25209
25210`disinterrupt'
25211     On Epiphany and MeP targets, this attribute causes the compiler to
25212     emit instructions to disable interrupts for the duration of the
25213     given function.
25214
25215`dllexport'
25216     On Microsoft Windows targets and Symbian OS targets the
25217     `dllexport' attribute causes the compiler to provide a global
25218     pointer to a pointer in a DLL, so that it can be referenced with
25219     the `dllimport' attribute.  On Microsoft Windows targets, the
25220     pointer name is formed by combining `_imp__' and the function or
25221     variable name.
25222
25223     You can use `__declspec(dllexport)' as a synonym for
25224     `__attribute__ ((dllexport))' for compatibility with other
25225     compilers.
25226
25227     On systems that support the `visibility' attribute, this attribute
25228     also implies "default" visibility.  It is an error to explicitly
25229     specify any other visibility.
25230
25231     GCC's default behavior is to emit all inline functions with the
25232     `dllexport' attribute.  Since this can cause object file-size
25233     bloat, you can use `-fno-keep-inline-dllexport', which tells GCC to
25234     ignore the attribute for inlined functions unless the
25235     `-fkeep-inline-functions' flag is used instead.
25236
25237     The attribute is ignored for undefined symbols.
25238
25239     When applied to C++ classes, the attribute marks defined
25240     non-inlined member functions and static data members as exports.
25241     Static consts initialized in-class are not marked unless they are
25242     also defined out-of-class.
25243
25244     For Microsoft Windows targets there are alternative methods for
25245     including the symbol in the DLL's export table such as using a
25246     `.def' file with an `EXPORTS' section or, with GNU ld, using the
25247     `--export-all' linker flag.
25248
25249`dllimport'
25250     On Microsoft Windows and Symbian OS targets, the `dllimport'
25251     attribute causes the compiler to reference a function or variable
25252     via a global pointer to a pointer that is set up by the DLL
25253     exporting the symbol.  The attribute implies `extern'.  On
25254     Microsoft Windows targets, the pointer name is formed by combining
25255     `_imp__' and the function or variable name.
25256
25257     You can use `__declspec(dllimport)' as a synonym for
25258     `__attribute__ ((dllimport))' for compatibility with other
25259     compilers.
25260
25261     On systems that support the `visibility' attribute, this attribute
25262     also implies "default" visibility.  It is an error to explicitly
25263     specify any other visibility.
25264
25265     Currently, the attribute is ignored for inlined functions.  If the
25266     attribute is applied to a symbol _definition_, an error is
25267     reported.  If a symbol previously declared `dllimport' is later
25268     defined, the attribute is ignored in subsequent references, and a
25269     warning is emitted.  The attribute is also overridden by a
25270     subsequent declaration as `dllexport'.
25271
25272     When applied to C++ classes, the attribute marks non-inlined
25273     member functions and static data members as imports.  However, the
25274     attribute is ignored for virtual methods to allow creation of
25275     vtables using thunks.
25276
25277     On the SH Symbian OS target the `dllimport' attribute also has
25278     another affect--it can cause the vtable and run-time type
25279     information for a class to be exported.  This happens when the
25280     class has a dllimported constructor or a non-inline, non-pure
25281     virtual function and, for either of those two conditions, the
25282     class also has an inline constructor or destructor and has a key
25283     function that is defined in the current translation unit.
25284
25285     For Microsoft Windows targets the use of the `dllimport' attribute
25286     on functions is not necessary, but provides a small performance
25287     benefit by eliminating a thunk in the DLL.  The use of the
25288     `dllimport' attribute on imported variables can be avoided by
25289     passing the `--enable-auto-import' switch to the GNU linker.  As
25290     with functions, using the attribute for a variable eliminates a
25291     thunk in the DLL.
25292
25293     One drawback to using this attribute is that a pointer to a
25294     _variable_ marked as `dllimport' cannot be used as a constant
25295     address. However, a pointer to a _function_ with the `dllimport'
25296     attribute can be used as a constant initializer; in this case, the
25297     address of a stub function in the import lib is referenced.  On
25298     Microsoft Windows targets, the attribute can be disabled for
25299     functions by setting the `-mnop-fun-dllimport' flag.
25300
25301`exception'
25302     Use this attribute on the NDS32 target to indicate that the
25303     specified function is an exception handler.  The compiler will
25304     generate corresponding sections for use in an exception handler.
25305
25306`exception_handler'
25307     Use this attribute on the Blackfin to indicate that the specified
25308     function is an exception handler.  The compiler generates function
25309     entry and exit sequences suitable for use in an exception handler
25310     when this attribute is present.
25311
25312`externally_visible'
25313     This attribute, attached to a global variable or function,
25314     nullifies the effect of the `-fwhole-program' command-line option,
25315     so the object remains visible outside the current compilation unit.
25316
25317     If `-fwhole-program' is used together with `-flto' and `gold' is
25318     used as the linker plugin, `externally_visible' attributes are
25319     automatically added to functions (not variable yet due to a
25320     current `gold' issue) that are accessed outside of LTO objects
25321     according to resolution file produced by `gold'.  For other
25322     linkers that cannot generate resolution file, explicit
25323     `externally_visible' attributes are still necessary.
25324
25325`far'
25326     On MeP targets this causes the compiler to use a calling convention
25327     that assumes the called function is too far away for the built-in
25328     addressing modes.
25329
25330`fast_interrupt'
25331     Use this attribute on the M32C and RX ports to indicate that the
25332     specified function is a fast interrupt handler.  This is just like
25333     the `interrupt' attribute, except that `freit' is used to return
25334     instead of `reit'.
25335
25336`fastcall'
25337     On x86-32 targets, the `fastcall' attribute causes the compiler to
25338     pass the first argument (if of integral type) in the register ECX
25339     and the second argument (if of integral type) in the register EDX.
25340     Subsequent and other typed arguments are passed on the stack.
25341     The called function pops the arguments off the stack.  If the
25342     number of arguments is variable all arguments are pushed on the
25343     stack.
25344
25345`thiscall'
25346     On x86-32 targets, the `thiscall' attribute causes the compiler to
25347     pass the first argument (if of integral type) in the register ECX.
25348     Subsequent and other typed arguments are passed on the stack. The
25349     called function pops the arguments off the stack.  If the number
25350     of arguments is variable all arguments are pushed on the stack.
25351     The `thiscall' attribute is intended for C++ non-static member
25352     functions.  As a GCC extension, this calling convention can be
25353     used for C functions and for static member methods.
25354
25355`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
25356     The `format' attribute specifies that a function takes `printf',
25357     `scanf', `strftime' or `strfmon' style arguments that should be
25358     type-checked against a format string.  For example, the
25359     declaration:
25360
25361          extern int
25362          my_printf (void *my_object, const char *my_format, ...)
25363                __attribute__ ((format (printf, 2, 3)));
25364
25365     causes the compiler to check the arguments in calls to `my_printf'
25366     for consistency with the `printf' style format string argument
25367     `my_format'.
25368
25369     The parameter ARCHETYPE determines how the format string is
25370     interpreted, and should be `printf', `scanf', `strftime',
25371     `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'.  (You can
25372     also use `__printf__', `__scanf__', `__strftime__' or
25373     `__strfmon__'.)  On MinGW targets, `ms_printf', `ms_scanf', and
25374     `ms_strftime' are also present.  ARCHETYPE values such as `printf'
25375     refer to the formats accepted by the system's C runtime library,
25376     while values prefixed with `gnu_' always refer to the formats
25377     accepted by the GNU C Library.  On Microsoft Windows targets,
25378     values prefixed with `ms_' refer to the formats accepted by the
25379     `msvcrt.dll' library.  The parameter STRING-INDEX specifies which
25380     argument is the format string argument (starting from 1), while
25381     FIRST-TO-CHECK is the number of the first argument to check
25382     against the format string.  For functions where the arguments are
25383     not available to be checked (such as `vprintf'), specify the third
25384     parameter as zero.  In this case the compiler only checks the
25385     format string for consistency.  For `strftime' formats, the third
25386     parameter is required to be zero.  Since non-static C++ methods
25387     have an implicit `this' argument, the arguments of such methods
25388     should be counted from two, not one, when giving values for
25389     STRING-INDEX and FIRST-TO-CHECK.
25390
25391     In the example above, the format string (`my_format') is the second
25392     argument of the function `my_print', and the arguments to check
25393     start with the third argument, so the correct parameters for the
25394     format attribute are 2 and 3.
25395
25396     The `format' attribute allows you to identify your own functions
25397     that take format strings as arguments, so that GCC can check the
25398     calls to these functions for errors.  The compiler always (unless
25399     `-ffreestanding' or `-fno-builtin' is used) checks formats for the
25400     standard library functions `printf', `fprintf', `sprintf',
25401     `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
25402     `vsprintf' whenever such warnings are requested (using
25403     `-Wformat'), so there is no need to modify the header file
25404     `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
25405     `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
25406     strictly conforming C standard modes, the X/Open function
25407     `strfmon' is also checked as are `printf_unlocked' and
25408     `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
25409     Dialect Options.
25410
25411     For Objective-C dialects, `NSString' (or `__NSString__') is
25412     recognized in the same context.  Declarations including these
25413     format attributes are parsed for correct syntax, however the
25414     result of checking of such format strings is not yet defined, and
25415     is not carried out by this version of the compiler.
25416
25417     The target may also provide additional types of format checks.
25418     *Note Format Checks Specific to Particular Target Machines: Target
25419     Format Checks.
25420
25421`format_arg (STRING-INDEX)'
25422     The `format_arg' attribute specifies that a function takes a format
25423     string for a `printf', `scanf', `strftime' or `strfmon' style
25424     function and modifies it (for example, to translate it into
25425     another language), so the result can be passed to a `printf',
25426     `scanf', `strftime' or `strfmon' style function (with the
25427     remaining arguments to the format function the same as they would
25428     have been for the unmodified string).  For example, the
25429     declaration:
25430
25431          extern char *
25432          my_dgettext (char *my_domain, const char *my_format)
25433                __attribute__ ((format_arg (2)));
25434
25435     causes the compiler to check the arguments in calls to a `printf',
25436     `scanf', `strftime' or `strfmon' type function, whose format
25437     string argument is a call to the `my_dgettext' function, for
25438     consistency with the format string argument `my_format'.  If the
25439     `format_arg' attribute had not been specified, all the compiler
25440     could tell in such calls to format functions would be that the
25441     format string argument is not constant; this would generate a
25442     warning when `-Wformat-nonliteral' is used, but the calls could
25443     not be checked without the attribute.
25444
25445     The parameter STRING-INDEX specifies which argument is the format
25446     string argument (starting from one).  Since non-static C++ methods
25447     have an implicit `this' argument, the arguments of such methods
25448     should be counted from two.
25449
25450     The `format_arg' attribute allows you to identify your own
25451     functions that modify format strings, so that GCC can check the
25452     calls to `printf', `scanf', `strftime' or `strfmon' type function
25453     whose operands are a call to one of your own function.  The
25454     compiler always treats `gettext', `dgettext', and `dcgettext' in
25455     this manner except when strict ISO C support is requested by
25456     `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
25457     `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
25458     Dialect Options.
25459
25460     For Objective-C dialects, the `format-arg' attribute may refer to
25461     an `NSString' reference for compatibility with the `format'
25462     attribute above.
25463
25464     The target may also allow additional types in `format-arg'
25465     attributes.  *Note Format Checks Specific to Particular Target
25466     Machines: Target Format Checks.
25467
25468`function_vector'
25469     Use this attribute on the H8/300, H8/300H, and H8S to indicate
25470     that the specified function should be called through the function
25471     vector.  Calling a function through the function vector reduces
25472     code size, however; the function vector has a limited size
25473     (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
25474     and H8S) and shares space with the interrupt vector.
25475
25476     On SH2A targets, this attribute declares a function to be called
25477     using the TBR relative addressing mode.  The argument to this
25478     attribute is the entry number of the same function in a vector
25479     table containing all the TBR relative addressable functions.  For
25480     correct operation the TBR must be setup accordingly to point to
25481     the start of the vector table before any functions with this
25482     attribute are invoked.  Usually a good place to do the
25483     initialization is the startup routine.  The TBR relative vector
25484     table can have at max 256 function entries.  The jumps to these
25485     functions are generated using a SH2A specific, non delayed branch
25486     instruction JSR/N @(disp8,TBR).  You must use GAS and GLD from GNU
25487     binutils version 2.7 or later for this attribute to work correctly.
25488
25489     Please refer the example of M16C target, to see the use of this
25490     attribute while declaring a function,
25491
25492     In an application, for a function being called once, this attribute
25493     saves at least 8 bytes of code; and if other successive calls are
25494     being made to the same function, it saves 2 bytes of code per each
25495     of these calls.
25496
25497     On M16C/M32C targets, the `function_vector' attribute declares a
25498     special page subroutine call function. Use of this attribute
25499     reduces the code size by 2 bytes for each call generated to the
25500     subroutine. The argument to the attribute is the vector number
25501     entry from the special page vector table which contains the 16
25502     low-order bits of the subroutine's entry address. Each vector
25503     table has special page number (18 to 255) that is used in `jsrs'
25504     instructions.  Jump addresses of the routines are generated by
25505     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
25506     M32C targets), to the 2-byte addresses set in the vector table.
25507     Therefore you need to ensure that all the special page vector
25508     routines should get mapped within the address range 0x0F0000 to
25509     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).
25510
25511     In the following example 2 bytes are saved for each call to
25512     function `foo'.
25513
25514          void foo (void) __attribute__((function_vector(0x18)));
25515          void foo (void)
25516          {
25517          }
25518
25519          void bar (void)
25520          {
25521              foo();
25522          }
25523
25524     If functions are defined in one file and are called in another
25525     file, then be sure to write this declaration in both files.
25526
25527     This attribute is ignored for R8C target.
25528
25529`ifunc ("RESOLVER")'
25530     The `ifunc' attribute is used to mark a function as an indirect
25531     function using the STT_GNU_IFUNC symbol type extension to the ELF
25532     standard.  This allows the resolution of the symbol value to be
25533     determined dynamically at load time, and an optimized version of
25534     the routine can be selected for the particular processor or other
25535     system characteristics determined then.  To use this attribute,
25536     first define the implementation functions available, and a
25537     resolver function that returns a pointer to the selected
25538     implementation function.  The implementation functions'
25539     declarations must match the API of the function being implemented,
25540     the resolver's declaration is be a function returning pointer to
25541     void function returning void:
25542
25543          void *my_memcpy (void *dst, const void *src, size_t len)
25544          {
25545            ...
25546          }
25547
25548          static void (*resolve_memcpy (void)) (void)
25549          {
25550            return my_memcpy; // we'll just always select this routine
25551          }
25552
25553     The exported header file declaring the function the user calls
25554     would contain:
25555
25556          extern void *memcpy (void *, const void *, size_t);
25557
25558     allowing the user to call this as a regular function, unaware of
25559     the implementation.  Finally, the indirect function needs to be
25560     defined in the same translation unit as the resolver function:
25561
25562          void *memcpy (void *, const void *, size_t)
25563               __attribute__ ((ifunc ("resolve_memcpy")));
25564
25565     Indirect functions cannot be weak.  Binutils version 2.20.1 or
25566     higher and GNU C Library version 2.11.1 are required to use this
25567     feature.
25568
25569`interrupt'
25570     Use this attribute on the ARC, ARM, AVR, CR16, Epiphany, M32C,
25571     M32R/D, m68k, MeP, MIPS, MSP430, NDS32, RL78, RX, Visium and
25572     Xstormy16 ports to indicate that the specified function is an
25573     interrupt handler.  The compiler generates function entry and exit
25574     sequences suitable for use in an interrupt handler when this
25575     attribute is present.  With Epiphany targets it may also generate
25576     a special section with code to initialize the interrupt vector
25577     table.
25578
25579     Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
25580     MicroBlaze, and SH processors can be specified via the
25581     `interrupt_handler' attribute.
25582
25583     Note, on the ARC, you must specify the kind of interrupt to be
25584     handled in a parameter to the interrupt attribute like this:
25585
25586          void f () __attribute__ ((interrupt ("ilink1")));
25587
25588     Permissible values for this parameter are: `ilink1' and `ilink2'.
25589
25590     Note, on the AVR, the hardware globally disables interrupts when an
25591     interrupt is executed.  The first instruction of an interrupt
25592     handler declared with this attribute is a `SEI' instruction to
25593     re-enable interrupts.  See also the `signal' function attribute
25594     that does not insert a `SEI' instruction.  If both `signal' and
25595     `interrupt' are specified for the same function, `signal' is
25596     silently ignored.
25597
25598     Note, for the ARM, you can specify the kind of interrupt to be
25599     handled by adding an optional parameter to the interrupt attribute
25600     like this:
25601
25602          void f () __attribute__ ((interrupt ("IRQ")));
25603
25604     Permissible values for this parameter are: `IRQ', `FIQ', `SWI',
25605     `ABORT' and `UNDEF'.
25606
25607     On ARMv7-M the interrupt type is ignored, and the attribute means
25608     the function may be called with a word-aligned stack pointer.
25609
25610     Note, for the MSP430 you can provide an argument to the interrupt
25611     attribute which specifies a name or number.  If the argument is a
25612     number it indicates the slot in the interrupt vector table (0 -
25613     31) to which this handler should be assigned.  If the argument is
25614     a name it is treated as a symbolic name for the vector slot.
25615     These names should match up with appropriate entries in the linker
25616     script.  By default the names `watchdog' for vector 26, `nmi' for
25617     vector 30 and `reset' for vector 31 are recognized.
25618
25619     You can also use the following function attributes to modify how
25620     normal functions interact with interrupt functions:
25621
25622    `critical'
25623          Critical functions disable interrupts upon entry and restore
25624          the previous interrupt state upon exit.  Critical functions
25625          cannot also have the `naked' or `reentrant' attributes.  They
25626          can have the `interrupt' attribute.
25627
25628    `reentrant'
25629          Reentrant functions disable interrupts upon entry and enable
25630          them upon exit.  Reentrant functions cannot also have the
25631          `naked' or `critical' attributes.  They can have the
25632          `interrupt' attribute.
25633
25634    `wakeup'
25635          This attribute only applies to interrupt functions.  It is
25636          silently ignored if applied to a non-interrupt function.  A
25637          wakeup interrupt function will rouse the processor from any
25638          low-power state that it might be in when the function exits.
25639
25640
25641     On Epiphany targets one or more optional parameters can be added
25642     like this:
25643
25644          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
25645
25646     Permissible values for these parameters are: `reset',
25647     `software_exception', `page_miss', `timer0', `timer1', `message',
25648     `dma0', `dma1', `wand' and `swi'.  Multiple parameters indicate
25649     that multiple entries in the interrupt vector table should be
25650     initialized for this function, i.e. for each parameter NAME, a
25651     jump to the function is emitted in the section ivt_entry_NAME.
25652     The parameter(s) may be omitted entirely, in which case no
25653     interrupt vector table entry is provided.
25654
25655     Note, on Epiphany targets, interrupts are enabled inside the
25656     function unless the `disinterrupt' attribute is also specified.
25657
25658     On Epiphany targets, you can also use the following attribute to
25659     modify the behavior of an interrupt handler:
25660    `forwarder_section'
25661          The interrupt handler may be in external memory which cannot
25662          be reached by a branch instruction, so generate a local
25663          memory trampoline to transfer control.  The single parameter
25664          identifies the section where the trampoline is placed.
25665
25666     The following examples are all valid uses of these attributes on
25667     Epiphany targets:
25668          void __attribute__ ((interrupt)) universal_handler ();
25669          void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
25670          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
25671          void __attribute__ ((interrupt ("timer0"), disinterrupt))
25672            fast_timer_handler ();
25673          void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp")))
25674            external_dma_handler ();
25675
25676     On MIPS targets, you can use the following attributes to modify
25677     the behavior of an interrupt handler:
25678    `use_shadow_register_set'
25679          Assume that the handler uses a shadow register set, instead of
25680          the main general-purpose registers.
25681
25682    `keep_interrupts_masked'
25683          Keep interrupts masked for the whole function.  Without this
25684          attribute, GCC tries to reenable interrupts for as much of
25685          the function as it can.
25686
25687    `use_debug_exception_return'
25688          Return using the `deret' instruction.  Interrupt handlers
25689          that don't have this attribute return using `eret' instead.
25690
25691     You can use any combination of these attributes, as shown below:
25692          void __attribute__ ((interrupt)) v0 ();
25693          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
25694          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
25695          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
25696          void __attribute__ ((interrupt, use_shadow_register_set,
25697                               keep_interrupts_masked)) v4 ();
25698          void __attribute__ ((interrupt, use_shadow_register_set,
25699                               use_debug_exception_return)) v5 ();
25700          void __attribute__ ((interrupt, keep_interrupts_masked,
25701                               use_debug_exception_return)) v6 ();
25702          void __attribute__ ((interrupt, use_shadow_register_set,
25703                               keep_interrupts_masked,
25704                               use_debug_exception_return)) v7 ();
25705
25706     On NDS32 target, this attribute indicates that the specified
25707     function is an interrupt handler.  The compiler generates
25708     corresponding sections for use in an interrupt handler.  You can
25709     use the following attributes to modify the behavior:
25710    `nested'
25711          This interrupt service routine is interruptible.
25712
25713    `not_nested'
25714          This interrupt service routine is not interruptible.
25715
25716    `nested_ready'
25717          This interrupt service routine is interruptible after
25718          `PSW.GIE' (global interrupt enable) is set.  This allows
25719          interrupt service routine to finish some short critical code
25720          before enabling interrupts.
25721
25722    `save_all'
25723          The system will help save all registers into stack before
25724          entering interrupt handler.
25725
25726    `partial_save'
25727          The system will help save caller registers into stack before
25728          entering interrupt handler.
25729
25730     On RL78, use `brk_interrupt' instead of `interrupt' for handlers
25731     intended to be used with the `BRK' opcode (i.e. those that must
25732     end with `RETB' instead of `RETI').
25733
25734     On RX targets, you may specify one or more vector numbers as
25735     arguments to the attribute, as well as naming an alternate table
25736     name.  Parameters are handled sequentially, so one handler can be
25737     assigned to multiple entries in multiple tables.  One may also
25738     pass the magic string `"$default"' which causes the function to be
25739     used for any unfilled slots in the current table.
25740
25741     This example shows a simple assignment of a function to one vector
25742     in the default table (note that preprocessor macros may be used for
25743     chip-specific symbolic vector names):
25744          void __attribute__ ((interrupt (5))) txd1_handler ();
25745
25746     This example assigns a function to two slots in the default table
25747     (using preprocessor macros defined elsewhere) and makes it the
25748     default for the `dct' table:
25749          void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
25750          	txd1_handler ();
25751
25752`interrupt_handler'
25753     Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
25754     and SH to indicate that the specified function is an interrupt
25755     handler.  The compiler generates function entry and exit sequences
25756     suitable for use in an interrupt handler when this attribute is
25757     present.
25758
25759`interrupt_thread'
25760     Use this attribute on fido, a subarchitecture of the m68k, to
25761     indicate that the specified function is an interrupt handler that
25762     is designed to run as a thread.  The compiler omits generate
25763     prologue/epilogue sequences and replaces the return instruction
25764     with a `sleep' instruction.  This attribute is available only on
25765     fido.
25766
25767`isr'
25768     Use this attribute on ARM to write Interrupt Service Routines.
25769     This is an alias to the `interrupt' attribute above.
25770
25771`kspisusp'
25772     When used together with `interrupt_handler', `exception_handler'
25773     or `nmi_handler', code is generated to load the stack pointer from
25774     the USP register in the function prologue.
25775
25776`l1_text'
25777     This attribute specifies a function to be placed into L1
25778     Instruction SRAM. The function is put into a specific section
25779     named `.l1.text'.  With `-mfdpic', function calls with a such
25780     function as the callee or caller uses inlined PLT.
25781
25782`l2'
25783     On the Blackfin, this attribute specifies a function to be placed
25784     into L2 SRAM. The function is put into a specific section named
25785     `.l1.text'. With `-mfdpic', callers of such functions use an
25786     inlined PLT.
25787
25788`leaf'
25789     Calls to external functions with this attribute must return to the
25790     current compilation unit only by return or by exception handling.
25791     In particular, leaf functions are not allowed to call callback
25792     function passed to it from the current compilation unit or
25793     directly call functions exported by the unit or longjmp into the
25794     unit.  Leaf function might still call functions from other
25795     compilation units and thus they are not necessarily leaf in the
25796     sense that they contain no function calls at all.
25797
25798     The attribute is intended for library functions to improve
25799     dataflow analysis.  The compiler takes the hint that any data not
25800     escaping the current compilation unit can not be used or modified
25801     by the leaf function.  For example, the `sin' function is a leaf
25802     function, but `qsort' is not.
25803
25804     Note that leaf functions might invoke signals and signal handlers
25805     might be defined in the current compilation unit and use static
25806     variables.  The only compliant way to write such a signal handler
25807     is to declare such variables `volatile'.
25808
25809     The attribute has no effect on functions defined within the
25810     current compilation unit.  This is to allow easy merging of
25811     multiple compilation units into one, for example, by using the
25812     link-time optimization.  For this reason the attribute is not
25813     allowed on types to annotate indirect calls.
25814
25815`long_call'
25816`medium_call'
25817`short_call'
25818     These attributes specify how a particular function is called on
25819     ARC, ARM and Epiphany - with `medium_call' being specific to ARC.
25820     These attributes override the `-mlong-calls' (*note ARM Options::
25821     and *Note ARC Options::) and `-mmedium-calls' (*note ARC Options::)
25822     command-line switches and `#pragma long_calls' settings.  For ARM,
25823     the `long_call' attribute indicates that the function might be far
25824     away from the call site and require a different (more expensive)
25825     calling sequence.   The `short_call' attribute always places the
25826     offset to the function from the call site into the `BL'
25827     instruction directly.
25828
25829     For ARC, a function marked with the `long_call' attribute is
25830     always called using register-indirect jump-and-link instructions,
25831     thereby enabling the called function to be placed anywhere within
25832     the 32-bit address space.  A function marked with the `medium_call'
25833     attribute will always be close enough to be called with an
25834     unconditional branch-and-link instruction, which has a 25-bit
25835     offset from the call site.  A function marked with the `short_call'
25836     attribute will always be close enough to be called with a
25837     conditional branch-and-link instruction, which has a 21-bit offset
25838     from the call site.
25839
25840`longcall'
25841`shortcall'
25842     On Blackfin and PowerPC, the `longcall' attribute indicates that
25843     the function might be far away from the call site and require a
25844     different (more expensive) calling sequence.  The `shortcall'
25845     attribute indicates that the function is always close enough for
25846     the shorter calling sequence to be used.  These attributes
25847     override both the `-mlongcall' switch and, on the RS/6000 and
25848     PowerPC, the `#pragma longcall' setting.
25849
25850     *Note RS/6000 and PowerPC Options::, for more information on
25851     whether long calls are necessary.
25852
25853`long_call'
25854`near'
25855`far'
25856     These attributes specify how a particular function is called on
25857     MIPS.  The attributes override the `-mlong-calls' (*note MIPS
25858     Options::) command-line switch.  The `long_call' and `far'
25859     attributes are synonyms, and cause the compiler to always call the
25860     function by first loading its address into a register, and then
25861     using the contents of that register.  The `near' attribute has the
25862     opposite effect; it specifies that non-PIC calls should be made
25863     using the more efficient `jal' instruction.
25864
25865`malloc'
25866     This tells the compiler that a function is `malloc'-like, i.e.,
25867     that the pointer P returned by the function cannot alias any other
25868     pointer valid when the function returns, and moreover no pointers
25869     to valid objects occur in any storage addressed by P.
25870
25871     Using this attribute can improve optimization.  Functions like
25872     `malloc' and `calloc' have this property because they return a
25873     pointer to uninitialized or zeroed-out storage.  However, functions
25874     like `realloc' do not have this property, as they can return a
25875     pointer to storage containing pointers.
25876
25877`mips16'
25878`nomips16'
25879     On MIPS targets, you can use the `mips16' and `nomips16' function
25880     attributes to locally select or turn off MIPS16 code generation.
25881     A function with the `mips16' attribute is emitted as MIPS16 code,
25882     while MIPS16 code generation is disabled for functions with the
25883     `nomips16' attribute.  These attributes override the `-mips16' and
25884     `-mno-mips16' options on the command line (*note MIPS Options::).
25885
25886     When compiling files containing mixed MIPS16 and non-MIPS16 code,
25887     the preprocessor symbol `__mips16' reflects the setting on the
25888     command line, not that within individual functions.  Mixed MIPS16
25889     and non-MIPS16 code may interact badly with some GCC extensions
25890     such as `__builtin_apply' (*note Constructing Calls::).
25891
25892`micromips, MIPS'
25893`nomicromips, MIPS'
25894     On MIPS targets, you can use the `micromips' and `nomicromips'
25895     function attributes to locally select or turn off microMIPS code
25896     generation.  A function with the `micromips' attribute is emitted
25897     as microMIPS code, while microMIPS code generation is disabled for
25898     functions with the `nomicromips' attribute.  These attributes
25899     override the `-mmicromips' and `-mno-micromips' options on the
25900     command line (*note MIPS Options::).
25901
25902     When compiling files containing mixed microMIPS and non-microMIPS
25903     code, the preprocessor symbol `__mips_micromips' reflects the
25904     setting on the command line, not that within individual functions.
25905     Mixed microMIPS and non-microMIPS code may interact badly with
25906     some GCC extensions such as `__builtin_apply' (*note Constructing
25907     Calls::).
25908
25909`model (MODEL-NAME)'
25910     On the M32R/D, use this attribute to set the addressability of an
25911     object, and of the code generated for a function.  The identifier
25912     MODEL-NAME is one of `small', `medium', or `large', representing
25913     each of the code models.
25914
25915     Small model objects live in the lower 16MB of memory (so that their
25916     addresses can be loaded with the `ld24' instruction), and are
25917     callable with the `bl' instruction.
25918
25919     Medium model objects may live anywhere in the 32-bit address space
25920     (the compiler generates `seth/add3' instructions to load their
25921     addresses), and are callable with the `bl' instruction.
25922
25923     Large model objects may live anywhere in the 32-bit address space
25924     (the compiler generates `seth/add3' instructions to load their
25925     addresses), and may not be reachable with the `bl' instruction
25926     (the compiler generates the much slower `seth/add3/jl' instruction
25927     sequence).
25928
25929`ms_abi'
25930`sysv_abi'
25931     On 32-bit and 64-bit x86 targets, you can use an ABI attribute to
25932     indicate which calling convention should be used for a function.
25933     The `ms_abi' attribute tells the compiler to use the Microsoft ABI,
25934     while the `sysv_abi' attribute tells the compiler to use the ABI
25935     used on GNU/Linux and other systems.  The default is to use the
25936     Microsoft ABI when targeting Windows.  On all other systems, the
25937     default is the x86/AMD ABI.
25938
25939     Note, the `ms_abi' attribute for Microsoft Windows 64-bit targets
25940     currently requires the `-maccumulate-outgoing-args' option.
25941
25942`callee_pop_aggregate_return (NUMBER)'
25943     On x86-32 targets, you can use this attribute to control how
25944     aggregates are returned in memory.  If the caller is responsible
25945     for popping the hidden pointer together with the rest of the
25946     arguments, specify NUMBER equal to zero.  If callee is responsible
25947     for popping the hidden pointer, specify NUMBER equal to one.
25948
25949     The default x86-32 ABI assumes that the callee pops the stack for
25950     hidden pointer.  However, on x86-32 Microsoft Windows targets, the
25951     compiler assumes that the caller pops the stack for hidden pointer.
25952
25953`ms_hook_prologue'
25954     On 32-bit and 64-bit x86 targets, you can use this function
25955     attribute to make GCC generate the "hot-patching" function
25956     prologue used in Win32 API functions in Microsoft Windows XP
25957     Service Pack 2 and newer.
25958
25959`hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)'
25960     On S/390 System z targets, you can use this function attribute to
25961     make GCC generate a "hot-patching" function prologue.  If the
25962     `-mhotpatch=' command-line option is used at the same time, the
25963     `hotpatch' attribute takes precedence.  The first of the two
25964     arguments specifies the number of halfwords to be added before the
25965     function label.  A second argument can be used to specify the
25966     number of halfwords to be added after the function label.  For
25967     both arguments the maximum allowed value is 1000000.
25968
25969     If both arguments are zero, hotpatching is disabled.
25970
25971`naked'
25972     This attribute is available on the ARM, AVR, MCORE, MSP430, NDS32,
25973     RL78, RX and SPU ports.  It allows the compiler to construct the
25974     requisite function declaration, while allowing the body of the
25975     function to be assembly code. The specified function will not have
25976     prologue/epilogue sequences generated by the compiler. Only basic
25977     `asm' statements can safely be included in naked functions (*note
25978     Basic Asm::). While using extended `asm' or a mixture of basic
25979     `asm' and C code may appear to work, they cannot be depended upon
25980     to work reliably and are not supported.
25981
25982`near'
25983     On MeP targets this attribute causes the compiler to assume the
25984     called function is close enough to use the normal calling
25985     convention, overriding the `-mtf' command-line option.
25986
25987`nesting'
25988     Use this attribute together with `interrupt_handler',
25989     `exception_handler' or `nmi_handler' to indicate that the function
25990     entry code should enable nested interrupts or exceptions.
25991
25992`nmi_handler'
25993     Use this attribute on the Blackfin to indicate that the specified
25994     function is an NMI handler.  The compiler generates function entry
25995     and exit sequences suitable for use in an NMI handler when this
25996     attribute is present.
25997
25998`nocompression'
25999     On MIPS targets, you can use the `nocompression' function attribute
26000     to locally turn off MIPS16 and microMIPS code generation.  This
26001     attribute overrides the `-mips16' and `-mmicromips' options on the
26002     command line (*note MIPS Options::).
26003
26004`no_instrument_function'
26005     If `-finstrument-functions' is given, profiling function calls are
26006     generated at entry and exit of most user-compiled functions.
26007     Functions with this attribute are not so instrumented.
26008
26009`no_split_stack'
26010     If `-fsplit-stack' is given, functions have a small prologue which
26011     decides whether to split the stack.  Functions with the
26012     `no_split_stack' attribute do not have that prologue, and thus may
26013     run with only a small amount of stack space available.
26014
26015`stack_protect'
26016     This function attribute make a stack protection of the function if
26017     flags `fstack-protector' or `fstack-protector-strong' or
26018     `fstack-protector-explicit' are set.
26019
26020`noinline'
26021     This function attribute prevents a function from being considered
26022     for inlining.  If the function does not have side-effects, there
26023     are optimizations other than inlining that cause function calls to
26024     be optimized away, although the function call is live.  To keep
26025     such calls from being optimized away, put
26026          asm ("");
26027
26028     (*note Extended Asm::) in the called function, to serve as a
26029     special side-effect.
26030
26031`noclone'
26032     This function attribute prevents a function from being considered
26033     for cloning--a mechanism that produces specialized copies of
26034     functions and which is (currently) performed by interprocedural
26035     constant propagation.
26036
26037`no_icf'
26038     This function attribute prevents a functions from being merged
26039     with another semantically equivalent function.
26040
26041`nonnull (ARG-INDEX, ...)'
26042     The `nonnull' attribute specifies that some function parameters
26043     should be non-null pointers.  For instance, the declaration:
26044
26045          extern void *
26046          my_memcpy (void *dest, const void *src, size_t len)
26047                  __attribute__((nonnull (1, 2)));
26048
26049     causes the compiler to check that, in calls to `my_memcpy',
26050     arguments DEST and SRC are non-null.  If the compiler determines
26051     that a null pointer is passed in an argument slot marked as
26052     non-null, and the `-Wnonnull' option is enabled, a warning is
26053     issued.  The compiler may also choose to make optimizations based
26054     on the knowledge that certain function arguments will never be
26055     null.
26056
26057     If no argument index list is given to the `nonnull' attribute, all
26058     pointer arguments are marked as non-null.  To illustrate, the
26059     following declaration is equivalent to the previous example:
26060
26061          extern void *
26062          my_memcpy (void *dest, const void *src, size_t len)
26063                  __attribute__((nonnull));
26064
26065`no_reorder'
26066     Do not reorder functions or variables marked `no_reorder' against
26067     each other or top level assembler statements the executable.  The
26068     actual order in the program will depend on the linker command
26069     line. Static variables marked like this are also not removed.
26070     This has a similar effect as the `-fno-toplevel-reorder' option,
26071     but only applies to the marked symbols.
26072
26073`returns_nonnull'
26074     The `returns_nonnull' attribute specifies that the function return
26075     value should be a non-null pointer.  For instance, the declaration:
26076
26077          extern void *
26078          mymalloc (size_t len) __attribute__((returns_nonnull));
26079
26080     lets the compiler optimize callers based on the knowledge that the
26081     return value will never be null.
26082
26083`noreturn'
26084     A few standard library functions, such as `abort' and `exit',
26085     cannot return.  GCC knows this automatically.  Some programs define
26086     their own functions that never return.  You can declare them
26087     `noreturn' to tell the compiler this fact.  For example,
26088
26089          void fatal () __attribute__ ((noreturn));
26090
26091          void
26092          fatal (/* ... */)
26093          {
26094            /* ... */ /* Print error message. */ /* ... */
26095            exit (1);
26096          }
26097
26098     The `noreturn' keyword tells the compiler to assume that `fatal'
26099     cannot return.  It can then optimize without regard to what would
26100     happen if `fatal' ever did return.  This makes slightly better
26101     code.  More importantly, it helps avoid spurious warnings of
26102     uninitialized variables.
26103
26104     The `noreturn' keyword does not affect the exceptional path when
26105     that applies: a `noreturn'-marked function may still return to the
26106     caller by throwing an exception or calling `longjmp'.
26107
26108     Do not assume that registers saved by the calling function are
26109     restored before calling the `noreturn' function.
26110
26111     It does not make sense for a `noreturn' function to have a return
26112     type other than `void'.
26113
26114`nothrow'
26115     The `nothrow' attribute is used to inform the compiler that a
26116     function cannot throw an exception.  For example, most functions in
26117     the standard C library can be guaranteed not to throw an exception
26118     with the notable exceptions of `qsort' and `bsearch' that take
26119     function pointer arguments.
26120
26121`nosave_low_regs'
26122     Use this attribute on SH targets to indicate that an
26123     `interrupt_handler' function should not save and restore registers
26124     R0..R7.  This can be used on SH3* and SH4* targets that have a
26125     second R0..R7 register bank for non-reentrant interrupt handlers.
26126
26127`optimize'
26128     The `optimize' attribute is used to specify that a function is to
26129     be compiled with different optimization options than specified on
26130     the command line.  Arguments can either be numbers or strings.
26131     Numbers are assumed to be an optimization level.  Strings that
26132     begin with `O' are assumed to be an optimization option, while
26133     other options are assumed to be used with a `-f' prefix.  You can
26134     also use the `#pragma GCC optimize' pragma to set the optimization
26135     options that affect more than one function.  *Note Function
26136     Specific Option Pragmas::, for details about the `#pragma GCC
26137     optimize' pragma.
26138
26139     This can be used for instance to have frequently-executed functions
26140     compiled with more aggressive optimization options that produce
26141     faster and larger code, while other functions can be compiled with
26142     less aggressive options.
26143
26144`OS_main'
26145`OS_task'
26146     On AVR, functions with the `OS_main' or `OS_task' attribute do not
26147     save/restore any call-saved register in their prologue/epilogue.
26148
26149     The `OS_main' attribute can be used when there _is guarantee_ that
26150     interrupts are disabled at the time when the function is entered.
26151     This saves resources when the stack pointer has to be changed to
26152     set up a frame for local variables.
26153
26154     The `OS_task' attribute can be used when there is _no guarantee_
26155     that interrupts are disabled at that time when the function is
26156     entered like for, e.g. task functions in a multi-threading
26157     operating system. In that case, changing the stack pointer
26158     register is guarded by save/clear/restore of the global interrupt
26159     enable flag.
26160
26161     The differences to the `naked' function attribute are:
26162        * `naked' functions do not have a return instruction whereas
26163          `OS_main' and `OS_task' functions have a `RET' or `RETI'
26164          return instruction.
26165
26166        * `naked' functions do not set up a frame for local variables
26167          or a frame pointer whereas `OS_main' and `OS_task' do this as
26168          needed.
26169
26170`pcs'
26171     The `pcs' attribute can be used to control the calling convention
26172     used for a function on ARM.  The attribute takes an argument that
26173     specifies the calling convention to use.
26174
26175     When compiling using the AAPCS ABI (or a variant of it) then valid
26176     values for the argument are `"aapcs"' and `"aapcs-vfp"'.  In order
26177     to use a variant other than `"aapcs"' then the compiler must be
26178     permitted to use the appropriate co-processor registers (i.e., the
26179     VFP registers must be available in order to use `"aapcs-vfp"').
26180     For example,
26181
26182          /* Argument passed in r0, and result returned in r0+r1.  */
26183          double f2d (float) __attribute__((pcs("aapcs")));
26184
26185     Variadic functions always use the `"aapcs"' calling convention and
26186     the compiler rejects attempts to specify an alternative.
26187
26188`pure'
26189     Many functions have no effects except the return value and their
26190     return value depends only on the parameters and/or global
26191     variables.  Such a function can be subject to common subexpression
26192     elimination and loop optimization just as an arithmetic operator
26193     would be.  These functions should be declared with the attribute
26194     `pure'.  For example,
26195
26196          int square (int) __attribute__ ((pure));
26197
26198     says that the hypothetical function `square' is safe to call fewer
26199     times than the program says.
26200
26201     Some of common examples of pure functions are `strlen' or `memcmp'.
26202     Interesting non-pure functions are functions with infinite loops
26203     or those depending on volatile memory or other system resource,
26204     that may change between two consecutive calls (such as `feof' in a
26205     multithreading environment).
26206
26207`hot'
26208     The `hot' attribute on a function is used to inform the compiler
26209     that the function is a hot spot of the compiled program.  The
26210     function is optimized more aggressively and on many targets it is
26211     placed into a special subsection of the text section so all hot
26212     functions appear close together, improving locality.
26213
26214     When profile feedback is available, via `-fprofile-use', hot
26215     functions are automatically detected and this attribute is ignored.
26216
26217`cold'
26218     The `cold' attribute on functions is used to inform the compiler
26219     that the function is unlikely to be executed.  The function is
26220     optimized for size rather than speed and on many targets it is
26221     placed into a special subsection of the text section so all cold
26222     functions appear close together, improving code locality of
26223     non-cold parts of program.  The paths leading to calls of cold
26224     functions within code are marked as unlikely by the branch
26225     prediction mechanism.  It is thus useful to mark functions used to
26226     handle unlikely conditions, such as `perror', as cold to improve
26227     optimization of hot functions that do call marked functions in
26228     rare occasions.
26229
26230     When profile feedback is available, via `-fprofile-use', cold
26231     functions are automatically detected and this attribute is ignored.
26232
26233`no_sanitize_address'
26234`no_address_safety_analysis'
26235     The `no_sanitize_address' attribute on functions is used to inform
26236     the compiler that it should not instrument memory accesses in the
26237     function when compiling with the `-fsanitize=address' option.  The
26238     `no_address_safety_analysis' is a deprecated alias of the
26239     `no_sanitize_address' attribute, new code should use
26240     `no_sanitize_address'.
26241
26242`no_sanitize_thread'
26243     The `no_sanitize_thread' attribute on functions is used to inform
26244     the compiler that it should not instrument memory accesses in the
26245     function when compiling with the `-fsanitize=thread' option.
26246
26247`no_sanitize_undefined'
26248     The `no_sanitize_undefined' attribute on functions is used to
26249     inform the compiler that it should not check for undefined behavior
26250     in the function when compiling with the `-fsanitize=undefined'
26251     option.
26252
26253`bnd_legacy'
26254     The `bnd_legacy' attribute on functions is used to inform the
26255     compiler that the function should not be instrumented when compiled
26256     with the `-fcheck-pointer-bounds' option.
26257
26258`bnd_instrument'
26259     The `bnd_instrument' attribute on functions is used to inform the
26260     compiler that the function should be instrumented when compiled
26261     with the `-fchkp-instrument-marked-only' option.
26262
26263`regparm (NUMBER)'
26264     On x86-32 targets, the `regparm' attribute causes the compiler to
26265     pass arguments number one to NUMBER if they are of integral type
26266     in registers EAX, EDX, and ECX instead of on the stack.  Functions
26267     that take a variable number of arguments continue to be passed all
26268     of their arguments on the stack.
26269
26270     Beware that on some ELF systems this attribute is unsuitable for
26271     global functions in shared libraries with lazy binding (which is
26272     the default).  Lazy binding sends the first call via resolving
26273     code in the loader, which might assume EAX, EDX and ECX can be
26274     clobbered, as per the standard calling conventions.  Solaris 8 is
26275     affected by this.  Systems with the GNU C Library version 2.1 or
26276     higher and FreeBSD are believed to be safe since the loaders there
26277     save EAX, EDX and ECX.  (Lazy binding can be disabled with the
26278     linker or the loader if desired, to avoid the problem.)
26279
26280`reset'
26281     Use this attribute on the NDS32 target to indicate that the
26282     specified function is a reset handler.  The compiler will generate
26283     corresponding sections for use in a reset handler.  You can use
26284     the following attributes to provide extra exception handling:
26285    `nmi'
26286          Provide a user-defined function to handle NMI exception.
26287
26288    `warm'
26289          Provide a user-defined function to handle warm reset
26290          exception.
26291
26292`sseregparm'
26293     On x86-32 targets with SSE support, the `sseregparm' attribute
26294     causes the compiler to pass up to 3 floating-point arguments in
26295     SSE registers instead of on the stack.  Functions that take a
26296     variable number of arguments continue to pass all of their
26297     floating-point arguments on the stack.
26298
26299`force_align_arg_pointer'
26300     On x86 targets, the `force_align_arg_pointer' attribute may be
26301     applied to individual function definitions, generating an alternate
26302     prologue and epilogue that realigns the run-time stack if
26303     necessary.  This supports mixing legacy codes that run with a
26304     4-byte aligned stack with modern codes that keep a 16-byte stack
26305     for SSE compatibility.
26306
26307`renesas'
26308     On SH targets this attribute specifies that the function or struct
26309     follows the Renesas ABI.
26310
26311`resbank'
26312     On the SH2A target, this attribute enables the high-speed register
26313     saving and restoration using a register bank for
26314     `interrupt_handler' routines.  Saving to the bank is performed
26315     automatically after the CPU accepts an interrupt that uses a
26316     register bank.
26317
26318     The nineteen 32-bit registers comprising general register R0 to
26319     R14, control register GBR, and system registers MACH, MACL, and PR
26320     and the vector table address offset are saved into a register
26321     bank.  Register banks are stacked in first-in last-out (FILO)
26322     sequence.  Restoration from the bank is executed by issuing a
26323     RESBANK instruction.
26324
26325`returns_twice'
26326     The `returns_twice' attribute tells the compiler that a function
26327     may return more than one time.  The compiler ensures that all
26328     registers are dead before calling such a function and emits a
26329     warning about the variables that may be clobbered after the second
26330     return from the function.  Examples of such functions are `setjmp'
26331     and `vfork'.  The `longjmp'-like counterpart of such function, if
26332     any, might need to be marked with the `noreturn' attribute.
26333
26334`saveall'
26335     Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
26336     indicate that all registers except the stack pointer should be
26337     saved in the prologue regardless of whether they are used or not.
26338
26339`save_volatiles'
26340     Use this attribute on the MicroBlaze to indicate that the function
26341     is an interrupt handler.  All volatile registers (in addition to
26342     non-volatile registers) are saved in the function prologue.  If
26343     the function is a leaf function, only volatiles used by the
26344     function are saved.  A normal function return is generated instead
26345     of a return from interrupt.
26346
26347`break_handler'
26348     Use this attribute on the MicroBlaze ports to indicate that the
26349     specified function is a break handler.  The compiler generates
26350     function entry and exit sequences suitable for use in an break
26351     handler when this attribute is present. The return from
26352     `break_handler' is done through the `rtbd' instead of `rtsd'.
26353
26354          void f () __attribute__ ((break_handler));
26355
26356`section ("SECTION-NAME")'
26357     Normally, the compiler places the code it generates in the `text'
26358     section.  Sometimes, however, you need additional sections, or you
26359     need certain particular functions to appear in special sections.
26360     The `section' attribute specifies that a function lives in a
26361     particular section.  For example, the declaration:
26362
26363          extern void foobar (void) __attribute__ ((section ("bar")));
26364
26365     puts the function `foobar' in the `bar' section.
26366
26367     Some file formats do not support arbitrary sections so the
26368     `section' attribute is not available on all platforms.  If you
26369     need to map the entire contents of a module to a particular
26370     section, consider using the facilities of the linker instead.
26371
26372`sentinel'
26373     This function attribute ensures that a parameter in a function
26374     call is an explicit `NULL'.  The attribute is only valid on
26375     variadic functions.  By default, the sentinel is located at
26376     position zero, the last parameter of the function call.  If an
26377     optional integer position argument P is supplied to the attribute,
26378     the sentinel must be located at position P counting backwards from
26379     the end of the argument list.
26380
26381          __attribute__ ((sentinel))
26382          is equivalent to
26383          __attribute__ ((sentinel(0)))
26384
26385     The attribute is automatically set with a position of 0 for the
26386     built-in functions `execl' and `execlp'.  The built-in function
26387     `execle' has the attribute set with a position of 1.
26388
26389     A valid `NULL' in this context is defined as zero with any pointer
26390     type.  If your system defines the `NULL' macro with an integer type
26391     then you need to add an explicit cast.  GCC replaces `stddef.h'
26392     with a copy that redefines NULL appropriately.
26393
26394     The warnings for missing or incorrect sentinels are enabled with
26395     `-Wformat'.
26396
26397`short_call'
26398     See `long_call'.
26399
26400`shortcall'
26401     See `longcall'.
26402
26403`signal'
26404     Use this attribute on the AVR to indicate that the specified
26405     function is an interrupt handler.  The compiler generates function
26406     entry and exit sequences suitable for use in an interrupt handler
26407     when this attribute is present.
26408
26409     See also the `interrupt' function attribute.
26410
26411     The AVR hardware globally disables interrupts when an interrupt is
26412     executed.  Interrupt handler functions defined with the `signal'
26413     attribute do not re-enable interrupts.  It is save to enable
26414     interrupts in a `signal' handler.  This "save" only applies to the
26415     code generated by the compiler and not to the IRQ layout of the
26416     application which is responsibility of the application.
26417
26418     If both `signal' and `interrupt' are specified for the same
26419     function, `signal' is silently ignored.
26420
26421`sp_switch'
26422     Use this attribute on the SH to indicate an `interrupt_handler'
26423     function should switch to an alternate stack.  It expects a string
26424     argument that names a global variable holding the address of the
26425     alternate stack.
26426
26427          void *alt_stack;
26428          void f () __attribute__ ((interrupt_handler,
26429                                    sp_switch ("alt_stack")));
26430
26431`stdcall'
26432     On x86-32 targets, the `stdcall' attribute causes the compiler to
26433     assume that the called function pops off the stack space used to
26434     pass arguments, unless it takes a variable number of arguments.
26435
26436`syscall_linkage'
26437     This attribute is used to modify the IA-64 calling convention by
26438     marking all input registers as live at all function exits.  This
26439     makes it possible to restart a system call after an interrupt
26440     without having to save/restore the input registers.  This also
26441     prevents kernel data from leaking into application code.
26442
26443`target'
26444     The `target' attribute is used to specify that a function is to be
26445     compiled with different target options than specified on the
26446     command line.  This can be used for instance to have functions
26447     compiled with a different ISA (instruction set architecture) than
26448     the default.  You can also use the `#pragma GCC target' pragma to
26449     set more than one function to be compiled with specific target
26450     options.  *Note Function Specific Option Pragmas::, for details
26451     about the `#pragma GCC target' pragma.
26452
26453     For instance on an x86, you could compile one function with
26454     `target("sse4.1,arch=core2")' and another with
26455     `target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
26456     the first function with `-msse4.1' and `-march=core2' options, and
26457     the second function with `-msse4a' and `-march=amdfam10' options.
26458     It is up to the user to make sure that a function is only invoked
26459     on a machine that supports the particular ISA it is compiled for
26460     (for example by using `cpuid' on x86 to determine what feature
26461     bits and architecture family are used).
26462
26463          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
26464          int sse3_func (void) __attribute__ ((__target__ ("sse3")));
26465
26466     You can either use multiple strings to specify multiple options,
26467     or separate the options with a comma (`,').
26468
26469     The `target' attribute is presently implemented for x86, PowerPC,
26470     and Nios II targets only.  The options supported are specific to
26471     each target.
26472
26473     On the x86, the following options are allowed:
26474
26475    `abm'
26476    `no-abm'
26477          Enable/disable the generation of the advanced bit
26478          instructions.
26479
26480    `aes'
26481    `no-aes'
26482          Enable/disable the generation of the AES instructions.
26483
26484    `default'
26485          *Note Function Multiversioning::, where it is used to specify
26486          the default function version.
26487
26488    `mmx'
26489    `no-mmx'
26490          Enable/disable the generation of the MMX instructions.
26491
26492    `pclmul'
26493    `no-pclmul'
26494          Enable/disable the generation of the PCLMUL instructions.
26495
26496    `popcnt'
26497    `no-popcnt'
26498          Enable/disable the generation of the POPCNT instruction.
26499
26500    `sse'
26501    `no-sse'
26502          Enable/disable the generation of the SSE instructions.
26503
26504    `sse2'
26505    `no-sse2'
26506          Enable/disable the generation of the SSE2 instructions.
26507
26508    `sse3'
26509    `no-sse3'
26510          Enable/disable the generation of the SSE3 instructions.
26511
26512    `sse4'
26513    `no-sse4'
26514          Enable/disable the generation of the SSE4 instructions (both
26515          SSE4.1 and SSE4.2).
26516
26517    `sse4.1'
26518    `no-sse4.1'
26519          Enable/disable the generation of the sse4.1 instructions.
26520
26521    `sse4.2'
26522    `no-sse4.2'
26523          Enable/disable the generation of the sse4.2 instructions.
26524
26525    `sse4a'
26526    `no-sse4a'
26527          Enable/disable the generation of the SSE4A instructions.
26528
26529    `fma4'
26530    `no-fma4'
26531          Enable/disable the generation of the FMA4 instructions.
26532
26533    `xop'
26534    `no-xop'
26535          Enable/disable the generation of the XOP instructions.
26536
26537    `lwp'
26538    `no-lwp'
26539          Enable/disable the generation of the LWP instructions.
26540
26541    `ssse3'
26542    `no-ssse3'
26543          Enable/disable the generation of the SSSE3 instructions.
26544
26545    `cld'
26546    `no-cld'
26547          Enable/disable the generation of the CLD before string moves.
26548
26549    `fancy-math-387'
26550    `no-fancy-math-387'
26551          Enable/disable the generation of the `sin', `cos', and `sqrt'
26552          instructions on the 387 floating-point unit.
26553
26554    `fused-madd'
26555    `no-fused-madd'
26556          Enable/disable the generation of the fused multiply/add
26557          instructions.
26558
26559    `ieee-fp'
26560    `no-ieee-fp'
26561          Enable/disable the generation of floating point that depends
26562          on IEEE arithmetic.
26563
26564    `inline-all-stringops'
26565    `no-inline-all-stringops'
26566          Enable/disable inlining of string operations.
26567
26568    `inline-stringops-dynamically'
26569    `no-inline-stringops-dynamically'
26570          Enable/disable the generation of the inline code to do small
26571          string operations and calling the library routines for large
26572          operations.
26573
26574    `align-stringops'
26575    `no-align-stringops'
26576          Do/do not align destination of inlined string operations.
26577
26578    `recip'
26579    `no-recip'
26580          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
26581          RSQRTPS instructions followed an additional Newton-Raphson
26582          step instead of doing a floating-point division.
26583
26584    `arch=ARCH'
26585          Specify the architecture to generate code for in compiling
26586          the function.
26587
26588    `tune=TUNE'
26589          Specify the architecture to tune for in compiling the
26590          function.
26591
26592    `fpmath=FPMATH'
26593          Specify which floating-point unit to use.  The
26594          `target("fpmath=sse,387")' option must be specified as
26595          `target("fpmath=sse+387")' because the comma would separate
26596          different options.
26597
26598     On the PowerPC, the following options are allowed:
26599
26600    `altivec'
26601    `no-altivec'
26602          Generate code that uses (does not use) AltiVec instructions.
26603          In 32-bit code, you cannot enable AltiVec instructions unless
26604          `-mabi=altivec' is used on the command line.
26605
26606    `cmpb'
26607    `no-cmpb'
26608          Generate code that uses (does not use) the compare bytes
26609          instruction implemented on the POWER6 processor and other
26610          processors that support the PowerPC V2.05 architecture.
26611
26612    `dlmzb'
26613    `no-dlmzb'
26614          Generate code that uses (does not use) the string-search
26615          `dlmzb' instruction on the IBM 405, 440, 464 and 476
26616          processors.  This instruction is generated by default when
26617          targeting those processors.
26618
26619    `fprnd'
26620    `no-fprnd'
26621          Generate code that uses (does not use) the FP round to integer
26622          instructions implemented on the POWER5+ processor and other
26623          processors that support the PowerPC V2.03 architecture.
26624
26625    `hard-dfp'
26626    `no-hard-dfp'
26627          Generate code that uses (does not use) the decimal
26628          floating-point instructions implemented on some POWER
26629          processors.
26630
26631    `isel'
26632    `no-isel'
26633          Generate code that uses (does not use) ISEL instruction.
26634
26635    `mfcrf'
26636    `no-mfcrf'
26637          Generate code that uses (does not use) the move from condition
26638          register field instruction implemented on the POWER4
26639          processor and other processors that support the PowerPC V2.01
26640          architecture.
26641
26642    `mfpgpr'
26643    `no-mfpgpr'
26644          Generate code that uses (does not use) the FP move to/from
26645          general purpose register instructions implemented on the
26646          POWER6X processor and other processors that support the
26647          extended PowerPC V2.05 architecture.
26648
26649    `mulhw'
26650    `no-mulhw'
26651          Generate code that uses (does not use) the half-word multiply
26652          and multiply-accumulate instructions on the IBM 405, 440, 464
26653          and 476 processors.  These instructions are generated by
26654          default when targeting those processors.
26655
26656    `multiple'
26657    `no-multiple'
26658          Generate code that uses (does not use) the load multiple word
26659          instructions and the store multiple word instructions.
26660
26661    `update'
26662    `no-update'
26663          Generate code that uses (does not use) the load or store
26664          instructions that update the base register to the address of
26665          the calculated memory location.
26666
26667    `popcntb'
26668    `no-popcntb'
26669          Generate code that uses (does not use) the popcount and
26670          double-precision FP reciprocal estimate instruction
26671          implemented on the POWER5 processor and other processors that
26672          support the PowerPC V2.02 architecture.
26673
26674    `popcntd'
26675    `no-popcntd'
26676          Generate code that uses (does not use) the popcount
26677          instruction implemented on the POWER7 processor and other
26678          processors that support the PowerPC V2.06 architecture.
26679
26680    `powerpc-gfxopt'
26681    `no-powerpc-gfxopt'
26682          Generate code that uses (does not use) the optional PowerPC
26683          architecture instructions in the Graphics group, including
26684          floating-point select.
26685
26686    `powerpc-gpopt'
26687    `no-powerpc-gpopt'
26688          Generate code that uses (does not use) the optional PowerPC
26689          architecture instructions in the General Purpose group,
26690          including floating-point square root.
26691
26692    `recip-precision'
26693    `no-recip-precision'
26694          Assume (do not assume) that the reciprocal estimate
26695          instructions provide higher-precision estimates than is
26696          mandated by the PowerPC ABI.
26697
26698    `string'
26699    `no-string'
26700          Generate code that uses (does not use) the load string
26701          instructions and the store string word instructions to save
26702          multiple registers and do small block moves.
26703
26704    `vsx'
26705    `no-vsx'
26706          Generate code that uses (does not use) vector/scalar (VSX)
26707          instructions, and also enable the use of built-in functions
26708          that allow more direct access to the VSX instruction set.  In
26709          32-bit code, you cannot enable VSX or AltiVec instructions
26710          unless `-mabi=altivec' is used on the command line.
26711
26712    `friz'
26713    `no-friz'
26714          Generate (do not generate) the `friz' instruction when the
26715          `-funsafe-math-optimizations' option is used to optimize
26716          rounding a floating-point value to 64-bit integer and back to
26717          floating point.  The `friz' instruction does not return the
26718          same value if the floating-point number is too large to fit
26719          in an integer.
26720
26721    `avoid-indexed-addresses'
26722    `no-avoid-indexed-addresses'
26723          Generate code that tries to avoid (not avoid) the use of
26724          indexed load or store instructions.
26725
26726    `paired'
26727    `no-paired'
26728          Generate code that uses (does not use) the generation of
26729          PAIRED simd instructions.
26730
26731    `longcall'
26732    `no-longcall'
26733          Generate code that assumes (does not assume) that all calls
26734          are far away so that a longer more expensive calling sequence
26735          is required.
26736
26737    `cpu=CPU'
26738          Specify the architecture to generate code for when compiling
26739          the function.  If you select the `target("cpu=power7")'
26740          attribute when generating 32-bit code, VSX and AltiVec
26741          instructions are not generated unless you use the
26742          `-mabi=altivec' option on the command line.
26743
26744    `tune=TUNE'
26745          Specify the architecture to tune for when compiling the
26746          function.  If you do not specify the `target("tune=TUNE")'
26747          attribute and you do specify the `target("cpu=CPU")'
26748          attribute, compilation tunes for the CPU architecture, and
26749          not the default tuning specified on the command line.
26750
26751     When compiling for Nios II, the following options are allowed:
26752
26753    `custom-INSN=N'
26754    `no-custom-INSN'
26755          Each `custom-INSN=N' attribute locally enables use of a
26756          custom instruction with encoding N when generating code that
26757          uses INSN.  Similarly, `no-custom-INSN' locally inhibits use
26758          of the custom instruction INSN.  These target attributes
26759          correspond to the `-mcustom-INSN=N' and `-mno-custom-INSN'
26760          command-line options, and support the same set of INSN
26761          keywords.  *Note Nios II Options::, for more information.
26762
26763    `custom-fpu-cfg=NAME'
26764          This attribute corresponds to the `-mcustom-fpu-cfg=NAME'
26765          command-line option, to select a predefined set of custom
26766          instructions named NAME.  *Note Nios II Options::, for more
26767          information.
26768
26769     On the x86 and PowerPC back ends, the inliner does not inline a
26770     function that has different target options than the caller, unless
26771     the callee has a subset of the target options of the caller.  For
26772     example a function declared with `target("sse3")' can inline a
26773     function with `target("sse2")', since `-msse3' implies `-msse2'.
26774
26775`trap_exit'
26776     Use this attribute on the SH for an `interrupt_handler' to return
26777     using `trapa' instead of `rte'.  This attribute expects an integer
26778     argument specifying the trap number to be used.
26779
26780`trapa_handler'
26781     On SH targets this function attribute is similar to
26782     `interrupt_handler' but it does not save and restore all registers.
26783
26784`unused'
26785     This attribute, attached to a function, means that the function is
26786     meant to be possibly unused.  GCC does not produce a warning for
26787     this function.
26788
26789`used'
26790     This attribute, attached to a function, means that code must be
26791     emitted for the function even if it appears that the function is
26792     not referenced.  This is useful, for example, when the function is
26793     referenced only in inline assembly.
26794
26795     When applied to a member function of a C++ class template, the
26796     attribute also means that the function is instantiated if the
26797     class itself is instantiated.
26798
26799`vector'
26800     This RX attribute is similar to the `interrupt' attribute,
26801     including its parameters, but does not make the function an
26802     interrupt-handler type function (i.e. it retains the normal C
26803     function calling ABI).  See the `interrupt' attribute for a
26804     description of its arguments.
26805
26806`version_id'
26807     This IA-64 HP-UX attribute, attached to a global variable or
26808     function, renames a symbol to contain a version string, thus
26809     allowing for function level versioning.  HP-UX system header files
26810     may use function level versioning for some system calls.
26811
26812          extern int foo () __attribute__((version_id ("20040821")));
26813
26814     Calls to FOO are mapped to calls to FOO{20040821}.
26815
26816`visibility ("VISIBILITY_TYPE")'
26817     This attribute affects the linkage of the declaration to which it
26818     is attached.  There are four supported VISIBILITY_TYPE values:
26819     default, hidden, protected or internal visibility.
26820
26821          void __attribute__ ((visibility ("protected")))
26822          f () { /* Do something. */; }
26823          int i __attribute__ ((visibility ("hidden")));
26824
26825     The possible values of VISIBILITY_TYPE correspond to the
26826     visibility settings in the ELF gABI.
26827
26828    "default"
26829          Default visibility is the normal case for the object file
26830          format.  This value is available for the visibility attribute
26831          to override other options that may change the assumed
26832          visibility of entities.
26833
26834          On ELF, default visibility means that the declaration is
26835          visible to other modules and, in shared libraries, means that
26836          the declared entity may be overridden.
26837
26838          On Darwin, default visibility means that the declaration is
26839          visible to other modules.
26840
26841          Default visibility corresponds to "external linkage" in the
26842          language.
26843
26844    "hidden"
26845          Hidden visibility indicates that the entity declared has a new
26846          form of linkage, which we call "hidden linkage".  Two
26847          declarations of an object with hidden linkage refer to the
26848          same object if they are in the same shared object.
26849
26850    "internal"
26851          Internal visibility is like hidden visibility, but with
26852          additional processor specific semantics.  Unless otherwise
26853          specified by the psABI, GCC defines internal visibility to
26854          mean that a function is _never_ called from another module.
26855          Compare this with hidden functions which, while they cannot
26856          be referenced directly by other modules, can be referenced
26857          indirectly via function pointers.  By indicating that a
26858          function cannot be called from outside the module, GCC may
26859          for instance omit the load of a PIC register since it is known
26860          that the calling function loaded the correct value.
26861
26862    "protected"
26863          Protected visibility is like default visibility except that it
26864          indicates that references within the defining module bind to
26865          the definition in that module.  That is, the declared entity
26866          cannot be overridden by another module.
26867
26868
26869     All visibilities are supported on many, but not all, ELF targets
26870     (supported when the assembler supports the `.visibility'
26871     pseudo-op).  Default visibility is supported everywhere.  Hidden
26872     visibility is supported on Darwin targets.
26873
26874     The visibility attribute should be applied only to declarations
26875     that would otherwise have external linkage.  The attribute should
26876     be applied consistently, so that the same entity should not be
26877     declared with different settings of the attribute.
26878
26879     In C++, the visibility attribute applies to types as well as
26880     functions and objects, because in C++ types have linkage.  A class
26881     must not have greater visibility than its non-static data member
26882     types and bases, and class members default to the visibility of
26883     their class.  Also, a declaration without explicit visibility is
26884     limited to the visibility of its type.
26885
26886     In C++, you can mark member functions and static member variables
26887     of a class with the visibility attribute.  This is useful if you
26888     know a particular method or static member variable should only be
26889     used from one shared object; then you can mark it hidden while the
26890     rest of the class has default visibility.  Care must be taken to
26891     avoid breaking the One Definition Rule; for example, it is usually
26892     not useful to mark an inline method as hidden without marking the
26893     whole class as hidden.
26894
26895     A C++ namespace declaration can also have the visibility attribute.
26896
26897          namespace nspace1 __attribute__ ((visibility ("protected")))
26898          { /* Do something. */; }
26899
26900     This attribute applies only to the particular namespace body, not
26901     to other definitions of the same namespace; it is equivalent to
26902     using `#pragma GCC visibility' before and after the namespace
26903     definition (*note Visibility Pragmas::).
26904
26905     In C++, if a template argument has limited visibility, this
26906     restriction is implicitly propagated to the template instantiation.
26907     Otherwise, template instantiations and specializations default to
26908     the visibility of their template.
26909
26910     If both the template and enclosing class have explicit visibility,
26911     the visibility from the template is used.
26912
26913`vliw'
26914     On MeP, the `vliw' attribute tells the compiler to emit
26915     instructions in VLIW mode instead of core mode.  Note that this
26916     attribute is not allowed unless a VLIW coprocessor has been
26917     configured and enabled through command-line options.
26918
26919`warn_unused_result'
26920     The `warn_unused_result' attribute causes a warning to be emitted
26921     if a caller of the function with this attribute does not use its
26922     return value.  This is useful for functions where not checking the
26923     result is either a security problem or always a bug, such as
26924     `realloc'.
26925
26926          int fn () __attribute__ ((warn_unused_result));
26927          int foo ()
26928          {
26929            if (fn () < 0) return -1;
26930            fn ();
26931            return 0;
26932          }
26933
26934     results in warning on line 5.
26935
26936`weak'
26937     The `weak' attribute causes the declaration to be emitted as a weak
26938     symbol rather than a global.  This is primarily useful in defining
26939     library functions that can be overridden in user code, though it
26940     can also be used with non-function declarations.  Weak symbols are
26941     supported for ELF targets, and also for a.out targets when using
26942     the GNU assembler and linker.
26943
26944`weakref'
26945`weakref ("TARGET")'
26946     The `weakref' attribute marks a declaration as a weak reference.
26947     Without arguments, it should be accompanied by an `alias' attribute
26948     naming the target symbol.  Optionally, the TARGET may be given as
26949     an argument to `weakref' itself.  In either case, `weakref'
26950     implicitly marks the declaration as `weak'.  Without a TARGET,
26951     given as an argument to `weakref' or to `alias', `weakref' is
26952     equivalent to `weak'.
26953
26954          static int x() __attribute__ ((weakref ("y")));
26955          /* is equivalent to... */
26956          static int x() __attribute__ ((weak, weakref, alias ("y")));
26957          /* and to... */
26958          static int x() __attribute__ ((weakref));
26959          static int x() __attribute__ ((alias ("y")));
26960
26961     A weak reference is an alias that does not by itself require a
26962     definition to be given for the target symbol.  If the target
26963     symbol is only referenced through weak references, then it becomes
26964     a `weak' undefined symbol.  If it is directly referenced, however,
26965     then such strong references prevail, and a definition is required
26966     for the symbol, not necessarily in the same translation unit.
26967
26968     The effect is equivalent to moving all references to the alias to a
26969     separate translation unit, renaming the alias to the aliased
26970     symbol, declaring it as weak, compiling the two separate
26971     translation units and performing a reloadable link on them.
26972
26973     At present, a declaration to which `weakref' is attached can only
26974     be `static'.
26975
26976
26977 You can specify multiple attributes in a declaration by separating them
26978by commas within the double parentheses or by immediately following an
26979attribute declaration with another attribute declaration.
26980
26981 Some people object to the `__attribute__' feature, suggesting that ISO
26982C's `#pragma' should be used instead.  At the time `__attribute__' was
26983designed, there were two reasons for not doing this.
26984
26985  1. It is impossible to generate `#pragma' commands from a macro.
26986
26987  2. There is no telling what the same `#pragma' might mean in another
26988     compiler.
26989
26990 These two reasons applied to almost any application that might have
26991been proposed for `#pragma'.  It was basically a mistake to use
26992`#pragma' for _anything_.
26993
26994 The ISO C99 standard includes `_Pragma', which now allows pragmas to
26995be generated from macros.  In addition, a `#pragma GCC' namespace is
26996now in use for GCC-specific pragmas.  However, it has been found
26997convenient to use `__attribute__' to achieve a natural attachment of
26998attributes to their corresponding declarations, whereas `#pragma GCC'
26999is of use for constructs that do not naturally form part of the
27000grammar.  *Note Pragmas Accepted by GCC: Pragmas.
27001
27002
27003File: gcc.info,  Node: Label Attributes,  Next: Attribute Syntax,  Prev: Function Attributes,  Up: C Extensions
27004
270056.32 Label Attributes
27006=====================
27007
27008GCC allows attributes to be set on C labels.  *Note Attribute Syntax::,
27009for details of the exact syntax for using attributes.  Other attributes
27010are available for functions (*note Function Attributes::), variables
27011(*note Variable Attributes::) and for types (*note Type Attributes::).
27012
27013 This example uses the `cold' label attribute to indicate the
27014`ErrorHandling' branch is unlikely to be taken and that the
27015`ErrorHandling' label is unused:
27016
27017
27018        asm goto ("some asm" : : : : NoError);
27019
27020     /* This branch (the fall-through from the asm) is less commonly used */
27021     ErrorHandling:
27022        __attribute__((cold, unused)); /* Semi-colon is required here */
27023        printf("error\n");
27024        return 0;
27025
27026     NoError:
27027        printf("no error\n");
27028        return 1;
27029
27030`unused'
27031     This feature is intended for program-generated code that may
27032     contain unused labels, but which is compiled with `-Wall'.  It is
27033     not normally appropriate to use in it human-written code, though it
27034     could be useful in cases where the code that jumps to the label is
27035     contained within an `#ifdef' conditional.
27036
27037`hot'
27038     The `hot' attribute on a label is used to inform the compiler that
27039     the path following the label is more likely than paths that are
27040     not so annotated.  This attribute is used in cases where
27041     `__builtin_expect' cannot be used, for instance with computed goto
27042     or `asm goto'.
27043
27044`cold'
27045     The `cold' attribute on labels is used to inform the compiler that
27046     the path following the label is unlikely to be executed.  This
27047     attribute is used in cases where `__builtin_expect' cannot be
27048     used, for instance with computed goto or `asm goto'.
27049
27050
27051
27052File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Label Attributes,  Up: C Extensions
27053
270546.33 Attribute Syntax
27055=====================
27056
27057This section describes the syntax with which `__attribute__' may be
27058used, and the constructs to which attribute specifiers bind, for the C
27059language.  Some details may vary for C++ and Objective-C.  Because of
27060infelicities in the grammar for attributes, some forms described here
27061may not be successfully parsed in all cases.
27062
27063 There are some problems with the semantics of attributes in C++.  For
27064example, there are no manglings for attributes, although they may affect
27065code generation, so problems may arise when attributed types are used in
27066conjunction with templates or overloading.  Similarly, `typeid' does
27067not distinguish between types with different attributes.  Support for
27068attributes in C++ may be restricted in future to attributes on
27069declarations only, but not on nested declarators.
27070
27071 *Note Function Attributes::, for details of the semantics of attributes
27072applying to functions.  *Note Variable Attributes::, for details of the
27073semantics of attributes applying to variables.  *Note Type Attributes::,
27074for details of the semantics of attributes applying to structure, union
27075and enumerated types.  *Note Label Attributes::, for details of the
27076semantics of attributes applying to labels.
27077
27078 An "attribute specifier" is of the form `__attribute__
27079((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
27080comma-separated sequence of "attributes", where each attribute is one
27081of the following:
27082
27083   * Empty.  Empty attributes are ignored.
27084
27085   * A word (which may be an identifier such as `unused', or a reserved
27086     word such as `const').
27087
27088   * A word, followed by, in parentheses, parameters for the attribute.
27089     These parameters take one of the following forms:
27090
27091        * An identifier.  For example, `mode' attributes use this form.
27092
27093        * An identifier followed by a comma and a non-empty
27094          comma-separated list of expressions.  For example, `format'
27095          attributes use this form.
27096
27097        * A possibly empty comma-separated list of expressions.  For
27098          example, `format_arg' attributes use this form with the list
27099          being a single integer constant expression, and `alias'
27100          attributes use this form with the list being a single string
27101          constant.
27102
27103 An "attribute specifier list" is a sequence of one or more attribute
27104specifiers, not separated by any other tokens.
27105
27106Label Attributes
27107................
27108
27109In GNU C, an attribute specifier list may appear after the colon
27110following a label, other than a `case' or `default' label.  GNU C++
27111only permits attributes on labels if the attribute specifier is
27112immediately followed by a semicolon (i.e., the label applies to an empty
27113statement).  If the semicolon is missing, C++ label attributes are
27114ambiguous, as it is permissible for a declaration, which could begin
27115with an attribute list, to be labelled in C++.  Declarations cannot be
27116labelled in C90 or C99, so the ambiguity does not arise there.
27117
27118Type Attributes
27119...............
27120
27121An attribute specifier list may appear as part of a `struct', `union'
27122or `enum' specifier.  It may go either immediately after the `struct',
27123`union' or `enum' keyword, or after the closing brace.  The former
27124syntax is preferred.  Where attribute specifiers follow the closing
27125brace, they are considered to relate to the structure, union or
27126enumerated type defined, not to any enclosing declaration the type
27127specifier appears in, and the type defined is not complete until after
27128the attribute specifiers.
27129
27130All other attributes
27131....................
27132
27133Otherwise, an attribute specifier appears as part of a declaration,
27134counting declarations of unnamed parameters and type names, and relates
27135to that declaration (which may be nested in another declaration, for
27136example in the case of a parameter declaration), or to a particular
27137declarator within a declaration.  Where an attribute specifier is
27138applied to a parameter declared as a function or an array, it should
27139apply to the function or array rather than the pointer to which the
27140parameter is implicitly converted, but this is not yet correctly
27141implemented.
27142
27143 Any list of specifiers and qualifiers at the start of a declaration may
27144contain attribute specifiers, whether or not such a list may in that
27145context contain storage class specifiers.  (Some attributes, however,
27146are essentially in the nature of storage class specifiers, and only make
27147sense where storage class specifiers may be used; for example,
27148`section'.)  There is one necessary limitation to this syntax: the
27149first old-style parameter declaration in a function definition cannot
27150begin with an attribute specifier, because such an attribute applies to
27151the function instead by syntax described below (which, however, is not
27152yet implemented in this case).  In some other cases, attribute
27153specifiers are permitted by this grammar but not yet supported by the
27154compiler.  All attribute specifiers in this place relate to the
27155declaration as a whole.  In the obsolescent usage where a type of `int'
27156is implied by the absence of type specifiers, such a list of specifiers
27157and qualifiers may be an attribute specifier list with no other
27158specifiers or qualifiers.
27159
27160 At present, the first parameter in a function prototype must have some
27161type specifier that is not an attribute specifier; this resolves an
27162ambiguity in the interpretation of `void f(int (__attribute__((foo))
27163x))', but is subject to change.  At present, if the parentheses of a
27164function declarator contain only attributes then those attributes are
27165ignored, rather than yielding an error or warning or implying a single
27166parameter of type int, but this is subject to change.
27167
27168 An attribute specifier list may appear immediately before a declarator
27169(other than the first) in a comma-separated list of declarators in a
27170declaration of more than one identifier using a single list of
27171specifiers and qualifiers.  Such attribute specifiers apply only to the
27172identifier before whose declarator they appear.  For example, in
27173
27174     __attribute__((noreturn)) void d0 (void),
27175         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
27176          d2 (void);
27177
27178the `noreturn' attribute applies to all the functions declared; the
27179`format' attribute only applies to `d1'.
27180
27181 An attribute specifier list may appear immediately before the comma,
27182`=' or semicolon terminating the declaration of an identifier other
27183than a function definition.  Such attribute specifiers apply to the
27184declared object or function.  Where an assembler name for an object or
27185function is specified (*note Asm Labels::), the attribute must follow
27186the `asm' specification.
27187
27188 An attribute specifier list may, in future, be permitted to appear
27189after the declarator in a function definition (before any old-style
27190parameter declarations or the function body).
27191
27192 Attribute specifiers may be mixed with type qualifiers appearing inside
27193the `[]' of a parameter array declarator, in the C99 construct by which
27194such qualifiers are applied to the pointer to which the array is
27195implicitly converted.  Such attribute specifiers apply to the pointer,
27196not to the array, but at present this is not implemented and they are
27197ignored.
27198
27199 An attribute specifier list may appear at the start of a nested
27200declarator.  At present, there are some limitations in this usage: the
27201attributes correctly apply to the declarator, but for most individual
27202attributes the semantics this implies are not implemented.  When
27203attribute specifiers follow the `*' of a pointer declarator, they may
27204be mixed with any type qualifiers present.  The following describes the
27205formal semantics of this syntax.  It makes the most sense if you are
27206familiar with the formal specification of declarators in the ISO C
27207standard.
27208
27209 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
27210where `T' contains declaration specifiers that specify a type TYPE
27211(such as `int') and `D1' is a declarator that contains an identifier
27212IDENT.  The type specified for IDENT for derived declarators whose type
27213does not include an attribute specifier is as in the ISO C standard.
27214
27215 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
27216declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
27217TYPE" for IDENT, then `T D1' specifies the type
27218"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
27219
27220 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
27221D', and the declaration `T D' specifies the type
27222"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
27223the type "DERIVED-DECLARATOR-TYPE-LIST
27224TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.
27225
27226 For example,
27227
27228     void (__attribute__((noreturn)) ****f) (void);
27229
27230specifies the type "pointer to pointer to pointer to pointer to
27231non-returning function returning `void'".  As another example,
27232
27233     char *__attribute__((aligned(8))) *f;
27234
27235specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
27236again that this does not work with most attributes; for example, the
27237usage of `aligned' and `noreturn' attributes given above is not yet
27238supported.
27239
27240 For compatibility with existing code written for compiler versions that
27241did not implement attributes on nested declarators, some laxity is
27242allowed in the placing of attributes.  If an attribute that only applies
27243to types is applied to a declaration, it is treated as applying to the
27244type of that declaration.  If an attribute that only applies to
27245declarations is applied to the type of a declaration, it is treated as
27246applying to that declaration; and, for compatibility with code placing
27247the attributes immediately before the identifier declared, such an
27248attribute applied to a function return type is treated as applying to
27249the function type, and such an attribute applied to an array element
27250type is treated as applying to the array type.  If an attribute that
27251only applies to function types is applied to a pointer-to-function
27252type, it is treated as applying to the pointer target type; if such an
27253attribute is applied to a function return type that is not a
27254pointer-to-function type, it is treated as applying to the function
27255type.
27256
27257
27258File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
27259
272606.34 Prototypes and Old-Style Function Definitions
27261==================================================
27262
27263GNU C extends ISO C to allow a function prototype to override a later
27264old-style non-prototype definition.  Consider the following example:
27265
27266     /* Use prototypes unless the compiler is old-fashioned.  */
27267     #ifdef __STDC__
27268     #define P(x) x
27269     #else
27270     #define P(x) ()
27271     #endif
27272
27273     /* Prototype function declaration.  */
27274     int isroot P((uid_t));
27275
27276     /* Old-style function definition.  */
27277     int
27278     isroot (x)   /* ??? lossage here ??? */
27279          uid_t x;
27280     {
27281       return x == 0;
27282     }
27283
27284 Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
27285this example, because subword arguments in old-style non-prototype
27286definitions are promoted.  Therefore in this example the function
27287definition's argument is really an `int', which does not match the
27288prototype argument type of `short'.
27289
27290 This restriction of ISO C makes it hard to write code that is portable
27291to traditional C compilers, because the programmer does not know
27292whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
27293cases like these GNU C allows a prototype to override a later old-style
27294definition.  More precisely, in GNU C, a function prototype argument
27295type overrides the argument type specified by a later old-style
27296definition if the former type is the same as the latter type before
27297promotion.  Thus in GNU C the above example is equivalent to the
27298following:
27299
27300     int isroot (uid_t);
27301
27302     int
27303     isroot (uid_t x)
27304     {
27305       return x == 0;
27306     }
27307
27308GNU C++ does not support old-style function definitions, so this
27309extension is irrelevant.
27310
27311
27312File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
27313
273146.35 C++ Style Comments
27315=======================
27316
27317In GNU C, you may use C++ style comments, which start with `//' and
27318continue until the end of the line.  Many other C implementations allow
27319such comments, and they are included in the 1999 C standard.  However,
27320C++ style comments are not recognized if you specify an `-std' option
27321specifying a version of ISO C before C99, or `-ansi' (equivalent to
27322`-std=c90').
27323
27324
27325File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
27326
273276.36 Dollar Signs in Identifier Names
27328=====================================
27329
27330In GNU C, you may normally use dollar signs in identifier names.  This
27331is because many traditional C implementations allow such identifiers.
27332However, dollar signs in identifiers are not supported on a few target
27333machines, typically because the target assembler does not allow them.
27334
27335
27336File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
27337
273386.37 The Character <ESC> in Constants
27339=====================================
27340
27341You can use the sequence `\e' in a string or character constant to
27342stand for the ASCII character <ESC>.
27343
27344
27345File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
27346
273476.38 Specifying Attributes of Variables
27348=======================================
27349
27350The keyword `__attribute__' allows you to specify special attributes of
27351variables or structure fields.  This keyword is followed by an
27352attribute specification inside double parentheses.  Some attributes are
27353currently defined generically for variables.  Other attributes are
27354defined for variables on particular target systems.  Other attributes
27355are available for functions (*note Function Attributes::), labels
27356(*note Label Attributes::) and for types (*note Type Attributes::).
27357Other front ends might define more attributes (*note Extensions to the
27358C++ Language: C++ Extensions.).
27359
27360 You may also specify attributes with `__' preceding and following each
27361keyword.  This allows you to use them in header files without being
27362concerned about a possible macro of the same name.  For example, you
27363may use `__aligned__' instead of `aligned'.
27364
27365 *Note Attribute Syntax::, for details of the exact syntax for using
27366attributes.
27367
27368`aligned (ALIGNMENT)'
27369     This attribute specifies a minimum alignment for the variable or
27370     structure field, measured in bytes.  For example, the declaration:
27371
27372          int x __attribute__ ((aligned (16))) = 0;
27373
27374     causes the compiler to allocate the global variable `x' on a
27375     16-byte boundary.  On a 68040, this could be used in conjunction
27376     with an `asm' expression to access the `move16' instruction which
27377     requires 16-byte aligned operands.
27378
27379     You can also specify the alignment of structure fields.  For
27380     example, to create a double-word aligned `int' pair, you could
27381     write:
27382
27383          struct foo { int x[2] __attribute__ ((aligned (8))); };
27384
27385     This is an alternative to creating a union with a `double' member,
27386     which forces the union to be double-word aligned.
27387
27388     As in the preceding examples, you can explicitly specify the
27389     alignment (in bytes) that you wish the compiler to use for a given
27390     variable or structure field.  Alternatively, you can leave out the
27391     alignment factor and just ask the compiler to align a variable or
27392     field to the default alignment for the target architecture you are
27393     compiling for.  The default alignment is sufficient for all scalar
27394     types, but may not be enough for all vector types on a target that
27395     supports vector operations.  The default alignment is fixed for a
27396     particular target ABI.
27397
27398     GCC also provides a target specific macro `__BIGGEST_ALIGNMENT__',
27399     which is the largest alignment ever used for any data type on the
27400     target machine you are compiling for.  For example, you could
27401     write:
27402
27403          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));
27404
27405     The compiler automatically sets the alignment for the declared
27406     variable or field to `__BIGGEST_ALIGNMENT__'.  Doing this can
27407     often make copy operations more efficient, because the compiler can
27408     use whatever instructions copy the biggest chunks of memory when
27409     performing copies to or from the variables or fields that you have
27410     aligned this way.  Note that the value of `__BIGGEST_ALIGNMENT__'
27411     may change depending on command-line options.
27412
27413     When used on a struct, or struct member, the `aligned' attribute
27414     can only increase the alignment; in order to decrease it, the
27415     `packed' attribute must be specified as well.  When used as part
27416     of a typedef, the `aligned' attribute can both increase and
27417     decrease alignment, and specifying the `packed' attribute
27418     generates a warning.
27419
27420     Note that the effectiveness of `aligned' attributes may be limited
27421     by inherent limitations in your linker.  On many systems, the
27422     linker is only able to arrange for variables to be aligned up to a
27423     certain maximum alignment.  (For some linkers, the maximum
27424     supported alignment may be very very small.)  If your linker is
27425     only able to align variables up to a maximum of 8-byte alignment,
27426     then specifying `aligned(16)' in an `__attribute__' still only
27427     provides you with 8-byte alignment.  See your linker documentation
27428     for further information.
27429
27430     The `aligned' attribute can also be used for functions (*note
27431     Function Attributes::.)
27432
27433`cleanup (CLEANUP_FUNCTION)'
27434     The `cleanup' attribute runs a function when the variable goes out
27435     of scope.  This attribute can only be applied to auto function
27436     scope variables; it may not be applied to parameters or variables
27437     with static storage duration.  The function must take one
27438     parameter, a pointer to a type compatible with the variable.  The
27439     return value of the function (if any) is ignored.
27440
27441     If `-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
27442     the stack unwinding that happens during the processing of the
27443     exception.  Note that the `cleanup' attribute does not allow the
27444     exception to be caught, only to perform an action.  It is
27445     undefined what happens if CLEANUP_FUNCTION does not return
27446     normally.
27447
27448`common'
27449`nocommon'
27450     The `common' attribute requests GCC to place a variable in
27451     "common" storage.  The `nocommon' attribute requests the
27452     opposite--to allocate space for it directly.
27453
27454     These attributes override the default chosen by the `-fno-common'
27455     and `-fcommon' flags respectively.
27456
27457`deprecated'
27458`deprecated (MSG)'
27459     The `deprecated' attribute results in a warning if the variable is
27460     used anywhere in the source file.  This is useful when identifying
27461     variables that are expected to be removed in a future version of a
27462     program.  The warning also includes the location of the declaration
27463     of the deprecated variable, to enable users to easily find further
27464     information about why the variable is deprecated, or what they
27465     should do instead.  Note that the warning only occurs for uses:
27466
27467          extern int old_var __attribute__ ((deprecated));
27468          extern int old_var;
27469          int new_fn () { return old_var; }
27470
27471     results in a warning on line 3 but not line 2.  The optional MSG
27472     argument, which must be a string, is printed in the warning if
27473     present.
27474
27475     The `deprecated' attribute can also be used for functions and
27476     types (*note Function Attributes::, *note Type Attributes::.)
27477
27478`mode (MODE)'
27479     This attribute specifies the data type for the
27480     declaration--whichever type corresponds to the mode MODE.  This in
27481     effect lets you request an integer or floating-point type
27482     according to its width.
27483
27484     You may also specify a mode of `byte' or `__byte__' to indicate
27485     the mode corresponding to a one-byte integer, `word' or `__word__'
27486     for the mode of a one-word integer, and `pointer' or `__pointer__'
27487     for the mode used to represent pointers.
27488
27489`packed'
27490     The `packed' attribute specifies that a variable or structure field
27491     should have the smallest possible alignment--one byte for a
27492     variable, and one bit for a field, unless you specify a larger
27493     value with the `aligned' attribute.
27494
27495     Here is a structure in which the field `x' is packed, so that it
27496     immediately follows `a':
27497
27498          struct foo
27499          {
27500            char a;
27501            int x[2] __attribute__ ((packed));
27502          };
27503
27504     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed'
27505     attribute on bit-fields of type `char'.  This has been fixed in
27506     GCC 4.4 but the change can lead to differences in the structure
27507     layout.  See the documentation of `-Wpacked-bitfield-compat' for
27508     more information.
27509
27510`section ("SECTION-NAME")'
27511     Normally, the compiler places the objects it generates in sections
27512     like `data' and `bss'.  Sometimes, however, you need additional
27513     sections, or you need certain particular variables to appear in
27514     special sections, for example to map to special hardware.  The
27515     `section' attribute specifies that a variable (or function) lives
27516     in a particular section.  For example, this small program uses
27517     several specific section names:
27518
27519          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
27520          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
27521          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
27522          int init_data __attribute__ ((section ("INITDATA")));
27523
27524          main()
27525          {
27526            /* Initialize stack pointer */
27527            init_sp (stack + sizeof (stack));
27528
27529            /* Initialize initialized data */
27530            memcpy (&init_data, &data, &edata - &data);
27531
27532            /* Turn on the serial ports */
27533            init_duart (&a);
27534            init_duart (&b);
27535          }
27536
27537     Use the `section' attribute with _global_ variables and not
27538     _local_ variables, as shown in the example.
27539
27540     You may use the `section' attribute with initialized or
27541     uninitialized global variables but the linker requires each object
27542     be defined once, with the exception that uninitialized variables
27543     tentatively go in the `common' (or `bss') section and can be
27544     multiply "defined".  Using the `section' attribute changes what
27545     section the variable goes into and may cause the linker to issue
27546     an error if an uninitialized variable has multiple definitions.
27547     You can force a variable to be initialized with the `-fno-common'
27548     flag or the `nocommon' attribute.
27549
27550     Some file formats do not support arbitrary sections so the
27551     `section' attribute is not available on all platforms.  If you
27552     need to map the entire contents of a module to a particular
27553     section, consider using the facilities of the linker instead.
27554
27555`shared'
27556     On Microsoft Windows, in addition to putting variable definitions
27557     in a named section, the section can also be shared among all
27558     running copies of an executable or DLL.  For example, this small
27559     program defines shared data by putting it in a named section
27560     `shared' and marking the section shareable:
27561
27562          int foo __attribute__((section ("shared"), shared)) = 0;
27563
27564          int
27565          main()
27566          {
27567            /* Read and write foo.  All running
27568               copies see the same value.  */
27569            return 0;
27570          }
27571
27572     You may only use the `shared' attribute along with `section'
27573     attribute with a fully-initialized global definition because of
27574     the way linkers work.  See `section' attribute for more
27575     information.
27576
27577     The `shared' attribute is only available on Microsoft Windows.
27578
27579`tls_model ("TLS_MODEL")'
27580     The `tls_model' attribute sets thread-local storage model (*note
27581     Thread-Local::) of a particular `__thread' variable, overriding
27582     `-ftls-model=' command-line switch on a per-variable basis.  The
27583     TLS_MODEL argument should be one of `global-dynamic',
27584     `local-dynamic', `initial-exec' or `local-exec'.
27585
27586     Not all targets support this attribute.
27587
27588`unused'
27589     This attribute, attached to a variable, means that the variable is
27590     meant to be possibly unused.  GCC does not produce a warning for
27591     this variable.
27592
27593`used'
27594     This attribute, attached to a variable with static storage, means
27595     that the variable must be emitted even if it appears that the
27596     variable is not referenced.
27597
27598     When applied to a static data member of a C++ class template, the
27599     attribute also means that the member is instantiated if the class
27600     itself is instantiated.
27601
27602`vector_size (BYTES)'
27603     This attribute specifies the vector size for the variable,
27604     measured in bytes.  For example, the declaration:
27605
27606          int foo __attribute__ ((vector_size (16)));
27607
27608     causes the compiler to set the mode for `foo', to be 16 bytes,
27609     divided into `int' sized units.  Assuming a 32-bit int (a vector of
27610     4 units of 4 bytes), the corresponding mode of `foo' is V4SI.
27611
27612     This attribute is only applicable to integral and float scalars,
27613     although arrays, pointers, and function return values are allowed
27614     in conjunction with this construct.
27615
27616     Aggregates with this attribute are invalid, even if they are of
27617     the same size as a corresponding scalar.  For example, the
27618     declaration:
27619
27620          struct S { int a; };
27621          struct S  __attribute__ ((vector_size (16))) foo;
27622
27623     is invalid even if the size of the structure is the same as the
27624     size of the `int'.
27625
27626`selectany'
27627     The `selectany' attribute causes an initialized global variable to
27628     have link-once semantics.  When multiple definitions of the
27629     variable are encountered by the linker, the first is selected and
27630     the remainder are discarded.  Following usage by the Microsoft
27631     compiler, the linker is told _not_ to warn about size or content
27632     differences of the multiple definitions.
27633
27634     Although the primary usage of this attribute is for POD types, the
27635     attribute can also be applied to global C++ objects that are
27636     initialized by a constructor.  In this case, the static
27637     initialization and destruction code for the object is emitted in
27638     each translation defining the object, but the calls to the
27639     constructor and destructor are protected by a link-once guard
27640     variable.
27641
27642     The `selectany' attribute is only available on Microsoft Windows
27643     targets.  You can use `__declspec (selectany)' as a synonym for
27644     `__attribute__ ((selectany))' for compatibility with other
27645     compilers.
27646
27647`weak'
27648     The `weak' attribute is described in *Note Function Attributes::.
27649
27650`dllimport'
27651     The `dllimport' attribute is described in *Note Function
27652     Attributes::.
27653
27654`dllexport'
27655     The `dllexport' attribute is described in *Note Function
27656     Attributes::.
27657
27658
276596.38.1 AVR Variable Attributes
27660------------------------------
27661
27662`progmem'
27663     The `progmem' attribute is used on the AVR to place read-only data
27664     in the non-volatile program memory (flash). The `progmem'
27665     attribute accomplishes this by putting respective variables into a
27666     section whose name starts with `.progmem'.
27667
27668     This attribute works similar to the `section' attribute but adds
27669     additional checking. Notice that just like the `section'
27670     attribute, `progmem' affects the location of the data but not how
27671     this data is accessed.
27672
27673     In order to read data located with the `progmem' attribute
27674     (inline) assembler must be used.
27675          /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
27676          #include <avr/pgmspace.h>
27677
27678          /* Locate var in flash memory */
27679          const int var[2] PROGMEM = { 1, 2 };
27680
27681          int read_var (int i)
27682          {
27683              /* Access var[] by accessor macro from avr/pgmspace.h */
27684              return (int) pgm_read_word (& var[i]);
27685          }
27686
27687     AVR is a Harvard architecture processor and data and read-only data
27688     normally resides in the data memory (RAM).
27689
27690     See also the *Note AVR Named Address Spaces:: section for an
27691     alternate way to locate and access data in flash memory.
27692
27693`io'
27694`io (ADDR)'
27695     Variables with the `io' attribute are used to address
27696     memory-mapped peripherals in the io address range.  If an address
27697     is specified, the variable is assigned that address, and the value
27698     is interpreted as an address in the data address space.  Example:
27699
27700          volatile int porta __attribute__((io (0x22)));
27701
27702     The address specified in the address in the data address range.
27703
27704     Otherwise, the variable it is not assigned an address, but the
27705     compiler will still use in/out instructions where applicable,
27706     assuming some other module assigns an address in the io address
27707     range.  Example:
27708
27709          extern volatile int porta __attribute__((io));
27710
27711`io_low'
27712`io_low (ADDR)'
27713     This is like the `io' attribute, but additionally it informs the
27714     compiler that the object lies in the lower half of the I/O area,
27715     allowing the use of `cbi', `sbi', `sbic' and `sbis' instructions.
27716
27717`address'
27718`address (ADDR)'
27719     Variables with the `address' attribute are used to address
27720     memory-mapped peripherals that may lie outside the io address
27721     range.
27722
27723          volatile int porta __attribute__((address (0x600)));
27724
27725
277266.38.2 Blackfin Variable Attributes
27727-----------------------------------
27728
27729Three attributes are currently defined for the Blackfin.
27730
27731`l1_data'
27732`l1_data_A'
27733`l1_data_B'
27734     Use these attributes on the Blackfin to place the variable into L1
27735     Data SRAM.  Variables with `l1_data' attribute are put into the
27736     specific section named `.l1.data'. Those with `l1_data_A'
27737     attribute are put into the specific section named `.l1.data.A'.
27738     Those with `l1_data_B' attribute are put into the specific section
27739     named `.l1.data.B'.
27740
27741`l2'
27742     Use this attribute on the Blackfin to place the variable into L2
27743     SRAM.  Variables with `l2' attribute are put into the specific
27744     section named `.l2.data'.
27745
277466.38.3 H8/300 Variable Attributes
27747---------------------------------
27748
27749These variable attributes are available for H8/300 targets:
27750
27751`eightbit_data'
27752     Use this attribute on the H8/300, H8/300H, and H8S to indicate
27753     that the specified variable should be placed into the eight-bit
27754     data section.  The compiler generates more efficient code for
27755     certain operations on data in the eight-bit data area.  Note the
27756     eight-bit data area is limited to 256 bytes of data.
27757
27758     You must use GAS and GLD from GNU binutils version 2.7 or later for
27759     this attribute to work correctly.
27760
27761`tiny_data'
27762     Use this attribute on the H8/300H and H8S to indicate that the
27763     specified variable should be placed into the tiny data section.
27764     The compiler generates more efficient code for loads and stores on
27765     data in the tiny data section.  Note the tiny data area is limited
27766     to slightly under 32KB of data.
27767
27768
277696.38.4 IA-64 Variable Attributes
27770--------------------------------
27771
27772The IA-64 back end supports the following variable attribute:
27773
27774`model (MODEL-NAME)'
27775     On IA-64, use this attribute to set the addressability of an
27776     object.  At present, the only supported identifier for MODEL-NAME
27777     is `small', indicating addressability via "small" (22-bit)
27778     addresses (so that their addresses can be loaded with the `addl'
27779     instruction).  Caveat: such addressing is by definition not
27780     position independent and hence this attribute must not be used for
27781     objects defined by shared libraries.
27782
27783
277846.38.5 M32R/D Variable Attributes
27785---------------------------------
27786
27787One attribute is currently defined for the M32R/D.
27788
27789`model (MODEL-NAME)'
27790     Use this attribute on the M32R/D to set the addressability of an
27791     object.  The identifier MODEL-NAME is one of `small', `medium', or
27792     `large', representing each of the code models.
27793
27794     Small model objects live in the lower 16MB of memory (so that their
27795     addresses can be loaded with the `ld24' instruction).
27796
27797     Medium and large model objects may live anywhere in the 32-bit
27798     address space (the compiler generates `seth/add3' instructions to
27799     load their addresses).
27800
278016.38.6 MeP Variable Attributes
27802------------------------------
27803
27804The MeP target has a number of addressing modes and busses.  The `near'
27805space spans the standard memory space's first 16 megabytes (24 bits).
27806The `far' space spans the entire 32-bit memory space.  The `based'
27807space is a 128-byte region in the memory space that is addressed
27808relative to the `$tp' register.  The `tiny' space is a 65536-byte
27809region relative to the `$gp' register.  In addition to these memory
27810regions, the MeP target has a separate 16-bit control bus which is
27811specified with `cb' attributes.
27812
27813`based'
27814     Any variable with the `based' attribute is assigned to the
27815     `.based' section, and is accessed with relative to the `$tp'
27816     register.
27817
27818`tiny'
27819     Likewise, the `tiny' attribute assigned variables to the `.tiny'
27820     section, relative to the `$gp' register.
27821
27822`near'
27823     Variables with the `near' attribute are assumed to have addresses
27824     that fit in a 24-bit addressing mode.  This is the default for
27825     large variables (`-mtiny=4' is the default) but this attribute can
27826     override `-mtiny=' for small variables, or override `-ml'.
27827
27828`far'
27829     Variables with the `far' attribute are addressed using a full
27830     32-bit address.  Since this covers the entire memory space, this
27831     allows modules to make no assumptions about where variables might
27832     be stored.
27833
27834`io'
27835`io (ADDR)'
27836     Variables with the `io' attribute are used to address
27837     memory-mapped peripherals.  If an address is specified, the
27838     variable is assigned that address, else it is not assigned an
27839     address (it is assumed some other module assigns an address).
27840     Example:
27841
27842          int timer_count __attribute__((io(0x123)));
27843
27844`cb'
27845`cb (ADDR)'
27846     Variables with the `cb' attribute are used to access the control
27847     bus, using special instructions.  `addr' indicates the control bus
27848     address.  Example:
27849
27850          int cpu_clock __attribute__((cb(0x123)));
27851
27852
278536.38.7 PowerPC Variable Attributes
27854----------------------------------
27855
27856Three attributes currently are defined for PowerPC configurations:
27857`altivec', `ms_struct' and `gcc_struct'.
27858
27859 For full documentation of the struct attributes please see the
27860documentation in *Note x86 Variable Attributes::.
27861
27862 For documentation of `altivec' attribute please see the documentation
27863in *Note PowerPC Type Attributes::.
27864
278656.38.8 SPU Variable Attributes
27866------------------------------
27867
27868The SPU supports the `spu_vector' attribute for variables.  For
27869documentation of this attribute please see the documentation in *Note
27870SPU Type Attributes::.
27871
278726.38.9 x86 Variable Attributes
27873------------------------------
27874
27875Two attributes are currently defined for x86 configurations:
27876`ms_struct' and `gcc_struct'.
27877
27878`ms_struct'
27879`gcc_struct'
27880     If `packed' is used on a structure, or if bit-fields are used, it
27881     may be that the Microsoft ABI lays out the structure differently
27882     than the way GCC normally does.  Particularly when moving packed
27883     data between functions compiled with GCC and the native Microsoft
27884     compiler (either via function call or as data in a file), it may
27885     be necessary to access either format.
27886
27887     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
27888     Windows x86 compilers to match the native Microsoft compiler.
27889
27890     The Microsoft structure layout algorithm is fairly simple with the
27891     exception of the bit-field packing.  The padding and alignment of
27892     members of structures and whether a bit-field can straddle a
27893     storage-unit boundary are determine by these rules:
27894
27895       1. Structure members are stored sequentially in the order in
27896          which they are declared: the first member has the lowest
27897          memory address and the last member the highest.
27898
27899       2. Every data object has an alignment requirement.  The
27900          alignment requirement for all data except structures, unions,
27901          and arrays is either the size of the object or the current
27902          packing size (specified with either the `aligned' attribute
27903          or the `pack' pragma), whichever is less.  For structures,
27904          unions, and arrays, the alignment requirement is the largest
27905          alignment requirement of its members.  Every object is
27906          allocated an offset so that:
27907
27908               offset % alignment_requirement == 0
27909
27910       3. Adjacent bit-fields are packed into the same 1-, 2-, or
27911          4-byte allocation unit if the integral types are the same
27912          size and if the next bit-field fits into the current
27913          allocation unit without crossing the boundary imposed by the
27914          common alignment requirements of the bit-fields.
27915
27916     MSVC interprets zero-length bit-fields in the following ways:
27917
27918       1. If a zero-length bit-field is inserted between two bit-fields
27919          that are normally coalesced, the bit-fields are not coalesced.
27920
27921          For example:
27922
27923               struct
27924                {
27925                  unsigned long bf_1 : 12;
27926                  unsigned long : 0;
27927                  unsigned long bf_2 : 12;
27928                } t1;
27929
27930          The size of `t1' is 8 bytes with the zero-length bit-field.
27931          If the zero-length bit-field were removed, `t1''s size would
27932          be 4 bytes.
27933
27934       2. If a zero-length bit-field is inserted after a bit-field,
27935          `foo', and the alignment of the zero-length bit-field is
27936          greater than the member that follows it, `bar', `bar' is
27937          aligned as the type of the zero-length bit-field.
27938
27939          For example:
27940
27941               struct
27942                {
27943                  char foo : 4;
27944                  short : 0;
27945                  char bar;
27946                } t2;
27947
27948               struct
27949                {
27950                  char foo : 4;
27951                  short : 0;
27952                  double bar;
27953                } t3;
27954
27955          For `t2', `bar' is placed at offset 2, rather than offset 1.
27956          Accordingly, the size of `t2' is 4.  For `t3', the zero-length
27957          bit-field does not affect the alignment of `bar' or, as a
27958          result, the size of the structure.
27959
27960          Taking this into account, it is important to note the
27961          following:
27962
27963            1. If a zero-length bit-field follows a normal bit-field,
27964               the type of the zero-length bit-field may affect the
27965               alignment of the structure as whole. For example, `t2'
27966               has a size of 4 bytes, since the zero-length bit-field
27967               follows a normal bit-field, and is of type short.
27968
27969            2. Even if a zero-length bit-field is not followed by a
27970               normal bit-field, it may still affect the alignment of
27971               the structure:
27972
27973                    struct
27974                     {
27975                       char foo : 6;
27976                       long : 0;
27977                     } t4;
27978
27979               Here, `t4' takes up 4 bytes.
27980
27981       3. Zero-length bit-fields following non-bit-field members are
27982          ignored:
27983
27984               struct
27985                {
27986                  char foo;
27987                  long : 0;
27988                  char bar;
27989                } t5;
27990
27991          Here, `t5' takes up 2 bytes.
27992
279936.38.10 Xstormy16 Variable Attributes
27994-------------------------------------
27995
27996One attribute is currently defined for xstormy16 configurations:
27997`below100'.
27998
27999`below100'
28000     If a variable has the `below100' attribute (`BELOW100' is allowed
28001     also), GCC places the variable in the first 0x100 bytes of memory
28002     and use special opcodes to access it.  Such variables are placed
28003     in either the `.bss_below100' section or the `.data_below100'
28004     section.
28005
28006
28007
28008File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
28009
280106.39 Specifying Attributes of Types
28011===================================
28012
28013The keyword `__attribute__' allows you to specify special attributes of
28014`struct' and `union' types when you define such types.  This keyword is
28015followed by an attribute specification inside double parentheses.
28016Eight attributes are currently defined for types: `aligned', `packed',
28017`transparent_union', `unused', `deprecated', `visibility', `may_alias'
28018and `bnd_variable_size'.  Other attributes are defined for functions
28019(*note Function Attributes::), labels (*note Label Attributes::) and
28020for variables (*note Variable Attributes::).
28021
28022 You may also specify any one of these attributes with `__' preceding
28023and following its keyword.  This allows you to use these attributes in
28024header files without being concerned about a possible macro of the same
28025name.  For example, you may use `__aligned__' instead of `aligned'.
28026
28027 You may specify type attributes in an enum, struct or union type
28028declaration or definition, or for other types in a `typedef'
28029declaration.
28030
28031 For an enum, struct or union type, you may specify attributes either
28032between the enum, struct or union tag and the name of the type, or just
28033past the closing curly brace of the _definition_.  The former syntax is
28034preferred.
28035
28036 *Note Attribute Syntax::, for details of the exact syntax for using
28037attributes.
28038
28039`aligned (ALIGNMENT)'
28040     This attribute specifies a minimum alignment (in bytes) for
28041     variables of the specified type.  For example, the declarations:
28042
28043          struct S { short f[3]; } __attribute__ ((aligned (8)));
28044          typedef int more_aligned_int __attribute__ ((aligned (8)));
28045
28046     force the compiler to ensure (as far as it can) that each variable
28047     whose type is `struct S' or `more_aligned_int' is allocated and
28048     aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
28049     variables of type `struct S' aligned to 8-byte boundaries allows
28050     the compiler to use the `ldd' and `std' (doubleword load and
28051     store) instructions when copying one variable of type `struct S' to
28052     another, thus improving run-time efficiency.
28053
28054     Note that the alignment of any given `struct' or `union' type is
28055     required by the ISO C standard to be at least a perfect multiple of
28056     the lowest common multiple of the alignments of all of the members
28057     of the `struct' or `union' in question.  This means that you _can_
28058     effectively adjust the alignment of a `struct' or `union' type by
28059     attaching an `aligned' attribute to any one of the members of such
28060     a type, but the notation illustrated in the example above is a
28061     more obvious, intuitive, and readable way to request the compiler
28062     to adjust the alignment of an entire `struct' or `union' type.
28063
28064     As in the preceding example, you can explicitly specify the
28065     alignment (in bytes) that you wish the compiler to use for a given
28066     `struct' or `union' type.  Alternatively, you can leave out the
28067     alignment factor and just ask the compiler to align a type to the
28068     maximum useful alignment for the target machine you are compiling
28069     for.  For example, you could write:
28070
28071          struct S { short f[3]; } __attribute__ ((aligned));
28072
28073     Whenever you leave out the alignment factor in an `aligned'
28074     attribute specification, the compiler automatically sets the
28075     alignment for the type to the largest alignment that is ever used
28076     for any data type on the target machine you are compiling for.
28077     Doing this can often make copy operations more efficient, because
28078     the compiler can use whatever instructions copy the biggest chunks
28079     of memory when performing copies to or from the variables that
28080     have types that you have aligned this way.
28081
28082     In the example above, if the size of each `short' is 2 bytes, then
28083     the size of the entire `struct S' type is 6 bytes.  The smallest
28084     power of two that is greater than or equal to that is 8, so the
28085     compiler sets the alignment for the entire `struct S' type to 8
28086     bytes.
28087
28088     Note that although you can ask the compiler to select a
28089     time-efficient alignment for a given type and then declare only
28090     individual stand-alone objects of that type, the compiler's
28091     ability to select a time-efficient alignment is primarily useful
28092     only when you plan to create arrays of variables having the
28093     relevant (efficiently aligned) type.  If you declare or use arrays
28094     of variables of an efficiently-aligned type, then it is likely
28095     that your program also does pointer arithmetic (or subscripting,
28096     which amounts to the same thing) on pointers to the relevant type,
28097     and the code that the compiler generates for these pointer
28098     arithmetic operations is often more efficient for
28099     efficiently-aligned types than for other types.
28100
28101     The `aligned' attribute can only increase the alignment; but you
28102     can decrease it by specifying `packed' as well.  See below.
28103
28104     Note that the effectiveness of `aligned' attributes may be limited
28105     by inherent limitations in your linker.  On many systems, the
28106     linker is only able to arrange for variables to be aligned up to a
28107     certain maximum alignment.  (For some linkers, the maximum
28108     supported alignment may be very very small.)  If your linker is
28109     only able to align variables up to a maximum of 8-byte alignment,
28110     then specifying `aligned(16)' in an `__attribute__' still only
28111     provides you with 8-byte alignment.  See your linker documentation
28112     for further information.
28113
28114`packed'
28115     This attribute, attached to `struct' or `union' type definition,
28116     specifies that each member (other than zero-width bit-fields) of
28117     the structure or union is placed to minimize the memory required.
28118     When attached to an `enum' definition, it indicates that the
28119     smallest integral type should be used.
28120
28121     Specifying this attribute for `struct' and `union' types is
28122     equivalent to specifying the `packed' attribute on each of the
28123     structure or union members.  Specifying the `-fshort-enums' flag
28124     on the line is equivalent to specifying the `packed' attribute on
28125     all `enum' definitions.
28126
28127     In the following example `struct my_packed_struct''s members are
28128     packed closely together, but the internal layout of its `s' member
28129     is not packed--to do that, `struct my_unpacked_struct' needs to be
28130     packed too.
28131
28132          struct my_unpacked_struct
28133           {
28134              char c;
28135              int i;
28136           };
28137
28138          struct __attribute__ ((__packed__)) my_packed_struct
28139            {
28140               char c;
28141               int  i;
28142               struct my_unpacked_struct s;
28143            };
28144
28145     You may only specify this attribute on the definition of an `enum',
28146     `struct' or `union', not on a `typedef' that does not also define
28147     the enumerated type, structure or union.
28148
28149`transparent_union'
28150     This attribute, attached to a `union' type definition, indicates
28151     that any function parameter having that union type causes calls to
28152     that function to be treated in a special way.
28153
28154     First, the argument corresponding to a transparent union type can
28155     be of any type in the union; no cast is required.  Also, if the
28156     union contains a pointer type, the corresponding argument can be a
28157     null pointer constant or a void pointer expression; and if the
28158     union contains a void pointer type, the corresponding argument can
28159     be any pointer expression.  If the union member type is a pointer,
28160     qualifiers like `const' on the referenced type must be respected,
28161     just as with normal pointer conversions.
28162
28163     Second, the argument is passed to the function using the calling
28164     conventions of the first member of the transparent union, not the
28165     calling conventions of the union itself.  All members of the union
28166     must have the same machine representation; this is necessary for
28167     this argument passing to work properly.
28168
28169     Transparent unions are designed for library functions that have
28170     multiple interfaces for compatibility reasons.  For example,
28171     suppose the `wait' function must accept either a value of type
28172     `int *' to comply with POSIX, or a value of type `union wait *' to
28173     comply with the 4.1BSD interface.  If `wait''s parameter were
28174     `void *', `wait' would accept both kinds of arguments, but it
28175     would also accept any other pointer type and this would make
28176     argument type checking less useful.  Instead, `<sys/wait.h>' might
28177     define the interface as follows:
28178
28179          typedef union __attribute__ ((__transparent_union__))
28180            {
28181              int *__ip;
28182              union wait *__up;
28183            } wait_status_ptr_t;
28184
28185          pid_t wait (wait_status_ptr_t);
28186
28187     This interface allows either `int *' or `union wait *' arguments
28188     to be passed, using the `int *' calling convention.  The program
28189     can call `wait' with arguments of either type:
28190
28191          int w1 () { int w; return wait (&w); }
28192          int w2 () { union wait w; return wait (&w); }
28193
28194     With this interface, `wait''s implementation might look like this:
28195
28196          pid_t wait (wait_status_ptr_t p)
28197          {
28198            return waitpid (-1, p.__ip, 0);
28199          }
28200
28201`unused'
28202     When attached to a type (including a `union' or a `struct'), this
28203     attribute means that variables of that type are meant to appear
28204     possibly unused.  GCC does not produce a warning for any variables
28205     of that type, even if the variable appears to do nothing.  This is
28206     often the case with lock or thread classes, which are usually
28207     defined and then not referenced, but contain constructors and
28208     destructors that have nontrivial bookkeeping functions.
28209
28210`deprecated'
28211`deprecated (MSG)'
28212     The `deprecated' attribute results in a warning if the type is
28213     used anywhere in the source file.  This is useful when identifying
28214     types that are expected to be removed in a future version of a
28215     program.  If possible, the warning also includes the location of
28216     the declaration of the deprecated type, to enable users to easily
28217     find further information about why the type is deprecated, or what
28218     they should do instead.  Note that the warnings only occur for
28219     uses and then only if the type is being applied to an identifier
28220     that itself is not being declared as deprecated.
28221
28222          typedef int T1 __attribute__ ((deprecated));
28223          T1 x;
28224          typedef T1 T2;
28225          T2 y;
28226          typedef T1 T3 __attribute__ ((deprecated));
28227          T3 z __attribute__ ((deprecated));
28228
28229     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
28230     warning is issued for line 4 because T2 is not explicitly
28231     deprecated.  Line 5 has no warning because T3 is explicitly
28232     deprecated.  Similarly for line 6.  The optional MSG argument,
28233     which must be a string, is printed in the warning if present.
28234
28235     The `deprecated' attribute can also be used for functions and
28236     variables (*note Function Attributes::, *note Variable
28237     Attributes::.)
28238
28239`may_alias'
28240     Accesses through pointers to types with this attribute are not
28241     subject to type-based alias analysis, but are instead assumed to
28242     be able to alias any other type of objects.  In the context of
28243     section 6.5 paragraph 7 of the C99 standard, an lvalue expression
28244     dereferencing such a pointer is treated like having a character
28245     type.  See `-fstrict-aliasing' for more information on aliasing
28246     issues.  This extension exists to support some vector APIs, in
28247     which pointers to one vector type are permitted to alias pointers
28248     to a different vector type.
28249
28250     Note that an object of a type with this attribute does not have any
28251     special semantics.
28252
28253     Example of use:
28254
28255          typedef short __attribute__((__may_alias__)) short_a;
28256
28257          int
28258          main (void)
28259          {
28260            int a = 0x12345678;
28261            short_a *b = (short_a *) &a;
28262
28263            b[1] = 0;
28264
28265            if (a == 0x12345678)
28266              abort();
28267
28268            exit(0);
28269          }
28270
28271     If you replaced `short_a' with `short' in the variable
28272     declaration, the above program would abort when compiled with
28273     `-fstrict-aliasing', which is on by default at `-O2' or above.
28274
28275`visibility'
28276     In C++, attribute visibility (*note Function Attributes::) can
28277     also be applied to class, struct, union and enum types.  Unlike
28278     other type attributes, the attribute must appear between the
28279     initial keyword and the name of the type; it cannot appear after
28280     the body of the type.
28281
28282     Note that the type visibility is applied to vague linkage entities
28283     associated with the class (vtable, typeinfo node, etc.).  In
28284     particular, if a class is thrown as an exception in one shared
28285     object and caught in another, the class must have default
28286     visibility.  Otherwise the two shared objects are unable to use
28287     the same typeinfo node and exception handling will break.
28288
28289`designated_init'
28290     This attribute may only be applied to structure types.  It
28291     indicates that any initialization of an object of this type must
28292     use designated initializers rather than positional initializers.
28293     The intent of this attribute is to allow the programmer to
28294     indicate that a structure's layout may change, and that therefore
28295     relying on positional initialization will result in future
28296     breakage.
28297
28298     GCC emits warnings based on this attribute by default; use
28299     `-Wno-designated-init' to suppress them.
28300
28301`bnd_variable_size'
28302     When applied to a structure field, this attribute tells Pointer
28303     Bounds Checker that the size of this field should not be computed
28304     using static type information.  It may be used to mark
28305     variably-sized static array fields placed at the end of a
28306     structure.
28307
28308          struct S
28309          {
28310            int size;
28311            char data[1];
28312          }
28313          S *p = (S *)malloc (sizeof(S) + 100);
28314          p->data[10] = 0; //Bounds violation
28315
28316     By using an attribute for the field we may avoid unwanted bound
28317     violation checks:
28318
28319          struct S
28320          {
28321            int size;
28322            char data[1] __attribute__((bnd_variable_size));
28323          }
28324          S *p = (S *)malloc (sizeof(S) + 100);
28325          p->data[10] = 0; //OK
28326
28327
28328 To specify multiple attributes, separate them by commas within the
28329double parentheses: for example, `__attribute__ ((aligned (16),
28330packed))'.
28331
283326.39.1 ARM Type Attributes
28333--------------------------
28334
28335On those ARM targets that support `dllimport' (such as Symbian OS), you
28336can use the `notshared' attribute to indicate that the virtual table
28337and other similar data for a class should not be exported from a DLL.
28338For example:
28339
28340     class __declspec(notshared) C {
28341     public:
28342       __declspec(dllimport) C();
28343       virtual void f();
28344     }
28345
28346     __declspec(dllexport)
28347     C::C() {}
28348
28349In this code, `C::C' is exported from the current DLL, but the virtual
28350table for `C' is not exported.  (You can use `__attribute__' instead of
28351`__declspec' if you prefer, but most Symbian OS code uses `__declspec'.)
28352
283536.39.2 MeP Type Attributes
28354--------------------------
28355
28356Many of the MeP variable attributes may be applied to types as well.
28357Specifically, the `based', `tiny', `near', and `far' attributes may be
28358applied to either.  The `io' and `cb' attributes may not be applied to
28359types.
28360
283616.39.3 PowerPC Type Attributes
28362------------------------------
28363
28364Three attributes currently are defined for PowerPC configurations:
28365`altivec', `ms_struct' and `gcc_struct'.
28366
28367 For full documentation of the `ms_struct' and `gcc_struct' attributes
28368please see the documentation in *Note x86 Type Attributes::.
28369
28370 The `altivec' attribute allows one to declare AltiVec vector data
28371types supported by the AltiVec Programming Interface Manual.  The
28372attribute requires an argument to specify one of three vector types:
28373`vector__', `pixel__' (always followed by unsigned short), and `bool__'
28374(always followed by unsigned).
28375
28376     __attribute__((altivec(vector__)))
28377     __attribute__((altivec(pixel__))) unsigned short
28378     __attribute__((altivec(bool__))) unsigned
28379
28380 These attributes mainly are intended to support the `__vector',
28381`__pixel', and `__bool' AltiVec keywords.
28382
283836.39.4 SPU Type Attributes
28384--------------------------
28385
28386The SPU supports the `spu_vector' attribute for types.  This attribute
28387allows one to declare vector data types supported by the
28388Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
28389to support the `__vector' keyword.
28390
283916.39.5 x86 Type Attributes
28392--------------------------
28393
28394Two attributes are currently defined for x86 configurations:
28395`ms_struct' and `gcc_struct'.
28396
28397`ms_struct'
28398`gcc_struct'
28399     If `packed' is used on a structure, or if bit-fields are used it
28400     may be that the Microsoft ABI packs them differently than GCC
28401     normally packs them.  Particularly when moving packed data between
28402     functions compiled with GCC and the native Microsoft compiler
28403     (either via function call or as data in a file), it may be
28404     necessary to access either format.
28405
28406     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
28407     Windows x86 compilers to match the native Microsoft compiler.
28408
28409
28410File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
28411
284126.40 Inquiring on Alignment of Types or Variables
28413=================================================
28414
28415The keyword `__alignof__' allows you to inquire about how an object is
28416aligned, or the minimum alignment usually required by a type.  Its
28417syntax is just like `sizeof'.
28418
28419 For example, if the target machine requires a `double' value to be
28420aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
28421is true on many RISC machines.  On more traditional machine designs,
28422`__alignof__ (double)' is 4 or even 2.
28423
28424 Some machines never actually require alignment; they allow reference
28425to any data type even at an odd address.  For these machines,
28426`__alignof__' reports the smallest alignment that GCC gives the data
28427type, usually as mandated by the target ABI.
28428
28429 If the operand of `__alignof__' is an lvalue rather than a type, its
28430value is the required alignment for its type, taking into account any
28431minimum alignment specified with GCC's `__attribute__' extension (*note
28432Variable Attributes::).  For example, after this declaration:
28433
28434     struct foo { int x; char y; } foo1;
28435
28436the value of `__alignof__ (foo1.y)' is 1, even though its actual
28437alignment is probably 2 or 4, the same as `__alignof__ (int)'.
28438
28439 It is an error to ask for the alignment of an incomplete type.
28440
28441
28442File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions
28443
284446.41 An Inline Function is As Fast As a Macro
28445=============================================
28446
28447By declaring a function inline, you can direct GCC to make calls to
28448that function faster.  One way GCC can achieve this is to integrate
28449that function's code into the code for its callers.  This makes
28450execution faster by eliminating the function-call overhead; in
28451addition, if any of the actual argument values are constant, their
28452known values may permit simplifications at compile time so that not all
28453of the inline function's code needs to be included.  The effect on code
28454size is less predictable; object code may be larger or smaller with
28455function inlining, depending on the particular case.  You can also
28456direct GCC to try to integrate all "simple enough" functions into their
28457callers with the option `-finline-functions'.
28458
28459 GCC implements three different semantics of declaring a function
28460inline.  One is available with `-std=gnu89' or `-fgnu89-inline' or when
28461`gnu_inline' attribute is present on all inline declarations, another
28462when `-std=c99', `-std=c11', `-std=gnu99' or `-std=gnu11' (without
28463`-fgnu89-inline'), and the third is used when compiling C++.
28464
28465 To declare a function inline, use the `inline' keyword in its
28466declaration, like this:
28467
28468     static inline int
28469     inc (int *a)
28470     {
28471       return (*a)++;
28472     }
28473
28474 If you are writing a header file to be included in ISO C90 programs,
28475write `__inline__' instead of `inline'.  *Note Alternate Keywords::.
28476
28477 The three types of inlining behave similarly in two important cases:
28478when the `inline' keyword is used on a `static' function, like the
28479example above, and when a function is first declared without using the
28480`inline' keyword and then is defined with `inline', like this:
28481
28482     extern int inc (int *a);
28483     inline int
28484     inc (int *a)
28485     {
28486       return (*a)++;
28487     }
28488
28489 In both of these common cases, the program behaves the same as if you
28490had not used the `inline' keyword, except for its speed.
28491
28492 When a function is both inline and `static', if all calls to the
28493function are integrated into the caller, and the function's address is
28494never used, then the function's own assembler code is never referenced.
28495In this case, GCC does not actually output assembler code for the
28496function, unless you specify the option `-fkeep-inline-functions'.
28497Some calls cannot be integrated for various reasons (in particular,
28498calls that precede the function's definition cannot be integrated, and
28499neither can recursive calls within the definition).  If there is a
28500nonintegrated call, then the function is compiled to assembler code as
28501usual.  The function must also be compiled as usual if the program
28502refers to its address, because that can't be inlined.
28503
28504 Note that certain usages in a function definition can make it
28505unsuitable for inline substitution.  Among these usages are: variadic
28506functions, use of `alloca', use of variable-length data types (*note
28507Variable Length::), use of computed goto (*note Labels as Values::),
28508use of nonlocal goto, and nested functions (*note Nested Functions::).
28509Using `-Winline' warns when a function marked `inline' could not be
28510substituted, and gives the reason for the failure.
28511
28512 As required by ISO C++, GCC considers member functions defined within
28513the body of a class to be marked inline even if they are not explicitly
28514declared with the `inline' keyword.  You can override this with
28515`-fno-default-inline'; *note Options Controlling C++ Dialect: C++
28516Dialect Options.
28517
28518 GCC does not inline any functions when not optimizing unless you
28519specify the `always_inline' attribute for the function, like this:
28520
28521     /* Prototype.  */
28522     inline void foo (const char) __attribute__((always_inline));
28523
28524 The remainder of this section is specific to GNU C90 inlining.
28525
28526 When an inline function is not `static', then the compiler must assume
28527that there may be calls from other source files; since a global symbol
28528can be defined only once in any program, the function must not be
28529defined in the other source files, so the calls therein cannot be
28530integrated.  Therefore, a non-`static' inline function is always
28531compiled on its own in the usual fashion.
28532
28533 If you specify both `inline' and `extern' in the function definition,
28534then the definition is used only for inlining.  In no case is the
28535function compiled on its own, not even if you refer to its address
28536explicitly.  Such an address becomes an external reference, as if you
28537had only declared the function, and had not defined it.
28538
28539 This combination of `inline' and `extern' has almost the effect of a
28540macro.  The way to use it is to put a function definition in a header
28541file with these keywords, and put another copy of the definition
28542(lacking `inline' and `extern') in a library file.  The definition in
28543the header file causes most calls to the function to be inlined.  If
28544any uses of the function remain, they refer to the single copy in the
28545library.
28546
28547
28548File: gcc.info,  Node: Volatiles,  Next: Using Assembly Language with C,  Prev: Inline,  Up: C Extensions
28549
285506.42 When is a Volatile Object Accessed?
28551========================================
28552
28553C has the concept of volatile objects.  These are normally accessed by
28554pointers and used for accessing hardware or inter-thread communication.
28555The standard encourages compilers to refrain from optimizations
28556concerning accesses to volatile objects, but leaves it implementation
28557defined as to what constitutes a volatile access.  The minimum
28558requirement is that at a sequence point all previous accesses to
28559volatile objects have stabilized and no subsequent accesses have
28560occurred.  Thus an implementation is free to reorder and combine
28561volatile accesses that occur between sequence points, but cannot do so
28562for accesses across a sequence point.  The use of volatile does not
28563allow you to violate the restriction on updating objects multiple times
28564between two sequence points.
28565
28566 Accesses to non-volatile objects are not ordered with respect to
28567volatile accesses.  You cannot use a volatile object as a memory
28568barrier to order a sequence of writes to non-volatile memory.  For
28569instance:
28570
28571     int *ptr = SOMETHING;
28572     volatile int vobj;
28573     *ptr = SOMETHING;
28574     vobj = 1;
28575
28576Unless *PTR and VOBJ can be aliased, it is not guaranteed that the
28577write to *PTR occurs by the time the update of VOBJ happens.  If you
28578need this guarantee, you must use a stronger memory barrier such as:
28579
28580     int *ptr = SOMETHING;
28581     volatile int vobj;
28582     *ptr = SOMETHING;
28583     asm volatile ("" : : : "memory");
28584     vobj = 1;
28585
28586 A scalar volatile object is read when it is accessed in a void context:
28587
28588     volatile int *src = SOMEVALUE;
28589     *src;
28590
28591 Such expressions are rvalues, and GCC implements this as a read of the
28592volatile object being pointed to.
28593
28594 Assignments are also expressions and have an rvalue.  However when
28595assigning to a scalar volatile, the volatile object is not reread,
28596regardless of whether the assignment expression's rvalue is used or
28597not.  If the assignment's rvalue is used, the value is that assigned to
28598the volatile object.  For instance, there is no read of VOBJ in all the
28599following cases:
28600
28601     int obj;
28602     volatile int vobj;
28603     vobj = SOMETHING;
28604     obj = vobj = SOMETHING;
28605     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
28606     obj = (SOMETHING, vobj = ANOTHERTHING);
28607
28608 If you need to read the volatile object after an assignment has
28609occurred, you must use a separate expression with an intervening
28610sequence point.
28611
28612 As bit-fields are not individually addressable, volatile bit-fields may
28613be implicitly read when written to, or when adjacent bit-fields are
28614accessed.  Bit-field operations may be optimized such that adjacent
28615bit-fields are only partially accessed, if they straddle a storage unit
28616boundary.  For these reasons it is unwise to use volatile bit-fields to
28617access hardware.
28618
28619
28620File: gcc.info,  Node: Using Assembly Language with C,  Next: Alternate Keywords,  Prev: Volatiles,  Up: C Extensions
28621
286226.43 How to Use Inline Assembly Language in C Code
28623==================================================
28624
28625The `asm' keyword allows you to embed assembler instructions within C
28626code.  GCC provides two forms of inline `asm' statements.  A "basic
28627`asm'" statement is one with no operands (*note Basic Asm::), while an
28628"extended `asm'" statement (*note Extended Asm::) includes one or more
28629operands.  The extended form is preferred for mixing C and assembly
28630language within a function, but to include assembly language at top
28631level you must use basic `asm'.
28632
28633 You can also use the `asm' keyword to override the assembler name for
28634a C symbol, or to place a C variable in a specific register.
28635
28636* Menu:
28637
28638* Basic Asm::          Inline assembler without operands.
28639* Extended Asm::       Inline assembler with operands.
28640* Constraints::        Constraints for `asm' operands
28641* Asm Labels::         Specifying the assembler name to use for a C symbol.
28642* Explicit Reg Vars::  Defining variables residing in specified registers.
28643* Size of an asm::     How GCC calculates the size of an `asm' block.
28644
28645
28646File: gcc.info,  Node: Basic Asm,  Next: Extended Asm,  Up: Using Assembly Language with C
28647
286486.43.1 Basic Asm -- Assembler Instructions Without Operands
28649-----------------------------------------------------------
28650
28651A basic `asm' statement has the following syntax:
28652
28653     asm [ volatile ] ( ASSEMBLERINSTRUCTIONS )
28654
28655 The `asm' keyword is a GNU extension.  When writing code that can be
28656compiled with `-ansi' and the various `-std' options, use `__asm__'
28657instead of `asm' (*note Alternate Keywords::).
28658
28659Qualifiers
28660..........
28661
28662`volatile'
28663     The optional `volatile' qualifier has no effect.  All basic `asm'
28664     blocks are implicitly volatile.
28665
28666Parameters
28667..........
28668
28669ASSEMBLERINSTRUCTIONS
28670     This is a literal string that specifies the assembler code. The
28671     string can contain any instructions recognized by the assembler,
28672     including directives.  GCC does not parse the assembler
28673     instructions themselves and does not know what they mean or even
28674     whether they are valid assembler input.
28675
28676     You may place multiple assembler instructions together in a single
28677     `asm' string, separated by the characters normally used in
28678     assembly code for the system. A combination that works in most
28679     places is a newline to break the line, plus a tab character
28680     (written as `\n\t').  Some assemblers allow semicolons as a line
28681     separator. However, note that some assembler dialects use
28682     semicolons to start a comment.
28683
28684Remarks
28685.......
28686
28687Using extended `asm' typically produces smaller, safer, and more
28688efficient code, and in most cases it is a better solution than basic
28689`asm'.  However, there are two situations where only basic `asm' can be
28690used:
28691
28692   * Extended `asm' statements have to be inside a C function, so to
28693     write inline assembly language at file scope ("top-level"),
28694     outside of C functions, you must use basic `asm'.  You can use
28695     this technique to emit assembler directives, define assembly
28696     language macros that can be invoked elsewhere in the file, or
28697     write entire functions in assembly language.
28698
28699   * Functions declared with the `naked' attribute also require basic
28700     `asm' (*note Function Attributes::).
28701
28702 Safely accessing C data and calling functions from basic `asm' is more
28703complex than it may appear. To access C data, it is better to use
28704extended `asm'.
28705
28706 Do not expect a sequence of `asm' statements to remain perfectly
28707consecutive after compilation. If certain instructions need to remain
28708consecutive in the output, put them in a single multi-instruction `asm'
28709statement. Note that GCC's optimizers can move `asm' statements
28710relative to other code, including across jumps.
28711
28712 `asm' statements may not perform jumps into other `asm' statements.
28713GCC does not know about these jumps, and therefore cannot take account
28714of them when deciding how to optimize. Jumps from `asm' to C labels are
28715only supported in extended `asm'.
28716
28717 Under certain circumstances, GCC may duplicate (or remove duplicates
28718of) your assembly code when optimizing. This can lead to unexpected
28719duplicate symbol errors during compilation if your assembly code
28720defines symbols or labels.
28721
28722 Since GCC does not parse the ASSEMBLERINSTRUCTIONS, it has no
28723visibility of any symbols it references. This may result in GCC
28724discarding those symbols as unreferenced.
28725
28726 The compiler copies the assembler instructions in a basic `asm'
28727verbatim to the assembly language output file, without processing
28728dialects or any of the `%' operators that are available with extended
28729`asm'. This results in minor differences between basic `asm' strings
28730and extended `asm' templates. For example, to refer to registers you
28731might use `%eax' in basic `asm' and `%%eax' in extended `asm'.
28732
28733 On targets such as x86 that support multiple assembler dialects, all
28734basic `asm' blocks use the assembler dialect specified by the `-masm'
28735command-line option (*note x86 Options::).  Basic `asm' provides no
28736mechanism to provide different assembler strings for different dialects.
28737
28738 Here is an example of basic `asm' for i386:
28739
28740     /* Note that this code will not compile with -masm=intel */
28741     #define DebugBreak() asm("int $3")
28742
28743
28744File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Basic Asm,  Up: Using Assembly Language with C
28745
287466.43.2 Extended Asm - Assembler Instructions with C Expression Operands
28747-----------------------------------------------------------------------
28748
28749With extended `asm' you can read and write C variables from assembler
28750and perform jumps from assembler code to C labels.  Extended `asm'
28751syntax uses colons (`:') to delimit the operand parameters after the
28752assembler template:
28753
28754     asm [volatile] ( ASSEMBLERTEMPLATE
28755                      : OUTPUTOPERANDS
28756                      [ : INPUTOPERANDS
28757                      [ : CLOBBERS ] ])
28758
28759     asm [volatile] goto ( ASSEMBLERTEMPLATE
28760                           :
28761                           : INPUTOPERANDS
28762                           : CLOBBERS
28763                           : GOTOLABELS)
28764
28765 The `asm' keyword is a GNU extension.  When writing code that can be
28766compiled with `-ansi' and the various `-std' options, use `__asm__'
28767instead of `asm' (*note Alternate Keywords::).
28768
28769Qualifiers
28770..........
28771
28772`volatile'
28773     The typical use of extended `asm' statements is to manipulate input
28774     values to produce output values. However, your `asm' statements may
28775     also produce side effects. If so, you may need to use the
28776     `volatile' qualifier to disable certain optimizations. *Note
28777     Volatile::.
28778
28779`goto'
28780     This qualifier informs the compiler that the `asm' statement may
28781     perform a jump to one of the labels listed in the GOTOLABELS.
28782     *Note GotoLabels::.
28783
28784Parameters
28785..........
28786
28787ASSEMBLERTEMPLATE
28788     This is a literal string that is the template for the assembler
28789     code. It is a combination of fixed text and tokens that refer to
28790     the input, output, and goto parameters. *Note AssemblerTemplate::.
28791
28792OUTPUTOPERANDS
28793     A comma-separated list of the C variables modified by the
28794     instructions in the ASSEMBLERTEMPLATE.  An empty list is
28795     permitted.  *Note OutputOperands::.
28796
28797INPUTOPERANDS
28798     A comma-separated list of C expressions read by the instructions
28799     in the ASSEMBLERTEMPLATE.  An empty list is permitted.  *Note
28800     InputOperands::.
28801
28802CLOBBERS
28803     A comma-separated list of registers or other values changed by the
28804     ASSEMBLERTEMPLATE, beyond those listed as outputs.  An empty list
28805     is permitted.  *Note Clobbers::.
28806
28807GOTOLABELS
28808     When you are using the `goto' form of `asm', this section contains
28809     the list of all C labels to which the code in the
28810     ASSEMBLERTEMPLATE may jump.  *Note GotoLabels::.
28811
28812     `asm' statements may not perform jumps into other `asm' statements,
28813     only to the listed GOTOLABELS.  GCC's optimizers do not know about
28814     other jumps; therefore they cannot take account of them when
28815     deciding how to optimize.
28816
28817 The total number of input + output + goto operands is limited to 30.
28818
28819Remarks
28820.......
28821
28822The `asm' statement allows you to include assembly instructions directly
28823within C code. This may help you to maximize performance in
28824time-sensitive code or to access assembly instructions that are not
28825readily available to C programs.
28826
28827 Note that extended `asm' statements must be inside a function. Only
28828basic `asm' may be outside functions (*note Basic Asm::).  Functions
28829declared with the `naked' attribute also require basic `asm' (*note
28830Function Attributes::).
28831
28832 While the uses of `asm' are many and varied, it may help to think of an
28833`asm' statement as a series of low-level instructions that convert input
28834parameters to output parameters. So a simple (if not particularly
28835useful) example for i386 using `asm' might look like this:
28836
28837     int src = 1;
28838     int dst;
28839
28840     asm ("mov %1, %0\n\t"
28841         "add $1, %0"
28842         : "=r" (dst)
28843         : "r" (src));
28844
28845     printf("%d\n", dst);
28846
28847 This code copies `src' to `dst' and add 1 to `dst'.
28848
288496.43.2.1 Volatile
28850.................
28851
28852GCC's optimizers sometimes discard `asm' statements if they determine
28853there is no need for the output variables. Also, the optimizers may move
28854code out of loops if they believe that the code will always return the
28855same result (i.e. none of its input values change between calls). Using
28856the `volatile' qualifier disables these optimizations. `asm' statements
28857that have no output operands, including `asm goto' statements, are
28858implicitly volatile.
28859
28860 This i386 code demonstrates a case that does not use (or require) the
28861`volatile' qualifier. If it is performing assertion checking, this code
28862uses `asm' to perform the validation. Otherwise, `dwRes' is
28863unreferenced by any code. As a result, the optimizers can discard the
28864`asm' statement, which in turn removes the need for the entire
28865`DoCheck' routine. By omitting the `volatile' qualifier when it isn't
28866needed you allow the optimizers to produce the most efficient code
28867possible.
28868
28869     void DoCheck(uint32_t dwSomeValue)
28870     {
28871        uint32_t dwRes;
28872
28873        // Assumes dwSomeValue is not zero.
28874        asm ("bsfl %1,%0"
28875          : "=r" (dwRes)
28876          : "r" (dwSomeValue)
28877          : "cc");
28878
28879        assert(dwRes > 3);
28880     }
28881
28882 The next example shows a case where the optimizers can recognize that
28883the input (`dwSomeValue') never changes during the execution of the
28884function and can therefore move the `asm' outside the loop to produce
28885more efficient code.  Again, using `volatile' disables this type of
28886optimization.
28887
28888     void do_print(uint32_t dwSomeValue)
28889     {
28890        uint32_t dwRes;
28891
28892        for (uint32_t x=0; x < 5; x++)
28893        {
28894           // Assumes dwSomeValue is not zero.
28895           asm ("bsfl %1,%0"
28896             : "=r" (dwRes)
28897             : "r" (dwSomeValue)
28898             : "cc");
28899
28900           printf("%u: %u %u\n", x, dwSomeValue, dwRes);
28901        }
28902     }
28903
28904 The following example demonstrates a case where you need to use the
28905`volatile' qualifier.  It uses the x86 `rdtsc' instruction, which reads
28906the computer's time-stamp counter. Without the `volatile' qualifier,
28907the optimizers might assume that the `asm' block will always return the
28908same value and therefore optimize away the second call.
28909
28910     uint64_t msr;
28911
28912     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
28913             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
28914             "or %%rdx, %0"        // 'Or' in the lower bits.
28915             : "=a" (msr)
28916             :
28917             : "rdx");
28918
28919     printf("msr: %llx\n", msr);
28920
28921     // Do other work...
28922
28923     // Reprint the timestamp
28924     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
28925             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
28926             "or %%rdx, %0"        // 'Or' in the lower bits.
28927             : "=a" (msr)
28928             :
28929             : "rdx");
28930
28931     printf("msr: %llx\n", msr);
28932
28933 GCC's optimizers do not treat this code like the non-volatile code in
28934the earlier examples. They do not move it out of loops or omit it on the
28935assumption that the result from a previous call is still valid.
28936
28937 Note that the compiler can move even volatile `asm' instructions
28938relative to other code, including across jump instructions. For
28939example, on many targets there is a system register that controls the
28940rounding mode of floating-point operations. Setting it with a volatile
28941`asm', as in the following PowerPC example, does not work reliably.
28942
28943     asm volatile("mtfsf 255, %0" : : "f" (fpenv));
28944     sum = x + y;
28945
28946 The compiler may move the addition back before the volatile `asm'. To
28947make it work as expected, add an artificial dependency to the `asm' by
28948referencing a variable in the subsequent code, for example:
28949
28950     asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
28951     sum = x + y;
28952
28953 Under certain circumstances, GCC may duplicate (or remove duplicates
28954of) your assembly code when optimizing. This can lead to unexpected
28955duplicate symbol errors during compilation if your asm code defines
28956symbols or labels.  Using `%=' (*note AssemblerTemplate::) may help
28957resolve this problem.
28958
289596.43.2.2 Assembler Template
28960...........................
28961
28962An assembler template is a literal string containing assembler
28963instructions.  The compiler replaces tokens in the template that refer
28964to inputs, outputs, and goto labels, and then outputs the resulting
28965string to the assembler. The string can contain any instructions
28966recognized by the assembler, including directives. GCC does not parse
28967the assembler instructions themselves and does not know what they mean
28968or even whether they are valid assembler input. However, it does count
28969the statements (*note Size of an asm::).
28970
28971 You may place multiple assembler instructions together in a single
28972`asm' string, separated by the characters normally used in assembly
28973code for the system. A combination that works in most places is a
28974newline to break the line, plus a tab character to move to the
28975instruction field (written as `\n\t').  Some assemblers allow
28976semicolons as a line separator. However, note that some assembler
28977dialects use semicolons to start a comment.
28978
28979 Do not expect a sequence of `asm' statements to remain perfectly
28980consecutive after compilation, even when you are using the `volatile'
28981qualifier. If certain instructions need to remain consecutive in the
28982output, put them in a single multi-instruction asm statement.
28983
28984 Accessing data from C programs without using input/output operands
28985(such as by using global symbols directly from the assembler template)
28986may not work as expected. Similarly, calling functions directly from an
28987assembler template requires a detailed understanding of the target
28988assembler and ABI.
28989
28990 Since GCC does not parse the assembler template, it has no visibility
28991of any symbols it references. This may result in GCC discarding those
28992symbols as unreferenced unless they are also listed as input, output,
28993or goto operands.
28994
28995Special format strings
28996......................
28997
28998In addition to the tokens described by the input, output, and goto
28999operands, these tokens have special meanings in the assembler template:
29000
29001`%%'
29002     Outputs a single `%' into the assembler code.
29003
29004`%='
29005     Outputs a number that is unique to each instance of the `asm'
29006     statement in the entire compilation. This option is useful when
29007     creating local labels and referring to them multiple times in a
29008     single template that generates multiple assembler instructions.
29009
29010`%{'
29011`%|'
29012`%}'
29013     Outputs `{', `|', and `}' characters (respectively) into the
29014     assembler code.  When unescaped, these characters have special
29015     meaning to indicate multiple assembler dialects, as described
29016     below.
29017
29018Multiple assembler dialects in `asm' templates
29019..............................................
29020
29021On targets such as x86, GCC supports multiple assembler dialects.  The
29022`-masm' option controls which dialect GCC uses as its default for
29023inline assembler. The target-specific documentation for the `-masm'
29024option contains the list of supported dialects, as well as the default
29025dialect if the option is not specified. This information may be
29026important to understand, since assembler code that works correctly when
29027compiled using one dialect will likely fail if compiled using another.
29028*Note x86 Options::.
29029
29030 If your code needs to support multiple assembler dialects (for
29031example, if you are writing public headers that need to support a
29032variety of compilation options), use constructs of this form:
29033
29034     { dialect0 | dialect1 | dialect2... }
29035
29036 This construct outputs `dialect0' when using dialect #0 to compile the
29037code, `dialect1' for dialect #1, etc. If there are fewer alternatives
29038within the braces than the number of dialects the compiler supports,
29039the construct outputs nothing.
29040
29041 For example, if an x86 compiler supports two dialects (`att',
29042`intel'), an assembler template such as this:
29043
29044     "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2"
29045
29046is equivalent to one of
29047
29048     "btl %[Offset],%[Base] ; jc %l2"   /* att dialect */
29049     "bt %[Base],%[Offset]; jc %l2"     /* intel dialect */
29050
29051 Using that same compiler, this code:
29052
29053     "xchg{l}\t{%%}ebx, %1"
29054
29055corresponds to either
29056
29057     "xchgl\t%%ebx, %1"                 /* att dialect */
29058     "xchg\tebx, %1"                    /* intel dialect */
29059
29060 There is no support for nesting dialect alternatives.
29061
290626.43.2.3 Output Operands
29063........................
29064
29065An `asm' statement has zero or more output operands indicating the names
29066of C variables modified by the assembler code.
29067
29068 In this i386 example, `old' (referred to in the template string as
29069`%0') and `*Base' (as `%1') are outputs and `Offset' (`%2') is an input:
29070
29071     bool old;
29072
29073     __asm__ ("btsl %2,%1\n\t" // Turn on zero-based bit #Offset in Base.
29074              "sbb %0,%0"      // Use the CF to calculate old.
29075        : "=r" (old), "+rm" (*Base)
29076        : "Ir" (Offset)
29077        : "cc");
29078
29079     return old;
29080
29081 Operands are separated by commas.  Each operand has this format:
29082
29083     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CVARIABLENAME)
29084
29085ASMSYMBOLICNAME
29086     Specifies a symbolic name for the operand.  Reference the name in
29087     the assembler template by enclosing it in square brackets (i.e.
29088     `%[Value]'). The scope of the name is the `asm' statement that
29089     contains the definition. Any valid C variable name is acceptable,
29090     including names already defined in the surrounding code. No two
29091     operands within the same `asm' statement can use the same symbolic
29092     name.
29093
29094     When not using an ASMSYMBOLICNAME, use the (zero-based) position
29095     of the operand in the list of operands in the assembler template.
29096     For example if there are three output operands, use `%0' in the
29097     template to refer to the first, `%1' for the second, and `%2' for
29098     the third.
29099
29100CONSTRAINT
29101     A string constant specifying constraints on the placement of the
29102     operand; *Note Constraints::, for details.
29103
29104     Output constraints must begin with either `=' (a variable
29105     overwriting an existing value) or `+' (when reading and writing).
29106     When using `=', do not assume the location contains the existing
29107     value on entry to the `asm', except when the operand is tied to an
29108     input; *note Input Operands: InputOperands.
29109
29110     After the prefix, there must be one or more additional constraints
29111     (*note Constraints::) that describe where the value resides. Common
29112     constraints include `r' for register and `m' for memory.  When you
29113     list more than one possible location (for example, `"=rm"'), the
29114     compiler chooses the most efficient one based on the current
29115     context.  If you list as many alternates as the `asm' statement
29116     allows, you permit the optimizers to produce the best possible
29117     code.  If you must use a specific register, but your Machine
29118     Constraints do not provide sufficient control to select the
29119     specific register you want, local register variables may provide a
29120     solution (*note Local Reg Vars::).
29121
29122CVARIABLENAME
29123     Specifies a C lvalue expression to hold the output, typically a
29124     variable name.  The enclosing parentheses are a required part of
29125     the syntax.
29126
29127
29128 When the compiler selects the registers to use to represent the output
29129operands, it does not use any of the clobbered registers (*note
29130Clobbers::).
29131
29132 Output operand expressions must be lvalues. The compiler cannot check
29133whether the operands have data types that are reasonable for the
29134instruction being executed. For output expressions that are not
29135directly addressable (for example a bit-field), the constraint must
29136allow a register. In that case, GCC uses the register as the output of
29137the `asm', and then stores that register into the output.
29138
29139 Operands using the `+' constraint modifier count as two operands (that
29140is, both as input and output) towards the total maximum of 30 operands
29141per `asm' statement.
29142
29143 Use the `&' constraint modifier (*note Modifiers::) on all output
29144operands that must not overlap an input.  Otherwise, GCC may allocate
29145the output operand in the same register as an unrelated input operand,
29146on the assumption that the assembler code consumes its inputs before
29147producing outputs. This assumption may be false if the assembler code
29148actually consists of more than one instruction.
29149
29150 The same problem can occur if one output parameter (A) allows a
29151register constraint and another output parameter (B) allows a memory
29152constraint.  The code generated by GCC to access the memory address in
29153B can contain registers which _might_ be shared by A, and GCC considers
29154those registers to be inputs to the asm. As above, GCC assumes that
29155such input registers are consumed before any outputs are written. This
29156assumption may result in incorrect behavior if the asm writes to A
29157before using B. Combining the `&' modifier with the register constraint
29158on A ensures that modifying A does not affect the address referenced by
29159B. Otherwise, the location of B is undefined if A is modified before
29160using B.
29161
29162 `asm' supports operand modifiers on operands (for example `%k2'
29163instead of simply `%2'). Typically these qualifiers are hardware
29164dependent. The list of supported modifiers for x86 is found at *Note
29165x86 Operand modifiers: x86Operandmodifiers.
29166
29167 If the C code that follows the `asm' makes no use of any of the output
29168operands, use `volatile' for the `asm' statement to prevent the
29169optimizers from discarding the `asm' statement as unneeded (see *Note
29170Volatile::).
29171
29172 This code makes no use of the optional ASMSYMBOLICNAME. Therefore it
29173references the first output operand as `%0' (were there a second, it
29174would be `%1', etc). The number of the first input operand is one
29175greater than that of the last output operand. In this i386 example,
29176that makes `Mask' referenced as `%1':
29177
29178     uint32_t Mask = 1234;
29179     uint32_t Index;
29180
29181       asm ("bsfl %1, %0"
29182          : "=r" (Index)
29183          : "r" (Mask)
29184          : "cc");
29185
29186 That code overwrites the variable `Index' (`='), placing the value in
29187a register (`r').  Using the generic `r' constraint instead of a
29188constraint for a specific register allows the compiler to pick the
29189register to use, which can result in more efficient code. This may not
29190be possible if an assembler instruction requires a specific register.
29191
29192 The following i386 example uses the ASMSYMBOLICNAME syntax.  It
29193produces the same result as the code above, but some may consider it
29194more readable or more maintainable since reordering index numbers is
29195not necessary when adding or removing operands. The names `aIndex' and
29196`aMask' are only used in this example to emphasize which names get used
29197where.  It is acceptable to reuse the names `Index' and `Mask'.
29198
29199     uint32_t Mask = 1234;
29200     uint32_t Index;
29201
29202       asm ("bsfl %[aMask], %[aIndex]"
29203          : [aIndex] "=r" (Index)
29204          : [aMask] "r" (Mask)
29205          : "cc");
29206
29207 Here are some more examples of output operands.
29208
29209     uint32_t c = 1;
29210     uint32_t d;
29211     uint32_t *e = &c;
29212
29213     asm ("mov %[e], %[d]"
29214        : [d] "=rm" (d)
29215        : [e] "rm" (*e));
29216
29217 Here, `d' may either be in a register or in memory. Since the compiler
29218might already have the current value of the `uint32_t' location pointed
29219to by `e' in a register, you can enable it to choose the best location
29220for `d' by specifying both constraints.
29221
292226.43.2.4 Input Operands
29223.......................
29224
29225Input operands make values from C variables and expressions available
29226to the assembly code.
29227
29228 Operands are separated by commas.  Each operand has this format:
29229
29230     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CEXPRESSION)
29231
29232ASMSYMBOLICNAME
29233     Specifies a symbolic name for the operand.  Reference the name in
29234     the assembler template by enclosing it in square brackets (i.e.
29235     `%[Value]'). The scope of the name is the `asm' statement that
29236     contains the definition. Any valid C variable name is acceptable,
29237     including names already defined in the surrounding code. No two
29238     operands within the same `asm' statement can use the same symbolic
29239     name.
29240
29241     When not using an ASMSYMBOLICNAME, use the (zero-based) position
29242     of the operand in the list of operands in the assembler template.
29243     For example if there are two output operands and three inputs, use
29244     `%2' in the template to refer to the first input operand, `%3' for
29245     the second, and `%4' for the third.
29246
29247CONSTRAINT
29248     A string constant specifying constraints on the placement of the
29249     operand; *Note Constraints::, for details.
29250
29251     Input constraint strings may not begin with either `=' or `+'.
29252     When you list more than one possible location (for example,
29253     `"irm"'), the compiler chooses the most efficient one based on the
29254     current context.  If you must use a specific register, but your
29255     Machine Constraints do not provide sufficient control to select
29256     the specific register you want, local register variables may
29257     provide a solution (*note Local Reg Vars::).
29258
29259     Input constraints can also be digits (for example, `"0"'). This
29260     indicates that the specified input must be in the same place as
29261     the output constraint at the (zero-based) index in the output
29262     constraint list.  When using ASMSYMBOLICNAME syntax for the output
29263     operands, you may use these names (enclosed in brackets `[]')
29264     instead of digits.
29265
29266CEXPRESSION
29267     This is the C variable or expression being passed to the `asm'
29268     statement as input.  The enclosing parentheses are a required part
29269     of the syntax.
29270
29271
29272 When the compiler selects the registers to use to represent the input
29273operands, it does not use any of the clobbered registers (*note
29274Clobbers::).
29275
29276 If there are no output operands but there are input operands, place two
29277consecutive colons where the output operands would go:
29278
29279     __asm__ ("some instructions"
29280        : /* No outputs. */
29281        : "r" (Offset / 8));
29282
29283 *Warning:* Do _not_ modify the contents of input-only operands (except
29284for inputs tied to outputs). The compiler assumes that on exit from the
29285`asm' statement these operands contain the same values as they had
29286before executing the statement.  It is _not_ possible to use clobbers
29287to inform the compiler that the values in these inputs are changing. One
29288common work-around is to tie the changing input variable to an output
29289variable that never gets used. Note, however, that if the code that
29290follows the `asm' statement makes no use of any of the output operands,
29291the GCC optimizers may discard the `asm' statement as unneeded (see
29292*Note Volatile::).
29293
29294 `asm' supports operand modifiers on operands (for example `%k2'
29295instead of simply `%2'). Typically these qualifiers are hardware
29296dependent. The list of supported modifiers for x86 is found at *Note
29297x86 Operand modifiers: x86Operandmodifiers.
29298
29299 In this example using the fictitious `combine' instruction, the
29300constraint `"0"' for input operand 1 says that it must occupy the same
29301location as output operand 0. Only input operands may use numbers in
29302constraints, and they must each refer to an output operand. Only a
29303number (or the symbolic assembler name) in the constraint can guarantee
29304that one operand is in the same place as another. The mere fact that
29305`foo' is the value of both operands is not enough to guarantee that
29306they are in the same place in the generated assembler code.
29307
29308     asm ("combine %2, %0"
29309        : "=r" (foo)
29310        : "0" (foo), "g" (bar));
29311
29312 Here is an example using symbolic names.
29313
29314     asm ("cmoveq %1, %2, %[result]"
29315        : [result] "=r"(result)
29316        : "r" (test), "r" (new), "[result]" (old));
29317
293186.43.2.5 Clobbers
29319.................
29320
29321While the compiler is aware of changes to entries listed in the output
29322operands, the inline `asm' code may modify more than just the outputs.
29323For example, calculations may require additional registers, or the
29324processor may overwrite a register as a side effect of a particular
29325assembler instruction.  In order to inform the compiler of these
29326changes, list them in the clobber list. Clobber list items are either
29327register names or the special clobbers (listed below). Each clobber
29328list item is a string constant enclosed in double quotes and separated
29329by commas.
29330
29331 Clobber descriptions may not in any way overlap with an input or output
29332operand. For example, you may not have an operand describing a register
29333class with one member when listing that register in the clobber list.
29334Variables declared to live in specific registers (*note Explicit Reg
29335Vars::) and used as `asm' input or output operands must have no part
29336mentioned in the clobber description. In particular, there is no way to
29337specify that input operands get modified without also specifying them
29338as output operands.
29339
29340 When the compiler selects which registers to use to represent input
29341and output operands, it does not use any of the clobbered registers. As
29342a result, clobbered registers are available for any use in the
29343assembler code.
29344
29345 Here is a realistic example for the VAX showing the use of clobbered
29346registers:
29347
29348     asm volatile ("movc3 %0, %1, %2"
29349                        : /* No outputs. */
29350                        : "g" (from), "g" (to), "g" (count)
29351                        : "r0", "r1", "r2", "r3", "r4", "r5");
29352
29353 Also, there are two special clobber arguments:
29354
29355`"cc"'
29356     The `"cc"' clobber indicates that the assembler code modifies the
29357     flags register. On some machines, GCC represents the condition
29358     codes as a specific hardware register; `"cc"' serves to name this
29359     register.  On other machines, condition code handling is different,
29360     and specifying `"cc"' has no effect. But it is valid no matter
29361     what the target.
29362
29363`"memory"'
29364     The `"memory"' clobber tells the compiler that the assembly code
29365     performs memory reads or writes to items other than those listed
29366     in the input and output operands (for example, accessing the
29367     memory pointed to by one of the input parameters). To ensure
29368     memory contains correct values, GCC may need to flush specific
29369     register values to memory before executing the `asm'. Further, the
29370     compiler does not assume that any values read from memory before an
29371     `asm' remain unchanged after that `asm'; it reloads them as needed.
29372     Using the `"memory"' clobber effectively forms a read/write memory
29373     barrier for the compiler.
29374
29375     Note that this clobber does not prevent the _processor_ from doing
29376     speculative reads past the `asm' statement. To prevent that, you
29377     need processor-specific fence instructions.
29378
29379     Flushing registers to memory has performance implications and may
29380     be an issue for time-sensitive code.  You can use a trick to avoid
29381     this if the size of the memory being accessed is known at compile
29382     time. For example, if accessing ten bytes of a string, use a
29383     memory input like:
29384
29385     `{"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}'.
29386
29387
293886.43.2.6 Goto Labels
29389....................
29390
29391`asm goto' allows assembly code to jump to one or more C labels.  The
29392GOTOLABELS section in an `asm goto' statement contains a comma-separated
29393list of all C labels to which the assembler code may jump. GCC assumes
29394that `asm' execution falls through to the next statement (if this is
29395not the case, consider using the `__builtin_unreachable' intrinsic
29396after the `asm' statement). Optimization of `asm goto' may be improved
29397by using the `hot' and `cold' label attributes (*note Label
29398Attributes::).
29399
29400 An `asm goto' statement cannot have outputs.  This is due to an
29401internal restriction of the compiler: control transfer instructions
29402cannot have outputs.  If the assembler code does modify anything, use
29403the `"memory"' clobber to force the optimizers to flush all register
29404values to memory and reload them if necessary after the `asm' statement.
29405
29406 Also note that an `asm goto' statement is always implicitly considered
29407volatile.
29408
29409 To reference a label in the assembler template, prefix it with `%l'
29410(lowercase `L') followed by its (zero-based) position in GOTOLABELS
29411plus the number of input operands.  For example, if the `asm' has three
29412inputs and references two labels, refer to the first label as `%l3' and
29413the second as `%l4').
29414
29415 Alternately, you can reference labels using the actual C label name
29416enclosed in brackets.  For example, to reference a label named `carry',
29417you can use `%l[carry]'.  The label must still be listed in the
29418GOTOLABELS section when using this approach.
29419
29420 Here is an example of `asm goto' for i386:
29421
29422     asm goto (
29423         "btl %1, %0\n\t"
29424         "jc %l2"
29425         : /* No outputs. */
29426         : "r" (p1), "r" (p2)
29427         : "cc"
29428         : carry);
29429
29430     return 0;
29431
29432     carry:
29433     return 1;
29434
29435 The following example shows an `asm goto' that uses a memory clobber.
29436
29437     int frob(int x)
29438     {
29439       int y;
29440       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
29441                 : /* No outputs. */
29442                 : "r"(x), "r"(&y)
29443                 : "r5", "memory"
29444                 : error);
29445       return y;
29446     error:
29447       return -1;
29448     }
29449
294506.43.2.7 x86 Operand Modifiers
29451..............................
29452
29453References to input, output, and goto operands in the assembler template
29454of extended `asm' statements can use modifiers to affect the way the
29455operands are formatted in the code output to the assembler. For
29456example, the following code uses the `h' and `b' modifiers for x86:
29457
29458     uint16_t  num;
29459     asm volatile ("xchg %h0, %b0" : "+a" (num) );
29460
29461These modifiers generate this assembler code:
29462
29463     xchg %ah, %al
29464
29465 The rest of this discussion uses the following code for illustrative
29466purposes.
29467
29468     int main()
29469     {
29470        int iInt = 1;
29471
29472     top:
29473
29474        asm volatile goto ("some assembler instructions here"
29475        : /* No outputs. */
29476        : "q" (iInt), "X" (sizeof(unsigned char) + 1)
29477        : /* No clobbers. */
29478        : top);
29479     }
29480
29481 With no modifiers, this is what the output from the operands would be
29482for the `att' and `intel' dialects of assembler:
29483
29484Operand   masm=att   masm=intel
29485---------------------------------------
29486`%0'      `%eax'     `eax'
29487`%1'      `$2'       `2'
29488`%2'      `$.L2'     `OFFSET FLAT:.L2'
29489
29490 The table below shows the list of supported modifiers and their
29491effects.
29492
29493Modifier   Description                                  Operand   `masm=att' `masm=intel'
29494------------------------------------------------------------------------------------------
29495`z'        Print the opcode suffix for the size of the  `%z0'     `l'
29496           current integer operand (one of
29497           `b'/`w'/`l'/`q').
29498`b'        Print the QImode name of the register.       `%b0'     `%al'      `al'
29499`h'        Print the QImode name for a "high" register. `%h0'     `%ah'      `ah'
29500`w'        Print the HImode name of the register.       `%w0'     `%ax'      `ax'
29501`k'        Print the SImode name of the register.       `%k0'     `%eax'     `eax'
29502`q'        Print the DImode name of the register.       `%q0'     `%rax'     `rax'
29503`l'        Print the label name with no punctuation.    `%l2'     `.L2'      `.L2'
29504`c'        Require a constant operand and print the     `%c1'     `2'        `2'
29505           constant expression with no punctuation.
29506
295076.43.2.8 x86 Floating-Point `asm' Operands
29508..........................................
29509
29510On x86 targets, there are several rules on the usage of stack-like
29511registers in the operands of an `asm'.  These rules apply only to the
29512operands that are stack-like registers:
29513
29514  1. Given a set of input registers that die in an `asm', it is
29515     necessary to know which are implicitly popped by the `asm', and
29516     which must be explicitly popped by GCC.
29517
29518     An input register that is implicitly popped by the `asm' must be
29519     explicitly clobbered, unless it is constrained to match an output
29520     operand.
29521
29522  2. For any input register that is implicitly popped by an `asm', it is
29523     necessary to know how to adjust the stack to compensate for the
29524     pop.  If any non-popped input is closer to the top of the
29525     reg-stack than the implicitly popped register, it would not be
29526     possible to know what the stack looked like--it's not clear how
29527     the rest of the stack "slides up".
29528
29529     All implicitly popped input registers must be closer to the top of
29530     the reg-stack than any input that is not implicitly popped.
29531
29532     It is possible that if an input dies in an `asm', the compiler
29533     might use the input register for an output reload.  Consider this
29534     example:
29535
29536          asm ("foo" : "=t" (a) : "f" (b));
29537
29538     This code says that input `b' is not popped by the `asm', and that
29539     the `asm' pushes a result onto the reg-stack, i.e., the stack is
29540     one deeper after the `asm' than it was before.  But, it is
29541     possible that reload may think that it can use the same register
29542     for both the input and the output.
29543
29544     To prevent this from happening, if any input operand uses the `f'
29545     constraint, all output register constraints must use the `&'
29546     early-clobber modifier.
29547
29548     The example above is correctly written as:
29549
29550          asm ("foo" : "=&t" (a) : "f" (b));
29551
29552  3. Some operands need to be in particular places on the stack.  All
29553     output operands fall in this category--GCC has no other way to
29554     know which registers the outputs appear in unless you indicate
29555     this in the constraints.
29556
29557     Output operands must specifically indicate which register an output
29558     appears in after an `asm'.  `=f' is not allowed: the operand
29559     constraints must select a class with a single register.
29560
29561  4. Output operands may not be "inserted" between existing stack
29562     registers.  Since no 387 opcode uses a read/write operand, all
29563     output operands are dead before the `asm', and are pushed by the
29564     `asm'.  It makes no sense to push anywhere but the top of the
29565     reg-stack.
29566
29567     Output operands must start at the top of the reg-stack: output
29568     operands may not "skip" a register.
29569
29570  5. Some `asm' statements may need extra stack space for internal
29571     calculations.  This can be guaranteed by clobbering stack registers
29572     unrelated to the inputs and outputs.
29573
29574
29575 This `asm' takes one input, which is internally popped, and produces
29576two outputs.
29577
29578     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
29579
29580This `asm' takes two inputs, which are popped by the `fyl2xp1' opcode,
29581and replaces them with one output.  The `st(1)' clobber is necessary
29582for the compiler to know that `fyl2xp1' pops both inputs.
29583
29584     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
29585
29586
29587File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: Using Assembly Language with C
29588
295896.43.3 Constraints for `asm' Operands
29590-------------------------------------
29591
29592Here are specific details on what constraint letters you can use with
29593`asm' operands.  Constraints can say whether an operand may be in a
29594register, and which kinds of register; whether the operand can be a
29595memory reference, and which kinds of address; whether the operand may
29596be an immediate constant, and which possible values it may have.
29597Constraints can also require two operands to match.  Side-effects
29598aren't allowed in operands of inline `asm', unless `<' or `>'
29599constraints are used, because there is no guarantee that the
29600side-effects will happen exactly once in an instruction that can update
29601the addressing register.
29602
29603* Menu:
29604
29605* Simple Constraints::  Basic use of constraints.
29606* Multi-Alternative::   When an insn has two alternative constraint-patterns.
29607* Modifiers::           More precise control over effects of constraints.
29608* Machine Constraints:: Special constraints for some particular machines.
29609
29610
29611File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
29612
296136.43.3.1 Simple Constraints
29614...........................
29615
29616The simplest kind of constraint is a string full of letters, each of
29617which describes one kind of operand that is permitted.  Here are the
29618letters that are allowed:
29619
29620whitespace
29621     Whitespace characters are ignored and can be inserted at any
29622     position except the first.  This enables each alternative for
29623     different operands to be visually aligned in the machine
29624     description even if they have different number of constraints and
29625     modifiers.
29626
29627`m'
29628     A memory operand is allowed, with any kind of address that the
29629     machine supports in general.  Note that the letter used for the
29630     general memory constraint can be re-defined by a back end using
29631     the `TARGET_MEM_CONSTRAINT' macro.
29632
29633`o'
29634     A memory operand is allowed, but only if the address is
29635     "offsettable".  This means that adding a small integer (actually,
29636     the width in bytes of the operand, as determined by its machine
29637     mode) may be added to the address and the result is also a valid
29638     memory address.
29639
29640     For example, an address which is constant is offsettable; so is an
29641     address that is the sum of a register and a constant (as long as a
29642     slightly larger constant is also within the range of
29643     address-offsets supported by the machine); but an autoincrement or
29644     autodecrement address is not offsettable.  More complicated
29645     indirect/indexed addresses may or may not be offsettable depending
29646     on the other addressing modes that the machine supports.
29647
29648     Note that in an output operand which can be matched by another
29649     operand, the constraint letter `o' is valid only when accompanied
29650     by both `<' (if the target machine has predecrement addressing)
29651     and `>' (if the target machine has preincrement addressing).
29652
29653`V'
29654     A memory operand that is not offsettable.  In other words,
29655     anything that would fit the `m' constraint but not the `o'
29656     constraint.
29657
29658`<'
29659     A memory operand with autodecrement addressing (either
29660     predecrement or postdecrement) is allowed.  In inline `asm' this
29661     constraint is only allowed if the operand is used exactly once in
29662     an instruction that can handle the side-effects.  Not using an
29663     operand with `<' in constraint string in the inline `asm' pattern
29664     at all or using it in multiple instructions isn't valid, because
29665     the side-effects wouldn't be performed or would be performed more
29666     than once.  Furthermore, on some targets the operand with `<' in
29667     constraint string must be accompanied by special instruction
29668     suffixes like `%U0' instruction suffix on PowerPC or `%P0' on
29669     IA-64.
29670
29671`>'
29672     A memory operand with autoincrement addressing (either
29673     preincrement or postincrement) is allowed.  In inline `asm' the
29674     same restrictions as for `<' apply.
29675
29676`r'
29677     A register operand is allowed provided that it is in a general
29678     register.
29679
29680`i'
29681     An immediate integer operand (one with constant value) is allowed.
29682     This includes symbolic constants whose values will be known only at
29683     assembly time or later.
29684
29685`n'
29686     An immediate integer operand with a known numeric value is allowed.
29687     Many systems cannot support assembly-time constants for operands
29688     less than a word wide.  Constraints for these operands should use
29689     `n' rather than `i'.
29690
29691`I', `J', `K', ... `P'
29692     Other letters in the range `I' through `P' may be defined in a
29693     machine-dependent fashion to permit immediate integer operands with
29694     explicit integer values in specified ranges.  For example, on the
29695     68000, `I' is defined to stand for the range of values 1 to 8.
29696     This is the range permitted as a shift count in the shift
29697     instructions.
29698
29699`E'
29700     An immediate floating operand (expression code `const_double') is
29701     allowed, but only if the target floating point format is the same
29702     as that of the host machine (on which the compiler is running).
29703
29704`F'
29705     An immediate floating operand (expression code `const_double' or
29706     `const_vector') is allowed.
29707
29708`G', `H'
29709     `G' and `H' may be defined in a machine-dependent fashion to
29710     permit immediate floating operands in particular ranges of values.
29711
29712`s'
29713     An immediate integer operand whose value is not an explicit
29714     integer is allowed.
29715
29716     This might appear strange; if an insn allows a constant operand
29717     with a value not known at compile time, it certainly must allow
29718     any known value.  So why use `s' instead of `i'?  Sometimes it
29719     allows better code to be generated.
29720
29721     For example, on the 68000 in a fullword instruction it is possible
29722     to use an immediate operand; but if the immediate value is between
29723     -128 and 127, better code results from loading the value into a
29724     register and using the register.  This is because the load into
29725     the register can be done with a `moveq' instruction.  We arrange
29726     for this to happen by defining the letter `K' to mean "any integer
29727     outside the range -128 to 127", and then specifying `Ks' in the
29728     operand constraints.
29729
29730`g'
29731     Any register, memory or immediate integer operand is allowed,
29732     except for registers that are not general registers.
29733
29734`X'
29735     Any operand whatsoever is allowed.
29736
29737`0', `1', `2', ... `9'
29738     An operand that matches the specified operand number is allowed.
29739     If a digit is used together with letters within the same
29740     alternative, the digit should come last.
29741
29742     This number is allowed to be more than a single digit.  If multiple
29743     digits are encountered consecutively, they are interpreted as a
29744     single decimal integer.  There is scant chance for ambiguity,
29745     since to-date it has never been desirable that `10' be interpreted
29746     as matching either operand 1 _or_ operand 0.  Should this be
29747     desired, one can use multiple alternatives instead.
29748
29749     This is called a "matching constraint" and what it really means is
29750     that the assembler has only a single operand that fills two roles
29751     which `asm' distinguishes.  For example, an add instruction uses
29752     two input operands and an output operand, but on most CISC
29753     machines an add instruction really has only two operands, one of
29754     them an input-output operand:
29755
29756          addl #35,r12
29757
29758     Matching constraints are used in these circumstances.  More
29759     precisely, the two operands that match must include one input-only
29760     operand and one output-only operand.  Moreover, the digit must be a
29761     smaller number than the number of the operand that uses it in the
29762     constraint.
29763
29764`p'
29765     An operand that is a valid memory address is allowed.  This is for
29766     "load address" and "push address" instructions.
29767
29768     `p' in the constraint must be accompanied by `address_operand' as
29769     the predicate in the `match_operand'.  This predicate interprets
29770     the mode specified in the `match_operand' as the mode of the memory
29771     reference for which the address would be valid.
29772
29773OTHER-LETTERS
29774     Other letters can be defined in machine-dependent fashion to stand
29775     for particular classes of registers or other arbitrary operand
29776     types.  `d', `a' and `f' are defined on the 68000/68020 to stand
29777     for data, address and floating point registers.
29778
29779
29780File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
29781
297826.43.3.2 Multiple Alternative Constraints
29783.........................................
29784
29785Sometimes a single instruction has multiple alternative sets of possible
29786operands.  For example, on the 68000, a logical-or instruction can
29787combine register or an immediate value into memory, or it can combine
29788any kind of operand into a register; but it cannot combine one memory
29789location into another.
29790
29791 These constraints are represented as multiple alternatives.  An
29792alternative can be described by a series of letters for each operand.
29793The overall constraint for an operand is made from the letters for this
29794operand from the first alternative, a comma, the letters for this
29795operand from the second alternative, a comma, and so on until the last
29796alternative.
29797
29798 If all the operands fit any one alternative, the instruction is valid.
29799Otherwise, for each alternative, the compiler counts how many
29800instructions must be added to copy the operands so that that
29801alternative applies.  The alternative requiring the least copying is
29802chosen.  If two alternatives need the same amount of copying, the one
29803that comes first is chosen.  These choices can be altered with the `?'
29804and `!' characters:
29805
29806`?'
29807     Disparage slightly the alternative that the `?' appears in, as a
29808     choice when no alternative applies exactly.  The compiler regards
29809     this alternative as one unit more costly for each `?' that appears
29810     in it.
29811
29812`!'
29813     Disparage severely the alternative that the `!' appears in.  This
29814     alternative can still be used if it fits without reloading, but if
29815     reloading is needed, some other alternative will be used.
29816
29817`^'
29818     This constraint is analogous to `?' but it disparages slightly the
29819     alternative only if the operand with the `^' needs a reload.
29820
29821`$'
29822     This constraint is analogous to `!' but it disparages severely the
29823     alternative only if the operand with the `$' needs a reload.
29824
29825
29826File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
29827
298286.43.3.3 Constraint Modifier Characters
29829.......................................
29830
29831Here are constraint modifier characters.
29832
29833`='
29834     Means that this operand is written to by this instruction: the
29835     previous value is discarded and replaced by new data.
29836
29837`+'
29838     Means that this operand is both read and written by the
29839     instruction.
29840
29841     When the compiler fixes up the operands to satisfy the constraints,
29842     it needs to know which operands are read by the instruction and
29843     which are written by it.  `=' identifies an operand which is only
29844     written; `+' identifies an operand that is both read and written;
29845     all other operands are assumed to only be read.
29846
29847     If you specify `=' or `+' in a constraint, you put it in the first
29848     character of the constraint string.
29849
29850`&'
29851     Means (in a particular alternative) that this operand is an
29852     "earlyclobber" operand, which is written before the instruction is
29853     finished using the input operands.  Therefore, this operand may
29854     not lie in a register that is read by the instruction or as part
29855     of any memory address.
29856
29857     `&' applies only to the alternative in which it is written.  In
29858     constraints with multiple alternatives, sometimes one alternative
29859     requires `&' while others do not.  See, for example, the `movdf'
29860     insn of the 68000.
29861
29862     A operand which is read by the instruction can be tied to an
29863     earlyclobber operand if its only use as an input occurs before the
29864     early result is written.  Adding alternatives of this form often
29865     allows GCC to produce better code when only some of the read
29866     operands can be affected by the earlyclobber. See, for example,
29867     the `mulsi3' insn of the ARM.
29868
29869     Furthermore, if the "earlyclobber" operand is also a read/write
29870     operand, then that operand is written only after it's used.
29871
29872     `&' does not obviate the need to write `=' or `+'.  As
29873     "earlyclobber" operands are always written, a read-only
29874     "earlyclobber" operand is ill-formed and will be rejected by the
29875     compiler.
29876
29877`%'
29878     Declares the instruction to be commutative for this operand and the
29879     following operand.  This means that the compiler may interchange
29880     the two operands if that is the cheapest way to make all operands
29881     fit the constraints.  `%' applies to all alternatives and must
29882     appear as the first character in the constraint.  Only read-only
29883     operands can use `%'.
29884
29885     GCC can only handle one commutative pair in an asm; if you use
29886     more, the compiler may fail.  Note that you need not use the
29887     modifier if the two alternatives are strictly identical; this
29888     would only waste time in the reload pass.  The modifier is not
29889     operational after register allocation, so the result of
29890     `define_peephole2' and `define_split's performed after reload
29891     cannot rely on `%' to make the intended insn match.
29892
29893`#'
29894     Says that all following characters, up to the next comma, are to be
29895     ignored as a constraint.  They are significant only for choosing
29896     register preferences.
29897
29898`*'
29899     Says that the following character should be ignored when choosing
29900     register preferences.  `*' has no effect on the meaning of the
29901     constraint as a constraint, and no effect on reloading.  For LRA
29902     `*' additionally disparages slightly the alternative if the
29903     following character matches the operand.
29904
29905
29906
29907File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
29908
299096.43.3.4 Constraints for Particular Machines
29910............................................
29911
29912Whenever possible, you should use the general-purpose constraint letters
29913in `asm' arguments, since they will convey meaning more readily to
29914people reading your code.  Failing that, use the constraint letters
29915that usually have very similar meanings across architectures.  The most
29916commonly used constraints are `m' and `r' (for memory and
29917general-purpose registers respectively; *note Simple Constraints::), and
29918`I', usually the letter indicating the most common immediate-constant
29919format.
29920
29921 Each architecture defines additional constraints.  These constraints
29922are used by the compiler itself for instruction generation, as well as
29923for `asm' statements; therefore, some of the constraints are not
29924particularly useful for `asm'.  Here is a summary of some of the
29925machine-dependent constraints available on some particular machines; it
29926includes both constraints that are useful for `asm' and constraints
29927that aren't.  The compiler source file mentioned in the table heading
29928for each architecture is the definitive reference for the meanings of
29929that architecture's constraints.
29930
29931_AArch64 family--`config/aarch64/constraints.md'_
29932
29933    `k'
29934          The stack pointer register (`SP')
29935
29936    `w'
29937          Floating point or SIMD vector register
29938
29939    `I'
29940          Integer constant that is valid as an immediate operand in an
29941          `ADD' instruction
29942
29943    `J'
29944          Integer constant that is valid as an immediate operand in a
29945          `SUB' instruction (once negated)
29946
29947    `K'
29948          Integer constant that can be used with a 32-bit logical
29949          instruction
29950
29951    `L'
29952          Integer constant that can be used with a 64-bit logical
29953          instruction
29954
29955    `M'
29956          Integer constant that is valid as an immediate operand in a
29957          32-bit `MOV' pseudo instruction. The `MOV' may be assembled
29958          to one of several different machine instructions depending on
29959          the value
29960
29961    `N'
29962          Integer constant that is valid as an immediate operand in a
29963          64-bit `MOV' pseudo instruction
29964
29965    `S'
29966          An absolute symbolic address or a label reference
29967
29968    `Y'
29969          Floating point constant zero
29970
29971    `Z'
29972          Integer constant zero
29973
29974    `Ush'
29975          The high part (bits 12 and upwards) of the pc-relative
29976          address of a symbol within 4GB of the instruction
29977
29978    `Q'
29979          A memory address which uses a single base register with no
29980          offset
29981
29982    `Ump'
29983          A memory address suitable for a load/store pair instruction
29984          in SI, DI, SF and DF modes
29985
29986
29987_ARC --`config/arc/constraints.md'_
29988
29989    `q'
29990          Registers usable in ARCompact 16-bit instructions: `r0'-`r3',
29991          `r12'-`r15'.  This constraint can only match when the `-mq'
29992          option is in effect.
29993
29994    `e'
29995          Registers usable as base-regs of memory addresses in
29996          ARCompact 16-bit memory instructions: `r0'-`r3', `r12'-`r15',
29997          `sp'.  This constraint can only match when the `-mq' option
29998          is in effect.
29999
30000    `D'
30001          ARC FPX (dpfp) 64-bit registers. `D0', `D1'.
30002
30003    `I'
30004          A signed 12-bit integer constant.
30005
30006    `Cal'
30007          constant for arithmetic/logical operations.  This might be
30008          any constant that can be put into a long immediate by the
30009          assmbler or linker without involving a PIC relocation.
30010
30011    `K'
30012          A 3-bit unsigned integer constant.
30013
30014    `L'
30015          A 6-bit unsigned integer constant.
30016
30017    `CnL'
30018          One's complement of a 6-bit unsigned integer constant.
30019
30020    `CmL'
30021          Two's complement of a 6-bit unsigned integer constant.
30022
30023    `M'
30024          A 5-bit unsigned integer constant.
30025
30026    `O'
30027          A 7-bit unsigned integer constant.
30028
30029    `P'
30030          A 8-bit unsigned integer constant.
30031
30032    `H'
30033          Any const_double value.
30034
30035_ARM family--`config/arm/constraints.md'_
30036
30037    `h'
30038          In Thumb state, the core registers `r8'-`r15'.
30039
30040    `k'
30041          The stack pointer register.
30042
30043    `l'
30044          In Thumb State the core registers `r0'-`r7'.  In ARM state
30045          this is an alias for the `r' constraint.
30046
30047    `t'
30048          VFP floating-point registers `s0'-`s31'.  Used for 32 bit
30049          values.
30050
30051    `w'
30052          VFP floating-point registers `d0'-`d31' and the appropriate
30053          subset `d0'-`d15' based on command line options.  Used for 64
30054          bit values only.  Not valid for Thumb1.
30055
30056    `y'
30057          The iWMMX co-processor registers.
30058
30059    `z'
30060          The iWMMX GR registers.
30061
30062    `G'
30063          The floating-point constant 0.0
30064
30065    `I'
30066          Integer that is valid as an immediate operand in a data
30067          processing instruction.  That is, an integer in the range 0
30068          to 255 rotated by a multiple of 2
30069
30070    `J'
30071          Integer in the range -4095 to 4095
30072
30073    `K'
30074          Integer that satisfies constraint `I' when inverted (ones
30075          complement)
30076
30077    `L'
30078          Integer that satisfies constraint `I' when negated (twos
30079          complement)
30080
30081    `M'
30082          Integer in the range 0 to 32
30083
30084    `Q'
30085          A memory reference where the exact address is in a single
30086          register (``m'' is preferable for `asm' statements)
30087
30088    `R'
30089          An item in the constant pool
30090
30091    `S'
30092          A symbol in the text segment of the current file
30093
30094    `Uv'
30095          A memory reference suitable for VFP load/store insns
30096          (reg+constant offset)
30097
30098    `Uy'
30099          A memory reference suitable for iWMMXt load/store
30100          instructions.
30101
30102    `Uq'
30103          A memory reference suitable for the ARMv4 ldrsb instruction.
30104
30105_AVR family--`config/avr/constraints.md'_
30106
30107    `l'
30108          Registers from r0 to r15
30109
30110    `a'
30111          Registers from r16 to r23
30112
30113    `d'
30114          Registers from r16 to r31
30115
30116    `w'
30117          Registers from r24 to r31.  These registers can be used in
30118          `adiw' command
30119
30120    `e'
30121          Pointer register (r26-r31)
30122
30123    `b'
30124          Base pointer register (r28-r31)
30125
30126    `q'
30127          Stack pointer register (SPH:SPL)
30128
30129    `t'
30130          Temporary register r0
30131
30132    `x'
30133          Register pair X (r27:r26)
30134
30135    `y'
30136          Register pair Y (r29:r28)
30137
30138    `z'
30139          Register pair Z (r31:r30)
30140
30141    `I'
30142          Constant greater than -1, less than 64
30143
30144    `J'
30145          Constant greater than -64, less than 1
30146
30147    `K'
30148          Constant integer 2
30149
30150    `L'
30151          Constant integer 0
30152
30153    `M'
30154          Constant that fits in 8 bits
30155
30156    `N'
30157          Constant integer -1
30158
30159    `O'
30160          Constant integer 8, 16, or 24
30161
30162    `P'
30163          Constant integer 1
30164
30165    `G'
30166          A floating point constant 0.0
30167
30168    `Q'
30169          A memory address based on Y or Z pointer with displacement.
30170
30171_Blackfin family--`config/bfin/constraints.md'_
30172
30173    `a'
30174          P register
30175
30176    `d'
30177          D register
30178
30179    `z'
30180          A call clobbered P register.
30181
30182    `qN'
30183          A single register.  If N is in the range 0 to 7, the
30184          corresponding D register.  If it is `A', then the register P0.
30185
30186    `D'
30187          Even-numbered D register
30188
30189    `W'
30190          Odd-numbered D register
30191
30192    `e'
30193          Accumulator register.
30194
30195    `A'
30196          Even-numbered accumulator register.
30197
30198    `B'
30199          Odd-numbered accumulator register.
30200
30201    `b'
30202          I register
30203
30204    `v'
30205          B register
30206
30207    `f'
30208          M register
30209
30210    `c'
30211          Registers used for circular buffering, i.e. I, B, or L
30212          registers.
30213
30214    `C'
30215          The CC register.
30216
30217    `t'
30218          LT0 or LT1.
30219
30220    `k'
30221          LC0 or LC1.
30222
30223    `u'
30224          LB0 or LB1.
30225
30226    `x'
30227          Any D, P, B, M, I or L register.
30228
30229    `y'
30230          Additional registers typically used only in prologues and
30231          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
30232          USP.
30233
30234    `w'
30235          Any register except accumulators or CC.
30236
30237    `Ksh'
30238          Signed 16 bit integer (in the range -32768 to 32767)
30239
30240    `Kuh'
30241          Unsigned 16 bit integer (in the range 0 to 65535)
30242
30243    `Ks7'
30244          Signed 7 bit integer (in the range -64 to 63)
30245
30246    `Ku7'
30247          Unsigned 7 bit integer (in the range 0 to 127)
30248
30249    `Ku5'
30250          Unsigned 5 bit integer (in the range 0 to 31)
30251
30252    `Ks4'
30253          Signed 4 bit integer (in the range -8 to 7)
30254
30255    `Ks3'
30256          Signed 3 bit integer (in the range -3 to 4)
30257
30258    `Ku3'
30259          Unsigned 3 bit integer (in the range 0 to 7)
30260
30261    `PN'
30262          Constant N, where N is a single-digit constant in the range 0
30263          to 4.
30264
30265    `PA'
30266          An integer equal to one of the MACFLAG_XXX constants that is
30267          suitable for use with either accumulator.
30268
30269    `PB'
30270          An integer equal to one of the MACFLAG_XXX constants that is
30271          suitable for use only with accumulator A1.
30272
30273    `M1'
30274          Constant 255.
30275
30276    `M2'
30277          Constant 65535.
30278
30279    `J'
30280          An integer constant with exactly a single bit set.
30281
30282    `L'
30283          An integer constant with all bits set except exactly one.
30284
30285    `H'
30286
30287    `Q'
30288          Any SYMBOL_REF.
30289
30290_CR16 Architecture--`config/cr16/cr16.h'_
30291
30292    `b'
30293          Registers from r0 to r14 (registers without stack pointer)
30294
30295    `t'
30296          Register from r0 to r11 (all 16-bit registers)
30297
30298    `p'
30299          Register from r12 to r15 (all 32-bit registers)
30300
30301    `I'
30302          Signed constant that fits in 4 bits
30303
30304    `J'
30305          Signed constant that fits in 5 bits
30306
30307    `K'
30308          Signed constant that fits in 6 bits
30309
30310    `L'
30311          Unsigned constant that fits in 4 bits
30312
30313    `M'
30314          Signed constant that fits in 32 bits
30315
30316    `N'
30317          Check for 64 bits wide constants for add/sub instructions
30318
30319    `G'
30320          Floating point constant that is legal for store immediate
30321
30322_Epiphany--`config/epiphany/constraints.md'_
30323
30324    `U16'
30325          An unsigned 16-bit constant.
30326
30327    `K'
30328          An unsigned 5-bit constant.
30329
30330    `L'
30331          A signed 11-bit constant.
30332
30333    `Cm1'
30334          A signed 11-bit constant added to -1.  Can only match when
30335          the `-m1reg-REG' option is active.
30336
30337    `Cl1'
30338          Left-shift of -1, i.e., a bit mask with a block of leading
30339          ones, the rest being a block of trailing zeroes.  Can only
30340          match when the `-m1reg-REG' option is active.
30341
30342    `Cr1'
30343          Right-shift of -1, i.e., a bit mask with a trailing block of
30344          ones, the rest being zeroes.  Or to put it another way, one
30345          less than a power of two.  Can only match when the
30346          `-m1reg-REG' option is active.
30347
30348    `Cal'
30349          Constant for arithmetic/logical operations.  This is like
30350          `i', except that for position independent code, no symbols /
30351          expressions needing relocations are allowed.
30352
30353    `Csy'
30354          Symbolic constant for call/jump instruction.
30355
30356    `Rcs'
30357          The register class usable in short insns.  This is a register
30358          class constraint, and can thus drive register allocation.
30359          This constraint won't match unless `-mprefer-short-insn-regs'
30360          is in effect.
30361
30362    `Rsc'
30363          The the register class of registers that can be used to hold a
30364          sibcall call address.  I.e., a caller-saved register.
30365
30366    `Rct'
30367          Core control register class.
30368
30369    `Rgs'
30370          The register group usable in short insns.  This constraint
30371          does not use a register class, so that it only passively
30372          matches suitable registers, and doesn't drive register
30373          allocation.
30374
30375    `Rra'
30376          Matches the return address if it can be replaced with the
30377          link register.
30378
30379    `Rcc'
30380          Matches the integer condition code register.
30381
30382    `Sra'
30383          Matches the return address if it is in a stack slot.
30384
30385    `Cfm'
30386          Matches control register values to switch fp mode, which are
30387          encapsulated in `UNSPEC_FP_MODE'.
30388
30389_FRV--`config/frv/frv.h'_
30390
30391    `a'
30392          Register in the class `ACC_REGS' (`acc0' to `acc7').
30393
30394    `b'
30395          Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
30396
30397    `c'
30398          Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
30399          to `icc3').
30400
30401    `d'
30402          Register in the class `GPR_REGS' (`gr0' to `gr63').
30403
30404    `e'
30405          Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
30406          registers are excluded not in the class but through the use
30407          of a machine mode larger than 4 bytes.
30408
30409    `f'
30410          Register in the class `FPR_REGS' (`fr0' to `fr63').
30411
30412    `h'
30413          Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
30414          registers are excluded not in the class but through the use
30415          of a machine mode larger than 4 bytes.
30416
30417    `l'
30418          Register in the class `LR_REG' (the `lr' register).
30419
30420    `q'
30421          Register in the class `QUAD_REGS' (`gr2' to `gr63').
30422          Register numbers not divisible by 4 are excluded not in the
30423          class but through the use of a machine mode larger than 8
30424          bytes.
30425
30426    `t'
30427          Register in the class `ICC_REGS' (`icc0' to `icc3').
30428
30429    `u'
30430          Register in the class `FCC_REGS' (`fcc0' to `fcc3').
30431
30432    `v'
30433          Register in the class `ICR_REGS' (`cc4' to `cc7').
30434
30435    `w'
30436          Register in the class `FCR_REGS' (`cc0' to `cc3').
30437
30438    `x'
30439          Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
30440          Register numbers not divisible by 4 are excluded not in the
30441          class but through the use of a machine mode larger than 8
30442          bytes.
30443
30444    `z'
30445          Register in the class `SPR_REGS' (`lcr' and `lr').
30446
30447    `A'
30448          Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
30449
30450    `B'
30451          Register in the class `ACCG_REGS' (`accg0' to `accg7').
30452
30453    `C'
30454          Register in the class `CR_REGS' (`cc0' to `cc7').
30455
30456    `G'
30457          Floating point constant zero
30458
30459    `I'
30460          6-bit signed integer constant
30461
30462    `J'
30463          10-bit signed integer constant
30464
30465    `L'
30466          16-bit signed integer constant
30467
30468    `M'
30469          16-bit unsigned integer constant
30470
30471    `N'
30472          12-bit signed integer constant that is negative--i.e. in the
30473          range of -2048 to -1
30474
30475    `O'
30476          Constant zero
30477
30478    `P'
30479          12-bit signed integer constant that is greater than
30480          zero--i.e. in the range of 1 to 2047.
30481
30482
30483_Hewlett-Packard PA-RISC--`config/pa/pa.h'_
30484
30485    `a'
30486          General register 1
30487
30488    `f'
30489          Floating point register
30490
30491    `q'
30492          Shift amount register
30493
30494    `x'
30495          Floating point register (deprecated)
30496
30497    `y'
30498          Upper floating point register (32-bit), floating point
30499          register (64-bit)
30500
30501    `Z'
30502          Any register
30503
30504    `I'
30505          Signed 11-bit integer constant
30506
30507    `J'
30508          Signed 14-bit integer constant
30509
30510    `K'
30511          Integer constant that can be deposited with a `zdepi'
30512          instruction
30513
30514    `L'
30515          Signed 5-bit integer constant
30516
30517    `M'
30518          Integer constant 0
30519
30520    `N'
30521          Integer constant that can be loaded with a `ldil' instruction
30522
30523    `O'
30524          Integer constant whose value plus one is a power of 2
30525
30526    `P'
30527          Integer constant that can be used for `and' operations in
30528          `depi' and `extru' instructions
30529
30530    `S'
30531          Integer constant 31
30532
30533    `U'
30534          Integer constant 63
30535
30536    `G'
30537          Floating-point constant 0.0
30538
30539    `A'
30540          A `lo_sum' data-linkage-table memory operand
30541
30542    `Q'
30543          A memory operand that can be used as the destination operand
30544          of an integer store instruction
30545
30546    `R'
30547          A scaled or unscaled indexed memory operand
30548
30549    `T'
30550          A memory operand for floating-point loads and stores
30551
30552    `W'
30553          A register indirect memory operand
30554
30555_Intel IA-64--`config/ia64/ia64.h'_
30556
30557    `a'
30558          General register `r0' to `r3' for `addl' instruction
30559
30560    `b'
30561          Branch register
30562
30563    `c'
30564          Predicate register (`c' as in "conditional")
30565
30566    `d'
30567          Application register residing in M-unit
30568
30569    `e'
30570          Application register residing in I-unit
30571
30572    `f'
30573          Floating-point register
30574
30575    `m'
30576          Memory operand.  If used together with `<' or `>', the
30577          operand can have postincrement and postdecrement which
30578          require printing with `%Pn' on IA-64.
30579
30580    `G'
30581          Floating-point constant 0.0 or 1.0
30582
30583    `I'
30584          14-bit signed integer constant
30585
30586    `J'
30587          22-bit signed integer constant
30588
30589    `K'
30590          8-bit signed integer constant for logical instructions
30591
30592    `L'
30593          8-bit adjusted signed integer constant for compare pseudo-ops
30594
30595    `M'
30596          6-bit unsigned integer constant for shift counts
30597
30598    `N'
30599          9-bit signed integer constant for load and store
30600          postincrements
30601
30602    `O'
30603          The constant zero
30604
30605    `P'
30606          0 or -1 for `dep' instruction
30607
30608    `Q'
30609          Non-volatile memory for floating-point loads and stores
30610
30611    `R'
30612          Integer constant in the range 1 to 4 for `shladd' instruction
30613
30614    `S'
30615          Memory operand except postincrement and postdecrement.  This
30616          is now roughly the same as `m' when not used together with `<'
30617          or `>'.
30618
30619_M32C--`config/m32c/m32c.c'_
30620
30621    `Rsp'
30622    `Rfb'
30623    `Rsb'
30624          `$sp', `$fb', `$sb'.
30625
30626    `Rcr'
30627          Any control register, when they're 16 bits wide (nothing if
30628          control registers are 24 bits wide)
30629
30630    `Rcl'
30631          Any control register, when they're 24 bits wide.
30632
30633    `R0w'
30634    `R1w'
30635    `R2w'
30636    `R3w'
30637          $r0, $r1, $r2, $r3.
30638
30639    `R02'
30640          $r0 or $r2, or $r2r0 for 32 bit values.
30641
30642    `R13'
30643          $r1 or $r3, or $r3r1 for 32 bit values.
30644
30645    `Rdi'
30646          A register that can hold a 64 bit value.
30647
30648    `Rhl'
30649          $r0 or $r1 (registers with addressable high/low bytes)
30650
30651    `R23'
30652          $r2 or $r3
30653
30654    `Raa'
30655          Address registers
30656
30657    `Raw'
30658          Address registers when they're 16 bits wide.
30659
30660    `Ral'
30661          Address registers when they're 24 bits wide.
30662
30663    `Rqi'
30664          Registers that can hold QI values.
30665
30666    `Rad'
30667          Registers that can be used with displacements ($a0, $a1, $sb).
30668
30669    `Rsi'
30670          Registers that can hold 32 bit values.
30671
30672    `Rhi'
30673          Registers that can hold 16 bit values.
30674
30675    `Rhc'
30676          Registers chat can hold 16 bit values, including all control
30677          registers.
30678
30679    `Rra'
30680          $r0 through R1, plus $a0 and $a1.
30681
30682    `Rfl'
30683          The flags register.
30684
30685    `Rmm'
30686          The memory-based pseudo-registers $mem0 through $mem15.
30687
30688    `Rpi'
30689          Registers that can hold pointers (16 bit registers for r8c,
30690          m16c; 24 bit registers for m32cm, m32c).
30691
30692    `Rpa'
30693          Matches multiple registers in a PARALLEL to form a larger
30694          register.  Used to match function return values.
30695
30696    `Is3'
30697          -8 ... 7
30698
30699    `IS1'
30700          -128 ... 127
30701
30702    `IS2'
30703          -32768 ... 32767
30704
30705    `IU2'
30706          0 ... 65535
30707
30708    `In4'
30709          -8 ... -1 or 1 ... 8
30710
30711    `In5'
30712          -16 ... -1 or 1 ... 16
30713
30714    `In6'
30715          -32 ... -1 or 1 ... 32
30716
30717    `IM2'
30718          -65536 ... -1
30719
30720    `Ilb'
30721          An 8 bit value with exactly one bit set.
30722
30723    `Ilw'
30724          A 16 bit value with exactly one bit set.
30725
30726    `Sd'
30727          The common src/dest memory addressing modes.
30728
30729    `Sa'
30730          Memory addressed using $a0 or $a1.
30731
30732    `Si'
30733          Memory addressed with immediate addresses.
30734
30735    `Ss'
30736          Memory addressed using the stack pointer ($sp).
30737
30738    `Sf'
30739          Memory addressed using the frame base register ($fb).
30740
30741    `Ss'
30742          Memory addressed using the small base register ($sb).
30743
30744    `S1'
30745          $r1h
30746
30747_MeP--`config/mep/constraints.md'_
30748
30749    `a'
30750          The $sp register.
30751
30752    `b'
30753          The $tp register.
30754
30755    `c'
30756          Any control register.
30757
30758    `d'
30759          Either the $hi or the $lo register.
30760
30761    `em'
30762          Coprocessor registers that can be directly loaded ($c0-$c15).
30763
30764    `ex'
30765          Coprocessor registers that can be moved to each other.
30766
30767    `er'
30768          Coprocessor registers that can be moved to core registers.
30769
30770    `h'
30771          The $hi register.
30772
30773    `j'
30774          The $rpc register.
30775
30776    `l'
30777          The $lo register.
30778
30779    `t'
30780          Registers which can be used in $tp-relative addressing.
30781
30782    `v'
30783          The $gp register.
30784
30785    `x'
30786          The coprocessor registers.
30787
30788    `y'
30789          The coprocessor control registers.
30790
30791    `z'
30792          The $0 register.
30793
30794    `A'
30795          User-defined register set A.
30796
30797    `B'
30798          User-defined register set B.
30799
30800    `C'
30801          User-defined register set C.
30802
30803    `D'
30804          User-defined register set D.
30805
30806    `I'
30807          Offsets for $gp-rel addressing.
30808
30809    `J'
30810          Constants that can be used directly with boolean insns.
30811
30812    `K'
30813          Constants that can be moved directly to registers.
30814
30815    `L'
30816          Small constants that can be added to registers.
30817
30818    `M'
30819          Long shift counts.
30820
30821    `N'
30822          Small constants that can be compared to registers.
30823
30824    `O'
30825          Constants that can be loaded into the top half of registers.
30826
30827    `S'
30828          Signed 8-bit immediates.
30829
30830    `T'
30831          Symbols encoded for $tp-rel or $gp-rel addressing.
30832
30833    `U'
30834          Non-constant addresses for loading/saving coprocessor
30835          registers.
30836
30837    `W'
30838          The top half of a symbol's value.
30839
30840    `Y'
30841          A register indirect address without offset.
30842
30843    `Z'
30844          Symbolic references to the control bus.
30845
30846
30847_MicroBlaze--`config/microblaze/constraints.md'_
30848
30849    `d'
30850          A general register (`r0' to `r31').
30851
30852    `z'
30853          A status register (`rmsr', `$fcc1' to `$fcc7').
30854
30855
30856_MIPS--`config/mips/constraints.md'_
30857
30858    `d'
30859          An address register.  This is equivalent to `r' unless
30860          generating MIPS16 code.
30861
30862    `f'
30863          A floating-point register (if available).
30864
30865    `h'
30866          Formerly the `hi' register.  This constraint is no longer
30867          supported.
30868
30869    `l'
30870          The `lo' register.  Use this register to store values that are
30871          no bigger than a word.
30872
30873    `x'
30874          The concatenated `hi' and `lo' registers.  Use this register
30875          to store doubleword values.
30876
30877    `c'
30878          A register suitable for use in an indirect jump.  This will
30879          always be `$25' for `-mabicalls'.
30880
30881    `v'
30882          Register `$3'.  Do not use this constraint in new code; it is
30883          retained only for compatibility with glibc.
30884
30885    `y'
30886          Equivalent to `r'; retained for backwards compatibility.
30887
30888    `z'
30889          A floating-point condition code register.
30890
30891    `I'
30892          A signed 16-bit constant (for arithmetic instructions).
30893
30894    `J'
30895          Integer zero.
30896
30897    `K'
30898          An unsigned 16-bit constant (for logic instructions).
30899
30900    `L'
30901          A signed 32-bit constant in which the lower 16 bits are zero.
30902          Such constants can be loaded using `lui'.
30903
30904    `M'
30905          A constant that cannot be loaded using `lui', `addiu' or
30906          `ori'.
30907
30908    `N'
30909          A constant in the range -65535 to -1 (inclusive).
30910
30911    `O'
30912          A signed 15-bit constant.
30913
30914    `P'
30915          A constant in the range 1 to 65535 (inclusive).
30916
30917    `G'
30918          Floating-point zero.
30919
30920    `R'
30921          An address that can be used in a non-macro load or store.
30922
30923    `ZC'
30924          A memory operand whose address is formed by a base register
30925          and offset that is suitable for use in instructions with the
30926          same addressing mode as `ll' and `sc'.
30927
30928    `ZD'
30929          An address suitable for a `prefetch' instruction, or for any
30930          other instruction with the same addressing mode as `prefetch'.
30931
30932_Motorola 680x0--`config/m68k/constraints.md'_
30933
30934    `a'
30935          Address register
30936
30937    `d'
30938          Data register
30939
30940    `f'
30941          68881 floating-point register, if available
30942
30943    `I'
30944          Integer in the range 1 to 8
30945
30946    `J'
30947          16-bit signed number
30948
30949    `K'
30950          Signed number whose magnitude is greater than 0x80
30951
30952    `L'
30953          Integer in the range -8 to -1
30954
30955    `M'
30956          Signed number whose magnitude is greater than 0x100
30957
30958    `N'
30959          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate
30960
30961    `O'
30962          16 (for rotate using swap)
30963
30964    `P'
30965          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate
30966
30967    `R'
30968          Numbers that mov3q can handle
30969
30970    `G'
30971          Floating point constant that is not a 68881 constant
30972
30973    `S'
30974          Operands that satisfy 'm' when -mpcrel is in effect
30975
30976    `T'
30977          Operands that satisfy 's' when -mpcrel is not in effect
30978
30979    `Q'
30980          Address register indirect addressing mode
30981
30982    `U'
30983          Register offset addressing
30984
30985    `W'
30986          const_call_operand
30987
30988    `Cs'
30989          symbol_ref or const
30990
30991    `Ci'
30992          const_int
30993
30994    `C0'
30995          const_int 0
30996
30997    `Cj'
30998          Range of signed numbers that don't fit in 16 bits
30999
31000    `Cmvq'
31001          Integers valid for mvq
31002
31003    `Capsw'
31004          Integers valid for a moveq followed by a swap
31005
31006    `Cmvz'
31007          Integers valid for mvz
31008
31009    `Cmvs'
31010          Integers valid for mvs
31011
31012    `Ap'
31013          push_operand
31014
31015    `Ac'
31016          Non-register operands allowed in clr
31017
31018
31019_Moxie--`config/moxie/constraints.md'_
31020
31021    `A'
31022          An absolute address
31023
31024    `B'
31025          An offset address
31026
31027    `W'
31028          A register indirect memory operand
31029
31030    `I'
31031          A constant in the range of 0 to 255.
31032
31033    `N'
31034          A constant in the range of 0 to -255.
31035
31036
31037_MSP430-`config/msp430/constraints.md'_
31038
31039    `R12'
31040          Register R12.
31041
31042    `R13'
31043          Register R13.
31044
31045    `K'
31046          Integer constant 1.
31047
31048    `L'
31049          Integer constant -1^20..1^19.
31050
31051    `M'
31052          Integer constant 1-4.
31053
31054    `Ya'
31055          Memory references which do not require an extended MOVX
31056          instruction.
31057
31058    `Yl'
31059          Memory reference, labels only.
31060
31061    `Ys'
31062          Memory reference, stack only.
31063
31064
31065_NDS32--`config/nds32/constraints.md'_
31066
31067    `w'
31068          LOW register class $r0 to $r7 constraint for V3/V3M ISA.
31069
31070    `l'
31071          LOW register class $r0 to $r7.
31072
31073    `d'
31074          MIDDLE register class $r0 to $r11, $r16 to $r19.
31075
31076    `h'
31077          HIGH register class $r12 to $r14, $r20 to $r31.
31078
31079    `t'
31080          Temporary assist register $ta (i.e. $r15).
31081
31082    `k'
31083          Stack register $sp.
31084
31085    `Iu03'
31086          Unsigned immediate 3-bit value.
31087
31088    `In03'
31089          Negative immediate 3-bit value in the range of -7-0.
31090
31091    `Iu04'
31092          Unsigned immediate 4-bit value.
31093
31094    `Is05'
31095          Signed immediate 5-bit value.
31096
31097    `Iu05'
31098          Unsigned immediate 5-bit value.
31099
31100    `In05'
31101          Negative immediate 5-bit value in the range of -31-0.
31102
31103    `Ip05'
31104          Unsigned immediate 5-bit value for movpi45 instruction with
31105          range 16-47.
31106
31107    `Iu06'
31108          Unsigned immediate 6-bit value constraint for addri36.sp
31109          instruction.
31110
31111    `Iu08'
31112          Unsigned immediate 8-bit value.
31113
31114    `Iu09'
31115          Unsigned immediate 9-bit value.
31116
31117    `Is10'
31118          Signed immediate 10-bit value.
31119
31120    `Is11'
31121          Signed immediate 11-bit value.
31122
31123    `Is15'
31124          Signed immediate 15-bit value.
31125
31126    `Iu15'
31127          Unsigned immediate 15-bit value.
31128
31129    `Ic15'
31130          A constant which is not in the range of imm15u but ok for
31131          bclr instruction.
31132
31133    `Ie15'
31134          A constant which is not in the range of imm15u but ok for
31135          bset instruction.
31136
31137    `It15'
31138          A constant which is not in the range of imm15u but ok for
31139          btgl instruction.
31140
31141    `Ii15'
31142          A constant whose compliment value is in the range of imm15u
31143          and ok for bitci instruction.
31144
31145    `Is16'
31146          Signed immediate 16-bit value.
31147
31148    `Is17'
31149          Signed immediate 17-bit value.
31150
31151    `Is19'
31152          Signed immediate 19-bit value.
31153
31154    `Is20'
31155          Signed immediate 20-bit value.
31156
31157    `Ihig'
31158          The immediate value that can be simply set high 20-bit.
31159
31160    `Izeb'
31161          The immediate value 0xff.
31162
31163    `Izeh'
31164          The immediate value 0xffff.
31165
31166    `Ixls'
31167          The immediate value 0x01.
31168
31169    `Ix11'
31170          The immediate value 0x7ff.
31171
31172    `Ibms'
31173          The immediate value with power of 2.
31174
31175    `Ifex'
31176          The immediate value with power of 2 minus 1.
31177
31178    `U33'
31179          Memory constraint for 333 format.
31180
31181    `U45'
31182          Memory constraint for 45 format.
31183
31184    `U37'
31185          Memory constraint for 37 format.
31186
31187_Nios II family--`config/nios2/constraints.md'_
31188
31189    `I'
31190          Integer that is valid as an immediate operand in an
31191          instruction taking a signed 16-bit number. Range -32768 to
31192          32767.
31193
31194    `J'
31195          Integer that is valid as an immediate operand in an
31196          instruction taking an unsigned 16-bit number. Range 0 to
31197          65535.
31198
31199    `K'
31200          Integer that is valid as an immediate operand in an
31201          instruction taking only the upper 16-bits of a 32-bit number.
31202          Range 32-bit numbers with the lower 16-bits being 0.
31203
31204    `L'
31205          Integer that is valid as an immediate operand for a shift
31206          instruction. Range 0 to 31.
31207
31208    `M'
31209          Integer that is valid as an immediate operand for only the
31210          value 0. Can be used in conjunction with the format modifier
31211          `z' to use `r0' instead of `0' in the assembly output.
31212
31213    `N'
31214          Integer that is valid as an immediate operand for a custom
31215          instruction opcode. Range 0 to 255.
31216
31217    `S'
31218          Matches immediates which are addresses in the small data
31219          section and therefore can be added to `gp' as a 16-bit
31220          immediate to re-create their 32-bit value.
31221
31222
31223_PDP-11--`config/pdp11/constraints.md'_
31224
31225    `a'
31226          Floating point registers AC0 through AC3.  These can be
31227          loaded from/to memory with a single instruction.
31228
31229    `d'
31230          Odd numbered general registers (R1, R3, R5).  These are used
31231          for 16-bit multiply operations.
31232
31233    `f'
31234          Any of the floating point registers (AC0 through AC5).
31235
31236    `G'
31237          Floating point constant 0.
31238
31239    `I'
31240          An integer constant that fits in 16 bits.
31241
31242    `J'
31243          An integer constant whose low order 16 bits are zero.
31244
31245    `K'
31246          An integer constant that does not meet the constraints for
31247          codes `I' or `J'.
31248
31249    `L'
31250          The integer constant 1.
31251
31252    `M'
31253          The integer constant -1.
31254
31255    `N'
31256          The integer constant 0.
31257
31258    `O'
31259          Integer constants -4 through -1 and 1 through 4; shifts by
31260          these amounts are handled as multiple single-bit shifts
31261          rather than a single variable-length shift.
31262
31263    `Q'
31264          A memory reference which requires an additional word (address
31265          or offset) after the opcode.
31266
31267    `R'
31268          A memory reference that is encoded within the opcode.
31269
31270
31271_PowerPC and IBM RS6000--`config/rs6000/constraints.md'_
31272
31273    `b'
31274          Address base register
31275
31276    `d'
31277          Floating point register (containing 64-bit value)
31278
31279    `f'
31280          Floating point register (containing 32-bit value)
31281
31282    `v'
31283          Altivec vector register
31284
31285    `wa'
31286          Any VSX register if the -mvsx option was used or NO_REGS.
31287
31288          When using any of the register constraints (`wa', `wd', `wf',
31289          `wg', `wh', `wi', `wj', `wk', `wl', `wm', `ws', `wt', `wu',
31290          `wv', `ww', or `wy') that take VSX registers, you must use
31291          `%x<n>' in the template so that the correct register is used.
31292          Otherwise the register number output in the assembly file
31293          will be incorrect if an Altivec register is an operand of a
31294          VSX instruction that expects VSX register numbering.
31295
31296               asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
31297
31298          is correct, but:
31299
31300               asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3));
31301
31302          is not correct.
31303
31304    `wd'
31305          VSX vector register to hold vector double data or NO_REGS.
31306
31307    `wf'
31308          VSX vector register to hold vector float data or NO_REGS.
31309
31310    `wg'
31311          If `-mmfpgpr' was used, a floating point register or NO_REGS.
31312
31313    `wh'
31314          Floating point register if direct moves are available, or
31315          NO_REGS.
31316
31317    `wi'
31318          FP or VSX register to hold 64-bit integers for VSX insns or
31319          NO_REGS.
31320
31321    `wj'
31322          FP or VSX register to hold 64-bit integers for direct moves
31323          or NO_REGS.
31324
31325    `wk'
31326          FP or VSX register to hold 64-bit doubles for direct moves or
31327          NO_REGS.
31328
31329    `wl'
31330          Floating point register if the LFIWAX instruction is enabled
31331          or NO_REGS.
31332
31333    `wm'
31334          VSX register if direct move instructions are enabled, or
31335          NO_REGS.
31336
31337    `wn'
31338          No register (NO_REGS).
31339
31340    `wr'
31341          General purpose register if 64-bit instructions are enabled
31342          or NO_REGS.
31343
31344    `ws'
31345          VSX vector register to hold scalar double values or NO_REGS.
31346
31347    `wt'
31348          VSX vector register to hold 128 bit integer or NO_REGS.
31349
31350    `wu'
31351          Altivec register to use for float/32-bit int loads/stores  or
31352          NO_REGS.
31353
31354    `wv'
31355          Altivec register to use for double loads/stores  or NO_REGS.
31356
31357    `ww'
31358          FP or VSX register to perform float operations under `-mvsx'
31359          or NO_REGS.
31360
31361    `wx'
31362          Floating point register if the STFIWX instruction is enabled
31363          or NO_REGS.
31364
31365    `wy'
31366          FP or VSX register to perform ISA 2.07 float ops or NO_REGS.
31367
31368    `wz'
31369          Floating point register if the LFIWZX instruction is enabled
31370          or NO_REGS.
31371
31372    `wD'
31373          Int constant that is the element number of the 64-bit scalar
31374          in a vector.
31375
31376    `wQ'
31377          A memory address that will work with the `lq' and `stq'
31378          instructions.
31379
31380    `h'
31381          `MQ', `CTR', or `LINK' register
31382
31383    `q'
31384          `MQ' register
31385
31386    `c'
31387          `CTR' register
31388
31389    `l'
31390          `LINK' register
31391
31392    `x'
31393          `CR' register (condition register) number 0
31394
31395    `y'
31396          `CR' register (condition register)
31397
31398    `z'
31399          `XER[CA]' carry bit (part of the XER register)
31400
31401    `I'
31402          Signed 16-bit constant
31403
31404    `J'
31405          Unsigned 16-bit constant shifted left 16 bits (use `L'
31406          instead for `SImode' constants)
31407
31408    `K'
31409          Unsigned 16-bit constant
31410
31411    `L'
31412          Signed 16-bit constant shifted left 16 bits
31413
31414    `M'
31415          Constant larger than 31
31416
31417    `N'
31418          Exact power of 2
31419
31420    `O'
31421          Zero
31422
31423    `P'
31424          Constant whose negation is a signed 16-bit constant
31425
31426    `G'
31427          Floating point constant that can be loaded into a register
31428          with one instruction per word
31429
31430    `H'
31431          Integer/Floating point constant that can be loaded into a
31432          register using three instructions
31433
31434    `m'
31435          Memory operand.  Normally, `m' does not allow addresses that
31436          update the base register.  If `<' or `>' constraint is also
31437          used, they are allowed and therefore on PowerPC targets in
31438          that case it is only safe to use `m<>' in an `asm' statement
31439          if that `asm' statement accesses the operand exactly once.
31440          The `asm' statement must also use `%U<OPNO>' as a placeholder
31441          for the "update" flag in the corresponding load or store
31442          instruction.  For example:
31443
31444               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
31445
31446          is correct but:
31447
31448               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
31449
31450          is not.
31451
31452    `es'
31453          A "stable" memory operand; that is, one which does not
31454          include any automodification of the base register.  This used
31455          to be useful when `m' allowed automodification of the base
31456          register, but as those are now only allowed when `<' or `>'
31457          is used, `es' is basically the same as `m' without `<' and
31458          `>'.
31459
31460    `Q'
31461          Memory operand that is an offset from a register (it is
31462          usually better to use `m' or `es' in `asm' statements)
31463
31464    `Z'
31465          Memory operand that is an indexed or indirect from a register
31466          (it is usually better to use `m' or `es' in `asm' statements)
31467
31468    `R'
31469          AIX TOC entry
31470
31471    `a'
31472          Address operand that is an indexed or indirect from a
31473          register (`p' is preferable for `asm' statements)
31474
31475    `S'
31476          Constant suitable as a 64-bit mask operand
31477
31478    `T'
31479          Constant suitable as a 32-bit mask operand
31480
31481    `U'
31482          System V Release 4 small data area reference
31483
31484    `t'
31485          AND masks that can be performed by two rldic{l, r}
31486          instructions
31487
31488    `W'
31489          Vector constant that does not require memory
31490
31491    `j'
31492          Vector constant that is all zeros.
31493
31494
31495_RL78--`config/rl78/constraints.md'_
31496
31497    `Int3'
31498          An integer constant in the range 1 ... 7.
31499
31500    `Int8'
31501          An integer constant in the range 0 ... 255.
31502
31503    `J'
31504          An integer constant in the range -255 ... 0
31505
31506    `K'
31507          The integer constant 1.
31508
31509    `L'
31510          The integer constant -1.
31511
31512    `M'
31513          The integer constant 0.
31514
31515    `N'
31516          The integer constant 2.
31517
31518    `O'
31519          The integer constant -2.
31520
31521    `P'
31522          An integer constant in the range 1 ... 15.
31523
31524    `Qbi'
31525          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
31526
31527    `Qsc'
31528          The synthetic compare types-gt, lt, ge, and le.
31529
31530    `Wab'
31531          A memory reference with an absolute address.
31532
31533    `Wbc'
31534          A memory reference using `BC' as a base register, with an
31535          optional offset.
31536
31537    `Wca'
31538          A memory reference using `AX', `BC', `DE', or `HL' for the
31539          address, for calls.
31540
31541    `Wcv'
31542          A memory reference using any 16-bit register pair for the
31543          address, for calls.
31544
31545    `Wd2'
31546          A memory reference using `DE' as a base register, with an
31547          optional offset.
31548
31549    `Wde'
31550          A memory reference using `DE' as a base register, without any
31551          offset.
31552
31553    `Wfr'
31554          Any memory reference to an address in the far address space.
31555
31556    `Wh1'
31557          A memory reference using `HL' as a base register, with an
31558          optional one-byte offset.
31559
31560    `Whb'
31561          A memory reference using `HL' as a base register, with `B' or
31562          `C' as the index register.
31563
31564    `Whl'
31565          A memory reference using `HL' as a base register, without any
31566          offset.
31567
31568    `Ws1'
31569          A memory reference using `SP' as a base register, with an
31570          optional one-byte offset.
31571
31572    `Y'
31573          Any memory reference to an address in the near address space.
31574
31575    `A'
31576          The `AX' register.
31577
31578    `B'
31579          The `BC' register.
31580
31581    `D'
31582          The `DE' register.
31583
31584    `R'
31585          `A' through `L' registers.
31586
31587    `S'
31588          The `SP' register.
31589
31590    `T'
31591          The `HL' register.
31592
31593    `Z08W'
31594          The 16-bit `R8' register.
31595
31596    `Z10W'
31597          The 16-bit `R10' register.
31598
31599    `Zint'
31600          The registers reserved for interrupts (`R24' to `R31').
31601
31602    `a'
31603          The `A' register.
31604
31605    `b'
31606          The `B' register.
31607
31608    `c'
31609          The `C' register.
31610
31611    `d'
31612          The `D' register.
31613
31614    `e'
31615          The `E' register.
31616
31617    `h'
31618          The `H' register.
31619
31620    `l'
31621          The `L' register.
31622
31623    `v'
31624          The virtual registers.
31625
31626    `w'
31627          The `PSW' register.
31628
31629    `x'
31630          The `X' register.
31631
31632
31633_RX--`config/rx/constraints.md'_
31634
31635    `Q'
31636          An address which does not involve register indirect
31637          addressing or pre/post increment/decrement addressing.
31638
31639    `Symbol'
31640          A symbol reference.
31641
31642    `Int08'
31643          A constant in the range -256 to 255, inclusive.
31644
31645    `Sint08'
31646          A constant in the range -128 to 127, inclusive.
31647
31648    `Sint16'
31649          A constant in the range -32768 to 32767, inclusive.
31650
31651    `Sint24'
31652          A constant in the range -8388608 to 8388607, inclusive.
31653
31654    `Uint04'
31655          A constant in the range 0 to 15, inclusive.
31656
31657
31658_S/390 and zSeries--`config/s390/s390.h'_
31659
31660    `a'
31661          Address register (general purpose register except r0)
31662
31663    `c'
31664          Condition code register
31665
31666    `d'
31667          Data register (arbitrary general purpose register)
31668
31669    `f'
31670          Floating-point register
31671
31672    `I'
31673          Unsigned 8-bit constant (0-255)
31674
31675    `J'
31676          Unsigned 12-bit constant (0-4095)
31677
31678    `K'
31679          Signed 16-bit constant (-32768-32767)
31680
31681    `L'
31682          Value appropriate as displacement.
31683         `(0..4095)'
31684               for short displacement
31685
31686         `(-524288..524287)'
31687               for long displacement
31688
31689    `M'
31690          Constant integer with a value of 0x7fffffff.
31691
31692    `N'
31693          Multiple letter constraint followed by 4 parameter letters.
31694         `0..9:'
31695               number of the part counting from most to least
31696               significant
31697
31698         `H,Q:'
31699               mode of the part
31700
31701         `D,S,H:'
31702               mode of the containing operand
31703
31704         `0,F:'
31705               value of the other parts (F--all bits set)
31706          The constraint matches if the specified part of a constant
31707          has a value different from its other parts.
31708
31709    `Q'
31710          Memory reference without index register and with short
31711          displacement.
31712
31713    `R'
31714          Memory reference with index register and short displacement.
31715
31716    `S'
31717          Memory reference without index register but with long
31718          displacement.
31719
31720    `T'
31721          Memory reference with index register and long displacement.
31722
31723    `U'
31724          Pointer with short displacement.
31725
31726    `W'
31727          Pointer with long displacement.
31728
31729    `Y'
31730          Shift count operand.
31731
31732
31733_SPARC--`config/sparc/sparc.h'_
31734
31735    `f'
31736          Floating-point register on the SPARC-V8 architecture and
31737          lower floating-point register on the SPARC-V9 architecture.
31738
31739    `e'
31740          Floating-point register.  It is equivalent to `f' on the
31741          SPARC-V8 architecture and contains both lower and upper
31742          floating-point registers on the SPARC-V9 architecture.
31743
31744    `c'
31745          Floating-point condition code register.
31746
31747    `d'
31748          Lower floating-point register.  It is only valid on the
31749          SPARC-V9 architecture when the Visual Instruction Set is
31750          available.
31751
31752    `b'
31753          Floating-point register.  It is only valid on the SPARC-V9
31754          architecture when the Visual Instruction Set is available.
31755
31756    `h'
31757          64-bit global or out register for the SPARC-V8+ architecture.
31758
31759    `C'
31760          The constant all-ones, for floating-point.
31761
31762    `A'
31763          Signed 5-bit constant
31764
31765    `D'
31766          A vector constant
31767
31768    `I'
31769          Signed 13-bit constant
31770
31771    `J'
31772          Zero
31773
31774    `K'
31775          32-bit constant with the low 12 bits clear (a constant that
31776          can be loaded with the `sethi' instruction)
31777
31778    `L'
31779          A constant in the range supported by `movcc' instructions
31780          (11-bit signed immediate)
31781
31782    `M'
31783          A constant in the range supported by `movrcc' instructions
31784          (10-bit signed immediate)
31785
31786    `N'
31787          Same as `K', except that it verifies that bits that are not
31788          in the lower 32-bit range are all zero.  Must be used instead
31789          of `K' for modes wider than `SImode'
31790
31791    `O'
31792          The constant 4096
31793
31794    `G'
31795          Floating-point zero
31796
31797    `H'
31798          Signed 13-bit constant, sign-extended to 32 or 64 bits
31799
31800    `P'
31801          The constant -1
31802
31803    `Q'
31804          Floating-point constant whose integral representation can be
31805          moved into an integer register using a single sethi
31806          instruction
31807
31808    `R'
31809          Floating-point constant whose integral representation can be
31810          moved into an integer register using a single mov instruction
31811
31812    `S'
31813          Floating-point constant whose integral representation can be
31814          moved into an integer register using a high/lo_sum
31815          instruction sequence
31816
31817    `T'
31818          Memory address aligned to an 8-byte boundary
31819
31820    `U'
31821          Even register
31822
31823    `W'
31824          Memory address for `e' constraint registers
31825
31826    `w'
31827          Memory address with only a base register
31828
31829    `Y'
31830          Vector zero
31831
31832
31833_SPU--`config/spu/spu.h'_
31834
31835    `a'
31836          An immediate which can be loaded with the il/ila/ilh/ilhu
31837          instructions.  const_int is treated as a 64 bit value.
31838
31839    `c'
31840          An immediate for and/xor/or instructions.  const_int is
31841          treated as a 64 bit value.
31842
31843    `d'
31844          An immediate for the `iohl' instruction.  const_int is
31845          treated as a 64 bit value.
31846
31847    `f'
31848          An immediate which can be loaded with `fsmbi'.
31849
31850    `A'
31851          An immediate which can be loaded with the il/ila/ilh/ilhu
31852          instructions.  const_int is treated as a 32 bit value.
31853
31854    `B'
31855          An immediate for most arithmetic instructions.  const_int is
31856          treated as a 32 bit value.
31857
31858    `C'
31859          An immediate for and/xor/or instructions.  const_int is
31860          treated as a 32 bit value.
31861
31862    `D'
31863          An immediate for the `iohl' instruction.  const_int is
31864          treated as a 32 bit value.
31865
31866    `I'
31867          A constant in the range [-64, 63] for shift/rotate
31868          instructions.
31869
31870    `J'
31871          An unsigned 7-bit constant for conversion/nop/channel
31872          instructions.
31873
31874    `K'
31875          A signed 10-bit constant for most arithmetic instructions.
31876
31877    `M'
31878          A signed 16 bit immediate for `stop'.
31879
31880    `N'
31881          An unsigned 16-bit constant for `iohl' and `fsmbi'.
31882
31883    `O'
31884          An unsigned 7-bit constant whose 3 least significant bits are
31885          0.
31886
31887    `P'
31888          An unsigned 3-bit constant for 16-byte rotates and shifts
31889
31890    `R'
31891          Call operand, reg, for indirect calls
31892
31893    `S'
31894          Call operand, symbol, for relative calls.
31895
31896    `T'
31897          Call operand, const_int, for absolute calls.
31898
31899    `U'
31900          An immediate which can be loaded with the il/ila/ilh/ilhu
31901          instructions.  const_int is sign extended to 128 bit.
31902
31903    `W'
31904          An immediate for shift and rotate instructions.  const_int is
31905          treated as a 32 bit value.
31906
31907    `Y'
31908          An immediate for and/xor/or instructions.  const_int is sign
31909          extended as a 128 bit.
31910
31911    `Z'
31912          An immediate for the `iohl' instruction.  const_int is sign
31913          extended to 128 bit.
31914
31915
31916_TI C6X family--`config/c6x/constraints.md'_
31917
31918    `a'
31919          Register file A (A0-A31).
31920
31921    `b'
31922          Register file B (B0-B31).
31923
31924    `A'
31925          Predicate registers in register file A (A0-A2 on C64X and
31926          higher, A1 and A2 otherwise).
31927
31928    `B'
31929          Predicate registers in register file B (B0-B2).
31930
31931    `C'
31932          A call-used register in register file B (B0-B9, B16-B31).
31933
31934    `Da'
31935          Register file A, excluding predicate registers (A3-A31, plus
31936          A0 if not C64X or higher).
31937
31938    `Db'
31939          Register file B, excluding predicate registers (B3-B31).
31940
31941    `Iu4'
31942          Integer constant in the range 0 ... 15.
31943
31944    `Iu5'
31945          Integer constant in the range 0 ... 31.
31946
31947    `In5'
31948          Integer constant in the range -31 ... 0.
31949
31950    `Is5'
31951          Integer constant in the range -16 ... 15.
31952
31953    `I5x'
31954          Integer constant that can be the operand of an ADDA or a SUBA
31955          insn.
31956
31957    `IuB'
31958          Integer constant in the range 0 ... 65535.
31959
31960    `IsB'
31961          Integer constant in the range -32768 ... 32767.
31962
31963    `IsC'
31964          Integer constant in the range -2^20 ... 2^20 - 1.
31965
31966    `Jc'
31967          Integer constant that is a valid mask for the clr instruction.
31968
31969    `Js'
31970          Integer constant that is a valid mask for the set instruction.
31971
31972    `Q'
31973          Memory location with A base register.
31974
31975    `R'
31976          Memory location with B base register.
31977
31978    `Z'
31979          Register B14 (aka DP).
31980
31981
31982_TILE-Gx--`config/tilegx/constraints.md'_
31983
31984    `R00'
31985    `R01'
31986    `R02'
31987    `R03'
31988    `R04'
31989    `R05'
31990    `R06'
31991    `R07'
31992    `R08'
31993    `R09'
31994    `R10'
31995          Each of these represents a register constraint for an
31996          individual register, from r0 to r10.
31997
31998    `I'
31999          Signed 8-bit integer constant.
32000
32001    `J'
32002          Signed 16-bit integer constant.
32003
32004    `K'
32005          Unsigned 16-bit integer constant.
32006
32007    `L'
32008          Integer constant that fits in one signed byte when
32009          incremented by one (-129 ... 126).
32010
32011    `m'
32012          Memory operand.  If used together with `<' or `>', the
32013          operand can have postincrement which requires printing with
32014          `%In' and `%in' on TILE-Gx.  For example:
32015
32016               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
32017
32018    `M'
32019          A bit mask suitable for the BFINS instruction.
32020
32021    `N'
32022          Integer constant that is a byte tiled out eight times.
32023
32024    `O'
32025          The integer zero constant.
32026
32027    `P'
32028          Integer constant that is a sign-extended byte tiled out as
32029          four shorts.
32030
32031    `Q'
32032          Integer constant that fits in one signed byte when incremented
32033          (-129 ... 126), but excluding -1.
32034
32035    `S'
32036          Integer constant that has all 1 bits consecutive and starting
32037          at bit 0.
32038
32039    `T'
32040          A 16-bit fragment of a got, tls, or pc-relative reference.
32041
32042    `U'
32043          Memory operand except postincrement.  This is roughly the
32044          same as `m' when not used together with `<' or `>'.
32045
32046    `W'
32047          An 8-element vector constant with identical elements.
32048
32049    `Y'
32050          A 4-element vector constant with identical elements.
32051
32052    `Z0'
32053          The integer constant 0xffffffff.
32054
32055    `Z1'
32056          The integer constant 0xffffffff00000000.
32057
32058
32059_TILEPro--`config/tilepro/constraints.md'_
32060
32061    `R00'
32062    `R01'
32063    `R02'
32064    `R03'
32065    `R04'
32066    `R05'
32067    `R06'
32068    `R07'
32069    `R08'
32070    `R09'
32071    `R10'
32072          Each of these represents a register constraint for an
32073          individual register, from r0 to r10.
32074
32075    `I'
32076          Signed 8-bit integer constant.
32077
32078    `J'
32079          Signed 16-bit integer constant.
32080
32081    `K'
32082          Nonzero integer constant with low 16 bits zero.
32083
32084    `L'
32085          Integer constant that fits in one signed byte when
32086          incremented by one (-129 ... 126).
32087
32088    `m'
32089          Memory operand.  If used together with `<' or `>', the
32090          operand can have postincrement which requires printing with
32091          `%In' and `%in' on TILEPro.  For example:
32092
32093               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
32094
32095    `M'
32096          A bit mask suitable for the MM instruction.
32097
32098    `N'
32099          Integer constant that is a byte tiled out four times.
32100
32101    `O'
32102          The integer zero constant.
32103
32104    `P'
32105          Integer constant that is a sign-extended byte tiled out as
32106          two shorts.
32107
32108    `Q'
32109          Integer constant that fits in one signed byte when incremented
32110          (-129 ... 126), but excluding -1.
32111
32112    `T'
32113          A symbolic operand, or a 16-bit fragment of a got, tls, or
32114          pc-relative reference.
32115
32116    `U'
32117          Memory operand except postincrement.  This is roughly the
32118          same as `m' when not used together with `<' or `>'.
32119
32120    `W'
32121          A 4-element vector constant with identical elements.
32122
32123    `Y'
32124          A 2-element vector constant with identical elements.
32125
32126
32127_Visium--`config/visium/constraints.md'_
32128
32129    `b'
32130          EAM register `mdb'
32131
32132    `c'
32133          EAM register `mdc'
32134
32135    `f'
32136          Floating point register
32137
32138    `l'
32139          General register, but not `r29', `r30' and `r31'
32140
32141    `t'
32142          Register `r1'
32143
32144    `u'
32145          Register `r2'
32146
32147    `v'
32148          Register `r3'
32149
32150    `G'
32151          Floating-point constant 0.0
32152
32153    `J'
32154          Integer constant in the range 0 .. 65535 (16-bit immediate)
32155
32156    `K'
32157          Integer constant in the range 1 .. 31 (5-bit immediate)
32158
32159    `L'
32160          Integer constant in the range -65535 .. -1 (16-bit negative
32161          immediate)
32162
32163    `M'
32164          Integer constant -1
32165
32166    `O'
32167          Integer constant 0
32168
32169    `P'
32170          Integer constant 32
32171
32172_x86 family--`config/i386/constraints.md'_
32173
32174    `R'
32175          Legacy register--the eight integer registers available on all
32176          i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
32177
32178    `q'
32179          Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
32180          `c', and `d'; in 64-bit mode, any integer register.
32181
32182    `Q'
32183          Any register accessible as `Rh': `a', `b', `c', and `d'.
32184
32185    `a'
32186          The `a' register.
32187
32188    `b'
32189          The `b' register.
32190
32191    `c'
32192          The `c' register.
32193
32194    `d'
32195          The `d' register.
32196
32197    `S'
32198          The `si' register.
32199
32200    `D'
32201          The `di' register.
32202
32203    `A'
32204          The `a' and `d' registers.  This class is used for
32205          instructions that return double word results in the `ax:dx'
32206          register pair.  Single word values will be allocated either
32207          in `ax' or `dx'.  For example on i386 the following
32208          implements `rdtsc':
32209
32210               unsigned long long rdtsc (void)
32211               {
32212                 unsigned long long tick;
32213                 __asm__ __volatile__("rdtsc":"=A"(tick));
32214                 return tick;
32215               }
32216
32217          This is not correct on x86-64 as it would allocate tick in
32218          either `ax' or `dx'.  You have to use the following variant
32219          instead:
32220
32221               unsigned long long rdtsc (void)
32222               {
32223                 unsigned int tickl, tickh;
32224                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
32225                 return ((unsigned long long)tickh << 32)|tickl;
32226               }
32227
32228    `f'
32229          Any 80387 floating-point (stack) register.
32230
32231    `t'
32232          Top of 80387 floating-point stack (`%st(0)').
32233
32234    `u'
32235          Second from top of 80387 floating-point stack (`%st(1)').
32236
32237    `y'
32238          Any MMX register.
32239
32240    `x'
32241          Any SSE register.
32242
32243    `Yz'
32244          First SSE register (`%xmm0').
32245
32246    `I'
32247          Integer constant in the range 0 ... 31, for 32-bit shifts.
32248
32249    `J'
32250          Integer constant in the range 0 ... 63, for 64-bit shifts.
32251
32252    `K'
32253          Signed 8-bit integer constant.
32254
32255    `L'
32256          `0xFF' or `0xFFFF', for andsi as a zero-extending move.
32257
32258    `M'
32259          0, 1, 2, or 3 (shifts for the `lea' instruction).
32260
32261    `N'
32262          Unsigned 8-bit integer constant (for `in' and `out'
32263          instructions).
32264
32265    `G'
32266          Standard 80387 floating point constant.
32267
32268    `C'
32269          SSE constant zero operand.
32270
32271    `e'
32272          32-bit signed integer constant, or a symbolic reference known
32273          to fit that range (for immediate operands in sign-extending
32274          x86-64 instructions).
32275
32276    `Z'
32277          32-bit unsigned integer constant, or a symbolic reference
32278          known to fit that range (for immediate operands in
32279          zero-extending x86-64 instructions).
32280
32281
32282_Xstormy16--`config/stormy16/stormy16.h'_
32283
32284    `a'
32285          Register r0.
32286
32287    `b'
32288          Register r1.
32289
32290    `c'
32291          Register r2.
32292
32293    `d'
32294          Register r8.
32295
32296    `e'
32297          Registers r0 through r7.
32298
32299    `t'
32300          Registers r0 and r1.
32301
32302    `y'
32303          The carry register.
32304
32305    `z'
32306          Registers r8 and r9.
32307
32308    `I'
32309          A constant between 0 and 3 inclusive.
32310
32311    `J'
32312          A constant that has exactly one bit set.
32313
32314    `K'
32315          A constant that has exactly one bit clear.
32316
32317    `L'
32318          A constant between 0 and 255 inclusive.
32319
32320    `M'
32321          A constant between -255 and 0 inclusive.
32322
32323    `N'
32324          A constant between -3 and 0 inclusive.
32325
32326    `O'
32327          A constant between 1 and 4 inclusive.
32328
32329    `P'
32330          A constant between -4 and -1 inclusive.
32331
32332    `Q'
32333          A memory reference that is a stack push.
32334
32335    `R'
32336          A memory reference that is a stack pop.
32337
32338    `S'
32339          A memory reference that refers to a constant address of known
32340          value.
32341
32342    `T'
32343          The register indicated by Rx (not implemented yet).
32344
32345    `U'
32346          A constant that is not between 2 and 15 inclusive.
32347
32348    `Z'
32349          The constant 0.
32350
32351
32352_Xtensa--`config/xtensa/constraints.md'_
32353
32354    `a'
32355          General-purpose 32-bit register
32356
32357    `b'
32358          One-bit boolean register
32359
32360    `A'
32361          MAC16 40-bit accumulator register
32362
32363    `I'
32364          Signed 12-bit integer constant, for use in MOVI instructions
32365
32366    `J'
32367          Signed 8-bit integer constant, for use in ADDI instructions
32368
32369    `K'
32370          Integer constant valid for BccI instructions
32371
32372    `L'
32373          Unsigned constant valid for BccUI instructions
32374
32375
32376
32377
32378File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: Using Assembly Language with C
32379
323806.43.4 Controlling Names Used in Assembler Code
32381-----------------------------------------------
32382
32383You can specify the name to be used in the assembler code for a C
32384function or variable by writing the `asm' (or `__asm__') keyword after
32385the declarator as follows:
32386
32387     int foo asm ("myfoo") = 2;
32388
32389This specifies that the name to be used for the variable `foo' in the
32390assembler code should be `myfoo' rather than the usual `_foo'.
32391
32392 On systems where an underscore is normally prepended to the name of a C
32393function or variable, this feature allows you to define names for the
32394linker that do not start with an underscore.
32395
32396 It does not make sense to use this feature with a non-static local
32397variable since such variables do not have assembler names.  If you are
32398trying to put the variable in a particular register, see *Note Explicit
32399Reg Vars::.  GCC presently accepts such code with a warning, but will
32400probably be changed to issue an error, rather than a warning, in the
32401future.
32402
32403 You cannot use `asm' in this way in a function _definition_; but you
32404can get the same effect by writing a declaration for the function
32405before its definition and putting `asm' there, like this:
32406
32407     extern func () asm ("FUNC");
32408
32409     func (x, y)
32410          int x, y;
32411     /* ... */
32412
32413 It is up to you to make sure that the assembler names you choose do not
32414conflict with any other assembler symbols.  Also, you must not use a
32415register name; that would produce completely invalid assembler code.
32416GCC does not as yet have the ability to store static variables in
32417registers.  Perhaps that will be added.
32418
32419
32420File: gcc.info,  Node: Explicit Reg Vars,  Next: Size of an asm,  Prev: Asm Labels,  Up: Using Assembly Language with C
32421
324226.43.5 Variables in Specified Registers
32423---------------------------------------
32424
32425GNU C allows you to put a few global variables into specified hardware
32426registers.  You can also specify the register in which an ordinary
32427register variable should be allocated.
32428
32429   * Global register variables reserve registers throughout the program.
32430     This may be useful in programs such as programming language
32431     interpreters that have a couple of global variables that are
32432     accessed very often.
32433
32434   * Local register variables in specific registers do not reserve the
32435     registers, except at the point where they are used as input or
32436     output operands in an `asm' statement and the `asm' statement
32437     itself is not deleted.  The compiler's data flow analysis is
32438     capable of determining where the specified registers contain live
32439     values, and where they are available for other uses.  Stores into
32440     local register variables may be deleted when they appear to be
32441     dead according to dataflow analysis.  References to local register
32442     variables may be deleted or moved or simplified.
32443
32444     These local variables are sometimes convenient for use with the
32445     extended `asm' feature (*note Extended Asm::), if you want to
32446     write one output of the assembler instruction directly into a
32447     particular register.  (This works provided the register you
32448     specify fits the constraints specified for that operand in the
32449     `asm'.)
32450
32451* Menu:
32452
32453* Global Reg Vars::
32454* Local Reg Vars::
32455
32456
32457File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
32458
324596.43.5.1 Defining Global Register Variables
32460...........................................
32461
32462You can define a global register variable in GNU C like this:
32463
32464     register int *foo asm ("a5");
32465
32466Here `a5' is the name of the register that should be used.  Choose a
32467register that is normally saved and restored by function calls on your
32468machine, so that library routines will not clobber it.
32469
32470 Naturally the register name is CPU-dependent, so you need to
32471conditionalize your program according to CPU type.  The register `a5'
32472is a good choice on a 68000 for a variable of pointer type.  On
32473machines with register windows, be sure to choose a "global" register
32474that is not affected magically by the function call mechanism.
32475
32476 In addition, different operating systems on the same CPU may differ in
32477how they name the registers; then you need additional conditionals.  For
32478example, some 68000 operating systems call this register `%a5'.
32479
32480 Eventually there may be a way of asking the compiler to choose a
32481register automatically, but first we need to figure out how it should
32482choose and how to enable you to guide the choice.  No solution is
32483evident.
32484
32485 Defining a global register variable in a certain register reserves that
32486register entirely for this use, at least within the current compilation.
32487The register is not allocated for any other purpose in the functions in
32488the current compilation, and is not saved and restored by these
32489functions.  Stores into this register are never deleted even if they
32490appear to be dead, but references may be deleted or moved or simplified.
32491
32492 It is not safe to access the global register variables from signal
32493handlers, or from more than one thread of control, because the system
32494library routines may temporarily use the register for other things
32495(unless you recompile them specially for the task at hand).
32496
32497 It is not safe for one function that uses a global register variable to
32498call another such function `foo' by way of a third function `lose' that
32499is compiled without knowledge of this variable (i.e. in a different
32500source file in which the variable isn't declared).  This is because
32501`lose' might save the register and put some other value there.  For
32502example, you can't expect a global register variable to be available in
32503the comparison-function that you pass to `qsort', since `qsort' might
32504have put something else in that register.  (If you are prepared to
32505recompile `qsort' with the same global register variable, you can solve
32506this problem.)
32507
32508 If you want to recompile `qsort' or other source files that do not
32509actually use your global register variable, so that they do not use that
32510register for any other purpose, then it suffices to specify the compiler
32511option `-ffixed-REG'.  You need not actually add a global register
32512declaration to their source code.
32513
32514 A function that can alter the value of a global register variable
32515cannot safely be called from a function compiled without this variable,
32516because it could clobber the value the caller expects to find there on
32517return.  Therefore, the function that is the entry point into the part
32518of the program that uses the global register variable must explicitly
32519save and restore the value that belongs to its caller.
32520
32521 On most machines, `longjmp' restores to each global register variable
32522the value it had at the time of the `setjmp'.  On some machines,
32523however, `longjmp' does not change the value of global register
32524variables.  To be portable, the function that called `setjmp' should
32525make other arrangements to save the values of the global register
32526variables, and to restore them in a `longjmp'.  This way, the same
32527thing happens regardless of what `longjmp' does.
32528
32529 All global register variable declarations must precede all function
32530definitions.  If such a declaration could appear after function
32531definitions, the declaration would be too late to prevent the register
32532from being used for other purposes in the preceding functions.
32533
32534 Global register variables may not have initial values, because an
32535executable file has no means to supply initial contents for a register.
32536
32537 On the SPARC, there are reports that g3 ... g7 are suitable registers,
32538but certain library functions, such as `getwd', as well as the
32539subroutines for division and remainder, modify g3 and g4.  g1 and g2
32540are local temporaries.
32541
32542 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
32543course, it does not do to use more than a few of those.
32544
32545
32546File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
32547
325486.43.5.2 Specifying Registers for Local Variables
32549.................................................
32550
32551You can define a local register variable with a specified register like
32552this:
32553
32554     register int *foo asm ("a5");
32555
32556Here `a5' is the name of the register that should be used.  Note that
32557this is the same syntax used for defining global register variables,
32558but for a local variable it appears within a function.
32559
32560 Naturally the register name is CPU-dependent, but this is not a
32561problem, since specific registers are most often useful with explicit
32562assembler instructions (*note Extended Asm::).  Both of these things
32563generally require that you conditionalize your program according to CPU
32564type.
32565
32566 In addition, operating systems on one type of CPU may differ in how
32567they name the registers; then you need additional conditionals.  For
32568example, some 68000 operating systems call this register `%a5'.
32569
32570 Defining such a register variable does not reserve the register; it
32571remains available for other uses in places where flow control determines
32572the variable's value is not live.
32573
32574 This option does not guarantee that GCC generates code that has this
32575variable in the register you specify at all times.  You may not code an
32576explicit reference to this register in the assembler instruction
32577template part of an `asm' statement and assume it always refers to this
32578variable.  However, using the variable as an input or output operand to
32579the `asm' guarantees that the specified register is used for that
32580operand.  *Note Extended Asm::, for more information.
32581
32582 Stores into local register variables may be deleted when they appear
32583to be dead according to dataflow analysis.  References to local
32584register variables may be deleted or moved or simplified.
32585
32586 As with global register variables, it is recommended that you choose a
32587register that is normally saved and restored by function calls on your
32588machine, so that library routines will not clobber it.
32589
32590 Sometimes when writing inline `asm' code, you need to make an operand
32591be a specific register, but there's no matching constraint letter for
32592that register. To force the operand into that register, create a local
32593variable and specify the register in the variable's declaration. Then
32594use the local variable for the asm operand and specify any constraint
32595letter that matches the register:
32596
32597     register int *p1 asm ("r0") = ...;
32598     register int *p2 asm ("r1") = ...;
32599     register int *result asm ("r0");
32600     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
32601
32602 _Warning:_ In the above example, be aware that a register (for example
32603r0) can be call-clobbered by subsequent code, including function calls
32604and library calls for arithmetic operators on other variables (for
32605example the initialization of p2). In this case, use temporary
32606variables for expressions between the register assignments:
32607
32608     int t1 = ...;
32609     register int *p1 asm ("r0") = ...;
32610     register int *p2 asm ("r1") = t1;
32611     register int *result asm ("r0");
32612     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
32613
32614
32615File: gcc.info,  Node: Size of an asm,  Prev: Explicit Reg Vars,  Up: Using Assembly Language with C
32616
326176.43.6 Size of an `asm'
32618-----------------------
32619
32620Some targets require that GCC track the size of each instruction used
32621in order to generate correct code.  Because the final length of the
32622code produced by an `asm' statement is only known by the assembler, GCC
32623must make an estimate as to how big it will be.  It does this by
32624counting the number of instructions in the pattern of the `asm' and
32625multiplying that by the length of the longest instruction supported by
32626that processor.  (When working out the number of instructions, it
32627assumes that any occurrence of a newline or of whatever statement
32628separator character is supported by the assembler - typically `;' --
32629indicates the end of an instruction.)
32630
32631 Normally, GCC's estimate is adequate to ensure that correct code is
32632generated, but it is possible to confuse the compiler if you use pseudo
32633instructions or assembler macros that expand into multiple real
32634instructions, or if you use assembler directives that expand to more
32635space in the object file than is needed for a single instruction.  If
32636this happens then the assembler may produce a diagnostic saying that a
32637label is unreachable.
32638
32639
32640File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Using Assembly Language with C,  Up: C Extensions
32641
326426.44 Alternate Keywords
32643=======================
32644
32645`-ansi' and the various `-std' options disable certain keywords.  This
32646causes trouble when you want to use GNU C extensions, or a
32647general-purpose header file that should be usable by all programs,
32648including ISO C programs.  The keywords `asm', `typeof' and `inline'
32649are not available in programs compiled with `-ansi' or `-std' (although
32650`inline' can be used in a program compiled with `-std=c99' or
32651`-std=c11').  The ISO C99 keyword `restrict' is only available when
32652`-std=gnu99' (which will eventually be the default) or `-std=c99' (or
32653the equivalent `-std=iso9899:1999'), or an option for a later standard
32654version, is used.
32655
32656 The way to solve these problems is to put `__' at the beginning and
32657end of each problematical keyword.  For example, use `__asm__' instead
32658of `asm', and `__inline__' instead of `inline'.
32659
32660 Other C compilers won't accept these alternative keywords; if you want
32661to compile with another compiler, you can define the alternate keywords
32662as macros to replace them with the customary keywords.  It looks like
32663this:
32664
32665     #ifndef __GNUC__
32666     #define __asm__ asm
32667     #endif
32668
32669 `-pedantic' and other options cause warnings for many GNU C extensions.
32670You can prevent such warnings within one expression by writing
32671`__extension__' before the expression.  `__extension__' has no effect
32672aside from this.
32673
32674
32675File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
32676
326776.45 Incomplete `enum' Types
32678============================
32679
32680You can define an `enum' tag without specifying its possible values.
32681This results in an incomplete type, much like what you get if you write
32682`struct foo' without describing the elements.  A later declaration that
32683does specify the possible values completes the type.
32684
32685 You can't allocate variables or storage using the type while it is
32686incomplete.  However, you can work with pointers to that type.
32687
32688 This extension may not be very useful, but it makes the handling of
32689`enum' more consistent with the way `struct' and `union' are handled.
32690
32691 This extension is not supported by GNU C++.
32692
32693
32694File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
32695
326966.46 Function Names as Strings
32697==============================
32698
32699GCC provides three magic variables that hold the name of the current
32700function, as a string.  The first of these is `__func__', which is part
32701of the C99 standard:
32702
32703 The identifier `__func__' is implicitly declared by the translator as
32704if, immediately following the opening brace of each function
32705definition, the declaration
32706
32707     static const char __func__[] = "function-name";
32708
32709appeared, where function-name is the name of the lexically-enclosing
32710function.  This name is the unadorned name of the function.
32711
32712 `__FUNCTION__' is another name for `__func__', provided for backward
32713compatibility with old versions of GCC.
32714
32715 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
32716However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
32717the function as well as its bare name.  For example, this program:
32718
32719     extern "C" {
32720     extern int printf (char *, ...);
32721     }
32722
32723     class a {
32724      public:
32725       void sub (int i)
32726         {
32727           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
32728           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
32729         }
32730     };
32731
32732     int
32733     main (void)
32734     {
32735       a ax;
32736       ax.sub (0);
32737       return 0;
32738     }
32739
32740gives this output:
32741
32742     __FUNCTION__ = sub
32743     __PRETTY_FUNCTION__ = void a::sub(int)
32744
32745 These identifiers are variables, not preprocessor macros, and may not
32746be used to initialize `char' arrays or be concatenated with other string
32747literals.
32748
32749
32750File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
32751
327526.47 Getting the Return or Frame Address of a Function
32753======================================================
32754
32755These functions may be used to get information about the callers of a
32756function.
32757
32758 -- Built-in Function: void * __builtin_return_address (unsigned int
32759          LEVEL)
32760     This function returns the return address of the current function,
32761     or of one of its callers.  The LEVEL argument is number of frames
32762     to scan up the call stack.  A value of `0' yields the return
32763     address of the current function, a value of `1' yields the return
32764     address of the caller of the current function, and so forth.  When
32765     inlining the expected behavior is that the function returns the
32766     address of the function that is returned to.  To work around this
32767     behavior use the `noinline' function attribute.
32768
32769     The LEVEL argument must be a constant integer.
32770
32771     On some machines it may be impossible to determine the return
32772     address of any function other than the current one; in such cases,
32773     or when the top of the stack has been reached, this function
32774     returns `0' or a random value.  In addition,
32775     `__builtin_frame_address' may be used to determine if the top of
32776     the stack has been reached.
32777
32778     Additional post-processing of the returned value may be needed, see
32779     `__builtin_extract_return_addr'.
32780
32781     This function should only be used with a nonzero argument for
32782     debugging purposes.
32783
32784 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
32785     The address as returned by `__builtin_return_address' may have to
32786     be fed through this function to get the actual encoded address.
32787     For example, on the 31-bit S/390 platform the highest bit has to
32788     be masked out, or on SPARC platforms an offset has to be added for
32789     the true next instruction to be executed.
32790
32791     If no fixup is needed, this function simply passes through ADDR.
32792
32793 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
32794     This function does the reverse of `__builtin_extract_return_addr'.
32795
32796 -- Built-in Function: void * __builtin_frame_address (unsigned int
32797          LEVEL)
32798     This function is similar to `__builtin_return_address', but it
32799     returns the address of the function frame rather than the return
32800     address of the function.  Calling `__builtin_frame_address' with a
32801     value of `0' yields the frame address of the current function, a
32802     value of `1' yields the frame address of the caller of the current
32803     function, and so forth.
32804
32805     The frame is the area on the stack that holds local variables and
32806     saved registers.  The frame address is normally the address of the
32807     first word pushed on to the stack by the function.  However, the
32808     exact definition depends upon the processor and the calling
32809     convention.  If the processor has a dedicated frame pointer
32810     register, and the function has a frame, then
32811     `__builtin_frame_address' returns the value of the frame pointer
32812     register.
32813
32814     On some machines it may be impossible to determine the frame
32815     address of any function other than the current one; in such cases,
32816     or when the top of the stack has been reached, this function
32817     returns `0' if the first frame pointer is properly initialized by
32818     the startup code.
32819
32820     This function should only be used with a nonzero argument for
32821     debugging purposes.
32822
32823
32824File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
32825
328266.48 Using Vector Instructions through Built-in Functions
32827=========================================================
32828
32829On some targets, the instruction set contains SIMD vector instructions
32830which operate on multiple values contained in one large register at the
32831same time.  For example, on the x86 the MMX, 3DNow! and SSE extensions
32832can be used this way.
32833
32834 The first step in using these extensions is to provide the necessary
32835data types.  This should be done using an appropriate `typedef':
32836
32837     typedef int v4si __attribute__ ((vector_size (16)));
32838
32839The `int' type specifies the base type, while the attribute specifies
32840the vector size for the variable, measured in bytes.  For example, the
32841declaration above causes the compiler to set the mode for the `v4si'
32842type to be 16 bytes wide and divided into `int' sized units.  For a
3284332-bit `int' this means a vector of 4 units of 4 bytes, and the
32844corresponding mode of `foo' is V4SI.
32845
32846 The `vector_size' attribute is only applicable to integral and float
32847scalars, although arrays, pointers, and function return values are
32848allowed in conjunction with this construct. Only sizes that are a power
32849of two are currently allowed.
32850
32851 All the basic integer types can be used as base types, both as signed
32852and as unsigned: `char', `short', `int', `long', `long long'.  In
32853addition, `float' and `double' can be used to build floating-point
32854vector types.
32855
32856 Specifying a combination that is not valid for the current architecture
32857causes GCC to synthesize the instructions using a narrower mode.  For
32858example, if you specify a variable of type `V4SI' and your architecture
32859does not allow for this specific SIMD type, GCC produces code that uses
328604 `SIs'.
32861
32862 The types defined in this manner can be used with a subset of normal C
32863operations.  Currently, GCC allows using the following operators on
32864these types: `+, -, *, /, unary minus, ^, |, &, ~, %'.
32865
32866 The operations behave like C++ `valarrays'.  Addition is defined as
32867the addition of the corresponding elements of the operands.  For
32868example, in the code below, each of the 4 elements in A is added to the
32869corresponding 4 elements in B and the resulting vector is stored in C.
32870
32871     typedef int v4si __attribute__ ((vector_size (16)));
32872
32873     v4si a, b, c;
32874
32875     c = a + b;
32876
32877 Subtraction, multiplication, division, and the logical operations
32878operate in a similar manner.  Likewise, the result of using the unary
32879minus or complement operators on a vector type is a vector whose
32880elements are the negative or complemented values of the corresponding
32881elements in the operand.
32882
32883 It is possible to use shifting operators `<<', `>>' on integer-type
32884vectors. The operation is defined as following: `{a0, a1, ..., an} >>
32885{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector
32886operands must have the same number of elements.
32887
32888 For convenience, it is allowed to use a binary vector operation where
32889one operand is a scalar. In that case the compiler transforms the
32890scalar operand into a vector where each element is the scalar from the
32891operation. The transformation happens only if the scalar could be
32892safely converted to the vector-element type.  Consider the following
32893code.
32894
32895     typedef int v4si __attribute__ ((vector_size (16)));
32896
32897     v4si a, b, c;
32898     long l;
32899
32900     a = b + 1;    /* a = b + {1,1,1,1}; */
32901     a = 2 * b;    /* a = {2,2,2,2} * b; */
32902
32903     a = l + a;    /* Error, cannot convert long to int. */
32904
32905 Vectors can be subscripted as if the vector were an array with the
32906same number of elements and base type.  Out of bound accesses invoke
32907undefined behavior at run time.  Warnings for out of bound accesses for
32908vector subscription can be enabled with `-Warray-bounds'.
32909
32910 Vector comparison is supported with standard comparison operators:
32911`==, !=, <, <=, >, >='. Comparison operands can be vector expressions
32912of integer-type or real-type. Comparison between integer-type vectors
32913and real-type vectors are not supported.  The result of the comparison
32914is a vector of the same width and number of elements as the comparison
32915operands with a signed integral element type.
32916
32917 Vectors are compared element-wise producing 0 when comparison is false
32918and -1 (constant of the appropriate type where all bits are set)
32919otherwise. Consider the following example.
32920
32921     typedef int v4si __attribute__ ((vector_size (16)));
32922
32923     v4si a = {1,2,3,4};
32924     v4si b = {3,2,1,4};
32925     v4si c;
32926
32927     c = a >  b;     /* The result would be {0, 0,-1, 0}  */
32928     c = a == b;     /* The result would be {0,-1, 0,-1}  */
32929
32930 In C++, the ternary operator `?:' is available. `a?b:c', where `b' and
32931`c' are vectors of the same type and `a' is an integer vector with the
32932same number of elements of the same size as `b' and `c', computes all
32933three arguments and creates a vector `{a[0]?b[0]:c[0], a[1]?b[1]:c[1],
32934...}'.  Note that unlike in OpenCL, `a' is thus interpreted as `a != 0'
32935and not `a < 0'.  As in the case of binary operations, this syntax is
32936also accepted when one of `b' or `c' is a scalar that is then
32937transformed into a vector. If both `b' and `c' are scalars and the type
32938of `true?b:c' has the same size as the element type of `a', then `b'
32939and `c' are converted to a vector type whose elements have this type
32940and with the same number of elements as `a'.
32941
32942 In C++, the logic operators `!, &&, ||' are available for vectors.
32943`!v' is equivalent to `v == 0', `a && b' is equivalent to `a!=0 & b!=0'
32944and `a || b' is equivalent to `a!=0 | b!=0'.  For mixed operations
32945between a scalar `s' and a vector `v', `s && v' is equivalent to
32946`s?v!=0:0' (the evaluation is short-circuit) and `v && s' is equivalent
32947to `v!=0 & (s?-1:0)'.
32948
32949 Vector shuffling is available using functions `__builtin_shuffle (vec,
32950mask)' and `__builtin_shuffle (vec0, vec1, mask)'.  Both functions
32951construct a permutation of elements from one or two vectors and return
32952a vector of the same type as the input vector(s).  The MASK is an
32953integral vector with the same width (W) and element count (N) as the
32954output vector.
32955
32956 The elements of the input vectors are numbered in memory ordering of
32957VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
32958considered modulo N in the single-operand case and modulo 2*N in the
32959two-operand case.
32960
32961 Consider the following example,
32962
32963     typedef int v4si __attribute__ ((vector_size (16)));
32964
32965     v4si a = {1,2,3,4};
32966     v4si b = {5,6,7,8};
32967     v4si mask1 = {0,1,1,3};
32968     v4si mask2 = {0,4,2,5};
32969     v4si res;
32970
32971     res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
32972     res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */
32973
32974 Note that `__builtin_shuffle' is intentionally semantically compatible
32975with the OpenCL `shuffle' and `shuffle2' functions.
32976
32977 You can declare variables and use them in function calls and returns,
32978as well as in assignments and some casts.  You can specify a vector
32979type as a return type for a function.  Vector types can also be used as
32980function arguments.  It is possible to cast from one vector type to
32981another, provided they are of the same size (in fact, you can also cast
32982vectors to and from other datatypes of the same size).
32983
32984 You cannot operate between vectors of different lengths or different
32985signedness without a cast.
32986
32987
32988File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions
32989
329906.49 Support for `offsetof'
32991===========================
32992
32993GCC implements for both C and C++ a syntactic extension to implement
32994the `offsetof' macro.
32995
32996     primary:
32997             "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
32998
32999     offsetof_member_designator:
33000               `identifier'
33001             | offsetof_member_designator "." `identifier'
33002             | offsetof_member_designator "[" `expr' "]"
33003
33004 This extension is sufficient such that
33005
33006     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
33007
33008is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
33009dependent.  In either case, MEMBER may consist of a single identifier,
33010or a sequence of member accesses and array references.
33011
33012
33013File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions
33014
330156.50 Legacy `__sync' Built-in Functions for Atomic Memory Access
33016================================================================
33017
33018The following built-in functions are intended to be compatible with
33019those described in the `Intel Itanium Processor-specific Application
33020Binary Interface', section 7.4.  As such, they depart from the normal
33021GCC practice of using the `__builtin_' prefix, and further that they
33022are overloaded such that they work on multiple types.
33023
33024 The definition given in the Intel documentation allows only for the
33025use of the types `int', `long', `long long' as well as their unsigned
33026counterparts.  GCC allows any integral scalar or pointer type that is
330271, 2, 4 or 8 bytes in length.
33028
33029 Not all operations are supported by all target processors.  If a
33030particular operation cannot be implemented on the target processor, a
33031warning is generated and a call to an external function is generated.
33032The external function carries the same name as the built-in version,
33033with an additional suffix `_N' where N is the size of the data type.
33034
33035 In most cases, these built-in functions are considered a "full
33036barrier".  That is, no memory operand is moved across the operation,
33037either forward or backward.  Further, instructions are issued as
33038necessary to prevent the processor from speculating loads across the
33039operation and from queuing stores after the operation.
33040
33041 All of the routines are described in the Intel documentation to take
33042"an optional list of variables protected by the memory barrier".  It's
33043not clear what is meant by that; it could mean that _only_ the
33044following variables are protected, or it could mean that these variables
33045should in addition be protected.  At present GCC ignores this list and
33046protects all variables that are globally accessible.  If in the future
33047we make some use of this list, an empty list will continue to mean all
33048globally accessible variables.
33049
33050`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
33051`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
33052`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
33053`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
33054`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
33055`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
33056     These built-in functions perform the operation suggested by the
33057     name, and returns the value that had previously been in memory.
33058     That is,
33059
33060          { tmp = *ptr; *ptr OP= value; return tmp; }
33061          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand
33062
33063     _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' as
33064     `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & value'.
33065
33066`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
33067`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
33068`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
33069`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
33070`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
33071`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
33072     These built-in functions perform the operation suggested by the
33073     name, and return the new value.  That is,
33074
33075          { *ptr OP= value; return *ptr; }
33076          { *ptr = ~(*ptr & value); return *ptr; }   // nand
33077
33078     _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' as
33079     `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & value'.
33080
33081`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
33082`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
33083     These built-in functions perform an atomic compare and swap.  That
33084     is, if the current value of `*PTR' is OLDVAL, then write NEWVAL
33085     into `*PTR'.
33086
33087     The "bool" version returns true if the comparison is successful and
33088     NEWVAL is written.  The "val" version returns the contents of
33089     `*PTR' before the operation.
33090
33091`__sync_synchronize (...)'
33092     This built-in function issues a full memory barrier.
33093
33094`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
33095     This built-in function, as described by Intel, is not a
33096     traditional test-and-set operation, but rather an atomic exchange
33097     operation.  It writes VALUE into `*PTR', and returns the previous
33098     contents of `*PTR'.
33099
33100     Many targets have only minimal support for such locks, and do not
33101     support a full exchange operation.  In this case, a target may
33102     support reduced functionality here by which the _only_ valid value
33103     to store is the immediate constant 1.  The exact value actually
33104     stored in `*PTR' is implementation defined.
33105
33106     This built-in function is not a full barrier, but rather an
33107     "acquire barrier".  This means that references after the operation
33108     cannot move to (or be speculated to) before the operation, but
33109     previous memory stores may not be globally visible yet, and
33110     previous memory loads may not yet be satisfied.
33111
33112`void __sync_lock_release (TYPE *ptr, ...)'
33113     This built-in function releases the lock acquired by
33114     `__sync_lock_test_and_set'.  Normally this means writing the
33115     constant 0 to `*PTR'.
33116
33117     This built-in function is not a full barrier, but rather a
33118     "release barrier".  This means that all previous memory stores are
33119     globally visible, and all previous memory loads have been
33120     satisfied, but following memory reads are not prevented from being
33121     speculated to before the barrier.
33122
33123
33124File: gcc.info,  Node: __atomic Builtins,  Next: Integer Overflow Builtins,  Prev: __sync Builtins,  Up: C Extensions
33125
331266.51 Built-in Functions for Memory Model Aware Atomic Operations
33127================================================================
33128
33129The following built-in functions approximately match the requirements
33130for C++11 memory model. Many are similar to the `__sync' prefixed
33131built-in functions, but all also have a memory model parameter.  These
33132are all identified by being prefixed with `__atomic', and most are
33133overloaded such that they work with multiple types.
33134
33135 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8
33136bytes in length. 16-byte integral types are also allowed if `__int128'
33137(*note __int128::) is supported by the architecture.
33138
33139 Target architectures are encouraged to provide their own patterns for
33140each of these built-in functions.  If no target is provided, the
33141original non-memory model set of `__sync' atomic built-in functions are
33142utilized, along with any required synchronization fences surrounding it
33143in order to achieve the proper behavior.  Execution in this case is
33144subject to the same restrictions as those built-in functions.
33145
33146 If there is no pattern or mechanism to provide a lock free instruction
33147sequence, a call is made to an external routine with the same parameters
33148to be resolved at run time.
33149
33150 The four non-arithmetic functions (load, store, exchange, and
33151compare_exchange) all have a generic version as well.  This generic
33152version works on any data type.  If the data type size maps to one of
33153the integral sizes that may have lock free support, the generic version
33154utilizes the lock free built-in function.  Otherwise an external call
33155is left to be resolved at run time.  This external call is the same
33156format with the addition of a `size_t' parameter inserted as the first
33157parameter indicating the size of the object being pointed to.  All
33158objects must be the same size.
33159
33160 There are 6 different memory models that can be specified.  These map
33161to the same names in the C++11 standard.  Refer there or to the GCC
33162wiki on atomic synchronization
33163(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed
33164definitions.  These memory models integrate both barriers to code
33165motion as well as synchronization requirements with other threads.
33166These are listed in approximately ascending order of strength. It is
33167also possible to use target specific flags for memory model flags, like
33168Hardware Lock Elision.
33169
33170`__ATOMIC_RELAXED'
33171     No barriers or synchronization.
33172
33173`__ATOMIC_CONSUME'
33174     Data dependency only for both barrier and synchronization with
33175     another thread.
33176
33177`__ATOMIC_ACQUIRE'
33178     Barrier to hoisting of code and synchronizes with release (or
33179     stronger) semantic stores from another thread.
33180
33181`__ATOMIC_RELEASE'
33182     Barrier to sinking of code and synchronizes with acquire (or
33183     stronger) semantic loads from another thread.
33184
33185`__ATOMIC_ACQ_REL'
33186     Full barrier in both directions and synchronizes with acquire
33187     loads and release stores in another thread.
33188
33189`__ATOMIC_SEQ_CST'
33190     Full barrier in both directions and synchronizes with acquire
33191     loads and release stores in all threads.
33192
33193 When implementing patterns for these built-in functions, the memory
33194model parameter can be ignored as long as the pattern implements the
33195most restrictive `__ATOMIC_SEQ_CST' model.  Any of the other memory
33196models execute correctly with this memory model but they may not
33197execute as efficiently as they could with a more appropriate
33198implementation of the relaxed requirements.
33199
33200 Note that the C++11 standard allows for the memory model parameter to
33201be determined at run time rather than at compile time.  These built-in
33202functions map any run-time value to `__ATOMIC_SEQ_CST' rather than
33203invoke a runtime library call or inline a switch statement.  This is
33204standard compliant, safe, and the simplest approach for now.
33205
33206 The memory model parameter is a signed int, but only the lower 16 bits
33207are reserved for the memory model.  The remainder of the signed int is
33208reserved for target use and should be 0.  Use of the predefined atomic
33209values ensures proper usage.
33210
33211 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel)
33212     This built-in function implements an atomic load operation.  It
33213     returns the contents of `*PTR'.
33214
33215     The valid memory model variants are `__ATOMIC_RELAXED',
33216     `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', and `__ATOMIC_CONSUME'.
33217
33218
33219 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
33220          memmodel)
33221     This is the generic version of an atomic load.  It returns the
33222     contents of `*PTR' in `*RET'.
33223
33224
33225 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
33226          memmodel)
33227     This built-in function implements an atomic store operation.  It
33228     writes `VAL' into `*PTR'.
33229
33230     The valid memory model variants are `__ATOMIC_RELAXED',
33231     `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
33232
33233
33234 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
33235          memmodel)
33236     This is the generic version of an atomic store.  It stores the
33237     value of `*VAL' into `*PTR'.
33238
33239
33240 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
33241          int memmodel)
33242     This built-in function implements an atomic exchange operation.
33243     It writes VAL into `*PTR', and returns the previous contents of
33244     `*PTR'.
33245
33246     The valid memory model variants are `__ATOMIC_RELAXED',
33247     `__ATOMIC_SEQ_CST', `__ATOMIC_ACQUIRE', `__ATOMIC_RELEASE', and
33248     `__ATOMIC_ACQ_REL'.
33249
33250
33251 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
33252          TYPE *ret, int memmodel)
33253     This is the generic version of an atomic exchange.  It stores the
33254     contents of `*VAL' into `*PTR'. The original value of `*PTR' is
33255     copied into `*RET'.
33256
33257
33258 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr,
33259          TYPE *expected, TYPE desired, bool weak, int
33260          success_memmodel, int failure_memmodel)
33261     This built-in function implements an atomic compare and exchange
33262     operation.  This compares the contents of `*PTR' with the contents
33263     of `*EXPECTED' and if equal, writes DESIRED into `*PTR'.  If they
33264     are not equal, the current contents of `*PTR' is written into
33265     `*EXPECTED'.  WEAK is true for weak compare_exchange, and false
33266     for the strong variation.  Many targets only offer the strong
33267     variation and ignore the parameter.  When in doubt, use the strong
33268     variation.
33269
33270     True is returned if DESIRED is written into `*PTR' and the
33271     execution is considered to conform to the memory model specified
33272     by SUCCESS_MEMMODEL.  There are no restrictions on what memory
33273     model can be used here.
33274
33275     False is returned otherwise, and the execution is considered to
33276     conform to FAILURE_MEMMODEL. This memory model cannot be
33277     `__ATOMIC_RELEASE' nor `__ATOMIC_ACQ_REL'.  It also cannot be a
33278     stronger model than that specified by SUCCESS_MEMMODEL.
33279
33280
33281 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
33282          *expected, TYPE *desired, bool weak, int success_memmodel,
33283          int failure_memmodel)
33284     This built-in function implements the generic version of
33285     `__atomic_compare_exchange'.  The function is virtually identical
33286     to `__atomic_compare_exchange_n', except the desired value is also
33287     a pointer.
33288
33289
33290 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val,
33291          int memmodel)
33292 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val,
33293          int memmodel)
33294 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val,
33295          int memmodel)
33296 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val,
33297          int memmodel)
33298 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
33299          memmodel)
33300 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
33301          int memmodel)
33302     These built-in functions perform the operation suggested by the
33303     name, and return the result of the operation. That is,
33304
33305          { *ptr OP= val; return *ptr; }
33306
33307     All memory models are valid.
33308
33309
33310 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val,
33311          int memmodel)
33312 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val,
33313          int memmodel)
33314 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val,
33315          int memmodel)
33316 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val,
33317          int memmodel)
33318 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
33319          memmodel)
33320 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
33321          int memmodel)
33322     These built-in functions perform the operation suggested by the
33323     name, and return the value that had previously been in `*PTR'.
33324     That is,
33325
33326          { tmp = *ptr; *ptr OP= val; return tmp; }
33327
33328     All memory models are valid.
33329
33330
33331 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
33332          memmodel)
33333     This built-in function performs an atomic test-and-set operation on
33334     the byte at `*PTR'.  The byte is set to some implementation
33335     defined nonzero "set" value and the return value is `true' if and
33336     only if the previous contents were "set".  It should be only used
33337     for operands of type `bool' or `char'. For other types only part
33338     of the value may be set.
33339
33340     All memory models are valid.
33341
33342
33343 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel)
33344     This built-in function performs an atomic clear operation on
33345     `*PTR'.  After the operation, `*PTR' contains 0.  It should be
33346     only used for operands of type `bool' or `char' and in conjunction
33347     with `__atomic_test_and_set'.  For other types it may only clear
33348     partially. If the type is not `bool' prefer using `__atomic_store'.
33349
33350     The valid memory model variants are `__ATOMIC_RELAXED',
33351     `__ATOMIC_SEQ_CST', and `__ATOMIC_RELEASE'.
33352
33353
33354 -- Built-in Function: void __atomic_thread_fence (int memmodel)
33355     This built-in function acts as a synchronization fence between
33356     threads based on the specified memory model.
33357
33358     All memory orders are valid.
33359
33360
33361 -- Built-in Function: void __atomic_signal_fence (int memmodel)
33362     This built-in function acts as a synchronization fence between a
33363     thread and signal handlers based in the same thread.
33364
33365     All memory orders are valid.
33366
33367
33368 -- Built-in Function: bool __atomic_always_lock_free (size_t size,
33369          void *ptr)
33370     This built-in function returns true if objects of SIZE bytes always
33371     generate lock free atomic instructions for the target architecture.
33372     SIZE must resolve to a compile-time constant and the result also
33373     resolves to a compile-time constant.
33374
33375     PTR is an optional pointer to the object that may be used to
33376     determine alignment.  A value of 0 indicates typical alignment
33377     should be used.  The compiler may also ignore this parameter.
33378
33379          if (_atomic_always_lock_free (sizeof (long long), 0))
33380
33381
33382 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
33383          *ptr)
33384     This built-in function returns true if objects of SIZE bytes always
33385     generate lock free atomic instructions for the target
33386     architecture.  If it is not known to be lock free a call is made
33387     to a runtime routine named `__atomic_is_lock_free'.
33388
33389     PTR is an optional pointer to the object that may be used to
33390     determine alignment.  A value of 0 indicates typical alignment
33391     should be used.  The compiler may also ignore this parameter.
33392
33393
33394File: gcc.info,  Node: Integer Overflow Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __atomic Builtins,  Up: C Extensions
33395
333966.52 Built-in Functions to Perform Arithmetic with Overflow Checking
33397====================================================================
33398
33399The following built-in functions allow performing simple arithmetic
33400operations together with checking whether the operations overflowed.
33401
33402 -- Built-in Function: bool __builtin_add_overflow (TYPE1 a, TYPE2 b,
33403          TYPE3 *res)
33404 -- Built-in Function: bool __builtin_sadd_overflow (int a, int b, int
33405          *res)
33406 -- Built-in Function: bool __builtin_saddl_overflow (long int a, long
33407          int b, long int *res)
33408 -- Built-in Function: bool __builtin_saddll_overflow (long long int a,
33409          long long int b, long int *res)
33410 -- Built-in Function: bool __builtin_uadd_overflow (unsigned int a,
33411          unsigned int b, unsigned int *res)
33412 -- Built-in Function: bool __builtin_uaddl_overflow (unsigned long int
33413          a, unsigned long int b, unsigned long int *res)
33414 -- Built-in Function: bool __builtin_uaddll_overflow (unsigned long
33415          long int a, unsigned long long int b, unsigned long int *res)
33416     These built-in functions promote the first two operands into
33417     infinite precision signed type and perform addition on those
33418     promoted operands.  The result is then cast to the type the third
33419     pointer argument points to and stored there.  If the stored result
33420     is equal to the infinite precision result, the built-in functions
33421     return false, otherwise they return true.  As the addition is
33422     performed in infinite signed precision, these built-in functions
33423     have fully defined behavior for all argument values.
33424
33425     The first built-in function allows arbitrary integral types for
33426     operands and the result type must be pointer to some integer type,
33427     the rest of the built-in functions have explicit integer types.
33428
33429     The compiler will attempt to use hardware instructions to implement
33430     these built-in functions where possible, like conditional jump on
33431     overflow after addition, conditional jump on carry etc.
33432
33433
33434 -- Built-in Function: bool __builtin_sub_overflow (TYPE1 a, TYPE2 b,
33435          TYPE3 *res)
33436 -- Built-in Function: bool __builtin_ssub_overflow (int a, int b, int
33437          *res)
33438 -- Built-in Function: bool __builtin_ssubl_overflow (long int a, long
33439          int b, long int *res)
33440 -- Built-in Function: bool __builtin_ssubll_overflow (long long int a,
33441          long long int b, long int *res)
33442 -- Built-in Function: bool __builtin_usub_overflow (unsigned int a,
33443          unsigned int b, unsigned int *res)
33444 -- Built-in Function: bool __builtin_usubl_overflow (unsigned long int
33445          a, unsigned long int b, unsigned long int *res)
33446 -- Built-in Function: bool __builtin_usubll_overflow (unsigned long
33447          long int a, unsigned long long int b, unsigned long int *res)
33448     These built-in functions are similar to the add overflow checking
33449     built-in functions above, except they perform subtraction,
33450     subtract the second argument from the first one, instead of
33451     addition.
33452
33453
33454 -- Built-in Function: bool __builtin_mul_overflow (TYPE1 a, TYPE2 b,
33455          TYPE3 *res)
33456 -- Built-in Function: bool __builtin_smul_overflow (int a, int b, int
33457          *res)
33458 -- Built-in Function: bool __builtin_smull_overflow (long int a, long
33459          int b, long int *res)
33460 -- Built-in Function: bool __builtin_smulll_overflow (long long int a,
33461          long long int b, long int *res)
33462 -- Built-in Function: bool __builtin_umul_overflow (unsigned int a,
33463          unsigned int b, unsigned int *res)
33464 -- Built-in Function: bool __builtin_umull_overflow (unsigned long int
33465          a, unsigned long int b, unsigned long int *res)
33466 -- Built-in Function: bool __builtin_umulll_overflow (unsigned long
33467          long int a, unsigned long long int b, unsigned long int *res)
33468     These built-in functions are similar to the add overflow checking
33469     built-in functions above, except they perform multiplication,
33470     instead of addition.
33471
33472
33473
33474File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: Integer Overflow Builtins,  Up: C Extensions
33475
334766.53 x86-Specific Memory Model Extensions for Transactional Memory
33477==================================================================
33478
33479The x86 architecture supports additional memory ordering flags to mark
33480lock critical sections for hardware lock elision.  These must be
33481specified in addition to an existing memory model to atomic intrinsics.
33482
33483`__ATOMIC_HLE_ACQUIRE'
33484     Start lock elision on a lock variable.  Memory model must be
33485     `__ATOMIC_ACQUIRE' or stronger.
33486
33487`__ATOMIC_HLE_RELEASE'
33488     End lock elision on a lock variable.  Memory model must be
33489     `__ATOMIC_RELEASE' or stronger.
33490
33491 When a lock acquire fails it is required for good performance to abort
33492the transaction quickly. This can be done with a `_mm_pause'
33493
33494     #include <immintrin.h> // For _mm_pause
33495
33496     int lockvar;
33497
33498     /* Acquire lock with lock elision */
33499     while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
33500         _mm_pause(); /* Abort failed transaction */
33501     ...
33502     /* Free lock with lock elision */
33503     __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);
33504
33505
33506File: gcc.info,  Node: Object Size Checking,  Next: Pointer Bounds Checker builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions
33507
335086.54 Object Size Checking Built-in Functions
33509============================================
33510
33511GCC implements a limited buffer overflow protection mechanism that can
33512prevent some buffer overflow attacks.
33513
33514 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
33515          TYPE)
33516     is a built-in construct that returns a constant number of bytes
33517     from PTR to the end of the object PTR pointer points to (if known
33518     at compile time).  `__builtin_object_size' never evaluates its
33519     arguments for side-effects.  If there are any side-effects in
33520     them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
33521     for TYPE 2 or 3.  If there are multiple objects PTR can point to
33522     and all of them are known at compile time, the returned number is
33523     the maximum of remaining byte counts in those objects if TYPE & 2
33524     is 0 and minimum if nonzero.  If it is not possible to determine
33525     which objects PTR points to at compile time,
33526     `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
33527     1 and `(size_t) 0' for TYPE 2 or 3.
33528
33529     TYPE is an integer constant from 0 to 3.  If the least significant
33530     bit is clear, objects are whole variables, if it is set, a closest
33531     surrounding subobject is considered the object a pointer points to.
33532     The second bit determines if maximum or minimum of remaining bytes
33533     is computed.
33534
33535          struct V { char buf1[10]; int b; char buf2[10]; } var;
33536          char *p = &var.buf1[1], *q = &var.b;
33537
33538          /* Here the object p points to is var.  */
33539          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
33540          /* The subobject p points to is var.buf1.  */
33541          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
33542          /* The object q points to is var.  */
33543          assert (__builtin_object_size (q, 0)
33544                  == (char *) (&var + 1) - (char *) &var.b);
33545          /* The subobject q points to is var.b.  */
33546          assert (__builtin_object_size (q, 1) == sizeof (var.b));
33547
33548 There are built-in functions added for many common string operation
33549functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is
33550provided.  This built-in has an additional last argument, which is the
33551number of bytes remaining in object the DEST argument points to or
33552`(size_t) -1' if the size is not known.
33553
33554 The built-in functions are optimized into the normal string functions
33555like `memcpy' if the last argument is `(size_t) -1' or if it is known
33556at compile time that the destination object will not be overflown.  If
33557the compiler can determine at compile time the object will be always
33558overflown, it issues a warning.
33559
33560 The intended use can be e.g.
33561
33562     #undef memcpy
33563     #define bos0(dest) __builtin_object_size (dest, 0)
33564     #define memcpy(dest, src, n) \
33565       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
33566
33567     char *volatile p;
33568     char buf[10];
33569     /* It is unknown what object p points to, so this is optimized
33570        into plain memcpy - no checking is possible.  */
33571     memcpy (p, "abcde", n);
33572     /* Destination is known and length too.  It is known at compile
33573        time there will be no overflow.  */
33574     memcpy (&buf[5], "abcde", 5);
33575     /* Destination is known, but the length is not known at compile time.
33576        This will result in __memcpy_chk call that can check for overflow
33577        at run time.  */
33578     memcpy (&buf[5], "abcde", n);
33579     /* Destination is known and it is known at compile time there will
33580        be overflow.  There will be a warning and __memcpy_chk call that
33581        will abort the program at run time.  */
33582     memcpy (&buf[6], "abcde", 5);
33583
33584 Such built-in functions are provided for `memcpy', `mempcpy',
33585`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
33586`strncat'.
33587
33588 There are also checking built-in functions for formatted output
33589functions.
33590     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
33591     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
33592                                   const char *fmt, ...);
33593     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
33594                                   va_list ap);
33595     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
33596                                    const char *fmt, va_list ap);
33597
33598 The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
33599functions and can contain implementation specific flags on what
33600additional security measures the checking function might take, such as
33601handling `%n' differently.
33602
33603 The OS argument is the object size S points to, like in the other
33604built-in functions.  There is a small difference in the behavior
33605though, if OS is `(size_t) -1', the built-in functions are optimized
33606into the non-checking functions only if FLAG is 0, otherwise the
33607checking function is called with OS argument set to `(size_t) -1'.
33608
33609 In addition to this, there are checking built-in functions
33610`__builtin___printf_chk', `__builtin___vprintf_chk',
33611`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
33612just one additional argument, FLAG, right before format string FMT.  If
33613the compiler is able to optimize them to `fputc' etc. functions, it
33614does, otherwise the checking function is called and the FLAG argument
33615passed to it.
33616
33617
33618File: gcc.info,  Node: Pointer Bounds Checker builtins,  Next: Cilk Plus Builtins,  Prev: Object Size Checking,  Up: C Extensions
33619
336206.55 Pointer Bounds Checker Built-in Functions
33621==============================================
33622
33623GCC provides a set of built-in functions to control Pointer Bounds
33624Checker instrumentation.  Note that all Pointer Bounds Checker builtins
33625can be used even if you compile with Pointer Bounds Checker off
33626(`-fno-check-pointer-bounds').  The behavior may differ in such case as
33627documented below.
33628
33629 -- Built-in Function: void * __builtin___bnd_set_ptr_bounds (const
33630          void *Q, size_t SIZE)
33631     This built-in function returns a new pointer with the value of Q,
33632     and associate it with the bounds [Q, Q+SIZE-1].  With Pointer
33633     Bounds Checker off, the built-in function just returns the first
33634     argument.
33635
33636          extern void *__wrap_malloc (size_t n)
33637          {
33638            void *p = (void *)__real_malloc (n);
33639            if (!p) return __builtin___bnd_null_ptr_bounds (p);
33640            return __builtin___bnd_set_ptr_bounds (p, n);
33641          }
33642
33643
33644 -- Built-in Function: void * __builtin___bnd_narrow_ptr_bounds (const
33645          void *P, const void *Q, size_t SIZE)
33646     This built-in function returns a new pointer with the value of P
33647     and associates it with the narrowed bounds formed by the
33648     intersection of bounds associated with Q and the bounds [P, P +
33649     SIZE - 1].  With Pointer Bounds Checker off, the built-in function
33650     just returns the first argument.
33651
33652          void init_objects (object *objs, size_t size)
33653          {
33654            size_t i;
33655            /* Initialize objects one-by-one passing pointers with bounds of
33656               an object, not the full array of objects.  */
33657            for (i = 0; i < size; i++)
33658              init_object (__builtin___bnd_narrow_ptr_bounds (objs + i, objs,
33659                                                              sizeof(object)));
33660          }
33661
33662
33663 -- Built-in Function: void * __builtin___bnd_copy_ptr_bounds (const
33664          void *Q, const void *R)
33665     This built-in function returns a new pointer with the value of Q,
33666     and associates it with the bounds already associated with pointer
33667     R.  With Pointer Bounds Checker off, the built-in function just
33668     returns the first argument.
33669
33670          /* Here is a way to get pointer to object's field but
33671             still with the full object's bounds.  */
33672          int *field_ptr = __builtin___bnd_copy_ptr_bounds (&objptr->int_field,
33673                                                            objptr);
33674
33675
33676 -- Built-in Function: void * __builtin___bnd_init_ptr_bounds (const
33677          void *Q)
33678     This built-in function returns a new pointer with the value of Q,
33679     and associates it with INIT (allowing full memory access) bounds.
33680     With Pointer Bounds Checker off, the built-in function just
33681     returns the first argument.
33682
33683
33684 -- Built-in Function: void * __builtin___bnd_null_ptr_bounds (const
33685          void *Q)
33686     This built-in function returns a new pointer with the value of Q,
33687     and associates it with NULL (allowing no memory access) bounds.
33688     With Pointer Bounds Checker off, the built-in function just
33689     returns the first argument.
33690
33691
33692 -- Built-in Function: void __builtin___bnd_store_ptr_bounds (const
33693          void **PTR_ADDR, const void *PTR_VAL)
33694     This built-in function stores the bounds associated with pointer
33695     PTR_VAL and location PTR_ADDR into Bounds Table.  This can be
33696     useful to propagate bounds from legacy code without touching the
33697     associated pointer's memory when pointers are copied as integers.
33698     With Pointer Bounds Checker off, the built-in function call is
33699     ignored.
33700
33701
33702 -- Built-in Function: void __builtin___bnd_chk_ptr_lbounds (const void
33703          *Q)
33704     This built-in function checks if the pointer Q is within the lower
33705     bound of its associated bounds.  With Pointer Bounds Checker off,
33706     the built-in function call is ignored.
33707
33708          extern void *__wrap_memset (void *dst, int c, size_t len)
33709          {
33710            if (len > 0)
33711              {
33712                __builtin___bnd_chk_ptr_lbounds (dst);
33713                __builtin___bnd_chk_ptr_ubounds ((char *)dst + len - 1);
33714                __real_memset (dst, c, len);
33715              }
33716            return dst;
33717          }
33718
33719
33720 -- Built-in Function: void __builtin___bnd_chk_ptr_ubounds (const void
33721          *Q)
33722     This built-in function checks if the pointer Q is within the upper
33723     bound of its associated bounds.  With Pointer Bounds Checker off,
33724     the built-in function call is ignored.
33725
33726
33727 -- Built-in Function: void __builtin___bnd_chk_ptr_bounds (const void
33728          *Q, size_t SIZE)
33729     This built-in function checks if [Q, Q + SIZE - 1] is within the
33730     lower and upper bounds associated with Q.  With Pointer Bounds
33731     Checker off, the built-in function call is ignored.
33732
33733          extern void *__wrap_memcpy (void *dst, const void *src, size_t n)
33734          {
33735            if (n > 0)
33736              {
33737                __bnd_chk_ptr_bounds (dst, n);
33738                __bnd_chk_ptr_bounds (src, n);
33739                __real_memcpy (dst, src, n);
33740              }
33741            return dst;
33742          }
33743
33744
33745 -- Built-in Function: const void * __builtin___bnd_get_ptr_lbound
33746          (const void *Q)
33747     This built-in function returns the lower bound associated with the
33748     pointer Q, as a pointer value.  This is useful for debugging using
33749     `printf'.  With Pointer Bounds Checker off, the built-in function
33750     returns 0.
33751
33752          void *lb = __builtin___bnd_get_ptr_lbound (q);
33753          void *ub = __builtin___bnd_get_ptr_ubound (q);
33754          printf ("q = %p  lb(q) = %p  ub(q) = %p", q, lb, ub);
33755
33756
33757 -- Built-in Function: const void * __builtin___bnd_get_ptr_ubound
33758          (const void *Q)
33759     This built-in function returns the upper bound (which is a
33760     pointer) associated with the pointer Q.  With Pointer Bounds
33761     Checker off, the built-in function returns -1.
33762
33763
33764
33765File: gcc.info,  Node: Cilk Plus Builtins,  Next: Other Builtins,  Prev: Pointer Bounds Checker builtins,  Up: C Extensions
33766
337676.56 Cilk Plus C/C++ Language Extension Built-in Functions
33768==========================================================
33769
33770GCC provides support for the following built-in reduction functions if
33771Cilk Plus is enabled. Cilk Plus can be enabled using the `-fcilkplus'
33772flag.
33773
33774   * `__sec_implicit_index'
33775
33776   * `__sec_reduce'
33777
33778   * `__sec_reduce_add'
33779
33780   * `__sec_reduce_all_nonzero'
33781
33782   * `__sec_reduce_all_zero'
33783
33784   * `__sec_reduce_any_nonzero'
33785
33786   * `__sec_reduce_any_zero'
33787
33788   * `__sec_reduce_max'
33789
33790   * `__sec_reduce_min'
33791
33792   * `__sec_reduce_max_ind'
33793
33794   * `__sec_reduce_min_ind'
33795
33796   * `__sec_reduce_mul'
33797
33798   * `__sec_reduce_mutating'
33799
33800 Further details and examples about these built-in functions are
33801described in the Cilk Plus language manual which can be found at
33802`http://www.cilkplus.org'.
33803
33804
33805File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Cilk Plus Builtins,  Up: C Extensions
33806
338076.57 Other Built-in Functions Provided by GCC
33808=============================================
33809
33810GCC provides a large number of built-in functions other than the ones
33811mentioned above.  Some of these are for internal use in the processing
33812of exceptions or variable-length argument lists and are not documented
33813here because they may change from time to time; we do not recommend
33814general use of these functions.
33815
33816 The remaining functions are provided for optimization purposes.
33817
33818 GCC includes built-in versions of many of the functions in the standard
33819C library.  The versions prefixed with `__builtin_' are always treated
33820as having the same meaning as the C library function even if you
33821specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
33822these functions are only optimized in certain cases; if they are not
33823optimized in a particular case, a call to the library function is
33824emitted.
33825
33826 Outside strict ISO C mode (`-ansi', `-std=c90', `-std=c99' or
33827`-std=c11'), the functions `_exit', `alloca', `bcmp', `bzero',
33828`dcgettext', `dgettext', `dremf', `dreml', `drem', `exp10f', `exp10l',
33829`exp10', `ffsll', `ffsl', `ffs', `fprintf_unlocked', `fputs_unlocked',
33830`gammaf', `gammal', `gamma', `gammaf_r', `gammal_r', `gamma_r',
33831`gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1',
33832`jnf', `jnl', `jn', `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy',
33833`pow10f', `pow10l', `pow10', `printf_unlocked', `rindex', `scalbf',
33834`scalbl', `scalb', `signbit', `signbitf', `signbitl', `signbitd32',
33835`signbitd64', `signbitd128', `significandf', `significandl',
33836`significand', `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy',
33837`strcasecmp', `strdup', `strfmon', `strncasecmp', `strndup', `toascii',
33838`y0f', `y0l', `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be
33839handled as built-in functions.  All these functions have corresponding
33840versions prefixed with `__builtin_', which may be used even in strict
33841C90 mode.
33842
33843 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
33844`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
33845`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
33846`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
33847`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
33848`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
33849`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
33850`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
33851`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
33852`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
33853`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
33854`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
33855`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
33856`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
33857`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
33858`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
33859`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
33860`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
33861`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
33862`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
33863`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
33864`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
33865`remainderf', `remainderl', `remainder', `remquof', `remquol',
33866`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
33867`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
33868`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
33869`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
33870functions except in strict ISO C90 mode (`-ansi' or `-std=c90').
33871
33872 There are also built-in versions of the ISO C99 functions `acosf',
33873`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
33874`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
33875`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
33876`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
33877`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
33878`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
33879recognized in any mode since ISO C90 reserves these names for the
33880purpose to which ISO C99 puts them.  All these functions have
33881corresponding versions prefixed with `__builtin_'.
33882
33883 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
33884`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
33885`iswxdigit', `towlower' and `towupper' are handled as built-in functions
33886except in strict ISO C90 mode (`-ansi' or `-std=c90').
33887
33888 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
33889`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
33890`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
33891`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
33892`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
33893`log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow',
33894`printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf',
33895`sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy',
33896`strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk',
33897`strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and
33898`vsprintf' are all recognized as built-in functions unless
33899`-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified
33900for an individual function).  All of these functions have corresponding
33901versions prefixed with `__builtin_'.
33902
33903 GCC provides built-in versions of the ISO C99 floating-point comparison
33904macros that avoid raising exceptions for unordered operands.  They have
33905the same names as the standard macros ( `isgreater', `isgreaterequal',
33906`isless', `islessequal', `islessgreater', and `isunordered') , with
33907`__builtin_' prefixed.  We intend for a library implementor to be able
33908to simply `#define' each standard macro to its built-in equivalent.  In
33909the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign'
33910and `isnormal' built-ins used with `__builtin_' prefixed.  The `isinf'
33911and `isnan' built-in functions appear both with and without the
33912`__builtin_' prefix.
33913
33914 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
33915     You can use the built-in function `__builtin_types_compatible_p' to
33916     determine whether two types are the same.
33917
33918     This built-in function returns 1 if the unqualified versions of the
33919     types TYPE1 and TYPE2 (which are types, not expressions) are
33920     compatible, 0 otherwise.  The result of this built-in function can
33921     be used in integer constant expressions.
33922
33923     This built-in function ignores top level qualifiers (e.g., `const',
33924     `volatile').  For example, `int' is equivalent to `const int'.
33925
33926     The type `int[]' and `int[5]' are compatible.  On the other hand,
33927     `int' and `char *' are not compatible, even if the size of their
33928     types, on the particular architecture are the same.  Also, the
33929     amount of pointer indirection is taken into account when
33930     determining similarity.  Consequently, `short *' is not similar to
33931     `short **'.  Furthermore, two types that are typedefed are
33932     considered compatible if their underlying types are compatible.
33933
33934     An `enum' type is not considered to be compatible with another
33935     `enum' type even if both are compatible with the same integer
33936     type; this is what the C standard specifies.  For example, `enum
33937     {foo, bar}' is not similar to `enum {hot, dog}'.
33938
33939     You typically use this function in code whose execution varies
33940     depending on the arguments' types.  For example:
33941
33942          #define foo(x)                                                  \
33943            ({                                                           \
33944              typeof (x) tmp = (x);                                       \
33945              if (__builtin_types_compatible_p (typeof (x), long double)) \
33946                tmp = foo_long_double (tmp);                              \
33947              else if (__builtin_types_compatible_p (typeof (x), double)) \
33948                tmp = foo_double (tmp);                                   \
33949              else if (__builtin_types_compatible_p (typeof (x), float))  \
33950                tmp = foo_float (tmp);                                    \
33951              else                                                        \
33952                abort ();                                                 \
33953              tmp;                                                        \
33954            })
33955
33956     _Note:_ This construct is only available for C.
33957
33958
33959 -- Built-in Function: TYPE __builtin_call_with_static_chain (CALL_EXP,
33960          POINTER_EXP)
33961     The CALL_EXP expression must be a function call, and the
33962     POINTER_EXP expression must be a pointer.  The POINTER_EXP is
33963     passed to the function call in the target's static chain location.
33964     The result of builtin is the result of the function call.
33965
33966     _Note:_ This builtin is only available for C.  This builtin can be
33967     used to call Go closures from C.
33968
33969
33970 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
33971          EXP2)
33972     You can use the built-in function `__builtin_choose_expr' to
33973     evaluate code depending on the value of a constant expression.
33974     This built-in function returns EXP1 if CONST_EXP, which is an
33975     integer constant expression, is nonzero.  Otherwise it returns
33976     EXP2.
33977
33978     This built-in function is analogous to the `? :' operator in C,
33979     except that the expression returned has its type unaltered by
33980     promotion rules.  Also, the built-in function does not evaluate
33981     the expression that is not chosen.  For example, if CONST_EXP
33982     evaluates to true, EXP2 is not evaluated even if it has
33983     side-effects.
33984
33985     This built-in function can return an lvalue if the chosen argument
33986     is an lvalue.
33987
33988     If EXP1 is returned, the return type is the same as EXP1's type.
33989     Similarly, if EXP2 is returned, its return type is the same as
33990     EXP2.
33991
33992     Example:
33993
33994          #define foo(x)                                                    \
33995            __builtin_choose_expr (                                         \
33996              __builtin_types_compatible_p (typeof (x), double),            \
33997              foo_double (x),                                               \
33998              __builtin_choose_expr (                                       \
33999                __builtin_types_compatible_p (typeof (x), float),           \
34000                foo_float (x),                                              \
34001                /* The void expression results in a compile-time error  \
34002                   when assigning the result to something.  */          \
34003                (void)0))
34004
34005     _Note:_ This construct is only available for C.  Furthermore, the
34006     unused expression (EXP1 or EXP2 depending on the value of
34007     CONST_EXP) may still generate syntax errors.  This may change in
34008     future revisions.
34009
34010
34011 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)
34012     The built-in function `__builtin_complex' is provided for use in
34013     implementing the ISO C11 macros `CMPLXF', `CMPLX' and `CMPLXL'.
34014     REAL and IMAG must have the same type, a real binary
34015     floating-point type, and the result has the corresponding complex
34016     type with real and imaginary parts REAL and IMAG.  Unlike `REAL +
34017     I * IMAG', this works even when infinities, NaNs and negative
34018     zeros are involved.
34019
34020
34021 -- Built-in Function: int __builtin_constant_p (EXP)
34022     You can use the built-in function `__builtin_constant_p' to
34023     determine if a value is known to be constant at compile time and
34024     hence that GCC can perform constant-folding on expressions
34025     involving that value.  The argument of the function is the value
34026     to test.  The function returns the integer 1 if the argument is
34027     known to be a compile-time constant and 0 if it is not known to be
34028     a compile-time constant.  A return of 0 does not indicate that the
34029     value is _not_ a constant, but merely that GCC cannot prove it is
34030     a constant with the specified value of the `-O' option.
34031
34032     You typically use this function in an embedded application where
34033     memory is a critical resource.  If you have some complex
34034     calculation, you may want it to be folded if it involves
34035     constants, but need to call a function if it does not.  For
34036     example:
34037
34038          #define Scale_Value(X)      \
34039            (__builtin_constant_p (X) \
34040            ? ((X) * SCALE + OFFSET) : Scale (X))
34041
34042     You may use this built-in function in either a macro or an inline
34043     function.  However, if you use it in an inlined function and pass
34044     an argument of the function as the argument to the built-in, GCC
34045     never returns 1 when you call the inline function with a string
34046     constant or compound literal (*note Compound Literals::) and does
34047     not return 1 when you pass a constant numeric value to the inline
34048     function unless you specify the `-O' option.
34049
34050     You may also use `__builtin_constant_p' in initializers for static
34051     data.  For instance, you can write
34052
34053          static const int table[] = {
34054             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
34055             /* ... */
34056          };
34057
34058     This is an acceptable initializer even if EXPRESSION is not a
34059     constant expression, including the case where
34060     `__builtin_constant_p' returns 1 because EXPRESSION can be folded
34061     to a constant but EXPRESSION contains operands that are not
34062     otherwise permitted in a static initializer (for example, `0 &&
34063     foo ()').  GCC must be more conservative about evaluating the
34064     built-in in this case, because it has no opportunity to perform
34065     optimization.
34066
34067 -- Built-in Function: long __builtin_expect (long EXP, long C)
34068     You may use `__builtin_expect' to provide the compiler with branch
34069     prediction information.  In general, you should prefer to use
34070     actual profile feedback for this (`-fprofile-arcs'), as
34071     programmers are notoriously bad at predicting how their programs
34072     actually perform.  However, there are applications in which this
34073     data is hard to collect.
34074
34075     The return value is the value of EXP, which should be an integral
34076     expression.  The semantics of the built-in are that it is expected
34077     that EXP == C.  For example:
34078
34079          if (__builtin_expect (x, 0))
34080            foo ();
34081
34082     indicates that we do not expect to call `foo', since we expect `x'
34083     to be zero.  Since you are limited to integral expressions for
34084     EXP, you should use constructions such as
34085
34086          if (__builtin_expect (ptr != NULL, 1))
34087            foo (*ptr);
34088
34089     when testing pointer or floating-point values.
34090
34091 -- Built-in Function: void __builtin_trap (void)
34092     This function causes the program to exit abnormally.  GCC
34093     implements this function by using a target-dependent mechanism
34094     (such as intentionally executing an illegal instruction) or by
34095     calling `abort'.  The mechanism used may vary from release to
34096     release so you should not rely on any particular implementation.
34097
34098 -- Built-in Function: void __builtin_unreachable (void)
34099     If control flow reaches the point of the `__builtin_unreachable',
34100     the program is undefined.  It is useful in situations where the
34101     compiler cannot deduce the unreachability of the code.
34102
34103     One such case is immediately following an `asm' statement that
34104     either never terminates, or one that transfers control elsewhere
34105     and never returns.  In this example, without the
34106     `__builtin_unreachable', GCC issues a warning that control reaches
34107     the end of a non-void function.  It also generates code to return
34108     after the `asm'.
34109
34110          int f (int c, int v)
34111          {
34112            if (c)
34113              {
34114                return v;
34115              }
34116            else
34117              {
34118                asm("jmp error_handler");
34119                __builtin_unreachable ();
34120              }
34121          }
34122
34123     Because the `asm' statement unconditionally transfers control out
34124     of the function, control never reaches the end of the function
34125     body.  The `__builtin_unreachable' is in fact unreachable and
34126     communicates this fact to the compiler.
34127
34128     Another use for `__builtin_unreachable' is following a call a
34129     function that never returns but that is not declared
34130     `__attribute__((noreturn))', as in this example:
34131
34132          void function_that_never_returns (void);
34133
34134          int g (int c)
34135          {
34136            if (c)
34137              {
34138                return 1;
34139              }
34140            else
34141              {
34142                function_that_never_returns ();
34143                __builtin_unreachable ();
34144              }
34145          }
34146
34147
34148 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP,
34149          size_t ALIGN, ...)
34150     This function returns its first argument, and allows the compiler
34151     to assume that the returned pointer is at least ALIGN bytes
34152     aligned.  This built-in can have either two or three arguments, if
34153     it has three, the third argument should have integer type, and if
34154     it is nonzero means misalignment offset.  For example:
34155
34156          void *x = __builtin_assume_aligned (arg, 16);
34157
34158     means that the compiler can assume `x', set to `arg', is at least
34159     16-byte aligned, while:
34160
34161          void *x = __builtin_assume_aligned (arg, 32, 8);
34162
34163     means that the compiler can assume for `x', set to `arg', that
34164     `(char *) x - 8' is 32-byte aligned.
34165
34166 -- Built-in Function: int __builtin_LINE ()
34167     This function is the equivalent to the preprocessor `__LINE__'
34168     macro and returns the line number of the invocation of the
34169     built-in.  In a C++ default argument for a function F, it gets the
34170     line number of the call to F.
34171
34172 -- Built-in Function: const char * __builtin_FUNCTION ()
34173     This function is the equivalent to the preprocessor `__FUNCTION__'
34174     macro and returns the function name the invocation of the built-in
34175     is in.
34176
34177 -- Built-in Function: const char * __builtin_FILE ()
34178     This function is the equivalent to the preprocessor `__FILE__'
34179     macro and returns the file name the invocation of the built-in is
34180     in.  In a C++ default argument for a function F, it gets the file
34181     name of the call to F.
34182
34183 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
34184          *END)
34185     This function is used to flush the processor's instruction cache
34186     for the region of memory between BEGIN inclusive and END
34187     exclusive.  Some targets require that the instruction cache be
34188     flushed, after modifying memory containing code, in order to obtain
34189     deterministic behavior.
34190
34191     If the target does not require instruction cache flushes,
34192     `__builtin___clear_cache' has no effect.  Otherwise either
34193     instructions are emitted in-line to clear the instruction cache or
34194     a call to the `__clear_cache' function in libgcc is made.
34195
34196 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
34197     This function is used to minimize cache-miss latency by moving
34198     data into a cache before it is accessed.  You can insert calls to
34199     `__builtin_prefetch' into code for which you know addresses of
34200     data in memory that is likely to be accessed soon.  If the target
34201     supports them, data prefetch instructions are generated.  If the
34202     prefetch is done early enough before the access then the data will
34203     be in the cache by the time it is accessed.
34204
34205     The value of ADDR is the address of the memory to prefetch.  There
34206     are two optional arguments, RW and LOCALITY.  The value of RW is a
34207     compile-time constant one or zero; one means that the prefetch is
34208     preparing for a write to the memory address and zero, the default,
34209     means that the prefetch is preparing for a read.  The value
34210     LOCALITY must be a compile-time constant integer between zero and
34211     three.  A value of zero means that the data has no temporal
34212     locality, so it need not be left in the cache after the access.  A
34213     value of three means that the data has a high degree of temporal
34214     locality and should be left in all levels of cache possible.
34215     Values of one and two mean, respectively, a low or moderate degree
34216     of temporal locality.  The default is three.
34217
34218          for (i = 0; i < n; i++)
34219            {
34220              a[i] = a[i] + b[i];
34221              __builtin_prefetch (&a[i+j], 1, 1);
34222              __builtin_prefetch (&b[i+j], 0, 1);
34223              /* ... */
34224            }
34225
34226     Data prefetch does not generate faults if ADDR is invalid, but the
34227     address expression itself must be valid.  For example, a prefetch
34228     of `p->next' does not fault if `p->next' is not a valid address,
34229     but evaluation faults if `p' is not a valid address.
34230
34231     If the target does not support data prefetch, the address
34232     expression is evaluated if it includes side effects but no other
34233     code is generated and GCC does not issue a warning.
34234
34235 -- Built-in Function: double __builtin_huge_val (void)
34236     Returns a positive infinity, if supported by the floating-point
34237     format, else `DBL_MAX'.  This function is suitable for
34238     implementing the ISO C macro `HUGE_VAL'.
34239
34240 -- Built-in Function: float __builtin_huge_valf (void)
34241     Similar to `__builtin_huge_val', except the return type is `float'.
34242
34243 -- Built-in Function: long double __builtin_huge_vall (void)
34244     Similar to `__builtin_huge_val', except the return type is `long
34245     double'.
34246
34247 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
34248          int, ...)
34249     This built-in implements the C99 fpclassify functionality.  The
34250     first five int arguments should be the target library's notion of
34251     the possible FP classes and are used for return values.  They must
34252     be constant values and they must appear in this order: `FP_NAN',
34253     `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'.  The
34254     ellipsis is for exactly one floating-point value to classify.  GCC
34255     treats the last argument as type-generic, which means it does not
34256     do default promotion from float to double.
34257
34258 -- Built-in Function: double __builtin_inf (void)
34259     Similar to `__builtin_huge_val', except a warning is generated if
34260     the target floating-point format does not support infinities.
34261
34262 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
34263     Similar to `__builtin_inf', except the return type is `_Decimal32'.
34264
34265 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
34266     Similar to `__builtin_inf', except the return type is `_Decimal64'.
34267
34268 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
34269     Similar to `__builtin_inf', except the return type is
34270     `_Decimal128'.
34271
34272 -- Built-in Function: float __builtin_inff (void)
34273     Similar to `__builtin_inf', except the return type is `float'.
34274     This function is suitable for implementing the ISO C99 macro
34275     `INFINITY'.
34276
34277 -- Built-in Function: long double __builtin_infl (void)
34278     Similar to `__builtin_inf', except the return type is `long
34279     double'.
34280
34281 -- Built-in Function: int __builtin_isinf_sign (...)
34282     Similar to `isinf', except the return value is -1 for an argument
34283     of `-Inf' and 1 for an argument of `+Inf'.  Note while the
34284     parameter list is an ellipsis, this function only accepts exactly
34285     one floating-point argument.  GCC treats this parameter as
34286     type-generic, which means it does not do default promotion from
34287     float to double.
34288
34289 -- Built-in Function: double __builtin_nan (const char *str)
34290     This is an implementation of the ISO C99 function `nan'.
34291
34292     Since ISO C99 defines this function in terms of `strtod', which we
34293     do not implement, a description of the parsing is in order.  The
34294     string is parsed as by `strtol'; that is, the base is recognized by
34295     leading `0' or `0x' prefixes.  The number parsed is placed in the
34296     significand such that the least significant bit of the number is
34297     at the least significant bit of the significand.  The number is
34298     truncated to fit the significand field provided.  The significand
34299     is forced to be a quiet NaN.
34300
34301     This function, if given a string literal all of which would have
34302     been consumed by `strtol', is evaluated early enough that it is
34303     considered a compile-time constant.
34304
34305 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
34306     Similar to `__builtin_nan', except the return type is `_Decimal32'.
34307
34308 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
34309     Similar to `__builtin_nan', except the return type is `_Decimal64'.
34310
34311 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
34312     Similar to `__builtin_nan', except the return type is
34313     `_Decimal128'.
34314
34315 -- Built-in Function: float __builtin_nanf (const char *str)
34316     Similar to `__builtin_nan', except the return type is `float'.
34317
34318 -- Built-in Function: long double __builtin_nanl (const char *str)
34319     Similar to `__builtin_nan', except the return type is `long
34320     double'.
34321
34322 -- Built-in Function: double __builtin_nans (const char *str)
34323     Similar to `__builtin_nan', except the significand is forced to be
34324     a signaling NaN.  The `nans' function is proposed by WG14 N965.
34325
34326 -- Built-in Function: float __builtin_nansf (const char *str)
34327     Similar to `__builtin_nans', except the return type is `float'.
34328
34329 -- Built-in Function: long double __builtin_nansl (const char *str)
34330     Similar to `__builtin_nans', except the return type is `long
34331     double'.
34332
34333 -- Built-in Function: int __builtin_ffs (int x)
34334     Returns one plus the index of the least significant 1-bit of X, or
34335     if X is zero, returns zero.
34336
34337 -- Built-in Function: int __builtin_clz (unsigned int x)
34338     Returns the number of leading 0-bits in X, starting at the most
34339     significant bit position.  If X is 0, the result is undefined.
34340
34341 -- Built-in Function: int __builtin_ctz (unsigned int x)
34342     Returns the number of trailing 0-bits in X, starting at the least
34343     significant bit position.  If X is 0, the result is undefined.
34344
34345 -- Built-in Function: int __builtin_clrsb (int x)
34346     Returns the number of leading redundant sign bits in X, i.e. the
34347     number of bits following the most significant bit that are
34348     identical to it.  There are no special cases for 0 or other values.
34349
34350 -- Built-in Function: int __builtin_popcount (unsigned int x)
34351     Returns the number of 1-bits in X.
34352
34353 -- Built-in Function: int __builtin_parity (unsigned int x)
34354     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
34355
34356 -- Built-in Function: int __builtin_ffsl (long)
34357     Similar to `__builtin_ffs', except the argument type is `long'.
34358
34359 -- Built-in Function: int __builtin_clzl (unsigned long)
34360     Similar to `__builtin_clz', except the argument type is `unsigned
34361     long'.
34362
34363 -- Built-in Function: int __builtin_ctzl (unsigned long)
34364     Similar to `__builtin_ctz', except the argument type is `unsigned
34365     long'.
34366
34367 -- Built-in Function: int __builtin_clrsbl (long)
34368     Similar to `__builtin_clrsb', except the argument type is `long'.
34369
34370 -- Built-in Function: int __builtin_popcountl (unsigned long)
34371     Similar to `__builtin_popcount', except the argument type is
34372     `unsigned long'.
34373
34374 -- Built-in Function: int __builtin_parityl (unsigned long)
34375     Similar to `__builtin_parity', except the argument type is
34376     `unsigned long'.
34377
34378 -- Built-in Function: int __builtin_ffsll (long long)
34379     Similar to `__builtin_ffs', except the argument type is `long
34380     long'.
34381
34382 -- Built-in Function: int __builtin_clzll (unsigned long long)
34383     Similar to `__builtin_clz', except the argument type is `unsigned
34384     long long'.
34385
34386 -- Built-in Function: int __builtin_ctzll (unsigned long long)
34387     Similar to `__builtin_ctz', except the argument type is `unsigned
34388     long long'.
34389
34390 -- Built-in Function: int __builtin_clrsbll (long long)
34391     Similar to `__builtin_clrsb', except the argument type is `long
34392     long'.
34393
34394 -- Built-in Function: int __builtin_popcountll (unsigned long long)
34395     Similar to `__builtin_popcount', except the argument type is
34396     `unsigned long long'.
34397
34398 -- Built-in Function: int __builtin_parityll (unsigned long long)
34399     Similar to `__builtin_parity', except the argument type is
34400     `unsigned long long'.
34401
34402 -- Built-in Function: double __builtin_powi (double, int)
34403     Returns the first argument raised to the power of the second.
34404     Unlike the `pow' function no guarantees about precision and
34405     rounding are made.
34406
34407 -- Built-in Function: float __builtin_powif (float, int)
34408     Similar to `__builtin_powi', except the argument and return types
34409     are `float'.
34410
34411 -- Built-in Function: long double __builtin_powil (long double, int)
34412     Similar to `__builtin_powi', except the argument and return types
34413     are `long double'.
34414
34415 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
34416     Returns X with the order of the bytes reversed; for example,
34417     `0xaabb' becomes `0xbbaa'.  Byte here always means exactly 8 bits.
34418
34419 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
34420     Similar to `__builtin_bswap16', except the argument and return
34421     types are 32 bit.
34422
34423 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
34424     Similar to `__builtin_bswap32', except the argument and return
34425     types are 64 bit.
34426
34427
34428File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
34429
344306.58 Built-in Functions Specific to Particular Target Machines
34431==============================================================
34432
34433On some target machines, GCC supports many built-in functions specific
34434to those machines.  Generally these generate calls to specific machine
34435instructions, but allow the compiler to schedule those calls.
34436
34437* Menu:
34438
34439* AArch64 Built-in Functions::
34440* Alpha Built-in Functions::
34441* Altera Nios II Built-in Functions::
34442* ARC Built-in Functions::
34443* ARC SIMD Built-in Functions::
34444* ARM iWMMXt Built-in Functions::
34445* ARM C Language Extensions (ACLE)::
34446* ARM Floating Point Status and Control Intrinsics::
34447* AVR Built-in Functions::
34448* Blackfin Built-in Functions::
34449* FR-V Built-in Functions::
34450* MIPS DSP Built-in Functions::
34451* MIPS Paired-Single Support::
34452* MIPS Loongson Built-in Functions::
34453* Other MIPS Built-in Functions::
34454* MSP430 Built-in Functions::
34455* NDS32 Built-in Functions::
34456* picoChip Built-in Functions::
34457* PowerPC Built-in Functions::
34458* PowerPC AltiVec/VSX Built-in Functions::
34459* PowerPC Hardware Transactional Memory Built-in Functions::
34460* RX Built-in Functions::
34461* S/390 System z Built-in Functions::
34462* SH Built-in Functions::
34463* SPARC VIS Built-in Functions::
34464* SPU Built-in Functions::
34465* TI C6X Built-in Functions::
34466* TILE-Gx Built-in Functions::
34467* TILEPro Built-in Functions::
34468* x86 Built-in Functions::
34469* x86 transactional memory intrinsics::
34470
34471
34472File: gcc.info,  Node: AArch64 Built-in Functions,  Next: Alpha Built-in Functions,  Up: Target Builtins
34473
344746.58.1 AArch64 Built-in Functions
34475---------------------------------
34476
34477These built-in functions are available for the AArch64 family of
34478processors.
34479     unsigned int __builtin_aarch64_get_fpcr ()
34480     void __builtin_aarch64_set_fpcr (unsigned int)
34481     unsigned int __builtin_aarch64_get_fpsr ()
34482     void __builtin_aarch64_set_fpsr (unsigned int)
34483
34484
34485File: gcc.info,  Node: Alpha Built-in Functions,  Next: Altera Nios II Built-in Functions,  Prev: AArch64 Built-in Functions,  Up: Target Builtins
34486
344876.58.2 Alpha Built-in Functions
34488-------------------------------
34489
34490These built-in functions are available for the Alpha family of
34491processors, depending on the command-line switches used.
34492
34493 The following built-in functions are always available.  They all
34494generate the machine instruction that is part of the name.
34495
34496     long __builtin_alpha_implver (void)
34497     long __builtin_alpha_rpcc (void)
34498     long __builtin_alpha_amask (long)
34499     long __builtin_alpha_cmpbge (long, long)
34500     long __builtin_alpha_extbl (long, long)
34501     long __builtin_alpha_extwl (long, long)
34502     long __builtin_alpha_extll (long, long)
34503     long __builtin_alpha_extql (long, long)
34504     long __builtin_alpha_extwh (long, long)
34505     long __builtin_alpha_extlh (long, long)
34506     long __builtin_alpha_extqh (long, long)
34507     long __builtin_alpha_insbl (long, long)
34508     long __builtin_alpha_inswl (long, long)
34509     long __builtin_alpha_insll (long, long)
34510     long __builtin_alpha_insql (long, long)
34511     long __builtin_alpha_inswh (long, long)
34512     long __builtin_alpha_inslh (long, long)
34513     long __builtin_alpha_insqh (long, long)
34514     long __builtin_alpha_mskbl (long, long)
34515     long __builtin_alpha_mskwl (long, long)
34516     long __builtin_alpha_mskll (long, long)
34517     long __builtin_alpha_mskql (long, long)
34518     long __builtin_alpha_mskwh (long, long)
34519     long __builtin_alpha_msklh (long, long)
34520     long __builtin_alpha_mskqh (long, long)
34521     long __builtin_alpha_umulh (long, long)
34522     long __builtin_alpha_zap (long, long)
34523     long __builtin_alpha_zapnot (long, long)
34524
34525 The following built-in functions are always with `-mmax' or
34526`-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
34527machine instruction that is part of the name.
34528
34529     long __builtin_alpha_pklb (long)
34530     long __builtin_alpha_pkwb (long)
34531     long __builtin_alpha_unpkbl (long)
34532     long __builtin_alpha_unpkbw (long)
34533     long __builtin_alpha_minub8 (long, long)
34534     long __builtin_alpha_minsb8 (long, long)
34535     long __builtin_alpha_minuw4 (long, long)
34536     long __builtin_alpha_minsw4 (long, long)
34537     long __builtin_alpha_maxub8 (long, long)
34538     long __builtin_alpha_maxsb8 (long, long)
34539     long __builtin_alpha_maxuw4 (long, long)
34540     long __builtin_alpha_maxsw4 (long, long)
34541     long __builtin_alpha_perr (long, long)
34542
34543 The following built-in functions are always with `-mcix' or
34544`-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
34545machine instruction that is part of the name.
34546
34547     long __builtin_alpha_cttz (long)
34548     long __builtin_alpha_ctlz (long)
34549     long __builtin_alpha_ctpop (long)
34550
34551 The following built-in functions are available on systems that use the
34552OSF/1 PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL
34553calls, but when invoked with `-mtls-kernel', they invoke `rdval' and
34554`wrval'.
34555
34556     void *__builtin_thread_pointer (void)
34557     void __builtin_set_thread_pointer (void *)
34558
34559
34560File: gcc.info,  Node: Altera Nios II Built-in Functions,  Next: ARC Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
34561
345626.58.3 Altera Nios II Built-in Functions
34563----------------------------------------
34564
34565These built-in functions are available for the Altera Nios II family of
34566processors.
34567
34568 The following built-in functions are always available.  They all
34569generate the machine instruction that is part of the name.
34570
34571     int __builtin_ldbio (volatile const void *)
34572     int __builtin_ldbuio (volatile const void *)
34573     int __builtin_ldhio (volatile const void *)
34574     int __builtin_ldhuio (volatile const void *)
34575     int __builtin_ldwio (volatile const void *)
34576     void __builtin_stbio (volatile void *, int)
34577     void __builtin_sthio (volatile void *, int)
34578     void __builtin_stwio (volatile void *, int)
34579     void __builtin_sync (void)
34580     int __builtin_rdctl (int)
34581     void __builtin_wrctl (int, int)
34582
34583 The following built-in functions are always available.  They all
34584generate a Nios II Custom Instruction. The name of the function
34585represents the types that the function takes and returns. The letter
34586before the `n' is the return type or void if absent. The `n' represents
34587the first parameter to all the custom instructions, the custom
34588instruction number.  The two letters after the `n' represent the up to
34589two parameters to the function.
34590
34591 The letters represent the following data types:
34592`<no letter>'
34593     `void' for return type and no parameter for parameter types.
34594
34595`i'
34596     `int' for return type and parameter type
34597
34598`f'
34599     `float' for return type and parameter type
34600
34601`p'
34602     `void *' for return type and parameter type
34603
34604
34605 And the function names are:
34606     void __builtin_custom_n (void)
34607     void __builtin_custom_ni (int)
34608     void __builtin_custom_nf (float)
34609     void __builtin_custom_np (void *)
34610     void __builtin_custom_nii (int, int)
34611     void __builtin_custom_nif (int, float)
34612     void __builtin_custom_nip (int, void *)
34613     void __builtin_custom_nfi (float, int)
34614     void __builtin_custom_nff (float, float)
34615     void __builtin_custom_nfp (float, void *)
34616     void __builtin_custom_npi (void *, int)
34617     void __builtin_custom_npf (void *, float)
34618     void __builtin_custom_npp (void *, void *)
34619     int __builtin_custom_in (void)
34620     int __builtin_custom_ini (int)
34621     int __builtin_custom_inf (float)
34622     int __builtin_custom_inp (void *)
34623     int __builtin_custom_inii (int, int)
34624     int __builtin_custom_inif (int, float)
34625     int __builtin_custom_inip (int, void *)
34626     int __builtin_custom_infi (float, int)
34627     int __builtin_custom_inff (float, float)
34628     int __builtin_custom_infp (float, void *)
34629     int __builtin_custom_inpi (void *, int)
34630     int __builtin_custom_inpf (void *, float)
34631     int __builtin_custom_inpp (void *, void *)
34632     float __builtin_custom_fn (void)
34633     float __builtin_custom_fni (int)
34634     float __builtin_custom_fnf (float)
34635     float __builtin_custom_fnp (void *)
34636     float __builtin_custom_fnii (int, int)
34637     float __builtin_custom_fnif (int, float)
34638     float __builtin_custom_fnip (int, void *)
34639     float __builtin_custom_fnfi (float, int)
34640     float __builtin_custom_fnff (float, float)
34641     float __builtin_custom_fnfp (float, void *)
34642     float __builtin_custom_fnpi (void *, int)
34643     float __builtin_custom_fnpf (void *, float)
34644     float __builtin_custom_fnpp (void *, void *)
34645     void * __builtin_custom_pn (void)
34646     void * __builtin_custom_pni (int)
34647     void * __builtin_custom_pnf (float)
34648     void * __builtin_custom_pnp (void *)
34649     void * __builtin_custom_pnii (int, int)
34650     void * __builtin_custom_pnif (int, float)
34651     void * __builtin_custom_pnip (int, void *)
34652     void * __builtin_custom_pnfi (float, int)
34653     void * __builtin_custom_pnff (float, float)
34654     void * __builtin_custom_pnfp (float, void *)
34655     void * __builtin_custom_pnpi (void *, int)
34656     void * __builtin_custom_pnpf (void *, float)
34657     void * __builtin_custom_pnpp (void *, void *)
34658
34659
34660File: gcc.info,  Node: ARC Built-in Functions,  Next: ARC SIMD Built-in Functions,  Prev: Altera Nios II Built-in Functions,  Up: Target Builtins
34661
346626.58.4 ARC Built-in Functions
34663-----------------------------
34664
34665The following built-in functions are provided for ARC targets.  The
34666built-ins generate the corresponding assembly instructions.  In the
34667examples given below, the generated code often requires an operand or
34668result to be in a register.  Where necessary further code will be
34669generated to ensure this is true, but for brevity this is not described
34670in each case.
34671
34672 _Note:_ Using a built-in to generate an instruction not supported by a
34673target may cause problems. At present the compiler is not guaranteed to
34674detect such misuse, and as a result an internal compiler error may be
34675generated.
34676
34677 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int
34678          ALIGNVAL)
34679     Return 1 if VAL is known to have the byte alignment given by
34680     ALIGNVAL, otherwise return 0.  Note that this is different from
34681          __alignof__(*(char *)VAL) >= alignval
34682     because __alignof__ sees only the type of the dereference, whereas
34683     __builtin_arc_align uses alignment information from the pointer as
34684     well as from the pointed-to type.  The information available will
34685     depend on optimization level.
34686
34687 -- Built-in Function: void __builtin_arc_brk (void)
34688     Generates
34689          brk
34690
34691 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned
34692          int REGNO)
34693     The operand is the number of a register to be read.  Generates:
34694          mov  DEST, rREGNO
34695     where the value in DEST will be the result returned from the
34696     built-in.
34697
34698 -- Built-in Function: void __builtin_arc_core_write (unsigned int
34699          REGNO, unsigned int VAL)
34700     The first operand is the number of a register to be written, the
34701     second operand is a compile time constant to write into that
34702     register.  Generates:
34703          mov  rREGNO, VAL
34704
34705 -- Built-in Function: int __builtin_arc_divaw (int A, int B)
34706     Only available if either `-mcpu=ARC700' or `-meA' is set.
34707     Generates:
34708          divaw  DEST, A, B
34709     where the value in DEST will be the result returned from the
34710     built-in.
34711
34712 -- Built-in Function: void __builtin_arc_flag (unsigned int A)
34713     Generates
34714          flag  A
34715
34716 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR)
34717     The operand, AUXV, is the address of an auxiliary register and
34718     must be a compile time constant.  Generates:
34719          lr  DEST, [AUXR]
34720     Where the value in DEST will be the result returned from the
34721     built-in.
34722
34723 -- Built-in Function: void __builtin_arc_mul64 (int A, int B)
34724     Only available with `-mmul64'.  Generates:
34725          mul64  A, B
34726
34727 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A,
34728          unsigned int B)
34729     Only available with `-mmul64'.  Generates:
34730          mulu64  A, B
34731
34732 -- Built-in Function: void __builtin_arc_nop (void)
34733     Generates:
34734          nop
34735
34736 -- Built-in Function: int __builtin_arc_norm (int SRC)
34737     Only valid if the `norm' instruction is available through the
34738     `-mnorm' option or by default with `-mcpu=ARC700'.  Generates:
34739          norm  DEST, SRC
34740     Where the value in DEST will be the result returned from the
34741     built-in.
34742
34743 -- Built-in Function: short int __builtin_arc_normw (short int SRC)
34744     Only valid if the `normw' instruction is available through the
34745     `-mnorm' option or by default with `-mcpu=ARC700'.  Generates:
34746          normw  DEST, SRC
34747     Where the value in DEST will be the result returned from the
34748     built-in.
34749
34750 -- Built-in Function: void __builtin_arc_rtie (void)
34751     Generates:
34752          rtie
34753
34754 -- Built-in Function: void __builtin_arc_sleep (int A
34755     Generates:
34756          sleep  A
34757
34758 -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR,
34759          unsigned int VAL)
34760     The first argument, AUXV, is the address of an auxiliary register,
34761     the second argument, VAL, is a compile time constant to be written
34762     to the register.  Generates:
34763          sr  AUXR, [VAL]
34764
34765 -- Built-in Function: int __builtin_arc_swap (int SRC)
34766     Only valid with `-mswap'.  Generates:
34767          swap  DEST, SRC
34768     Where the value in DEST will be the result returned from the
34769     built-in.
34770
34771 -- Built-in Function: void __builtin_arc_swi (void)
34772     Generates:
34773          swi
34774
34775 -- Built-in Function: void __builtin_arc_sync (void)
34776     Only available with `-mcpu=ARC700'.  Generates:
34777          sync
34778
34779 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C)
34780     Only available with `-mcpu=ARC700'.  Generates:
34781          trap_s  C
34782
34783 -- Built-in Function: void __builtin_arc_unimp_s (void)
34784     Only available with `-mcpu=ARC700'.  Generates:
34785          unimp_s
34786
34787 The instructions generated by the following builtins are not
34788considered as candidates for scheduling.  They are not moved around by
34789the compiler during scheduling, and thus can be expected to appear
34790where they are put in the C code:
34791     __builtin_arc_brk()
34792     __builtin_arc_core_read()
34793     __builtin_arc_core_write()
34794     __builtin_arc_flag()
34795     __builtin_arc_lr()
34796     __builtin_arc_sleep()
34797     __builtin_arc_sr()
34798     __builtin_arc_swi()
34799
34800
34801File: gcc.info,  Node: ARC SIMD Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Prev: ARC Built-in Functions,  Up: Target Builtins
34802
348036.58.5 ARC SIMD Built-in Functions
34804----------------------------------
34805
34806SIMD builtins provided by the compiler can be used to generate the
34807vector instructions.  This section describes the available builtins and
34808their usage in programs.  With the `-msimd' option, the compiler
34809provides 128-bit vector types, which can be specified using the
34810`vector_size' attribute.  The header file `arc-simd.h' can be included
34811to use the following predefined types:
34812     typedef int __v4si   __attribute__((vector_size(16)));
34813     typedef short __v8hi __attribute__((vector_size(16)));
34814
34815 These types can be used to define 128-bit variables.  The built-in
34816functions listed in the following section can be used on these
34817variables to generate the vector operations.
34818
34819 For all builtins, `__builtin_arc_SOMEINSN', the header file
34820`arc-simd.h' also provides equivalent macros called `_SOMEINSN' that
34821can be used for programming ease and improved readability.  The
34822following macros for DMA control are also provided:
34823     #define _setup_dma_in_channel_reg _vdiwr
34824     #define _setup_dma_out_channel_reg _vdowr
34825
34826 The following is a complete list of all the SIMD built-ins provided
34827for ARC, grouped by calling signature.
34828
34829 The following take two `__v8hi' arguments and return a `__v8hi' result:
34830     __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi)
34831     __v8hi __builtin_arc_vaddw (__v8hi, __v8hi)
34832     __v8hi __builtin_arc_vand (__v8hi, __v8hi)
34833     __v8hi __builtin_arc_vandaw (__v8hi, __v8hi)
34834     __v8hi __builtin_arc_vavb (__v8hi, __v8hi)
34835     __v8hi __builtin_arc_vavrb (__v8hi, __v8hi)
34836     __v8hi __builtin_arc_vbic (__v8hi, __v8hi)
34837     __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi)
34838     __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi)
34839     __v8hi __builtin_arc_vdifw (__v8hi, __v8hi)
34840     __v8hi __builtin_arc_veqw (__v8hi, __v8hi)
34841     __v8hi __builtin_arc_vh264f (__v8hi, __v8hi)
34842     __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi)
34843     __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi)
34844     __v8hi __builtin_arc_vlew (__v8hi, __v8hi)
34845     __v8hi __builtin_arc_vltw (__v8hi, __v8hi)
34846     __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi)
34847     __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi)
34848     __v8hi __builtin_arc_vminaw (__v8hi, __v8hi)
34849     __v8hi __builtin_arc_vminw (__v8hi, __v8hi)
34850     __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi)
34851     __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi)
34852     __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi)
34853     __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi)
34854     __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi)
34855     __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi)
34856     __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi)
34857     __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi)
34858     __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi)
34859     __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi)
34860     __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi)
34861     __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi)
34862     __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi)
34863     __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi)
34864     __v8hi __builtin_arc_vmrb (__v8hi, __v8hi)
34865     __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi)
34866     __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi)
34867     __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi)
34868     __v8hi __builtin_arc_vmulw (__v8hi, __v8hi)
34869     __v8hi __builtin_arc_vnew (__v8hi, __v8hi)
34870     __v8hi __builtin_arc_vor (__v8hi, __v8hi)
34871     __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi)
34872     __v8hi __builtin_arc_vsubw (__v8hi, __v8hi)
34873     __v8hi __builtin_arc_vsummw (__v8hi, __v8hi)
34874     __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi)
34875     __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi)
34876     __v8hi __builtin_arc_vxor (__v8hi, __v8hi)
34877     __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi)
34878
34879 The following take one `__v8hi' and one `int' argument and return a
34880`__v8hi' result:
34881
34882     __v8hi __builtin_arc_vbaddw (__v8hi, int)
34883     __v8hi __builtin_arc_vbmaxw (__v8hi, int)
34884     __v8hi __builtin_arc_vbminw (__v8hi, int)
34885     __v8hi __builtin_arc_vbmulaw (__v8hi, int)
34886     __v8hi __builtin_arc_vbmulfw (__v8hi, int)
34887     __v8hi __builtin_arc_vbmulw (__v8hi, int)
34888     __v8hi __builtin_arc_vbrsubw (__v8hi, int)
34889     __v8hi __builtin_arc_vbsubw (__v8hi, int)
34890
34891 The following take one `__v8hi' argument and one `int' argument which
34892must be a 3-bit compile time constant indicating a register number
34893I0-I7.  They return a `__v8hi' result.
34894     __v8hi __builtin_arc_vasrw (__v8hi, const int)
34895     __v8hi __builtin_arc_vsr8 (__v8hi, const int)
34896     __v8hi __builtin_arc_vsr8aw (__v8hi, const int)
34897
34898 The following take one `__v8hi' argument and one `int' argument which
34899must be a 6-bit compile time constant.  They return a `__v8hi' result.
34900     __v8hi __builtin_arc_vasrpwbi (__v8hi, const int)
34901     __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int)
34902     __v8hi __builtin_arc_vasrrwi (__v8hi, const int)
34903     __v8hi __builtin_arc_vasrsrwi (__v8hi, const int)
34904     __v8hi __builtin_arc_vasrwi (__v8hi, const int)
34905     __v8hi __builtin_arc_vsr8awi (__v8hi, const int)
34906     __v8hi __builtin_arc_vsr8i (__v8hi, const int)
34907
34908 The following take one `__v8hi' argument and one `int' argument which
34909must be a 8-bit compile time constant.  They return a `__v8hi' result.
34910     __v8hi __builtin_arc_vd6tapf (__v8hi, const int)
34911     __v8hi __builtin_arc_vmvaw (__v8hi, const int)
34912     __v8hi __builtin_arc_vmvw (__v8hi, const int)
34913     __v8hi __builtin_arc_vmvzw (__v8hi, const int)
34914
34915 The following take two `int' arguments, the second of which which must
34916be a 8-bit compile time constant.  They return a `__v8hi' result:
34917     __v8hi __builtin_arc_vmovaw (int, const int)
34918     __v8hi __builtin_arc_vmovw (int, const int)
34919     __v8hi __builtin_arc_vmovzw (int, const int)
34920
34921 The following take a single `__v8hi' argument and return a `__v8hi'
34922result:
34923     __v8hi __builtin_arc_vabsaw (__v8hi)
34924     __v8hi __builtin_arc_vabsw (__v8hi)
34925     __v8hi __builtin_arc_vaddsuw (__v8hi)
34926     __v8hi __builtin_arc_vexch1 (__v8hi)
34927     __v8hi __builtin_arc_vexch2 (__v8hi)
34928     __v8hi __builtin_arc_vexch4 (__v8hi)
34929     __v8hi __builtin_arc_vsignw (__v8hi)
34930     __v8hi __builtin_arc_vupbaw (__v8hi)
34931     __v8hi __builtin_arc_vupbw (__v8hi)
34932     __v8hi __builtin_arc_vupsbaw (__v8hi)
34933     __v8hi __builtin_arc_vupsbw (__v8hi)
34934
34935 The following take two `int' arguments and return no result:
34936     void __builtin_arc_vdirun (int, int)
34937     void __builtin_arc_vdorun (int, int)
34938
34939 The following take two `int' arguments and return no result.  The
34940first argument must a 3-bit compile time constant indicating one of the
34941DR0-DR7 DMA setup channels:
34942     void __builtin_arc_vdiwr (const int, int)
34943     void __builtin_arc_vdowr (const int, int)
34944
34945 The following take an `int' argument and return no result:
34946     void __builtin_arc_vendrec (int)
34947     void __builtin_arc_vrec (int)
34948     void __builtin_arc_vrecrun (int)
34949     void __builtin_arc_vrun (int)
34950
34951 The following take a `__v8hi' argument and two `int' arguments and
34952return a `__v8hi' result.  The second argument must be a 3-bit compile
34953time constants, indicating one the registers I0-I7, and the third
34954argument must be an 8-bit compile time constant.
34955
34956 _Note:_ Although the equivalent hardware instructions do not take an
34957SIMD register as an operand, these builtins overwrite the relevant bits
34958of the `__v8hi' register provided as the first argument with the value
34959loaded from the `[Ib, u8]' location in the SDM.
34960
34961     __v8hi __builtin_arc_vld32 (__v8hi, const int, const int)
34962     __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int)
34963     __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int)
34964     __v8hi __builtin_arc_vld64 (__v8hi, const int, const int)
34965
34966 The following take two `int' arguments and return a `__v8hi' result.
34967The first argument must be a 3-bit compile time constants, indicating
34968one the registers I0-I7, and the second argument must be an 8-bit
34969compile time constant.
34970
34971     __v8hi __builtin_arc_vld128 (const int, const int)
34972     __v8hi __builtin_arc_vld64w (const int, const int)
34973
34974 The following take a `__v8hi' argument and two `int' arguments and
34975return no result.  The second argument must be a 3-bit compile time
34976constants, indicating one the registers I0-I7, and the third argument
34977must be an 8-bit compile time constant.
34978
34979     void __builtin_arc_vst128 (__v8hi, const int, const int)
34980     void __builtin_arc_vst64 (__v8hi, const int, const int)
34981
34982 The following take a `__v8hi' argument and three `int' arguments and
34983return no result.  The second argument must be a 3-bit compile-time
34984constant, identifying the 16-bit sub-register to be stored, the third
34985argument must be a 3-bit compile time constants, indicating one the
34986registers I0-I7, and the fourth argument must be an 8-bit compile time
34987constant.
34988
34989     void __builtin_arc_vst16_n (__v8hi, const int, const int, const int)
34990     void __builtin_arc_vst32_n (__v8hi, const int, const int, const int)
34991
34992
34993File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM C Language Extensions (ACLE),  Prev: ARC SIMD Built-in Functions,  Up: Target Builtins
34994
349956.58.6 ARM iWMMXt Built-in Functions
34996------------------------------------
34997
34998These built-in functions are available for the ARM family of processors
34999when the `-mcpu=iwmmxt' switch is used:
35000
35001     typedef int v2si __attribute__ ((vector_size (8)));
35002     typedef short v4hi __attribute__ ((vector_size (8)));
35003     typedef char v8qi __attribute__ ((vector_size (8)));
35004
35005     int __builtin_arm_getwcgr0 (void)
35006     void __builtin_arm_setwcgr0 (int)
35007     int __builtin_arm_getwcgr1 (void)
35008     void __builtin_arm_setwcgr1 (int)
35009     int __builtin_arm_getwcgr2 (void)
35010     void __builtin_arm_setwcgr2 (int)
35011     int __builtin_arm_getwcgr3 (void)
35012     void __builtin_arm_setwcgr3 (int)
35013     int __builtin_arm_textrmsb (v8qi, int)
35014     int __builtin_arm_textrmsh (v4hi, int)
35015     int __builtin_arm_textrmsw (v2si, int)
35016     int __builtin_arm_textrmub (v8qi, int)
35017     int __builtin_arm_textrmuh (v4hi, int)
35018     int __builtin_arm_textrmuw (v2si, int)
35019     v8qi __builtin_arm_tinsrb (v8qi, int, int)
35020     v4hi __builtin_arm_tinsrh (v4hi, int, int)
35021     v2si __builtin_arm_tinsrw (v2si, int, int)
35022     long long __builtin_arm_tmia (long long, int, int)
35023     long long __builtin_arm_tmiabb (long long, int, int)
35024     long long __builtin_arm_tmiabt (long long, int, int)
35025     long long __builtin_arm_tmiaph (long long, int, int)
35026     long long __builtin_arm_tmiatb (long long, int, int)
35027     long long __builtin_arm_tmiatt (long long, int, int)
35028     int __builtin_arm_tmovmskb (v8qi)
35029     int __builtin_arm_tmovmskh (v4hi)
35030     int __builtin_arm_tmovmskw (v2si)
35031     long long __builtin_arm_waccb (v8qi)
35032     long long __builtin_arm_wacch (v4hi)
35033     long long __builtin_arm_waccw (v2si)
35034     v8qi __builtin_arm_waddb (v8qi, v8qi)
35035     v8qi __builtin_arm_waddbss (v8qi, v8qi)
35036     v8qi __builtin_arm_waddbus (v8qi, v8qi)
35037     v4hi __builtin_arm_waddh (v4hi, v4hi)
35038     v4hi __builtin_arm_waddhss (v4hi, v4hi)
35039     v4hi __builtin_arm_waddhus (v4hi, v4hi)
35040     v2si __builtin_arm_waddw (v2si, v2si)
35041     v2si __builtin_arm_waddwss (v2si, v2si)
35042     v2si __builtin_arm_waddwus (v2si, v2si)
35043     v8qi __builtin_arm_walign (v8qi, v8qi, int)
35044     long long __builtin_arm_wand(long long, long long)
35045     long long __builtin_arm_wandn (long long, long long)
35046     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
35047     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
35048     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
35049     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
35050     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
35051     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
35052     v2si __builtin_arm_wcmpeqw (v2si, v2si)
35053     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
35054     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
35055     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
35056     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
35057     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
35058     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
35059     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
35060     long long __builtin_arm_wmacsz (v4hi, v4hi)
35061     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
35062     long long __builtin_arm_wmacuz (v4hi, v4hi)
35063     v4hi __builtin_arm_wmadds (v4hi, v4hi)
35064     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
35065     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
35066     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
35067     v2si __builtin_arm_wmaxsw (v2si, v2si)
35068     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
35069     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
35070     v2si __builtin_arm_wmaxuw (v2si, v2si)
35071     v8qi __builtin_arm_wminsb (v8qi, v8qi)
35072     v4hi __builtin_arm_wminsh (v4hi, v4hi)
35073     v2si __builtin_arm_wminsw (v2si, v2si)
35074     v8qi __builtin_arm_wminub (v8qi, v8qi)
35075     v4hi __builtin_arm_wminuh (v4hi, v4hi)
35076     v2si __builtin_arm_wminuw (v2si, v2si)
35077     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
35078     v4hi __builtin_arm_wmulul (v4hi, v4hi)
35079     v4hi __builtin_arm_wmulum (v4hi, v4hi)
35080     long long __builtin_arm_wor (long long, long long)
35081     v2si __builtin_arm_wpackdss (long long, long long)
35082     v2si __builtin_arm_wpackdus (long long, long long)
35083     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
35084     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
35085     v4hi __builtin_arm_wpackwss (v2si, v2si)
35086     v4hi __builtin_arm_wpackwus (v2si, v2si)
35087     long long __builtin_arm_wrord (long long, long long)
35088     long long __builtin_arm_wrordi (long long, int)
35089     v4hi __builtin_arm_wrorh (v4hi, long long)
35090     v4hi __builtin_arm_wrorhi (v4hi, int)
35091     v2si __builtin_arm_wrorw (v2si, long long)
35092     v2si __builtin_arm_wrorwi (v2si, int)
35093     v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
35094     v2si __builtin_arm_wsadbz (v8qi, v8qi)
35095     v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
35096     v2si __builtin_arm_wsadhz (v4hi, v4hi)
35097     v4hi __builtin_arm_wshufh (v4hi, int)
35098     long long __builtin_arm_wslld (long long, long long)
35099     long long __builtin_arm_wslldi (long long, int)
35100     v4hi __builtin_arm_wsllh (v4hi, long long)
35101     v4hi __builtin_arm_wsllhi (v4hi, int)
35102     v2si __builtin_arm_wsllw (v2si, long long)
35103     v2si __builtin_arm_wsllwi (v2si, int)
35104     long long __builtin_arm_wsrad (long long, long long)
35105     long long __builtin_arm_wsradi (long long, int)
35106     v4hi __builtin_arm_wsrah (v4hi, long long)
35107     v4hi __builtin_arm_wsrahi (v4hi, int)
35108     v2si __builtin_arm_wsraw (v2si, long long)
35109     v2si __builtin_arm_wsrawi (v2si, int)
35110     long long __builtin_arm_wsrld (long long, long long)
35111     long long __builtin_arm_wsrldi (long long, int)
35112     v4hi __builtin_arm_wsrlh (v4hi, long long)
35113     v4hi __builtin_arm_wsrlhi (v4hi, int)
35114     v2si __builtin_arm_wsrlw (v2si, long long)
35115     v2si __builtin_arm_wsrlwi (v2si, int)
35116     v8qi __builtin_arm_wsubb (v8qi, v8qi)
35117     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
35118     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
35119     v4hi __builtin_arm_wsubh (v4hi, v4hi)
35120     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
35121     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
35122     v2si __builtin_arm_wsubw (v2si, v2si)
35123     v2si __builtin_arm_wsubwss (v2si, v2si)
35124     v2si __builtin_arm_wsubwus (v2si, v2si)
35125     v4hi __builtin_arm_wunpckehsb (v8qi)
35126     v2si __builtin_arm_wunpckehsh (v4hi)
35127     long long __builtin_arm_wunpckehsw (v2si)
35128     v4hi __builtin_arm_wunpckehub (v8qi)
35129     v2si __builtin_arm_wunpckehuh (v4hi)
35130     long long __builtin_arm_wunpckehuw (v2si)
35131     v4hi __builtin_arm_wunpckelsb (v8qi)
35132     v2si __builtin_arm_wunpckelsh (v4hi)
35133     long long __builtin_arm_wunpckelsw (v2si)
35134     v4hi __builtin_arm_wunpckelub (v8qi)
35135     v2si __builtin_arm_wunpckeluh (v4hi)
35136     long long __builtin_arm_wunpckeluw (v2si)
35137     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
35138     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
35139     v2si __builtin_arm_wunpckihw (v2si, v2si)
35140     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
35141     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
35142     v2si __builtin_arm_wunpckilw (v2si, v2si)
35143     long long __builtin_arm_wxor (long long, long long)
35144     long long __builtin_arm_wzero ()
35145
35146
35147File: gcc.info,  Node: ARM C Language Extensions (ACLE),  Next: ARM Floating Point Status and Control Intrinsics,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins
35148
351496.58.7 ARM C Language Extensions (ACLE)
35150---------------------------------------
35151
35152GCC implements extensions for C as described in the ARM C Language
35153Extensions (ACLE) specification, which can be found at
35154`http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf'.
35155
35156 As a part of ACLE, GCC implements extensions for Advanced SIMD as
35157described in the ARM C Language Extensions Specification.  The complete
35158list of Advanced SIMD intrinsics can be found at
35159`http://infocenter.arm.com/help/topic/com.arm.doc.ihi0073a/IHI0073A_arm_neon_intrinsics_ref.pdf'.
35160The built-in intrinsics for the Advanced SIMD extension are available
35161when NEON is enabled.
35162
35163 Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully.
35164Both back ends support CRC32 intrinsics from `arm_acle.h'.  The ARM
35165back end's 16-bit floating-point Advanced SIMD intrinsics currently
35166comply to ACLE v1.1.  AArch64's back end does not have support for
3516716-bit floating point Advanced SIMD intrinsics yet.
35168
35169 See *Note ARM Options:: and *Note AArch64 Options:: for more
35170information on the availability of extensions.
35171
35172
35173File: gcc.info,  Node: ARM Floating Point Status and Control Intrinsics,  Next: AVR Built-in Functions,  Prev: ARM C Language Extensions (ACLE),  Up: Target Builtins
35174
351756.58.8 ARM Floating Point Status and Control Intrinsics
35176-------------------------------------------------------
35177
35178These built-in functions are available for the ARM family of processors
35179with floating-point unit.
35180
35181     unsigned int __builtin_arm_get_fpscr ()
35182     void __builtin_arm_set_fpscr (unsigned int)
35183
35184
35185File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM Floating Point Status and Control Intrinsics,  Up: Target Builtins
35186
351876.58.9 AVR Built-in Functions
35188-----------------------------
35189
35190For each built-in function for AVR, there is an equally named,
35191uppercase built-in macro defined. That way users can easily query if or
35192if not a specific built-in is implemented or not. For example, if
35193`__builtin_avr_nop' is available the macro `__BUILTIN_AVR_NOP' is
35194defined to `1' and undefined otherwise.
35195
35196 The following built-in functions map to the respective machine
35197instruction, i.e. `nop', `sei', `cli', `sleep', `wdr', `swap', `fmul',
35198`fmuls' resp. `fmulsu'. The three `fmul*' built-ins are implemented as
35199library call if no hardware multiplier is available.
35200
35201     void __builtin_avr_nop (void)
35202     void __builtin_avr_sei (void)
35203     void __builtin_avr_cli (void)
35204     void __builtin_avr_sleep (void)
35205     void __builtin_avr_wdr (void)
35206     unsigned char __builtin_avr_swap (unsigned char)
35207     unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
35208     int __builtin_avr_fmuls (char, char)
35209     int __builtin_avr_fmulsu (char, unsigned char)
35210
35211 In order to delay execution for a specific number of cycles, GCC
35212implements
35213     void __builtin_avr_delay_cycles (unsigned long ticks)
35214
35215`ticks' is the number of ticks to delay execution. Note that this
35216built-in does not take into account the effect of interrupts that might
35217increase delay time. `ticks' must be a compile-time integer constant;
35218delays with a variable number of cycles are not supported.
35219
35220     char __builtin_avr_flash_segment (const __memx void*)
35221
35222This built-in takes a byte address to the 24-bit *Note address space:
35223AVR Named Address Spaces. `__memx' and returns the number of the flash
35224segment (the 64 KiB chunk) where the address points to.  Counting
35225starts at `0'.  If the address does not point to flash memory, return
35226`-1'.
35227
35228     unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val)
35229
35230Insert bits from BITS into VAL and return the resulting value. The
35231nibbles of MAP determine how the insertion is performed: Let X be the
35232N-th nibble of MAP
35233  1. If X is `0xf', then the N-th bit of VAL is returned unaltered.
35234
35235  2. If X is in the range 0...7, then the N-th result bit is set to the
35236     X-th bit of BITS
35237
35238  3. If X is in the range 8...`0xe', then the N-th result bit is
35239     undefined.
35240
35241One typical use case for this built-in is adjusting input and output
35242values to non-contiguous port layouts. Some examples:
35243
35244     // same as val, bits is unused
35245     __builtin_avr_insert_bits (0xffffffff, bits, val)
35246
35247     // same as bits, val is unused
35248     __builtin_avr_insert_bits (0x76543210, bits, val)
35249
35250     // same as rotating bits by 4
35251     __builtin_avr_insert_bits (0x32107654, bits, 0)
35252
35253     // high nibble of result is the high nibble of val
35254     // low nibble of result is the low nibble of bits
35255     __builtin_avr_insert_bits (0xffff3210, bits, val)
35256
35257     // reverse the bit order of bits
35258     __builtin_avr_insert_bits (0x01234567, bits, 0)
35259
35260
35261File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins
35262
352636.58.10 Blackfin Built-in Functions
35264-----------------------------------
35265
35266Currently, there are two Blackfin-specific built-in functions.  These
35267are used for generating `CSYNC' and `SSYNC' machine insns without using
35268inline assembly; by using these built-in functions the compiler can
35269automatically add workarounds for hardware errata involving these
35270instructions.  These functions are named as follows:
35271
35272     void __builtin_bfin_csync (void)
35273     void __builtin_bfin_ssync (void)
35274
35275
35276File: gcc.info,  Node: FR-V Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
35277
352786.58.11 FR-V Built-in Functions
35279-------------------------------
35280
35281GCC provides many FR-V-specific built-in functions.  In general, these
35282functions are intended to be compatible with those described by `FR-V
35283Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
35284The two exceptions are `__MDUNPACKH' and `__MBTOHE', the GCC forms of
35285which pass 128-bit values by pointer rather than by value.
35286
35287 Most of the functions are named after specific FR-V instructions.
35288Such functions are said to be "directly mapped" and are summarized here
35289in tabular form.
35290
35291* Menu:
35292
35293* Argument Types::
35294* Directly-mapped Integer Functions::
35295* Directly-mapped Media Functions::
35296* Raw read/write Functions::
35297* Other Built-in Functions::
35298
35299
35300File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
35301
353026.58.11.1 Argument Types
35303........................
35304
35305The arguments to the built-in functions can be divided into three
35306groups: register numbers, compile-time constants and run-time values.
35307In order to make this classification clear at a glance, the arguments
35308and return values are given the following pseudo types:
35309
35310Pseudo type    Real C type            Constant?   Description
35311`uh'           `unsigned short'       No          an unsigned halfword
35312`uw1'          `unsigned int'         No          an unsigned word
35313`sw1'          `int'                  No          a signed word
35314`uw2'          `unsigned long long'   No          an unsigned doubleword
35315`sw2'          `long long'            No          a signed doubleword
35316`const'        `int'                  Yes         an integer constant
35317`acc'          `int'                  Yes         an ACC register number
35318`iacc'         `int'                  Yes         an IACC register number
35319
35320 These pseudo types are not defined by GCC, they are simply a notational
35321convenience used in this manual.
35322
35323 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
35324run time.  They correspond to register operands in the underlying FR-V
35325instructions.
35326
35327 `const' arguments represent immediate operands in the underlying FR-V
35328instructions.  They must be compile-time constants.
35329
35330 `acc' arguments are evaluated at compile time and specify the number
35331of an accumulator register.  For example, an `acc' argument of 2
35332selects the ACC2 register.
35333
35334 `iacc' arguments are similar to `acc' arguments but specify the number
35335of an IACC register.  See *note Other Built-in Functions:: for more
35336details.
35337
35338
35339File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
35340
353416.58.11.2 Directly-Mapped Integer Functions
35342...........................................
35343
35344The functions listed below map directly to FR-V I-type instructions.
35345
35346Function prototype               Example usage           Assembly output
35347`sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
35348`sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
35349`sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
35350`sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
35351`void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
35352`void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
35353`void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
35354`sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
35355`sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
35356`uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
35357
35358
35359File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
35360
353616.58.11.3 Directly-Mapped Media Functions
35362.........................................
35363
35364The functions listed below map directly to FR-V M-type instructions.
35365
35366Function prototype               Example usage           Assembly output
35367`uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
35368`void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
35369`sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
35370`uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
35371`uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
35372`void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
35373`uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
35374`uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
35375`void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
35376`void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
35377`void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
35378`uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
35379`uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
35380`uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
35381`uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
35382`void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
35383`void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
35384`void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
35385`void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
35386`uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
35387`uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
35388`void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
35389`void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
35390`uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
35391`uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
35392`uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
35393`void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
35394`void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
35395`uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
35396`uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
35397`uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
35398`sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
35399`uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
35400`sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
35401`uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
35402`sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
35403`uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
35404`void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
35405`void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
35406`void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
35407`void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
35408`void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
35409`void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
35410`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
35411`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
35412`uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
35413`uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
35414`uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
35415`sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
35416`uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
35417`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
35418`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
35419`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
35420`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
35421`sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
35422`sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
35423`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
35424`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
35425`void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
35426sw2)'
35427`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
35428`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
35429`void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
35430sw2)'
35431`void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
35432uw2)'
35433`sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
35434`uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
35435`sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
35436`sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
35437`uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
35438`void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
35439sw2)'
35440`void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
35441sw2)'
35442`uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
35443`uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
35444`uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
35445`uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
35446`sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
35447`uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
35448`uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
35449`sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
35450`uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
35451`void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
35452`sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
35453`uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
35454`void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
35455`uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
35456`uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
35457`void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
35458`void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
35459`uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
35460
35461
35462File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
35463
354646.58.11.4 Raw Read/Write Functions
35465..................................
35466
35467This sections describes built-in functions related to read and write
35468instructions to access memory.  These functions generate `membar'
35469instructions to flush the I/O load and stores where appropriate, as
35470described in Fujitsu's manual described above.
35471
35472`unsigned char __builtin_read8 (void *DATA)'
35473
35474`unsigned short __builtin_read16 (void *DATA)'
35475
35476`unsigned long __builtin_read32 (void *DATA)'
35477
35478`unsigned long long __builtin_read64 (void *DATA)'
35479
35480`void __builtin_write8 (void *DATA, unsigned char DATUM)'
35481
35482`void __builtin_write16 (void *DATA, unsigned short DATUM)'
35483
35484`void __builtin_write32 (void *DATA, unsigned long DATUM)'
35485
35486`void __builtin_write64 (void *DATA, unsigned long long DATUM)'
35487
35488
35489File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
35490
354916.58.11.5 Other Built-in Functions
35492..................................
35493
35494This section describes built-in functions that are not named after a
35495specific FR-V instruction.
35496
35497`sw2 __IACCreadll (iacc REG)'
35498     Return the full 64-bit value of IACC0.  The REG argument is
35499     reserved for future expansion and must be 0.
35500
35501`sw1 __IACCreadl (iacc REG)'
35502     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
35503     Other values of REG are rejected as invalid.
35504
35505`void __IACCsetll (iacc REG, sw2 X)'
35506     Set the full 64-bit value of IACC0 to X.  The REG argument is
35507     reserved for future expansion and must be 0.
35508
35509`void __IACCsetl (iacc REG, sw1 X)'
35510     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
35511     values of REG are rejected as invalid.
35512
35513`void __data_prefetch0 (const void *X)'
35514     Use the `dcpl' instruction to load the contents of address X into
35515     the data cache.
35516
35517`void __data_prefetch (const void *X)'
35518     Use the `nldub' instruction to load the contents of address X into
35519     the data cache.  The instruction is issued in slot I1.
35520
35521
35522File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: FR-V Built-in Functions,  Up: Target Builtins
35523
355246.58.12 MIPS DSP Built-in Functions
35525-----------------------------------
35526
35527The MIPS DSP Application-Specific Extension (ASE) includes new
35528instructions that are designed to improve the performance of DSP and
35529media applications.  It provides instructions that operate on packed
355308-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.
35531
35532 GCC supports MIPS DSP operations using both the generic vector
35533extensions (*note Vector Extensions::) and a collection of
35534MIPS-specific built-in functions.  Both kinds of support are enabled by
35535the `-mdsp' command-line option.
35536
35537 Revision 2 of the ASE was introduced in the second half of 2006.  This
35538revision adds extra instructions to the original ASE, but is otherwise
35539backwards-compatible with it.  You can select revision 2 using the
35540command-line option `-mdspr2'; this option implies `-mdsp'.
35541
35542 The SCOUNT and POS bits of the DSP control register are global.  The
35543WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and
35544POS bits.  During optimization, the compiler does not delete these
35545instructions and it does not delete calls to functions containing these
35546instructions.
35547
35548 At present, GCC only provides support for operations on 32-bit
35549vectors.  The vector type associated with 8-bit integer data is usually
35550called `v4i8', the vector type associated with Q7 is usually called
35551`v4q7', the vector type associated with 16-bit integer data is usually
35552called `v2i16', and the vector type associated with Q15 is usually
35553called `v2q15'.  They can be defined in C as follows:
35554
35555     typedef signed char v4i8 __attribute__ ((vector_size(4)));
35556     typedef signed char v4q7 __attribute__ ((vector_size(4)));
35557     typedef short v2i16 __attribute__ ((vector_size(4)));
35558     typedef short v2q15 __attribute__ ((vector_size(4)));
35559
35560 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same
35561way as aggregates.  For example:
35562
35563     v4i8 a = {1, 2, 3, 4};
35564     v4i8 b;
35565     b = (v4i8) {5, 6, 7, 8};
35566
35567     v2q15 c = {0x0fcb, 0x3a75};
35568     v2q15 d;
35569     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
35570
35571 _Note:_ The CPU's endianness determines the order in which values are
35572packed.  On little-endian targets, the first value is the least
35573significant and the last value is the most significant.  The opposite
35574order applies to big-endian targets.  For example, the code above sets
35575the lowest byte of `a' to `1' on little-endian targets and `4' on
35576big-endian targets.
35577
35578 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
35579representation.  As shown in this example, the integer representation
35580of a Q7 value can be obtained by multiplying the fractional value by
35581`0x1.0p7'.  The equivalent for Q15 values is to multiply by `0x1.0p15'.
35582The equivalent for Q31 values is to multiply by `0x1.0p31'.
35583
35584 The table below lists the `v4i8' and `v2q15' operations for which
35585hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
35586`d' are `v2q15' values.
35587
35588C code                               MIPS instruction
35589`a + b'                              `addu.qb'
35590`c + d'                              `addq.ph'
35591`a - b'                              `subu.qb'
35592`c - d'                              `subq.ph'
35593
35594 The table below lists the `v2i16' operation for which hardware support
35595exists for the DSP ASE REV 2.  `e' and `f' are `v2i16' values.
35596
35597C code                               MIPS instruction
35598`e * f'                              `mul.ph'
35599
35600 It is easier to describe the DSP built-in functions if we first define
35601the following types:
35602
35603     typedef int q31;
35604     typedef int i32;
35605     typedef unsigned int ui32;
35606     typedef long long a64;
35607
35608 `q31' and `i32' are actually the same as `int', but we use `q31' to
35609indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
35610value.  Similarly, `a64' is the same as `long long', but we use `a64'
35611to indicate values that are placed in one of the four DSP accumulators
35612(`$ac0', `$ac1', `$ac2' or `$ac3').
35613
35614 Also, some built-in functions prefer or require immediate numbers as
35615parameters, because the corresponding DSP instructions accept both
35616immediate numbers and register operands, or accept immediate numbers
35617only.  The immediate parameters are listed as follows.
35618
35619     imm0_3: 0 to 3.
35620     imm0_7: 0 to 7.
35621     imm0_15: 0 to 15.
35622     imm0_31: 0 to 31.
35623     imm0_63: 0 to 63.
35624     imm0_255: 0 to 255.
35625     imm_n32_31: -32 to 31.
35626     imm_n512_511: -512 to 511.
35627
35628 The following built-in functions map directly to a particular MIPS DSP
35629instruction.  Please refer to the architecture specification for
35630details on what each instruction does.
35631
35632     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
35633     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
35634     q31 __builtin_mips_addq_s_w (q31, q31)
35635     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
35636     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
35637     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
35638     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
35639     q31 __builtin_mips_subq_s_w (q31, q31)
35640     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
35641     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
35642     i32 __builtin_mips_addsc (i32, i32)
35643     i32 __builtin_mips_addwc (i32, i32)
35644     i32 __builtin_mips_modsub (i32, i32)
35645     i32 __builtin_mips_raddu_w_qb (v4i8)
35646     v2q15 __builtin_mips_absq_s_ph (v2q15)
35647     q31 __builtin_mips_absq_s_w (q31)
35648     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
35649     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
35650     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
35651     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
35652     q31 __builtin_mips_preceq_w_phl (v2q15)
35653     q31 __builtin_mips_preceq_w_phr (v2q15)
35654     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
35655     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
35656     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
35657     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
35658     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
35659     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
35660     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
35661     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
35662     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
35663     v4i8 __builtin_mips_shll_qb (v4i8, i32)
35664     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
35665     v2q15 __builtin_mips_shll_ph (v2q15, i32)
35666     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
35667     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
35668     q31 __builtin_mips_shll_s_w (q31, imm0_31)
35669     q31 __builtin_mips_shll_s_w (q31, i32)
35670     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
35671     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
35672     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
35673     v2q15 __builtin_mips_shra_ph (v2q15, i32)
35674     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
35675     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
35676     q31 __builtin_mips_shra_r_w (q31, imm0_31)
35677     q31 __builtin_mips_shra_r_w (q31, i32)
35678     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
35679     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
35680     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
35681     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
35682     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
35683     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
35684     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
35685     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
35686     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
35687     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
35688     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
35689     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
35690     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
35691     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
35692     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
35693     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
35694     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
35695     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
35696     i32 __builtin_mips_bitrev (i32)
35697     i32 __builtin_mips_insv (i32, i32)
35698     v4i8 __builtin_mips_repl_qb (imm0_255)
35699     v4i8 __builtin_mips_repl_qb (i32)
35700     v2q15 __builtin_mips_repl_ph (imm_n512_511)
35701     v2q15 __builtin_mips_repl_ph (i32)
35702     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
35703     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
35704     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
35705     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
35706     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
35707     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
35708     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
35709     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
35710     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
35711     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
35712     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
35713     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
35714     i32 __builtin_mips_extr_w (a64, imm0_31)
35715     i32 __builtin_mips_extr_w (a64, i32)
35716     i32 __builtin_mips_extr_r_w (a64, imm0_31)
35717     i32 __builtin_mips_extr_s_h (a64, i32)
35718     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
35719     i32 __builtin_mips_extr_rs_w (a64, i32)
35720     i32 __builtin_mips_extr_s_h (a64, imm0_31)
35721     i32 __builtin_mips_extr_r_w (a64, i32)
35722     i32 __builtin_mips_extp (a64, imm0_31)
35723     i32 __builtin_mips_extp (a64, i32)
35724     i32 __builtin_mips_extpdp (a64, imm0_31)
35725     i32 __builtin_mips_extpdp (a64, i32)
35726     a64 __builtin_mips_shilo (a64, imm_n32_31)
35727     a64 __builtin_mips_shilo (a64, i32)
35728     a64 __builtin_mips_mthlip (a64, i32)
35729     void __builtin_mips_wrdsp (i32, imm0_63)
35730     i32 __builtin_mips_rddsp (imm0_63)
35731     i32 __builtin_mips_lbux (void *, i32)
35732     i32 __builtin_mips_lhx (void *, i32)
35733     i32 __builtin_mips_lwx (void *, i32)
35734     a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
35735     i32 __builtin_mips_bposge32 (void)
35736     a64 __builtin_mips_madd (a64, i32, i32);
35737     a64 __builtin_mips_maddu (a64, ui32, ui32);
35738     a64 __builtin_mips_msub (a64, i32, i32);
35739     a64 __builtin_mips_msubu (a64, ui32, ui32);
35740     a64 __builtin_mips_mult (i32, i32);
35741     a64 __builtin_mips_multu (ui32, ui32);
35742
35743 The following built-in functions map directly to a particular MIPS DSP
35744REV 2 instruction.  Please refer to the architecture specification for
35745details on what each instruction does.
35746
35747     v4q7 __builtin_mips_absq_s_qb (v4q7);
35748     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
35749     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
35750     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
35751     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
35752     i32 __builtin_mips_append (i32, i32, imm0_31);
35753     i32 __builtin_mips_balign (i32, i32, imm0_3);
35754     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
35755     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
35756     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
35757     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
35758     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
35759     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
35760     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
35761     q31 __builtin_mips_mulq_rs_w (q31, q31);
35762     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
35763     q31 __builtin_mips_mulq_s_w (q31, q31);
35764     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
35765     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
35766     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
35767     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
35768     i32 __builtin_mips_prepend (i32, i32, imm0_31);
35769     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
35770     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
35771     v4i8 __builtin_mips_shra_qb (v4i8, i32);
35772     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
35773     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
35774     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
35775     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
35776     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
35777     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
35778     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
35779     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
35780     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
35781     q31 __builtin_mips_addqh_w (q31, q31);
35782     q31 __builtin_mips_addqh_r_w (q31, q31);
35783     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
35784     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
35785     q31 __builtin_mips_subqh_w (q31, q31);
35786     q31 __builtin_mips_subqh_r_w (q31, q31);
35787     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
35788     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
35789     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
35790     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
35791     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
35792     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);
35793
35794
35795File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
35796
357976.58.13 MIPS Paired-Single Support
35798----------------------------------
35799
35800The MIPS64 architecture includes a number of instructions that operate
35801on pairs of single-precision floating-point values.  Each pair is
35802packed into a 64-bit floating-point register, with one element being
35803designated the "upper half" and the other being designated the "lower
35804half".
35805
35806 GCC supports paired-single operations using both the generic vector
35807extensions (*note Vector Extensions::) and a collection of
35808MIPS-specific built-in functions.  Both kinds of support are enabled by
35809the `-mpaired-single' command-line option.
35810
35811 The vector type associated with paired-single values is usually called
35812`v2sf'.  It can be defined in C as follows:
35813
35814     typedef float v2sf __attribute__ ((vector_size (8)));
35815
35816 `v2sf' values are initialized in the same way as aggregates.  For
35817example:
35818
35819     v2sf a = {1.5, 9.1};
35820     v2sf b;
35821     float e, f;
35822     b = (v2sf) {e, f};
35823
35824 _Note:_ The CPU's endianness determines which value is stored in the
35825upper half of a register and which value is stored in the lower half.
35826On little-endian targets, the first value is the lower one and the
35827second value is the upper one.  The opposite order applies to
35828big-endian targets.  For example, the code above sets the lower half of
35829`a' to `1.5' on little-endian targets and `9.1' on big-endian targets.
35830
35831
35832File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
35833
358346.58.14 MIPS Loongson Built-in Functions
35835----------------------------------------
35836
35837GCC provides intrinsics to access the SIMD instructions provided by the
35838ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
35839available after inclusion of the `loongson.h' header file, operate on
35840the following 64-bit vector types:
35841
35842   * `uint8x8_t', a vector of eight unsigned 8-bit integers;
35843
35844   * `uint16x4_t', a vector of four unsigned 16-bit integers;
35845
35846   * `uint32x2_t', a vector of two unsigned 32-bit integers;
35847
35848   * `int8x8_t', a vector of eight signed 8-bit integers;
35849
35850   * `int16x4_t', a vector of four signed 16-bit integers;
35851
35852   * `int32x2_t', a vector of two signed 32-bit integers.
35853
35854 The intrinsics provided are listed below; each is named after the
35855machine instruction to which it corresponds, with suffixes added as
35856appropriate to distinguish intrinsics that expand to the same machine
35857instruction yet have different argument types.  Refer to the
35858architecture documentation for a description of the functionality of
35859each instruction.
35860
35861     int16x4_t packsswh (int32x2_t s, int32x2_t t);
35862     int8x8_t packsshb (int16x4_t s, int16x4_t t);
35863     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
35864     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
35865     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
35866     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
35867     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
35868     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
35869     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
35870     uint64_t paddd_u (uint64_t s, uint64_t t);
35871     int64_t paddd_s (int64_t s, int64_t t);
35872     int16x4_t paddsh (int16x4_t s, int16x4_t t);
35873     int8x8_t paddsb (int8x8_t s, int8x8_t t);
35874     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
35875     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
35876     uint64_t pandn_ud (uint64_t s, uint64_t t);
35877     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
35878     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
35879     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
35880     int64_t pandn_sd (int64_t s, int64_t t);
35881     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
35882     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
35883     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
35884     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
35885     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
35886     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
35887     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
35888     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
35889     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
35890     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
35891     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
35892     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
35893     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
35894     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
35895     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
35896     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
35897     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
35898     uint16x4_t pextrh_u (uint16x4_t s, int field);
35899     int16x4_t pextrh_s (int16x4_t s, int field);
35900     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
35901     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
35902     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
35903     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
35904     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
35905     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
35906     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
35907     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
35908     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
35909     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
35910     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
35911     int16x4_t pminsh (int16x4_t s, int16x4_t t);
35912     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
35913     uint8x8_t pmovmskb_u (uint8x8_t s);
35914     int8x8_t pmovmskb_s (int8x8_t s);
35915     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
35916     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
35917     int16x4_t pmullh (int16x4_t s, int16x4_t t);
35918     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
35919     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
35920     uint16x4_t biadd (uint8x8_t s);
35921     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
35922     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
35923     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
35924     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
35925     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
35926     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
35927     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
35928     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
35929     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
35930     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
35931     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
35932     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
35933     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
35934     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
35935     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
35936     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
35937     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
35938     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
35939     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
35940     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
35941     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
35942     uint64_t psubd_u (uint64_t s, uint64_t t);
35943     int64_t psubd_s (int64_t s, int64_t t);
35944     int16x4_t psubsh (int16x4_t s, int16x4_t t);
35945     int8x8_t psubsb (int8x8_t s, int8x8_t t);
35946     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
35947     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
35948     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
35949     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
35950     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
35951     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
35952     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
35953     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
35954     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
35955     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
35956     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
35957     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
35958     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
35959     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);
35960
35961* Menu:
35962
35963* Paired-Single Arithmetic::
35964* Paired-Single Built-in Functions::
35965* MIPS-3D Built-in Functions::
35966
35967
35968File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
35969
359706.58.14.1 Paired-Single Arithmetic
35971..................................
35972
35973The table below lists the `v2sf' operations for which hardware support
35974exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
35975value.
35976
35977C code                               MIPS instruction
35978`a + b'                              `add.ps'
35979`a - b'                              `sub.ps'
35980`-a'                                 `neg.ps'
35981`a * b'                              `mul.ps'
35982`a * b + c'                          `madd.ps'
35983`a * b - c'                          `msub.ps'
35984`-(a * b + c)'                       `nmadd.ps'
35985`-(a * b - c)'                       `nmsub.ps'
35986`x ? a : b'                          `movn.ps'/`movz.ps'
35987
35988 Note that the multiply-accumulate instructions can be disabled using
35989the command-line option `-mno-fused-madd'.
35990
35991
35992File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions
35993
359946.58.14.2 Paired-Single Built-in Functions
35995..........................................
35996
35997The following paired-single functions map directly to a particular MIPS
35998instruction.  Please refer to the architecture specification for
35999details on what each instruction does.
36000
36001`v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
36002     Pair lower lower (`pll.ps').
36003
36004`v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
36005     Pair upper lower (`pul.ps').
36006
36007`v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
36008     Pair lower upper (`plu.ps').
36009
36010`v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
36011     Pair upper upper (`puu.ps').
36012
36013`v2sf __builtin_mips_cvt_ps_s (float, float)'
36014     Convert pair to paired single (`cvt.ps.s').
36015
36016`float __builtin_mips_cvt_s_pl (v2sf)'
36017     Convert pair lower to single (`cvt.s.pl').
36018
36019`float __builtin_mips_cvt_s_pu (v2sf)'
36020     Convert pair upper to single (`cvt.s.pu').
36021
36022`v2sf __builtin_mips_abs_ps (v2sf)'
36023     Absolute value (`abs.ps').
36024
36025`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
36026     Align variable (`alnv.ps').
36027
36028     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
36029     otherwise the result is unpredictable.  Please read the
36030     instruction description for details.
36031
36032 The following multi-instruction functions are also available.  In each
36033case, COND can be any of the 16 floating-point conditions: `f', `un',
36034`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
36035`lt', `nge', `le' or `ngt'.
36036
36037`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
36038`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
36039     Conditional move based on floating-point comparison (`c.COND.ps',
36040     `movt.ps'/`movf.ps').
36041
36042     The `movt' functions return the value X computed by:
36043
36044          c.COND.ps CC,A,B
36045          mov.ps X,C
36046          movt.ps X,D,CC
36047
36048     The `movf' functions are similar but use `movf.ps' instead of
36049     `movt.ps'.
36050
36051`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
36052`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
36053     Comparison of two paired-single values (`c.COND.ps',
36054     `bc1t'/`bc1f').
36055
36056     These functions compare A and B using `c.COND.ps' and return
36057     either the upper or lower half of the result.  For example:
36058
36059          v2sf a, b;
36060          if (__builtin_mips_upper_c_eq_ps (a, b))
36061            upper_halves_are_equal ();
36062          else
36063            upper_halves_are_unequal ();
36064
36065          if (__builtin_mips_lower_c_eq_ps (a, b))
36066            lower_halves_are_equal ();
36067          else
36068            lower_halves_are_unequal ();
36069
36070
36071File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions
36072
360736.58.14.3 MIPS-3D Built-in Functions
36074....................................
36075
36076The MIPS-3D Application-Specific Extension (ASE) includes additional
36077paired-single instructions that are designed to improve the performance
36078of 3D graphics operations.  Support for these instructions is controlled
36079by the `-mips3d' command-line option.
36080
36081 The functions listed below map directly to a particular MIPS-3D
36082instruction.  Please refer to the architecture specification for more
36083details on what each instruction does.
36084
36085`v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
36086     Reduction add (`addr.ps').
36087
36088`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
36089     Reduction multiply (`mulr.ps').
36090
36091`v2sf __builtin_mips_cvt_pw_ps (v2sf)'
36092     Convert paired single to paired word (`cvt.pw.ps').
36093
36094`v2sf __builtin_mips_cvt_ps_pw (v2sf)'
36095     Convert paired word to paired single (`cvt.ps.pw').
36096
36097`float __builtin_mips_recip1_s (float)'
36098`double __builtin_mips_recip1_d (double)'
36099`v2sf __builtin_mips_recip1_ps (v2sf)'
36100     Reduced-precision reciprocal (sequence step 1) (`recip1.FMT').
36101
36102`float __builtin_mips_recip2_s (float, float)'
36103`double __builtin_mips_recip2_d (double, double)'
36104`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
36105     Reduced-precision reciprocal (sequence step 2) (`recip2.FMT').
36106
36107`float __builtin_mips_rsqrt1_s (float)'
36108`double __builtin_mips_rsqrt1_d (double)'
36109`v2sf __builtin_mips_rsqrt1_ps (v2sf)'
36110     Reduced-precision reciprocal square root (sequence step 1)
36111     (`rsqrt1.FMT').
36112
36113`float __builtin_mips_rsqrt2_s (float, float)'
36114`double __builtin_mips_rsqrt2_d (double, double)'
36115`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
36116     Reduced-precision reciprocal square root (sequence step 2)
36117     (`rsqrt2.FMT').
36118
36119 The following multi-instruction functions are also available.  In each
36120case, COND can be any of the 16 floating-point conditions: `f', `un',
36121`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
36122`lt', `nge', `le' or `ngt'.
36123
36124`int __builtin_mips_cabs_COND_s (float A, float B)'
36125`int __builtin_mips_cabs_COND_d (double A, double B)'
36126     Absolute comparison of two scalar values (`cabs.COND.FMT',
36127     `bc1t'/`bc1f').
36128
36129     These functions compare A and B using `cabs.COND.s' or
36130     `cabs.COND.d' and return the result as a boolean value.  For
36131     example:
36132
36133          float a, b;
36134          if (__builtin_mips_cabs_eq_s (a, b))
36135            true ();
36136          else
36137            false ();
36138
36139`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
36140`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
36141     Absolute comparison of two paired-single values (`cabs.COND.ps',
36142     `bc1t'/`bc1f').
36143
36144     These functions compare A and B using `cabs.COND.ps' and return
36145     either the upper or lower half of the result.  For example:
36146
36147          v2sf a, b;
36148          if (__builtin_mips_upper_cabs_eq_ps (a, b))
36149            upper_halves_are_equal ();
36150          else
36151            upper_halves_are_unequal ();
36152
36153          if (__builtin_mips_lower_cabs_eq_ps (a, b))
36154            lower_halves_are_equal ();
36155          else
36156            lower_halves_are_unequal ();
36157
36158`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
36159`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
36160     Conditional move based on absolute comparison (`cabs.COND.ps',
36161     `movt.ps'/`movf.ps').
36162
36163     The `movt' functions return the value X computed by:
36164
36165          cabs.COND.ps CC,A,B
36166          mov.ps X,C
36167          movt.ps X,D,CC
36168
36169     The `movf' functions are similar but use `movf.ps' instead of
36170     `movt.ps'.
36171
36172`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
36173`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
36174`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
36175`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
36176     Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
36177     `bc1any2t'/`bc1any2f').
36178
36179     These functions compare A and B using `c.COND.ps' or
36180     `cabs.COND.ps'.  The `any' forms return true if either result is
36181     true and the `all' forms return true if both results are true.
36182     For example:
36183
36184          v2sf a, b;
36185          if (__builtin_mips_any_c_eq_ps (a, b))
36186            one_is_true ();
36187          else
36188            both_are_false ();
36189
36190          if (__builtin_mips_all_c_eq_ps (a, b))
36191            both_are_true ();
36192          else
36193            one_is_false ();
36194
36195`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
36196`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
36197`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
36198`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
36199     Comparison of four paired-single values
36200     (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
36201
36202     These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
36203     with B and to compare C with D.  The `any' forms return true if
36204     any of the four results are true and the `all' forms return true
36205     if all four results are true.  For example:
36206
36207          v2sf a, b, c, d;
36208          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
36209            some_are_true ();
36210          else
36211            all_are_false ();
36212
36213          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
36214            all_are_true ();
36215          else
36216            some_are_false ();
36217
36218
36219File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: MSP430 Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins
36220
362216.58.15 Other MIPS Built-in Functions
36222-------------------------------------
36223
36224GCC provides other MIPS-specific built-in functions:
36225
36226`void __builtin_mips_cache (int OP, const volatile void *ADDR)'
36227     Insert a `cache' instruction with operands OP and ADDR.  GCC
36228     defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE'
36229     when this function is available.
36230
36231`unsigned int __builtin_mips_get_fcsr (void)'
36232`void __builtin_mips_set_fcsr (unsigned int VALUE)'
36233     Get and set the contents of the floating-point control and status
36234     register (FPU control register 31).  These functions are only
36235     available in hard-float code but can be called in both MIPS16 and
36236     non-MIPS16 contexts.
36237
36238     `__builtin_mips_set_fcsr' can be used to change any bit of the
36239     register except the condition codes, which GCC assumes are
36240     preserved.
36241
36242
36243File: gcc.info,  Node: MSP430 Built-in Functions,  Next: NDS32 Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins
36244
362456.58.16 MSP430 Built-in Functions
36246---------------------------------
36247
36248GCC provides a couple of special builtin functions to aid in the
36249writing of interrupt handlers in C.
36250
36251`__bic_SR_register_on_exit (int MASK)'
36252     This clears the indicated bits in the saved copy of the status
36253     register currently residing on the stack.  This only works inside
36254     interrupt handlers and the changes to the status register will
36255     only take affect once the handler returns.
36256
36257`__bis_SR_register_on_exit (int MASK)'
36258     This sets the indicated bits in the saved copy of the status
36259     register currently residing on the stack.  This only works inside
36260     interrupt handlers and the changes to the status register will
36261     only take affect once the handler returns.
36262
36263`__delay_cycles (long long CYCLES)'
36264     This inserts an instruction sequence that takes exactly CYCLES
36265     cycles (between 0 and about 17E9) to complete.  The inserted
36266     sequence may use jumps, loops, or no-ops, and does not interfere
36267     with any other instructions.  Note that CYCLES must be a
36268     compile-time constant integer - that is, you must pass a number,
36269     not a variable that may be optimized to a constant later.  The
36270     number of cycles delayed by this builtin is exact.
36271
36272
36273File: gcc.info,  Node: NDS32 Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MSP430 Built-in Functions,  Up: Target Builtins
36274
362756.58.17 NDS32 Built-in Functions
36276--------------------------------
36277
36278These built-in functions are available for the NDS32 target:
36279
36280 -- Built-in Function: void __builtin_nds32_isync (int *ADDR)
36281     Insert an ISYNC instruction into the instruction stream where ADDR
36282     is an instruction address for serialization.
36283
36284 -- Built-in Function: void __builtin_nds32_isb (void)
36285     Insert an ISB instruction into the instruction stream.
36286
36287 -- Built-in Function: int __builtin_nds32_mfsr (int SR)
36288     Return the content of a system register which is mapped by SR.
36289
36290 -- Built-in Function: int __builtin_nds32_mfusr (int USR)
36291     Return the content of a user space register which is mapped by USR.
36292
36293 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR)
36294     Move the VALUE to a system register which is mapped by SR.
36295
36296 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR)
36297     Move the VALUE to a user space register which is mapped by USR.
36298
36299 -- Built-in Function: void __builtin_nds32_setgie_en (void)
36300     Enable global interrupt.
36301
36302 -- Built-in Function: void __builtin_nds32_setgie_dis (void)
36303     Disable global interrupt.
36304
36305
36306File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC Built-in Functions,  Prev: NDS32 Built-in Functions,  Up: Target Builtins
36307
363086.58.18 picoChip Built-in Functions
36309-----------------------------------
36310
36311GCC provides an interface to selected machine instructions from the
36312picoChip instruction set.
36313
36314`int __builtin_sbc (int VALUE)'
36315     Sign bit count.  Return the number of consecutive bits in VALUE
36316     that have the same value as the sign bit.  The result is the
36317     number of leading sign bits minus one, giving the number of
36318     redundant sign bits in VALUE.
36319
36320`int __builtin_byteswap (int VALUE)'
36321     Byte swap.  Return the result of swapping the upper and lower
36322     bytes of VALUE.
36323
36324`int __builtin_brev (int VALUE)'
36325     Bit reversal.  Return the result of reversing the bits in VALUE.
36326     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
36327     on.
36328
36329`int __builtin_adds (int X, int Y)'
36330     Saturating addition.  Return the result of adding X and Y, storing
36331     the value 32767 if the result overflows.
36332
36333`int __builtin_subs (int X, int Y)'
36334     Saturating subtraction.  Return the result of subtracting Y from
36335     X, storing the value -32768 if the result overflows.
36336
36337`void __builtin_halt (void)'
36338     Halt.  The processor stops execution.  This built-in is useful for
36339     implementing assertions.
36340
36341
36342
36343File: gcc.info,  Node: PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins
36344
363456.58.19 PowerPC Built-in Functions
36346----------------------------------
36347
36348These built-in functions are available for the PowerPC family of
36349processors:
36350     float __builtin_recipdivf (float, float);
36351     float __builtin_rsqrtf (float);
36352     double __builtin_recipdiv (double, double);
36353     double __builtin_rsqrt (double);
36354     uint64_t __builtin_ppc_get_timebase ();
36355     unsigned long __builtin_ppc_mftb ();
36356     double __builtin_unpack_longdouble (long double, int);
36357     long double __builtin_pack_longdouble (double, double);
36358
36359 The `vec_rsqrt', `__builtin_rsqrt', and `__builtin_rsqrtf' functions
36360generate multiple instructions to implement the reciprocal sqrt
36361functionality using reciprocal sqrt estimate instructions.
36362
36363 The `__builtin_recipdiv', and `__builtin_recipdivf' functions generate
36364multiple instructions to implement division using the reciprocal
36365estimate instructions.
36366
36367 The `__builtin_ppc_get_timebase' and `__builtin_ppc_mftb' functions
36368generate instructions to read the Time Base Register.  The
36369`__builtin_ppc_get_timebase' function may generate multiple
36370instructions and always returns the 64 bits of the Time Base Register.
36371The `__builtin_ppc_mftb' function always generates one instruction and
36372returns the Time Base Register value as an unsigned long, throwing away
36373the most significant word on 32-bit environments.
36374
36375 The following built-in functions are available for the PowerPC family
36376of processors, starting with ISA 2.06 or later (`-mcpu=power7' or
36377`-mpopcntd'):
36378     long __builtin_bpermd (long, long);
36379     int __builtin_divwe (int, int);
36380     int __builtin_divweo (int, int);
36381     unsigned int __builtin_divweu (unsigned int, unsigned int);
36382     unsigned int __builtin_divweuo (unsigned int, unsigned int);
36383     long __builtin_divde (long, long);
36384     long __builtin_divdeo (long, long);
36385     unsigned long __builtin_divdeu (unsigned long, unsigned long);
36386     unsigned long __builtin_divdeuo (unsigned long, unsigned long);
36387     unsigned int cdtbcd (unsigned int);
36388     unsigned int cbcdtd (unsigned int);
36389     unsigned int addg6s (unsigned int, unsigned int);
36390
36391 The `__builtin_divde', `__builtin_divdeo', `__builtin_divdeu',
36392`__builtin_divdeou' functions require a 64-bit environment support ISA
363932.06 or later.
36394
36395 The following built-in functions are available for the PowerPC family
36396of processors when hardware decimal floating point (`-mhard-dfp') is
36397available:
36398     _Decimal64 __builtin_dxex (_Decimal64);
36399     _Decimal128 __builtin_dxexq (_Decimal128);
36400     _Decimal64 __builtin_ddedpd (int, _Decimal64);
36401     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
36402     _Decimal64 __builtin_denbcd (int, _Decimal64);
36403     _Decimal128 __builtin_denbcdq (int, _Decimal128);
36404     _Decimal64 __builtin_diex (_Decimal64, _Decimal64);
36405     _Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
36406     _Decimal64 __builtin_dscli (_Decimal64, int);
36407     _Decimal128 __builtin_dscliq (_Decimal128, int);
36408     _Decimal64 __builtin_dscri (_Decimal64, int);
36409     _Decimal128 __builtin_dscriq (_Decimal128, int);
36410     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
36411     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);
36412
36413 The following built-in functions are available for the PowerPC family
36414of processors when the Vector Scalar (vsx) instruction set is available:
36415     unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
36416     vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
36417                                                     unsigned long long);
36418
36419
36420File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: PowerPC Hardware Transactional Memory Built-in Functions,  Prev: PowerPC Built-in Functions,  Up: Target Builtins
36421
364226.58.20 PowerPC AltiVec Built-in Functions
36423------------------------------------------
36424
36425GCC provides an interface for the PowerPC family of processors to access
36426the AltiVec operations described in Motorola's AltiVec Programming
36427Interface Manual.  The interface is made available by including
36428`<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
36429supports the following vector types.
36430
36431     vector unsigned char
36432     vector signed char
36433     vector bool char
36434
36435     vector unsigned short
36436     vector signed short
36437     vector bool short
36438     vector pixel
36439
36440     vector unsigned int
36441     vector signed int
36442     vector bool int
36443     vector float
36444
36445 If `-mvsx' is used the following additional vector types are
36446implemented.
36447
36448     vector unsigned long
36449     vector signed long
36450     vector double
36451
36452 The long types are only implemented for 64-bit code generation, and
36453the long type is only used in the floating point/integer conversion
36454instructions.
36455
36456 GCC's implementation of the high-level language interface available
36457from C and C++ code differs from Motorola's documentation in several
36458ways.
36459
36460   * A vector constant is a list of constant expressions within curly
36461     braces.
36462
36463   * A vector initializer requires no cast if the vector constant is of
36464     the same type as the variable it is initializing.
36465
36466   * If `signed' or `unsigned' is omitted, the signedness of the vector
36467     type is the default signedness of the base type.  The default
36468     varies depending on the operating system, so a portable program
36469     should always specify the signedness.
36470
36471   * Compiling with `-maltivec' adds keywords `__vector', `vector',
36472     `__pixel', `pixel', `__bool' and `bool'.  When compiling ISO C,
36473     the context-sensitive substitution of the keywords `vector',
36474     `pixel' and `bool' is disabled.  To use them, you must include
36475     `<altivec.h>' instead.
36476
36477   * GCC allows using a `typedef' name as the type specifier for a
36478     vector type.
36479
36480   * For C, overloaded functions are implemented with macros so the
36481     following does not work:
36482
36483            vec_add ((vector signed int){1, 2, 3, 4}, foo);
36484
36485     Since `vec_add' is a macro, the vector constant in the example is
36486     treated as four separate arguments.  Wrap the entire argument in
36487     parentheses for this to work.
36488
36489 _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
36490GCC uses built-in functions to achieve the functionality in the
36491aforementioned header file, but they are not supported and are subject
36492to change without notice.
36493
36494 The following interfaces are supported for the generic and specific
36495AltiVec operations and the AltiVec predicates.  In cases where there is
36496a direct mapping between generic and specific operations, only the
36497generic names are shown here, although the specific operations can also
36498be used.
36499
36500 Arguments that are documented as `const int' require literal integral
36501values within the range required for that operation.
36502
36503     vector signed char vec_abs (vector signed char);
36504     vector signed short vec_abs (vector signed short);
36505     vector signed int vec_abs (vector signed int);
36506     vector float vec_abs (vector float);
36507
36508     vector signed char vec_abss (vector signed char);
36509     vector signed short vec_abss (vector signed short);
36510     vector signed int vec_abss (vector signed int);
36511
36512     vector signed char vec_add (vector bool char, vector signed char);
36513     vector signed char vec_add (vector signed char, vector bool char);
36514     vector signed char vec_add (vector signed char, vector signed char);
36515     vector unsigned char vec_add (vector bool char, vector unsigned char);
36516     vector unsigned char vec_add (vector unsigned char, vector bool char);
36517     vector unsigned char vec_add (vector unsigned char,
36518                                   vector unsigned char);
36519     vector signed short vec_add (vector bool short, vector signed short);
36520     vector signed short vec_add (vector signed short, vector bool short);
36521     vector signed short vec_add (vector signed short, vector signed short);
36522     vector unsigned short vec_add (vector bool short,
36523                                    vector unsigned short);
36524     vector unsigned short vec_add (vector unsigned short,
36525                                    vector bool short);
36526     vector unsigned short vec_add (vector unsigned short,
36527                                    vector unsigned short);
36528     vector signed int vec_add (vector bool int, vector signed int);
36529     vector signed int vec_add (vector signed int, vector bool int);
36530     vector signed int vec_add (vector signed int, vector signed int);
36531     vector unsigned int vec_add (vector bool int, vector unsigned int);
36532     vector unsigned int vec_add (vector unsigned int, vector bool int);
36533     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
36534     vector float vec_add (vector float, vector float);
36535
36536     vector float vec_vaddfp (vector float, vector float);
36537
36538     vector signed int vec_vadduwm (vector bool int, vector signed int);
36539     vector signed int vec_vadduwm (vector signed int, vector bool int);
36540     vector signed int vec_vadduwm (vector signed int, vector signed int);
36541     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
36542     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
36543     vector unsigned int vec_vadduwm (vector unsigned int,
36544                                      vector unsigned int);
36545
36546     vector signed short vec_vadduhm (vector bool short,
36547                                      vector signed short);
36548     vector signed short vec_vadduhm (vector signed short,
36549                                      vector bool short);
36550     vector signed short vec_vadduhm (vector signed short,
36551                                      vector signed short);
36552     vector unsigned short vec_vadduhm (vector bool short,
36553                                        vector unsigned short);
36554     vector unsigned short vec_vadduhm (vector unsigned short,
36555                                        vector bool short);
36556     vector unsigned short vec_vadduhm (vector unsigned short,
36557                                        vector unsigned short);
36558
36559     vector signed char vec_vaddubm (vector bool char, vector signed char);
36560     vector signed char vec_vaddubm (vector signed char, vector bool char);
36561     vector signed char vec_vaddubm (vector signed char, vector signed char);
36562     vector unsigned char vec_vaddubm (vector bool char,
36563                                       vector unsigned char);
36564     vector unsigned char vec_vaddubm (vector unsigned char,
36565                                       vector bool char);
36566     vector unsigned char vec_vaddubm (vector unsigned char,
36567                                       vector unsigned char);
36568
36569     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
36570
36571     vector unsigned char vec_adds (vector bool char, vector unsigned char);
36572     vector unsigned char vec_adds (vector unsigned char, vector bool char);
36573     vector unsigned char vec_adds (vector unsigned char,
36574                                    vector unsigned char);
36575     vector signed char vec_adds (vector bool char, vector signed char);
36576     vector signed char vec_adds (vector signed char, vector bool char);
36577     vector signed char vec_adds (vector signed char, vector signed char);
36578     vector unsigned short vec_adds (vector bool short,
36579                                     vector unsigned short);
36580     vector unsigned short vec_adds (vector unsigned short,
36581                                     vector bool short);
36582     vector unsigned short vec_adds (vector unsigned short,
36583                                     vector unsigned short);
36584     vector signed short vec_adds (vector bool short, vector signed short);
36585     vector signed short vec_adds (vector signed short, vector bool short);
36586     vector signed short vec_adds (vector signed short, vector signed short);
36587     vector unsigned int vec_adds (vector bool int, vector unsigned int);
36588     vector unsigned int vec_adds (vector unsigned int, vector bool int);
36589     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
36590     vector signed int vec_adds (vector bool int, vector signed int);
36591     vector signed int vec_adds (vector signed int, vector bool int);
36592     vector signed int vec_adds (vector signed int, vector signed int);
36593
36594     vector signed int vec_vaddsws (vector bool int, vector signed int);
36595     vector signed int vec_vaddsws (vector signed int, vector bool int);
36596     vector signed int vec_vaddsws (vector signed int, vector signed int);
36597
36598     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
36599     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
36600     vector unsigned int vec_vadduws (vector unsigned int,
36601                                      vector unsigned int);
36602
36603     vector signed short vec_vaddshs (vector bool short,
36604                                      vector signed short);
36605     vector signed short vec_vaddshs (vector signed short,
36606                                      vector bool short);
36607     vector signed short vec_vaddshs (vector signed short,
36608                                      vector signed short);
36609
36610     vector unsigned short vec_vadduhs (vector bool short,
36611                                        vector unsigned short);
36612     vector unsigned short vec_vadduhs (vector unsigned short,
36613                                        vector bool short);
36614     vector unsigned short vec_vadduhs (vector unsigned short,
36615                                        vector unsigned short);
36616
36617     vector signed char vec_vaddsbs (vector bool char, vector signed char);
36618     vector signed char vec_vaddsbs (vector signed char, vector bool char);
36619     vector signed char vec_vaddsbs (vector signed char, vector signed char);
36620
36621     vector unsigned char vec_vaddubs (vector bool char,
36622                                       vector unsigned char);
36623     vector unsigned char vec_vaddubs (vector unsigned char,
36624                                       vector bool char);
36625     vector unsigned char vec_vaddubs (vector unsigned char,
36626                                       vector unsigned char);
36627
36628     vector float vec_and (vector float, vector float);
36629     vector float vec_and (vector float, vector bool int);
36630     vector float vec_and (vector bool int, vector float);
36631     vector bool int vec_and (vector bool int, vector bool int);
36632     vector signed int vec_and (vector bool int, vector signed int);
36633     vector signed int vec_and (vector signed int, vector bool int);
36634     vector signed int vec_and (vector signed int, vector signed int);
36635     vector unsigned int vec_and (vector bool int, vector unsigned int);
36636     vector unsigned int vec_and (vector unsigned int, vector bool int);
36637     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
36638     vector bool short vec_and (vector bool short, vector bool short);
36639     vector signed short vec_and (vector bool short, vector signed short);
36640     vector signed short vec_and (vector signed short, vector bool short);
36641     vector signed short vec_and (vector signed short, vector signed short);
36642     vector unsigned short vec_and (vector bool short,
36643                                    vector unsigned short);
36644     vector unsigned short vec_and (vector unsigned short,
36645                                    vector bool short);
36646     vector unsigned short vec_and (vector unsigned short,
36647                                    vector unsigned short);
36648     vector signed char vec_and (vector bool char, vector signed char);
36649     vector bool char vec_and (vector bool char, vector bool char);
36650     vector signed char vec_and (vector signed char, vector bool char);
36651     vector signed char vec_and (vector signed char, vector signed char);
36652     vector unsigned char vec_and (vector bool char, vector unsigned char);
36653     vector unsigned char vec_and (vector unsigned char, vector bool char);
36654     vector unsigned char vec_and (vector unsigned char,
36655                                   vector unsigned char);
36656
36657     vector float vec_andc (vector float, vector float);
36658     vector float vec_andc (vector float, vector bool int);
36659     vector float vec_andc (vector bool int, vector float);
36660     vector bool int vec_andc (vector bool int, vector bool int);
36661     vector signed int vec_andc (vector bool int, vector signed int);
36662     vector signed int vec_andc (vector signed int, vector bool int);
36663     vector signed int vec_andc (vector signed int, vector signed int);
36664     vector unsigned int vec_andc (vector bool int, vector unsigned int);
36665     vector unsigned int vec_andc (vector unsigned int, vector bool int);
36666     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
36667     vector bool short vec_andc (vector bool short, vector bool short);
36668     vector signed short vec_andc (vector bool short, vector signed short);
36669     vector signed short vec_andc (vector signed short, vector bool short);
36670     vector signed short vec_andc (vector signed short, vector signed short);
36671     vector unsigned short vec_andc (vector bool short,
36672                                     vector unsigned short);
36673     vector unsigned short vec_andc (vector unsigned short,
36674                                     vector bool short);
36675     vector unsigned short vec_andc (vector unsigned short,
36676                                     vector unsigned short);
36677     vector signed char vec_andc (vector bool char, vector signed char);
36678     vector bool char vec_andc (vector bool char, vector bool char);
36679     vector signed char vec_andc (vector signed char, vector bool char);
36680     vector signed char vec_andc (vector signed char, vector signed char);
36681     vector unsigned char vec_andc (vector bool char, vector unsigned char);
36682     vector unsigned char vec_andc (vector unsigned char, vector bool char);
36683     vector unsigned char vec_andc (vector unsigned char,
36684                                    vector unsigned char);
36685
36686     vector unsigned char vec_avg (vector unsigned char,
36687                                   vector unsigned char);
36688     vector signed char vec_avg (vector signed char, vector signed char);
36689     vector unsigned short vec_avg (vector unsigned short,
36690                                    vector unsigned short);
36691     vector signed short vec_avg (vector signed short, vector signed short);
36692     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
36693     vector signed int vec_avg (vector signed int, vector signed int);
36694
36695     vector signed int vec_vavgsw (vector signed int, vector signed int);
36696
36697     vector unsigned int vec_vavguw (vector unsigned int,
36698                                     vector unsigned int);
36699
36700     vector signed short vec_vavgsh (vector signed short,
36701                                     vector signed short);
36702
36703     vector unsigned short vec_vavguh (vector unsigned short,
36704                                       vector unsigned short);
36705
36706     vector signed char vec_vavgsb (vector signed char, vector signed char);
36707
36708     vector unsigned char vec_vavgub (vector unsigned char,
36709                                      vector unsigned char);
36710
36711     vector float vec_copysign (vector float);
36712
36713     vector float vec_ceil (vector float);
36714
36715     vector signed int vec_cmpb (vector float, vector float);
36716
36717     vector bool char vec_cmpeq (vector signed char, vector signed char);
36718     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
36719     vector bool short vec_cmpeq (vector signed short, vector signed short);
36720     vector bool short vec_cmpeq (vector unsigned short,
36721                                  vector unsigned short);
36722     vector bool int vec_cmpeq (vector signed int, vector signed int);
36723     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
36724     vector bool int vec_cmpeq (vector float, vector float);
36725
36726     vector bool int vec_vcmpeqfp (vector float, vector float);
36727
36728     vector bool int vec_vcmpequw (vector signed int, vector signed int);
36729     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
36730
36731     vector bool short vec_vcmpequh (vector signed short,
36732                                     vector signed short);
36733     vector bool short vec_vcmpequh (vector unsigned short,
36734                                     vector unsigned short);
36735
36736     vector bool char vec_vcmpequb (vector signed char, vector signed char);
36737     vector bool char vec_vcmpequb (vector unsigned char,
36738                                    vector unsigned char);
36739
36740     vector bool int vec_cmpge (vector float, vector float);
36741
36742     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
36743     vector bool char vec_cmpgt (vector signed char, vector signed char);
36744     vector bool short vec_cmpgt (vector unsigned short,
36745                                  vector unsigned short);
36746     vector bool short vec_cmpgt (vector signed short, vector signed short);
36747     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
36748     vector bool int vec_cmpgt (vector signed int, vector signed int);
36749     vector bool int vec_cmpgt (vector float, vector float);
36750
36751     vector bool int vec_vcmpgtfp (vector float, vector float);
36752
36753     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
36754
36755     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
36756
36757     vector bool short vec_vcmpgtsh (vector signed short,
36758                                     vector signed short);
36759
36760     vector bool short vec_vcmpgtuh (vector unsigned short,
36761                                     vector unsigned short);
36762
36763     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
36764
36765     vector bool char vec_vcmpgtub (vector unsigned char,
36766                                    vector unsigned char);
36767
36768     vector bool int vec_cmple (vector float, vector float);
36769
36770     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
36771     vector bool char vec_cmplt (vector signed char, vector signed char);
36772     vector bool short vec_cmplt (vector unsigned short,
36773                                  vector unsigned short);
36774     vector bool short vec_cmplt (vector signed short, vector signed short);
36775     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
36776     vector bool int vec_cmplt (vector signed int, vector signed int);
36777     vector bool int vec_cmplt (vector float, vector float);
36778
36779     vector float vec_cpsgn (vector float, vector float);
36780
36781     vector float vec_ctf (vector unsigned int, const int);
36782     vector float vec_ctf (vector signed int, const int);
36783     vector double vec_ctf (vector unsigned long, const int);
36784     vector double vec_ctf (vector signed long, const int);
36785
36786     vector float vec_vcfsx (vector signed int, const int);
36787
36788     vector float vec_vcfux (vector unsigned int, const int);
36789
36790     vector signed int vec_cts (vector float, const int);
36791     vector signed long vec_cts (vector double, const int);
36792
36793     vector unsigned int vec_ctu (vector float, const int);
36794     vector unsigned long vec_ctu (vector double, const int);
36795
36796     void vec_dss (const int);
36797
36798     void vec_dssall (void);
36799
36800     void vec_dst (const vector unsigned char *, int, const int);
36801     void vec_dst (const vector signed char *, int, const int);
36802     void vec_dst (const vector bool char *, int, const int);
36803     void vec_dst (const vector unsigned short *, int, const int);
36804     void vec_dst (const vector signed short *, int, const int);
36805     void vec_dst (const vector bool short *, int, const int);
36806     void vec_dst (const vector pixel *, int, const int);
36807     void vec_dst (const vector unsigned int *, int, const int);
36808     void vec_dst (const vector signed int *, int, const int);
36809     void vec_dst (const vector bool int *, int, const int);
36810     void vec_dst (const vector float *, int, const int);
36811     void vec_dst (const unsigned char *, int, const int);
36812     void vec_dst (const signed char *, int, const int);
36813     void vec_dst (const unsigned short *, int, const int);
36814     void vec_dst (const short *, int, const int);
36815     void vec_dst (const unsigned int *, int, const int);
36816     void vec_dst (const int *, int, const int);
36817     void vec_dst (const unsigned long *, int, const int);
36818     void vec_dst (const long *, int, const int);
36819     void vec_dst (const float *, int, const int);
36820
36821     void vec_dstst (const vector unsigned char *, int, const int);
36822     void vec_dstst (const vector signed char *, int, const int);
36823     void vec_dstst (const vector bool char *, int, const int);
36824     void vec_dstst (const vector unsigned short *, int, const int);
36825     void vec_dstst (const vector signed short *, int, const int);
36826     void vec_dstst (const vector bool short *, int, const int);
36827     void vec_dstst (const vector pixel *, int, const int);
36828     void vec_dstst (const vector unsigned int *, int, const int);
36829     void vec_dstst (const vector signed int *, int, const int);
36830     void vec_dstst (const vector bool int *, int, const int);
36831     void vec_dstst (const vector float *, int, const int);
36832     void vec_dstst (const unsigned char *, int, const int);
36833     void vec_dstst (const signed char *, int, const int);
36834     void vec_dstst (const unsigned short *, int, const int);
36835     void vec_dstst (const short *, int, const int);
36836     void vec_dstst (const unsigned int *, int, const int);
36837     void vec_dstst (const int *, int, const int);
36838     void vec_dstst (const unsigned long *, int, const int);
36839     void vec_dstst (const long *, int, const int);
36840     void vec_dstst (const float *, int, const int);
36841
36842     void vec_dststt (const vector unsigned char *, int, const int);
36843     void vec_dststt (const vector signed char *, int, const int);
36844     void vec_dststt (const vector bool char *, int, const int);
36845     void vec_dststt (const vector unsigned short *, int, const int);
36846     void vec_dststt (const vector signed short *, int, const int);
36847     void vec_dststt (const vector bool short *, int, const int);
36848     void vec_dststt (const vector pixel *, int, const int);
36849     void vec_dststt (const vector unsigned int *, int, const int);
36850     void vec_dststt (const vector signed int *, int, const int);
36851     void vec_dststt (const vector bool int *, int, const int);
36852     void vec_dststt (const vector float *, int, const int);
36853     void vec_dststt (const unsigned char *, int, const int);
36854     void vec_dststt (const signed char *, int, const int);
36855     void vec_dststt (const unsigned short *, int, const int);
36856     void vec_dststt (const short *, int, const int);
36857     void vec_dststt (const unsigned int *, int, const int);
36858     void vec_dststt (const int *, int, const int);
36859     void vec_dststt (const unsigned long *, int, const int);
36860     void vec_dststt (const long *, int, const int);
36861     void vec_dststt (const float *, int, const int);
36862
36863     void vec_dstt (const vector unsigned char *, int, const int);
36864     void vec_dstt (const vector signed char *, int, const int);
36865     void vec_dstt (const vector bool char *, int, const int);
36866     void vec_dstt (const vector unsigned short *, int, const int);
36867     void vec_dstt (const vector signed short *, int, const int);
36868     void vec_dstt (const vector bool short *, int, const int);
36869     void vec_dstt (const vector pixel *, int, const int);
36870     void vec_dstt (const vector unsigned int *, int, const int);
36871     void vec_dstt (const vector signed int *, int, const int);
36872     void vec_dstt (const vector bool int *, int, const int);
36873     void vec_dstt (const vector float *, int, const int);
36874     void vec_dstt (const unsigned char *, int, const int);
36875     void vec_dstt (const signed char *, int, const int);
36876     void vec_dstt (const unsigned short *, int, const int);
36877     void vec_dstt (const short *, int, const int);
36878     void vec_dstt (const unsigned int *, int, const int);
36879     void vec_dstt (const int *, int, const int);
36880     void vec_dstt (const unsigned long *, int, const int);
36881     void vec_dstt (const long *, int, const int);
36882     void vec_dstt (const float *, int, const int);
36883
36884     vector float vec_expte (vector float);
36885
36886     vector float vec_floor (vector float);
36887
36888     vector float vec_ld (int, const vector float *);
36889     vector float vec_ld (int, const float *);
36890     vector bool int vec_ld (int, const vector bool int *);
36891     vector signed int vec_ld (int, const vector signed int *);
36892     vector signed int vec_ld (int, const int *);
36893     vector signed int vec_ld (int, const long *);
36894     vector unsigned int vec_ld (int, const vector unsigned int *);
36895     vector unsigned int vec_ld (int, const unsigned int *);
36896     vector unsigned int vec_ld (int, const unsigned long *);
36897     vector bool short vec_ld (int, const vector bool short *);
36898     vector pixel vec_ld (int, const vector pixel *);
36899     vector signed short vec_ld (int, const vector signed short *);
36900     vector signed short vec_ld (int, const short *);
36901     vector unsigned short vec_ld (int, const vector unsigned short *);
36902     vector unsigned short vec_ld (int, const unsigned short *);
36903     vector bool char vec_ld (int, const vector bool char *);
36904     vector signed char vec_ld (int, const vector signed char *);
36905     vector signed char vec_ld (int, const signed char *);
36906     vector unsigned char vec_ld (int, const vector unsigned char *);
36907     vector unsigned char vec_ld (int, const unsigned char *);
36908
36909     vector signed char vec_lde (int, const signed char *);
36910     vector unsigned char vec_lde (int, const unsigned char *);
36911     vector signed short vec_lde (int, const short *);
36912     vector unsigned short vec_lde (int, const unsigned short *);
36913     vector float vec_lde (int, const float *);
36914     vector signed int vec_lde (int, const int *);
36915     vector unsigned int vec_lde (int, const unsigned int *);
36916     vector signed int vec_lde (int, const long *);
36917     vector unsigned int vec_lde (int, const unsigned long *);
36918
36919     vector float vec_lvewx (int, float *);
36920     vector signed int vec_lvewx (int, int *);
36921     vector unsigned int vec_lvewx (int, unsigned int *);
36922     vector signed int vec_lvewx (int, long *);
36923     vector unsigned int vec_lvewx (int, unsigned long *);
36924
36925     vector signed short vec_lvehx (int, short *);
36926     vector unsigned short vec_lvehx (int, unsigned short *);
36927
36928     vector signed char vec_lvebx (int, char *);
36929     vector unsigned char vec_lvebx (int, unsigned char *);
36930
36931     vector float vec_ldl (int, const vector float *);
36932     vector float vec_ldl (int, const float *);
36933     vector bool int vec_ldl (int, const vector bool int *);
36934     vector signed int vec_ldl (int, const vector signed int *);
36935     vector signed int vec_ldl (int, const int *);
36936     vector signed int vec_ldl (int, const long *);
36937     vector unsigned int vec_ldl (int, const vector unsigned int *);
36938     vector unsigned int vec_ldl (int, const unsigned int *);
36939     vector unsigned int vec_ldl (int, const unsigned long *);
36940     vector bool short vec_ldl (int, const vector bool short *);
36941     vector pixel vec_ldl (int, const vector pixel *);
36942     vector signed short vec_ldl (int, const vector signed short *);
36943     vector signed short vec_ldl (int, const short *);
36944     vector unsigned short vec_ldl (int, const vector unsigned short *);
36945     vector unsigned short vec_ldl (int, const unsigned short *);
36946     vector bool char vec_ldl (int, const vector bool char *);
36947     vector signed char vec_ldl (int, const vector signed char *);
36948     vector signed char vec_ldl (int, const signed char *);
36949     vector unsigned char vec_ldl (int, const vector unsigned char *);
36950     vector unsigned char vec_ldl (int, const unsigned char *);
36951
36952     vector float vec_loge (vector float);
36953
36954     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
36955     vector unsigned char vec_lvsl (int, const volatile signed char *);
36956     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
36957     vector unsigned char vec_lvsl (int, const volatile short *);
36958     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
36959     vector unsigned char vec_lvsl (int, const volatile int *);
36960     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
36961     vector unsigned char vec_lvsl (int, const volatile long *);
36962     vector unsigned char vec_lvsl (int, const volatile float *);
36963
36964     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
36965     vector unsigned char vec_lvsr (int, const volatile signed char *);
36966     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
36967     vector unsigned char vec_lvsr (int, const volatile short *);
36968     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
36969     vector unsigned char vec_lvsr (int, const volatile int *);
36970     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
36971     vector unsigned char vec_lvsr (int, const volatile long *);
36972     vector unsigned char vec_lvsr (int, const volatile float *);
36973
36974     vector float vec_madd (vector float, vector float, vector float);
36975
36976     vector signed short vec_madds (vector signed short,
36977                                    vector signed short,
36978                                    vector signed short);
36979
36980     vector unsigned char vec_max (vector bool char, vector unsigned char);
36981     vector unsigned char vec_max (vector unsigned char, vector bool char);
36982     vector unsigned char vec_max (vector unsigned char,
36983                                   vector unsigned char);
36984     vector signed char vec_max (vector bool char, vector signed char);
36985     vector signed char vec_max (vector signed char, vector bool char);
36986     vector signed char vec_max (vector signed char, vector signed char);
36987     vector unsigned short vec_max (vector bool short,
36988                                    vector unsigned short);
36989     vector unsigned short vec_max (vector unsigned short,
36990                                    vector bool short);
36991     vector unsigned short vec_max (vector unsigned short,
36992                                    vector unsigned short);
36993     vector signed short vec_max (vector bool short, vector signed short);
36994     vector signed short vec_max (vector signed short, vector bool short);
36995     vector signed short vec_max (vector signed short, vector signed short);
36996     vector unsigned int vec_max (vector bool int, vector unsigned int);
36997     vector unsigned int vec_max (vector unsigned int, vector bool int);
36998     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
36999     vector signed int vec_max (vector bool int, vector signed int);
37000     vector signed int vec_max (vector signed int, vector bool int);
37001     vector signed int vec_max (vector signed int, vector signed int);
37002     vector float vec_max (vector float, vector float);
37003
37004     vector float vec_vmaxfp (vector float, vector float);
37005
37006     vector signed int vec_vmaxsw (vector bool int, vector signed int);
37007     vector signed int vec_vmaxsw (vector signed int, vector bool int);
37008     vector signed int vec_vmaxsw (vector signed int, vector signed int);
37009
37010     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
37011     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
37012     vector unsigned int vec_vmaxuw (vector unsigned int,
37013                                     vector unsigned int);
37014
37015     vector signed short vec_vmaxsh (vector bool short, vector signed short);
37016     vector signed short vec_vmaxsh (vector signed short, vector bool short);
37017     vector signed short vec_vmaxsh (vector signed short,
37018                                     vector signed short);
37019
37020     vector unsigned short vec_vmaxuh (vector bool short,
37021                                       vector unsigned short);
37022     vector unsigned short vec_vmaxuh (vector unsigned short,
37023                                       vector bool short);
37024     vector unsigned short vec_vmaxuh (vector unsigned short,
37025                                       vector unsigned short);
37026
37027     vector signed char vec_vmaxsb (vector bool char, vector signed char);
37028     vector signed char vec_vmaxsb (vector signed char, vector bool char);
37029     vector signed char vec_vmaxsb (vector signed char, vector signed char);
37030
37031     vector unsigned char vec_vmaxub (vector bool char,
37032                                      vector unsigned char);
37033     vector unsigned char vec_vmaxub (vector unsigned char,
37034                                      vector bool char);
37035     vector unsigned char vec_vmaxub (vector unsigned char,
37036                                      vector unsigned char);
37037
37038     vector bool char vec_mergeh (vector bool char, vector bool char);
37039     vector signed char vec_mergeh (vector signed char, vector signed char);
37040     vector unsigned char vec_mergeh (vector unsigned char,
37041                                      vector unsigned char);
37042     vector bool short vec_mergeh (vector bool short, vector bool short);
37043     vector pixel vec_mergeh (vector pixel, vector pixel);
37044     vector signed short vec_mergeh (vector signed short,
37045                                     vector signed short);
37046     vector unsigned short vec_mergeh (vector unsigned short,
37047                                       vector unsigned short);
37048     vector float vec_mergeh (vector float, vector float);
37049     vector bool int vec_mergeh (vector bool int, vector bool int);
37050     vector signed int vec_mergeh (vector signed int, vector signed int);
37051     vector unsigned int vec_mergeh (vector unsigned int,
37052                                     vector unsigned int);
37053
37054     vector float vec_vmrghw (vector float, vector float);
37055     vector bool int vec_vmrghw (vector bool int, vector bool int);
37056     vector signed int vec_vmrghw (vector signed int, vector signed int);
37057     vector unsigned int vec_vmrghw (vector unsigned int,
37058                                     vector unsigned int);
37059
37060     vector bool short vec_vmrghh (vector bool short, vector bool short);
37061     vector signed short vec_vmrghh (vector signed short,
37062                                     vector signed short);
37063     vector unsigned short vec_vmrghh (vector unsigned short,
37064                                       vector unsigned short);
37065     vector pixel vec_vmrghh (vector pixel, vector pixel);
37066
37067     vector bool char vec_vmrghb (vector bool char, vector bool char);
37068     vector signed char vec_vmrghb (vector signed char, vector signed char);
37069     vector unsigned char vec_vmrghb (vector unsigned char,
37070                                      vector unsigned char);
37071
37072     vector bool char vec_mergel (vector bool char, vector bool char);
37073     vector signed char vec_mergel (vector signed char, vector signed char);
37074     vector unsigned char vec_mergel (vector unsigned char,
37075                                      vector unsigned char);
37076     vector bool short vec_mergel (vector bool short, vector bool short);
37077     vector pixel vec_mergel (vector pixel, vector pixel);
37078     vector signed short vec_mergel (vector signed short,
37079                                     vector signed short);
37080     vector unsigned short vec_mergel (vector unsigned short,
37081                                       vector unsigned short);
37082     vector float vec_mergel (vector float, vector float);
37083     vector bool int vec_mergel (vector bool int, vector bool int);
37084     vector signed int vec_mergel (vector signed int, vector signed int);
37085     vector unsigned int vec_mergel (vector unsigned int,
37086                                     vector unsigned int);
37087
37088     vector float vec_vmrglw (vector float, vector float);
37089     vector signed int vec_vmrglw (vector signed int, vector signed int);
37090     vector unsigned int vec_vmrglw (vector unsigned int,
37091                                     vector unsigned int);
37092     vector bool int vec_vmrglw (vector bool int, vector bool int);
37093
37094     vector bool short vec_vmrglh (vector bool short, vector bool short);
37095     vector signed short vec_vmrglh (vector signed short,
37096                                     vector signed short);
37097     vector unsigned short vec_vmrglh (vector unsigned short,
37098                                       vector unsigned short);
37099     vector pixel vec_vmrglh (vector pixel, vector pixel);
37100
37101     vector bool char vec_vmrglb (vector bool char, vector bool char);
37102     vector signed char vec_vmrglb (vector signed char, vector signed char);
37103     vector unsigned char vec_vmrglb (vector unsigned char,
37104                                      vector unsigned char);
37105
37106     vector unsigned short vec_mfvscr (void);
37107
37108     vector unsigned char vec_min (vector bool char, vector unsigned char);
37109     vector unsigned char vec_min (vector unsigned char, vector bool char);
37110     vector unsigned char vec_min (vector unsigned char,
37111                                   vector unsigned char);
37112     vector signed char vec_min (vector bool char, vector signed char);
37113     vector signed char vec_min (vector signed char, vector bool char);
37114     vector signed char vec_min (vector signed char, vector signed char);
37115     vector unsigned short vec_min (vector bool short,
37116                                    vector unsigned short);
37117     vector unsigned short vec_min (vector unsigned short,
37118                                    vector bool short);
37119     vector unsigned short vec_min (vector unsigned short,
37120                                    vector unsigned short);
37121     vector signed short vec_min (vector bool short, vector signed short);
37122     vector signed short vec_min (vector signed short, vector bool short);
37123     vector signed short vec_min (vector signed short, vector signed short);
37124     vector unsigned int vec_min (vector bool int, vector unsigned int);
37125     vector unsigned int vec_min (vector unsigned int, vector bool int);
37126     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
37127     vector signed int vec_min (vector bool int, vector signed int);
37128     vector signed int vec_min (vector signed int, vector bool int);
37129     vector signed int vec_min (vector signed int, vector signed int);
37130     vector float vec_min (vector float, vector float);
37131
37132     vector float vec_vminfp (vector float, vector float);
37133
37134     vector signed int vec_vminsw (vector bool int, vector signed int);
37135     vector signed int vec_vminsw (vector signed int, vector bool int);
37136     vector signed int vec_vminsw (vector signed int, vector signed int);
37137
37138     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
37139     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
37140     vector unsigned int vec_vminuw (vector unsigned int,
37141                                     vector unsigned int);
37142
37143     vector signed short vec_vminsh (vector bool short, vector signed short);
37144     vector signed short vec_vminsh (vector signed short, vector bool short);
37145     vector signed short vec_vminsh (vector signed short,
37146                                     vector signed short);
37147
37148     vector unsigned short vec_vminuh (vector bool short,
37149                                       vector unsigned short);
37150     vector unsigned short vec_vminuh (vector unsigned short,
37151                                       vector bool short);
37152     vector unsigned short vec_vminuh (vector unsigned short,
37153                                       vector unsigned short);
37154
37155     vector signed char vec_vminsb (vector bool char, vector signed char);
37156     vector signed char vec_vminsb (vector signed char, vector bool char);
37157     vector signed char vec_vminsb (vector signed char, vector signed char);
37158
37159     vector unsigned char vec_vminub (vector bool char,
37160                                      vector unsigned char);
37161     vector unsigned char vec_vminub (vector unsigned char,
37162                                      vector bool char);
37163     vector unsigned char vec_vminub (vector unsigned char,
37164                                      vector unsigned char);
37165
37166     vector signed short vec_mladd (vector signed short,
37167                                    vector signed short,
37168                                    vector signed short);
37169     vector signed short vec_mladd (vector signed short,
37170                                    vector unsigned short,
37171                                    vector unsigned short);
37172     vector signed short vec_mladd (vector unsigned short,
37173                                    vector signed short,
37174                                    vector signed short);
37175     vector unsigned short vec_mladd (vector unsigned short,
37176                                      vector unsigned short,
37177                                      vector unsigned short);
37178
37179     vector signed short vec_mradds (vector signed short,
37180                                     vector signed short,
37181                                     vector signed short);
37182
37183     vector unsigned int vec_msum (vector unsigned char,
37184                                   vector unsigned char,
37185                                   vector unsigned int);
37186     vector signed int vec_msum (vector signed char,
37187                                 vector unsigned char,
37188                                 vector signed int);
37189     vector unsigned int vec_msum (vector unsigned short,
37190                                   vector unsigned short,
37191                                   vector unsigned int);
37192     vector signed int vec_msum (vector signed short,
37193                                 vector signed short,
37194                                 vector signed int);
37195
37196     vector signed int vec_vmsumshm (vector signed short,
37197                                     vector signed short,
37198                                     vector signed int);
37199
37200     vector unsigned int vec_vmsumuhm (vector unsigned short,
37201                                       vector unsigned short,
37202                                       vector unsigned int);
37203
37204     vector signed int vec_vmsummbm (vector signed char,
37205                                     vector unsigned char,
37206                                     vector signed int);
37207
37208     vector unsigned int vec_vmsumubm (vector unsigned char,
37209                                       vector unsigned char,
37210                                       vector unsigned int);
37211
37212     vector unsigned int vec_msums (vector unsigned short,
37213                                    vector unsigned short,
37214                                    vector unsigned int);
37215     vector signed int vec_msums (vector signed short,
37216                                  vector signed short,
37217                                  vector signed int);
37218
37219     vector signed int vec_vmsumshs (vector signed short,
37220                                     vector signed short,
37221                                     vector signed int);
37222
37223     vector unsigned int vec_vmsumuhs (vector unsigned short,
37224                                       vector unsigned short,
37225                                       vector unsigned int);
37226
37227     void vec_mtvscr (vector signed int);
37228     void vec_mtvscr (vector unsigned int);
37229     void vec_mtvscr (vector bool int);
37230     void vec_mtvscr (vector signed short);
37231     void vec_mtvscr (vector unsigned short);
37232     void vec_mtvscr (vector bool short);
37233     void vec_mtvscr (vector pixel);
37234     void vec_mtvscr (vector signed char);
37235     void vec_mtvscr (vector unsigned char);
37236     void vec_mtvscr (vector bool char);
37237
37238     vector unsigned short vec_mule (vector unsigned char,
37239                                     vector unsigned char);
37240     vector signed short vec_mule (vector signed char,
37241                                   vector signed char);
37242     vector unsigned int vec_mule (vector unsigned short,
37243                                   vector unsigned short);
37244     vector signed int vec_mule (vector signed short, vector signed short);
37245
37246     vector signed int vec_vmulesh (vector signed short,
37247                                    vector signed short);
37248
37249     vector unsigned int vec_vmuleuh (vector unsigned short,
37250                                      vector unsigned short);
37251
37252     vector signed short vec_vmulesb (vector signed char,
37253                                      vector signed char);
37254
37255     vector unsigned short vec_vmuleub (vector unsigned char,
37256                                       vector unsigned char);
37257
37258     vector unsigned short vec_mulo (vector unsigned char,
37259                                     vector unsigned char);
37260     vector signed short vec_mulo (vector signed char, vector signed char);
37261     vector unsigned int vec_mulo (vector unsigned short,
37262                                   vector unsigned short);
37263     vector signed int vec_mulo (vector signed short, vector signed short);
37264
37265     vector signed int vec_vmulosh (vector signed short,
37266                                    vector signed short);
37267
37268     vector unsigned int vec_vmulouh (vector unsigned short,
37269                                      vector unsigned short);
37270
37271     vector signed short vec_vmulosb (vector signed char,
37272                                      vector signed char);
37273
37274     vector unsigned short vec_vmuloub (vector unsigned char,
37275                                        vector unsigned char);
37276
37277     vector float vec_nmsub (vector float, vector float, vector float);
37278
37279     vector float vec_nor (vector float, vector float);
37280     vector signed int vec_nor (vector signed int, vector signed int);
37281     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
37282     vector bool int vec_nor (vector bool int, vector bool int);
37283     vector signed short vec_nor (vector signed short, vector signed short);
37284     vector unsigned short vec_nor (vector unsigned short,
37285                                    vector unsigned short);
37286     vector bool short vec_nor (vector bool short, vector bool short);
37287     vector signed char vec_nor (vector signed char, vector signed char);
37288     vector unsigned char vec_nor (vector unsigned char,
37289                                   vector unsigned char);
37290     vector bool char vec_nor (vector bool char, vector bool char);
37291
37292     vector float vec_or (vector float, vector float);
37293     vector float vec_or (vector float, vector bool int);
37294     vector float vec_or (vector bool int, vector float);
37295     vector bool int vec_or (vector bool int, vector bool int);
37296     vector signed int vec_or (vector bool int, vector signed int);
37297     vector signed int vec_or (vector signed int, vector bool int);
37298     vector signed int vec_or (vector signed int, vector signed int);
37299     vector unsigned int vec_or (vector bool int, vector unsigned int);
37300     vector unsigned int vec_or (vector unsigned int, vector bool int);
37301     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
37302     vector bool short vec_or (vector bool short, vector bool short);
37303     vector signed short vec_or (vector bool short, vector signed short);
37304     vector signed short vec_or (vector signed short, vector bool short);
37305     vector signed short vec_or (vector signed short, vector signed short);
37306     vector unsigned short vec_or (vector bool short, vector unsigned short);
37307     vector unsigned short vec_or (vector unsigned short, vector bool short);
37308     vector unsigned short vec_or (vector unsigned short,
37309                                   vector unsigned short);
37310     vector signed char vec_or (vector bool char, vector signed char);
37311     vector bool char vec_or (vector bool char, vector bool char);
37312     vector signed char vec_or (vector signed char, vector bool char);
37313     vector signed char vec_or (vector signed char, vector signed char);
37314     vector unsigned char vec_or (vector bool char, vector unsigned char);
37315     vector unsigned char vec_or (vector unsigned char, vector bool char);
37316     vector unsigned char vec_or (vector unsigned char,
37317                                  vector unsigned char);
37318
37319     vector signed char vec_pack (vector signed short, vector signed short);
37320     vector unsigned char vec_pack (vector unsigned short,
37321                                    vector unsigned short);
37322     vector bool char vec_pack (vector bool short, vector bool short);
37323     vector signed short vec_pack (vector signed int, vector signed int);
37324     vector unsigned short vec_pack (vector unsigned int,
37325                                     vector unsigned int);
37326     vector bool short vec_pack (vector bool int, vector bool int);
37327
37328     vector bool short vec_vpkuwum (vector bool int, vector bool int);
37329     vector signed short vec_vpkuwum (vector signed int, vector signed int);
37330     vector unsigned short vec_vpkuwum (vector unsigned int,
37331                                        vector unsigned int);
37332
37333     vector bool char vec_vpkuhum (vector bool short, vector bool short);
37334     vector signed char vec_vpkuhum (vector signed short,
37335                                     vector signed short);
37336     vector unsigned char vec_vpkuhum (vector unsigned short,
37337                                       vector unsigned short);
37338
37339     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
37340
37341     vector unsigned char vec_packs (vector unsigned short,
37342                                     vector unsigned short);
37343     vector signed char vec_packs (vector signed short, vector signed short);
37344     vector unsigned short vec_packs (vector unsigned int,
37345                                      vector unsigned int);
37346     vector signed short vec_packs (vector signed int, vector signed int);
37347
37348     vector signed short vec_vpkswss (vector signed int, vector signed int);
37349
37350     vector unsigned short vec_vpkuwus (vector unsigned int,
37351                                        vector unsigned int);
37352
37353     vector signed char vec_vpkshss (vector signed short,
37354                                     vector signed short);
37355
37356     vector unsigned char vec_vpkuhus (vector unsigned short,
37357                                       vector unsigned short);
37358
37359     vector unsigned char vec_packsu (vector unsigned short,
37360                                      vector unsigned short);
37361     vector unsigned char vec_packsu (vector signed short,
37362                                      vector signed short);
37363     vector unsigned short vec_packsu (vector unsigned int,
37364                                       vector unsigned int);
37365     vector unsigned short vec_packsu (vector signed int, vector signed int);
37366
37367     vector unsigned short vec_vpkswus (vector signed int,
37368                                        vector signed int);
37369
37370     vector unsigned char vec_vpkshus (vector signed short,
37371                                       vector signed short);
37372
37373     vector float vec_perm (vector float,
37374                            vector float,
37375                            vector unsigned char);
37376     vector signed int vec_perm (vector signed int,
37377                                 vector signed int,
37378                                 vector unsigned char);
37379     vector unsigned int vec_perm (vector unsigned int,
37380                                   vector unsigned int,
37381                                   vector unsigned char);
37382     vector bool int vec_perm (vector bool int,
37383                               vector bool int,
37384                               vector unsigned char);
37385     vector signed short vec_perm (vector signed short,
37386                                   vector signed short,
37387                                   vector unsigned char);
37388     vector unsigned short vec_perm (vector unsigned short,
37389                                     vector unsigned short,
37390                                     vector unsigned char);
37391     vector bool short vec_perm (vector bool short,
37392                                 vector bool short,
37393                                 vector unsigned char);
37394     vector pixel vec_perm (vector pixel,
37395                            vector pixel,
37396                            vector unsigned char);
37397     vector signed char vec_perm (vector signed char,
37398                                  vector signed char,
37399                                  vector unsigned char);
37400     vector unsigned char vec_perm (vector unsigned char,
37401                                    vector unsigned char,
37402                                    vector unsigned char);
37403     vector bool char vec_perm (vector bool char,
37404                                vector bool char,
37405                                vector unsigned char);
37406
37407     vector float vec_re (vector float);
37408
37409     vector signed char vec_rl (vector signed char,
37410                                vector unsigned char);
37411     vector unsigned char vec_rl (vector unsigned char,
37412                                  vector unsigned char);
37413     vector signed short vec_rl (vector signed short, vector unsigned short);
37414     vector unsigned short vec_rl (vector unsigned short,
37415                                   vector unsigned short);
37416     vector signed int vec_rl (vector signed int, vector unsigned int);
37417     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
37418
37419     vector signed int vec_vrlw (vector signed int, vector unsigned int);
37420     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
37421
37422     vector signed short vec_vrlh (vector signed short,
37423                                   vector unsigned short);
37424     vector unsigned short vec_vrlh (vector unsigned short,
37425                                     vector unsigned short);
37426
37427     vector signed char vec_vrlb (vector signed char, vector unsigned char);
37428     vector unsigned char vec_vrlb (vector unsigned char,
37429                                    vector unsigned char);
37430
37431     vector float vec_round (vector float);
37432
37433     vector float vec_recip (vector float, vector float);
37434
37435     vector float vec_rsqrt (vector float);
37436
37437     vector float vec_rsqrte (vector float);
37438
37439     vector float vec_sel (vector float, vector float, vector bool int);
37440     vector float vec_sel (vector float, vector float, vector unsigned int);
37441     vector signed int vec_sel (vector signed int,
37442                                vector signed int,
37443                                vector bool int);
37444     vector signed int vec_sel (vector signed int,
37445                                vector signed int,
37446                                vector unsigned int);
37447     vector unsigned int vec_sel (vector unsigned int,
37448                                  vector unsigned int,
37449                                  vector bool int);
37450     vector unsigned int vec_sel (vector unsigned int,
37451                                  vector unsigned int,
37452                                  vector unsigned int);
37453     vector bool int vec_sel (vector bool int,
37454                              vector bool int,
37455                              vector bool int);
37456     vector bool int vec_sel (vector bool int,
37457                              vector bool int,
37458                              vector unsigned int);
37459     vector signed short vec_sel (vector signed short,
37460                                  vector signed short,
37461                                  vector bool short);
37462     vector signed short vec_sel (vector signed short,
37463                                  vector signed short,
37464                                  vector unsigned short);
37465     vector unsigned short vec_sel (vector unsigned short,
37466                                    vector unsigned short,
37467                                    vector bool short);
37468     vector unsigned short vec_sel (vector unsigned short,
37469                                    vector unsigned short,
37470                                    vector unsigned short);
37471     vector bool short vec_sel (vector bool short,
37472                                vector bool short,
37473                                vector bool short);
37474     vector bool short vec_sel (vector bool short,
37475                                vector bool short,
37476                                vector unsigned short);
37477     vector signed char vec_sel (vector signed char,
37478                                 vector signed char,
37479                                 vector bool char);
37480     vector signed char vec_sel (vector signed char,
37481                                 vector signed char,
37482                                 vector unsigned char);
37483     vector unsigned char vec_sel (vector unsigned char,
37484                                   vector unsigned char,
37485                                   vector bool char);
37486     vector unsigned char vec_sel (vector unsigned char,
37487                                   vector unsigned char,
37488                                   vector unsigned char);
37489     vector bool char vec_sel (vector bool char,
37490                               vector bool char,
37491                               vector bool char);
37492     vector bool char vec_sel (vector bool char,
37493                               vector bool char,
37494                               vector unsigned char);
37495
37496     vector signed char vec_sl (vector signed char,
37497                                vector unsigned char);
37498     vector unsigned char vec_sl (vector unsigned char,
37499                                  vector unsigned char);
37500     vector signed short vec_sl (vector signed short, vector unsigned short);
37501     vector unsigned short vec_sl (vector unsigned short,
37502                                   vector unsigned short);
37503     vector signed int vec_sl (vector signed int, vector unsigned int);
37504     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
37505
37506     vector signed int vec_vslw (vector signed int, vector unsigned int);
37507     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
37508
37509     vector signed short vec_vslh (vector signed short,
37510                                   vector unsigned short);
37511     vector unsigned short vec_vslh (vector unsigned short,
37512                                     vector unsigned short);
37513
37514     vector signed char vec_vslb (vector signed char, vector unsigned char);
37515     vector unsigned char vec_vslb (vector unsigned char,
37516                                    vector unsigned char);
37517
37518     vector float vec_sld (vector float, vector float, const int);
37519     vector signed int vec_sld (vector signed int,
37520                                vector signed int,
37521                                const int);
37522     vector unsigned int vec_sld (vector unsigned int,
37523                                  vector unsigned int,
37524                                  const int);
37525     vector bool int vec_sld (vector bool int,
37526                              vector bool int,
37527                              const int);
37528     vector signed short vec_sld (vector signed short,
37529                                  vector signed short,
37530                                  const int);
37531     vector unsigned short vec_sld (vector unsigned short,
37532                                    vector unsigned short,
37533                                    const int);
37534     vector bool short vec_sld (vector bool short,
37535                                vector bool short,
37536                                const int);
37537     vector pixel vec_sld (vector pixel,
37538                           vector pixel,
37539                           const int);
37540     vector signed char vec_sld (vector signed char,
37541                                 vector signed char,
37542                                 const int);
37543     vector unsigned char vec_sld (vector unsigned char,
37544                                   vector unsigned char,
37545                                   const int);
37546     vector bool char vec_sld (vector bool char,
37547                               vector bool char,
37548                               const int);
37549
37550     vector signed int vec_sll (vector signed int,
37551                                vector unsigned int);
37552     vector signed int vec_sll (vector signed int,
37553                                vector unsigned short);
37554     vector signed int vec_sll (vector signed int,
37555                                vector unsigned char);
37556     vector unsigned int vec_sll (vector unsigned int,
37557                                  vector unsigned int);
37558     vector unsigned int vec_sll (vector unsigned int,
37559                                  vector unsigned short);
37560     vector unsigned int vec_sll (vector unsigned int,
37561                                  vector unsigned char);
37562     vector bool int vec_sll (vector bool int,
37563                              vector unsigned int);
37564     vector bool int vec_sll (vector bool int,
37565                              vector unsigned short);
37566     vector bool int vec_sll (vector bool int,
37567                              vector unsigned char);
37568     vector signed short vec_sll (vector signed short,
37569                                  vector unsigned int);
37570     vector signed short vec_sll (vector signed short,
37571                                  vector unsigned short);
37572     vector signed short vec_sll (vector signed short,
37573                                  vector unsigned char);
37574     vector unsigned short vec_sll (vector unsigned short,
37575                                    vector unsigned int);
37576     vector unsigned short vec_sll (vector unsigned short,
37577                                    vector unsigned short);
37578     vector unsigned short vec_sll (vector unsigned short,
37579                                    vector unsigned char);
37580     vector bool short vec_sll (vector bool short, vector unsigned int);
37581     vector bool short vec_sll (vector bool short, vector unsigned short);
37582     vector bool short vec_sll (vector bool short, vector unsigned char);
37583     vector pixel vec_sll (vector pixel, vector unsigned int);
37584     vector pixel vec_sll (vector pixel, vector unsigned short);
37585     vector pixel vec_sll (vector pixel, vector unsigned char);
37586     vector signed char vec_sll (vector signed char, vector unsigned int);
37587     vector signed char vec_sll (vector signed char, vector unsigned short);
37588     vector signed char vec_sll (vector signed char, vector unsigned char);
37589     vector unsigned char vec_sll (vector unsigned char,
37590                                   vector unsigned int);
37591     vector unsigned char vec_sll (vector unsigned char,
37592                                   vector unsigned short);
37593     vector unsigned char vec_sll (vector unsigned char,
37594                                   vector unsigned char);
37595     vector bool char vec_sll (vector bool char, vector unsigned int);
37596     vector bool char vec_sll (vector bool char, vector unsigned short);
37597     vector bool char vec_sll (vector bool char, vector unsigned char);
37598
37599     vector float vec_slo (vector float, vector signed char);
37600     vector float vec_slo (vector float, vector unsigned char);
37601     vector signed int vec_slo (vector signed int, vector signed char);
37602     vector signed int vec_slo (vector signed int, vector unsigned char);
37603     vector unsigned int vec_slo (vector unsigned int, vector signed char);
37604     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
37605     vector signed short vec_slo (vector signed short, vector signed char);
37606     vector signed short vec_slo (vector signed short, vector unsigned char);
37607     vector unsigned short vec_slo (vector unsigned short,
37608                                    vector signed char);
37609     vector unsigned short vec_slo (vector unsigned short,
37610                                    vector unsigned char);
37611     vector pixel vec_slo (vector pixel, vector signed char);
37612     vector pixel vec_slo (vector pixel, vector unsigned char);
37613     vector signed char vec_slo (vector signed char, vector signed char);
37614     vector signed char vec_slo (vector signed char, vector unsigned char);
37615     vector unsigned char vec_slo (vector unsigned char, vector signed char);
37616     vector unsigned char vec_slo (vector unsigned char,
37617                                   vector unsigned char);
37618
37619     vector signed char vec_splat (vector signed char, const int);
37620     vector unsigned char vec_splat (vector unsigned char, const int);
37621     vector bool char vec_splat (vector bool char, const int);
37622     vector signed short vec_splat (vector signed short, const int);
37623     vector unsigned short vec_splat (vector unsigned short, const int);
37624     vector bool short vec_splat (vector bool short, const int);
37625     vector pixel vec_splat (vector pixel, const int);
37626     vector float vec_splat (vector float, const int);
37627     vector signed int vec_splat (vector signed int, const int);
37628     vector unsigned int vec_splat (vector unsigned int, const int);
37629     vector bool int vec_splat (vector bool int, const int);
37630     vector signed long vec_splat (vector signed long, const int);
37631     vector unsigned long vec_splat (vector unsigned long, const int);
37632
37633     vector signed char vec_splats (signed char);
37634     vector unsigned char vec_splats (unsigned char);
37635     vector signed short vec_splats (signed short);
37636     vector unsigned short vec_splats (unsigned short);
37637     vector signed int vec_splats (signed int);
37638     vector unsigned int vec_splats (unsigned int);
37639     vector float vec_splats (float);
37640
37641     vector float vec_vspltw (vector float, const int);
37642     vector signed int vec_vspltw (vector signed int, const int);
37643     vector unsigned int vec_vspltw (vector unsigned int, const int);
37644     vector bool int vec_vspltw (vector bool int, const int);
37645
37646     vector bool short vec_vsplth (vector bool short, const int);
37647     vector signed short vec_vsplth (vector signed short, const int);
37648     vector unsigned short vec_vsplth (vector unsigned short, const int);
37649     vector pixel vec_vsplth (vector pixel, const int);
37650
37651     vector signed char vec_vspltb (vector signed char, const int);
37652     vector unsigned char vec_vspltb (vector unsigned char, const int);
37653     vector bool char vec_vspltb (vector bool char, const int);
37654
37655     vector signed char vec_splat_s8 (const int);
37656
37657     vector signed short vec_splat_s16 (const int);
37658
37659     vector signed int vec_splat_s32 (const int);
37660
37661     vector unsigned char vec_splat_u8 (const int);
37662
37663     vector unsigned short vec_splat_u16 (const int);
37664
37665     vector unsigned int vec_splat_u32 (const int);
37666
37667     vector signed char vec_sr (vector signed char, vector unsigned char);
37668     vector unsigned char vec_sr (vector unsigned char,
37669                                  vector unsigned char);
37670     vector signed short vec_sr (vector signed short,
37671                                 vector unsigned short);
37672     vector unsigned short vec_sr (vector unsigned short,
37673                                   vector unsigned short);
37674     vector signed int vec_sr (vector signed int, vector unsigned int);
37675     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
37676
37677     vector signed int vec_vsrw (vector signed int, vector unsigned int);
37678     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
37679
37680     vector signed short vec_vsrh (vector signed short,
37681                                   vector unsigned short);
37682     vector unsigned short vec_vsrh (vector unsigned short,
37683                                     vector unsigned short);
37684
37685     vector signed char vec_vsrb (vector signed char, vector unsigned char);
37686     vector unsigned char vec_vsrb (vector unsigned char,
37687                                    vector unsigned char);
37688
37689     vector signed char vec_sra (vector signed char, vector unsigned char);
37690     vector unsigned char vec_sra (vector unsigned char,
37691                                   vector unsigned char);
37692     vector signed short vec_sra (vector signed short,
37693                                  vector unsigned short);
37694     vector unsigned short vec_sra (vector unsigned short,
37695                                    vector unsigned short);
37696     vector signed int vec_sra (vector signed int, vector unsigned int);
37697     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
37698
37699     vector signed int vec_vsraw (vector signed int, vector unsigned int);
37700     vector unsigned int vec_vsraw (vector unsigned int,
37701                                    vector unsigned int);
37702
37703     vector signed short vec_vsrah (vector signed short,
37704                                    vector unsigned short);
37705     vector unsigned short vec_vsrah (vector unsigned short,
37706                                      vector unsigned short);
37707
37708     vector signed char vec_vsrab (vector signed char, vector unsigned char);
37709     vector unsigned char vec_vsrab (vector unsigned char,
37710                                     vector unsigned char);
37711
37712     vector signed int vec_srl (vector signed int, vector unsigned int);
37713     vector signed int vec_srl (vector signed int, vector unsigned short);
37714     vector signed int vec_srl (vector signed int, vector unsigned char);
37715     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
37716     vector unsigned int vec_srl (vector unsigned int,
37717                                  vector unsigned short);
37718     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
37719     vector bool int vec_srl (vector bool int, vector unsigned int);
37720     vector bool int vec_srl (vector bool int, vector unsigned short);
37721     vector bool int vec_srl (vector bool int, vector unsigned char);
37722     vector signed short vec_srl (vector signed short, vector unsigned int);
37723     vector signed short vec_srl (vector signed short,
37724                                  vector unsigned short);
37725     vector signed short vec_srl (vector signed short, vector unsigned char);
37726     vector unsigned short vec_srl (vector unsigned short,
37727                                    vector unsigned int);
37728     vector unsigned short vec_srl (vector unsigned short,
37729                                    vector unsigned short);
37730     vector unsigned short vec_srl (vector unsigned short,
37731                                    vector unsigned char);
37732     vector bool short vec_srl (vector bool short, vector unsigned int);
37733     vector bool short vec_srl (vector bool short, vector unsigned short);
37734     vector bool short vec_srl (vector bool short, vector unsigned char);
37735     vector pixel vec_srl (vector pixel, vector unsigned int);
37736     vector pixel vec_srl (vector pixel, vector unsigned short);
37737     vector pixel vec_srl (vector pixel, vector unsigned char);
37738     vector signed char vec_srl (vector signed char, vector unsigned int);
37739     vector signed char vec_srl (vector signed char, vector unsigned short);
37740     vector signed char vec_srl (vector signed char, vector unsigned char);
37741     vector unsigned char vec_srl (vector unsigned char,
37742                                   vector unsigned int);
37743     vector unsigned char vec_srl (vector unsigned char,
37744                                   vector unsigned short);
37745     vector unsigned char vec_srl (vector unsigned char,
37746                                   vector unsigned char);
37747     vector bool char vec_srl (vector bool char, vector unsigned int);
37748     vector bool char vec_srl (vector bool char, vector unsigned short);
37749     vector bool char vec_srl (vector bool char, vector unsigned char);
37750
37751     vector float vec_sro (vector float, vector signed char);
37752     vector float vec_sro (vector float, vector unsigned char);
37753     vector signed int vec_sro (vector signed int, vector signed char);
37754     vector signed int vec_sro (vector signed int, vector unsigned char);
37755     vector unsigned int vec_sro (vector unsigned int, vector signed char);
37756     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
37757     vector signed short vec_sro (vector signed short, vector signed char);
37758     vector signed short vec_sro (vector signed short, vector unsigned char);
37759     vector unsigned short vec_sro (vector unsigned short,
37760                                    vector signed char);
37761     vector unsigned short vec_sro (vector unsigned short,
37762                                    vector unsigned char);
37763     vector pixel vec_sro (vector pixel, vector signed char);
37764     vector pixel vec_sro (vector pixel, vector unsigned char);
37765     vector signed char vec_sro (vector signed char, vector signed char);
37766     vector signed char vec_sro (vector signed char, vector unsigned char);
37767     vector unsigned char vec_sro (vector unsigned char, vector signed char);
37768     vector unsigned char vec_sro (vector unsigned char,
37769                                   vector unsigned char);
37770
37771     void vec_st (vector float, int, vector float *);
37772     void vec_st (vector float, int, float *);
37773     void vec_st (vector signed int, int, vector signed int *);
37774     void vec_st (vector signed int, int, int *);
37775     void vec_st (vector unsigned int, int, vector unsigned int *);
37776     void vec_st (vector unsigned int, int, unsigned int *);
37777     void vec_st (vector bool int, int, vector bool int *);
37778     void vec_st (vector bool int, int, unsigned int *);
37779     void vec_st (vector bool int, int, int *);
37780     void vec_st (vector signed short, int, vector signed short *);
37781     void vec_st (vector signed short, int, short *);
37782     void vec_st (vector unsigned short, int, vector unsigned short *);
37783     void vec_st (vector unsigned short, int, unsigned short *);
37784     void vec_st (vector bool short, int, vector bool short *);
37785     void vec_st (vector bool short, int, unsigned short *);
37786     void vec_st (vector pixel, int, vector pixel *);
37787     void vec_st (vector pixel, int, unsigned short *);
37788     void vec_st (vector pixel, int, short *);
37789     void vec_st (vector bool short, int, short *);
37790     void vec_st (vector signed char, int, vector signed char *);
37791     void vec_st (vector signed char, int, signed char *);
37792     void vec_st (vector unsigned char, int, vector unsigned char *);
37793     void vec_st (vector unsigned char, int, unsigned char *);
37794     void vec_st (vector bool char, int, vector bool char *);
37795     void vec_st (vector bool char, int, unsigned char *);
37796     void vec_st (vector bool char, int, signed char *);
37797
37798     void vec_ste (vector signed char, int, signed char *);
37799     void vec_ste (vector unsigned char, int, unsigned char *);
37800     void vec_ste (vector bool char, int, signed char *);
37801     void vec_ste (vector bool char, int, unsigned char *);
37802     void vec_ste (vector signed short, int, short *);
37803     void vec_ste (vector unsigned short, int, unsigned short *);
37804     void vec_ste (vector bool short, int, short *);
37805     void vec_ste (vector bool short, int, unsigned short *);
37806     void vec_ste (vector pixel, int, short *);
37807     void vec_ste (vector pixel, int, unsigned short *);
37808     void vec_ste (vector float, int, float *);
37809     void vec_ste (vector signed int, int, int *);
37810     void vec_ste (vector unsigned int, int, unsigned int *);
37811     void vec_ste (vector bool int, int, int *);
37812     void vec_ste (vector bool int, int, unsigned int *);
37813
37814     void vec_stvewx (vector float, int, float *);
37815     void vec_stvewx (vector signed int, int, int *);
37816     void vec_stvewx (vector unsigned int, int, unsigned int *);
37817     void vec_stvewx (vector bool int, int, int *);
37818     void vec_stvewx (vector bool int, int, unsigned int *);
37819
37820     void vec_stvehx (vector signed short, int, short *);
37821     void vec_stvehx (vector unsigned short, int, unsigned short *);
37822     void vec_stvehx (vector bool short, int, short *);
37823     void vec_stvehx (vector bool short, int, unsigned short *);
37824     void vec_stvehx (vector pixel, int, short *);
37825     void vec_stvehx (vector pixel, int, unsigned short *);
37826
37827     void vec_stvebx (vector signed char, int, signed char *);
37828     void vec_stvebx (vector unsigned char, int, unsigned char *);
37829     void vec_stvebx (vector bool char, int, signed char *);
37830     void vec_stvebx (vector bool char, int, unsigned char *);
37831
37832     void vec_stl (vector float, int, vector float *);
37833     void vec_stl (vector float, int, float *);
37834     void vec_stl (vector signed int, int, vector signed int *);
37835     void vec_stl (vector signed int, int, int *);
37836     void vec_stl (vector unsigned int, int, vector unsigned int *);
37837     void vec_stl (vector unsigned int, int, unsigned int *);
37838     void vec_stl (vector bool int, int, vector bool int *);
37839     void vec_stl (vector bool int, int, unsigned int *);
37840     void vec_stl (vector bool int, int, int *);
37841     void vec_stl (vector signed short, int, vector signed short *);
37842     void vec_stl (vector signed short, int, short *);
37843     void vec_stl (vector unsigned short, int, vector unsigned short *);
37844     void vec_stl (vector unsigned short, int, unsigned short *);
37845     void vec_stl (vector bool short, int, vector bool short *);
37846     void vec_stl (vector bool short, int, unsigned short *);
37847     void vec_stl (vector bool short, int, short *);
37848     void vec_stl (vector pixel, int, vector pixel *);
37849     void vec_stl (vector pixel, int, unsigned short *);
37850     void vec_stl (vector pixel, int, short *);
37851     void vec_stl (vector signed char, int, vector signed char *);
37852     void vec_stl (vector signed char, int, signed char *);
37853     void vec_stl (vector unsigned char, int, vector unsigned char *);
37854     void vec_stl (vector unsigned char, int, unsigned char *);
37855     void vec_stl (vector bool char, int, vector bool char *);
37856     void vec_stl (vector bool char, int, unsigned char *);
37857     void vec_stl (vector bool char, int, signed char *);
37858
37859     vector signed char vec_sub (vector bool char, vector signed char);
37860     vector signed char vec_sub (vector signed char, vector bool char);
37861     vector signed char vec_sub (vector signed char, vector signed char);
37862     vector unsigned char vec_sub (vector bool char, vector unsigned char);
37863     vector unsigned char vec_sub (vector unsigned char, vector bool char);
37864     vector unsigned char vec_sub (vector unsigned char,
37865                                   vector unsigned char);
37866     vector signed short vec_sub (vector bool short, vector signed short);
37867     vector signed short vec_sub (vector signed short, vector bool short);
37868     vector signed short vec_sub (vector signed short, vector signed short);
37869     vector unsigned short vec_sub (vector bool short,
37870                                    vector unsigned short);
37871     vector unsigned short vec_sub (vector unsigned short,
37872                                    vector bool short);
37873     vector unsigned short vec_sub (vector unsigned short,
37874                                    vector unsigned short);
37875     vector signed int vec_sub (vector bool int, vector signed int);
37876     vector signed int vec_sub (vector signed int, vector bool int);
37877     vector signed int vec_sub (vector signed int, vector signed int);
37878     vector unsigned int vec_sub (vector bool int, vector unsigned int);
37879     vector unsigned int vec_sub (vector unsigned int, vector bool int);
37880     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
37881     vector float vec_sub (vector float, vector float);
37882
37883     vector float vec_vsubfp (vector float, vector float);
37884
37885     vector signed int vec_vsubuwm (vector bool int, vector signed int);
37886     vector signed int vec_vsubuwm (vector signed int, vector bool int);
37887     vector signed int vec_vsubuwm (vector signed int, vector signed int);
37888     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
37889     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
37890     vector unsigned int vec_vsubuwm (vector unsigned int,
37891                                      vector unsigned int);
37892
37893     vector signed short vec_vsubuhm (vector bool short,
37894                                      vector signed short);
37895     vector signed short vec_vsubuhm (vector signed short,
37896                                      vector bool short);
37897     vector signed short vec_vsubuhm (vector signed short,
37898                                      vector signed short);
37899     vector unsigned short vec_vsubuhm (vector bool short,
37900                                        vector unsigned short);
37901     vector unsigned short vec_vsubuhm (vector unsigned short,
37902                                        vector bool short);
37903     vector unsigned short vec_vsubuhm (vector unsigned short,
37904                                        vector unsigned short);
37905
37906     vector signed char vec_vsububm (vector bool char, vector signed char);
37907     vector signed char vec_vsububm (vector signed char, vector bool char);
37908     vector signed char vec_vsububm (vector signed char, vector signed char);
37909     vector unsigned char vec_vsububm (vector bool char,
37910                                       vector unsigned char);
37911     vector unsigned char vec_vsububm (vector unsigned char,
37912                                       vector bool char);
37913     vector unsigned char vec_vsububm (vector unsigned char,
37914                                       vector unsigned char);
37915
37916     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
37917
37918     vector unsigned char vec_subs (vector bool char, vector unsigned char);
37919     vector unsigned char vec_subs (vector unsigned char, vector bool char);
37920     vector unsigned char vec_subs (vector unsigned char,
37921                                    vector unsigned char);
37922     vector signed char vec_subs (vector bool char, vector signed char);
37923     vector signed char vec_subs (vector signed char, vector bool char);
37924     vector signed char vec_subs (vector signed char, vector signed char);
37925     vector unsigned short vec_subs (vector bool short,
37926                                     vector unsigned short);
37927     vector unsigned short vec_subs (vector unsigned short,
37928                                     vector bool short);
37929     vector unsigned short vec_subs (vector unsigned short,
37930                                     vector unsigned short);
37931     vector signed short vec_subs (vector bool short, vector signed short);
37932     vector signed short vec_subs (vector signed short, vector bool short);
37933     vector signed short vec_subs (vector signed short, vector signed short);
37934     vector unsigned int vec_subs (vector bool int, vector unsigned int);
37935     vector unsigned int vec_subs (vector unsigned int, vector bool int);
37936     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
37937     vector signed int vec_subs (vector bool int, vector signed int);
37938     vector signed int vec_subs (vector signed int, vector bool int);
37939     vector signed int vec_subs (vector signed int, vector signed int);
37940
37941     vector signed int vec_vsubsws (vector bool int, vector signed int);
37942     vector signed int vec_vsubsws (vector signed int, vector bool int);
37943     vector signed int vec_vsubsws (vector signed int, vector signed int);
37944
37945     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
37946     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
37947     vector unsigned int vec_vsubuws (vector unsigned int,
37948                                      vector unsigned int);
37949
37950     vector signed short vec_vsubshs (vector bool short,
37951                                      vector signed short);
37952     vector signed short vec_vsubshs (vector signed short,
37953                                      vector bool short);
37954     vector signed short vec_vsubshs (vector signed short,
37955                                      vector signed short);
37956
37957     vector unsigned short vec_vsubuhs (vector bool short,
37958                                        vector unsigned short);
37959     vector unsigned short vec_vsubuhs (vector unsigned short,
37960                                        vector bool short);
37961     vector unsigned short vec_vsubuhs (vector unsigned short,
37962                                        vector unsigned short);
37963
37964     vector signed char vec_vsubsbs (vector bool char, vector signed char);
37965     vector signed char vec_vsubsbs (vector signed char, vector bool char);
37966     vector signed char vec_vsubsbs (vector signed char, vector signed char);
37967
37968     vector unsigned char vec_vsububs (vector bool char,
37969                                       vector unsigned char);
37970     vector unsigned char vec_vsububs (vector unsigned char,
37971                                       vector bool char);
37972     vector unsigned char vec_vsububs (vector unsigned char,
37973                                       vector unsigned char);
37974
37975     vector unsigned int vec_sum4s (vector unsigned char,
37976                                    vector unsigned int);
37977     vector signed int vec_sum4s (vector signed char, vector signed int);
37978     vector signed int vec_sum4s (vector signed short, vector signed int);
37979
37980     vector signed int vec_vsum4shs (vector signed short, vector signed int);
37981
37982     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
37983
37984     vector unsigned int vec_vsum4ubs (vector unsigned char,
37985                                       vector unsigned int);
37986
37987     vector signed int vec_sum2s (vector signed int, vector signed int);
37988
37989     vector signed int vec_sums (vector signed int, vector signed int);
37990
37991     vector float vec_trunc (vector float);
37992
37993     vector signed short vec_unpackh (vector signed char);
37994     vector bool short vec_unpackh (vector bool char);
37995     vector signed int vec_unpackh (vector signed short);
37996     vector bool int vec_unpackh (vector bool short);
37997     vector unsigned int vec_unpackh (vector pixel);
37998
37999     vector bool int vec_vupkhsh (vector bool short);
38000     vector signed int vec_vupkhsh (vector signed short);
38001
38002     vector unsigned int vec_vupkhpx (vector pixel);
38003
38004     vector bool short vec_vupkhsb (vector bool char);
38005     vector signed short vec_vupkhsb (vector signed char);
38006
38007     vector signed short vec_unpackl (vector signed char);
38008     vector bool short vec_unpackl (vector bool char);
38009     vector unsigned int vec_unpackl (vector pixel);
38010     vector signed int vec_unpackl (vector signed short);
38011     vector bool int vec_unpackl (vector bool short);
38012
38013     vector unsigned int vec_vupklpx (vector pixel);
38014
38015     vector bool int vec_vupklsh (vector bool short);
38016     vector signed int vec_vupklsh (vector signed short);
38017
38018     vector bool short vec_vupklsb (vector bool char);
38019     vector signed short vec_vupklsb (vector signed char);
38020
38021     vector float vec_xor (vector float, vector float);
38022     vector float vec_xor (vector float, vector bool int);
38023     vector float vec_xor (vector bool int, vector float);
38024     vector bool int vec_xor (vector bool int, vector bool int);
38025     vector signed int vec_xor (vector bool int, vector signed int);
38026     vector signed int vec_xor (vector signed int, vector bool int);
38027     vector signed int vec_xor (vector signed int, vector signed int);
38028     vector unsigned int vec_xor (vector bool int, vector unsigned int);
38029     vector unsigned int vec_xor (vector unsigned int, vector bool int);
38030     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
38031     vector bool short vec_xor (vector bool short, vector bool short);
38032     vector signed short vec_xor (vector bool short, vector signed short);
38033     vector signed short vec_xor (vector signed short, vector bool short);
38034     vector signed short vec_xor (vector signed short, vector signed short);
38035     vector unsigned short vec_xor (vector bool short,
38036                                    vector unsigned short);
38037     vector unsigned short vec_xor (vector unsigned short,
38038                                    vector bool short);
38039     vector unsigned short vec_xor (vector unsigned short,
38040                                    vector unsigned short);
38041     vector signed char vec_xor (vector bool char, vector signed char);
38042     vector bool char vec_xor (vector bool char, vector bool char);
38043     vector signed char vec_xor (vector signed char, vector bool char);
38044     vector signed char vec_xor (vector signed char, vector signed char);
38045     vector unsigned char vec_xor (vector bool char, vector unsigned char);
38046     vector unsigned char vec_xor (vector unsigned char, vector bool char);
38047     vector unsigned char vec_xor (vector unsigned char,
38048                                   vector unsigned char);
38049
38050     int vec_all_eq (vector signed char, vector bool char);
38051     int vec_all_eq (vector signed char, vector signed char);
38052     int vec_all_eq (vector unsigned char, vector bool char);
38053     int vec_all_eq (vector unsigned char, vector unsigned char);
38054     int vec_all_eq (vector bool char, vector bool char);
38055     int vec_all_eq (vector bool char, vector unsigned char);
38056     int vec_all_eq (vector bool char, vector signed char);
38057     int vec_all_eq (vector signed short, vector bool short);
38058     int vec_all_eq (vector signed short, vector signed short);
38059     int vec_all_eq (vector unsigned short, vector bool short);
38060     int vec_all_eq (vector unsigned short, vector unsigned short);
38061     int vec_all_eq (vector bool short, vector bool short);
38062     int vec_all_eq (vector bool short, vector unsigned short);
38063     int vec_all_eq (vector bool short, vector signed short);
38064     int vec_all_eq (vector pixel, vector pixel);
38065     int vec_all_eq (vector signed int, vector bool int);
38066     int vec_all_eq (vector signed int, vector signed int);
38067     int vec_all_eq (vector unsigned int, vector bool int);
38068     int vec_all_eq (vector unsigned int, vector unsigned int);
38069     int vec_all_eq (vector bool int, vector bool int);
38070     int vec_all_eq (vector bool int, vector unsigned int);
38071     int vec_all_eq (vector bool int, vector signed int);
38072     int vec_all_eq (vector float, vector float);
38073
38074     int vec_all_ge (vector bool char, vector unsigned char);
38075     int vec_all_ge (vector unsigned char, vector bool char);
38076     int vec_all_ge (vector unsigned char, vector unsigned char);
38077     int vec_all_ge (vector bool char, vector signed char);
38078     int vec_all_ge (vector signed char, vector bool char);
38079     int vec_all_ge (vector signed char, vector signed char);
38080     int vec_all_ge (vector bool short, vector unsigned short);
38081     int vec_all_ge (vector unsigned short, vector bool short);
38082     int vec_all_ge (vector unsigned short, vector unsigned short);
38083     int vec_all_ge (vector signed short, vector signed short);
38084     int vec_all_ge (vector bool short, vector signed short);
38085     int vec_all_ge (vector signed short, vector bool short);
38086     int vec_all_ge (vector bool int, vector unsigned int);
38087     int vec_all_ge (vector unsigned int, vector bool int);
38088     int vec_all_ge (vector unsigned int, vector unsigned int);
38089     int vec_all_ge (vector bool int, vector signed int);
38090     int vec_all_ge (vector signed int, vector bool int);
38091     int vec_all_ge (vector signed int, vector signed int);
38092     int vec_all_ge (vector float, vector float);
38093
38094     int vec_all_gt (vector bool char, vector unsigned char);
38095     int vec_all_gt (vector unsigned char, vector bool char);
38096     int vec_all_gt (vector unsigned char, vector unsigned char);
38097     int vec_all_gt (vector bool char, vector signed char);
38098     int vec_all_gt (vector signed char, vector bool char);
38099     int vec_all_gt (vector signed char, vector signed char);
38100     int vec_all_gt (vector bool short, vector unsigned short);
38101     int vec_all_gt (vector unsigned short, vector bool short);
38102     int vec_all_gt (vector unsigned short, vector unsigned short);
38103     int vec_all_gt (vector bool short, vector signed short);
38104     int vec_all_gt (vector signed short, vector bool short);
38105     int vec_all_gt (vector signed short, vector signed short);
38106     int vec_all_gt (vector bool int, vector unsigned int);
38107     int vec_all_gt (vector unsigned int, vector bool int);
38108     int vec_all_gt (vector unsigned int, vector unsigned int);
38109     int vec_all_gt (vector bool int, vector signed int);
38110     int vec_all_gt (vector signed int, vector bool int);
38111     int vec_all_gt (vector signed int, vector signed int);
38112     int vec_all_gt (vector float, vector float);
38113
38114     int vec_all_in (vector float, vector float);
38115
38116     int vec_all_le (vector bool char, vector unsigned char);
38117     int vec_all_le (vector unsigned char, vector bool char);
38118     int vec_all_le (vector unsigned char, vector unsigned char);
38119     int vec_all_le (vector bool char, vector signed char);
38120     int vec_all_le (vector signed char, vector bool char);
38121     int vec_all_le (vector signed char, vector signed char);
38122     int vec_all_le (vector bool short, vector unsigned short);
38123     int vec_all_le (vector unsigned short, vector bool short);
38124     int vec_all_le (vector unsigned short, vector unsigned short);
38125     int vec_all_le (vector bool short, vector signed short);
38126     int vec_all_le (vector signed short, vector bool short);
38127     int vec_all_le (vector signed short, vector signed short);
38128     int vec_all_le (vector bool int, vector unsigned int);
38129     int vec_all_le (vector unsigned int, vector bool int);
38130     int vec_all_le (vector unsigned int, vector unsigned int);
38131     int vec_all_le (vector bool int, vector signed int);
38132     int vec_all_le (vector signed int, vector bool int);
38133     int vec_all_le (vector signed int, vector signed int);
38134     int vec_all_le (vector float, vector float);
38135
38136     int vec_all_lt (vector bool char, vector unsigned char);
38137     int vec_all_lt (vector unsigned char, vector bool char);
38138     int vec_all_lt (vector unsigned char, vector unsigned char);
38139     int vec_all_lt (vector bool char, vector signed char);
38140     int vec_all_lt (vector signed char, vector bool char);
38141     int vec_all_lt (vector signed char, vector signed char);
38142     int vec_all_lt (vector bool short, vector unsigned short);
38143     int vec_all_lt (vector unsigned short, vector bool short);
38144     int vec_all_lt (vector unsigned short, vector unsigned short);
38145     int vec_all_lt (vector bool short, vector signed short);
38146     int vec_all_lt (vector signed short, vector bool short);
38147     int vec_all_lt (vector signed short, vector signed short);
38148     int vec_all_lt (vector bool int, vector unsigned int);
38149     int vec_all_lt (vector unsigned int, vector bool int);
38150     int vec_all_lt (vector unsigned int, vector unsigned int);
38151     int vec_all_lt (vector bool int, vector signed int);
38152     int vec_all_lt (vector signed int, vector bool int);
38153     int vec_all_lt (vector signed int, vector signed int);
38154     int vec_all_lt (vector float, vector float);
38155
38156     int vec_all_nan (vector float);
38157
38158     int vec_all_ne (vector signed char, vector bool char);
38159     int vec_all_ne (vector signed char, vector signed char);
38160     int vec_all_ne (vector unsigned char, vector bool char);
38161     int vec_all_ne (vector unsigned char, vector unsigned char);
38162     int vec_all_ne (vector bool char, vector bool char);
38163     int vec_all_ne (vector bool char, vector unsigned char);
38164     int vec_all_ne (vector bool char, vector signed char);
38165     int vec_all_ne (vector signed short, vector bool short);
38166     int vec_all_ne (vector signed short, vector signed short);
38167     int vec_all_ne (vector unsigned short, vector bool short);
38168     int vec_all_ne (vector unsigned short, vector unsigned short);
38169     int vec_all_ne (vector bool short, vector bool short);
38170     int vec_all_ne (vector bool short, vector unsigned short);
38171     int vec_all_ne (vector bool short, vector signed short);
38172     int vec_all_ne (vector pixel, vector pixel);
38173     int vec_all_ne (vector signed int, vector bool int);
38174     int vec_all_ne (vector signed int, vector signed int);
38175     int vec_all_ne (vector unsigned int, vector bool int);
38176     int vec_all_ne (vector unsigned int, vector unsigned int);
38177     int vec_all_ne (vector bool int, vector bool int);
38178     int vec_all_ne (vector bool int, vector unsigned int);
38179     int vec_all_ne (vector bool int, vector signed int);
38180     int vec_all_ne (vector float, vector float);
38181
38182     int vec_all_nge (vector float, vector float);
38183
38184     int vec_all_ngt (vector float, vector float);
38185
38186     int vec_all_nle (vector float, vector float);
38187
38188     int vec_all_nlt (vector float, vector float);
38189
38190     int vec_all_numeric (vector float);
38191
38192     int vec_any_eq (vector signed char, vector bool char);
38193     int vec_any_eq (vector signed char, vector signed char);
38194     int vec_any_eq (vector unsigned char, vector bool char);
38195     int vec_any_eq (vector unsigned char, vector unsigned char);
38196     int vec_any_eq (vector bool char, vector bool char);
38197     int vec_any_eq (vector bool char, vector unsigned char);
38198     int vec_any_eq (vector bool char, vector signed char);
38199     int vec_any_eq (vector signed short, vector bool short);
38200     int vec_any_eq (vector signed short, vector signed short);
38201     int vec_any_eq (vector unsigned short, vector bool short);
38202     int vec_any_eq (vector unsigned short, vector unsigned short);
38203     int vec_any_eq (vector bool short, vector bool short);
38204     int vec_any_eq (vector bool short, vector unsigned short);
38205     int vec_any_eq (vector bool short, vector signed short);
38206     int vec_any_eq (vector pixel, vector pixel);
38207     int vec_any_eq (vector signed int, vector bool int);
38208     int vec_any_eq (vector signed int, vector signed int);
38209     int vec_any_eq (vector unsigned int, vector bool int);
38210     int vec_any_eq (vector unsigned int, vector unsigned int);
38211     int vec_any_eq (vector bool int, vector bool int);
38212     int vec_any_eq (vector bool int, vector unsigned int);
38213     int vec_any_eq (vector bool int, vector signed int);
38214     int vec_any_eq (vector float, vector float);
38215
38216     int vec_any_ge (vector signed char, vector bool char);
38217     int vec_any_ge (vector unsigned char, vector bool char);
38218     int vec_any_ge (vector unsigned char, vector unsigned char);
38219     int vec_any_ge (vector signed char, vector signed char);
38220     int vec_any_ge (vector bool char, vector unsigned char);
38221     int vec_any_ge (vector bool char, vector signed char);
38222     int vec_any_ge (vector unsigned short, vector bool short);
38223     int vec_any_ge (vector unsigned short, vector unsigned short);
38224     int vec_any_ge (vector signed short, vector signed short);
38225     int vec_any_ge (vector signed short, vector bool short);
38226     int vec_any_ge (vector bool short, vector unsigned short);
38227     int vec_any_ge (vector bool short, vector signed short);
38228     int vec_any_ge (vector signed int, vector bool int);
38229     int vec_any_ge (vector unsigned int, vector bool int);
38230     int vec_any_ge (vector unsigned int, vector unsigned int);
38231     int vec_any_ge (vector signed int, vector signed int);
38232     int vec_any_ge (vector bool int, vector unsigned int);
38233     int vec_any_ge (vector bool int, vector signed int);
38234     int vec_any_ge (vector float, vector float);
38235
38236     int vec_any_gt (vector bool char, vector unsigned char);
38237     int vec_any_gt (vector unsigned char, vector bool char);
38238     int vec_any_gt (vector unsigned char, vector unsigned char);
38239     int vec_any_gt (vector bool char, vector signed char);
38240     int vec_any_gt (vector signed char, vector bool char);
38241     int vec_any_gt (vector signed char, vector signed char);
38242     int vec_any_gt (vector bool short, vector unsigned short);
38243     int vec_any_gt (vector unsigned short, vector bool short);
38244     int vec_any_gt (vector unsigned short, vector unsigned short);
38245     int vec_any_gt (vector bool short, vector signed short);
38246     int vec_any_gt (vector signed short, vector bool short);
38247     int vec_any_gt (vector signed short, vector signed short);
38248     int vec_any_gt (vector bool int, vector unsigned int);
38249     int vec_any_gt (vector unsigned int, vector bool int);
38250     int vec_any_gt (vector unsigned int, vector unsigned int);
38251     int vec_any_gt (vector bool int, vector signed int);
38252     int vec_any_gt (vector signed int, vector bool int);
38253     int vec_any_gt (vector signed int, vector signed int);
38254     int vec_any_gt (vector float, vector float);
38255
38256     int vec_any_le (vector bool char, vector unsigned char);
38257     int vec_any_le (vector unsigned char, vector bool char);
38258     int vec_any_le (vector unsigned char, vector unsigned char);
38259     int vec_any_le (vector bool char, vector signed char);
38260     int vec_any_le (vector signed char, vector bool char);
38261     int vec_any_le (vector signed char, vector signed char);
38262     int vec_any_le (vector bool short, vector unsigned short);
38263     int vec_any_le (vector unsigned short, vector bool short);
38264     int vec_any_le (vector unsigned short, vector unsigned short);
38265     int vec_any_le (vector bool short, vector signed short);
38266     int vec_any_le (vector signed short, vector bool short);
38267     int vec_any_le (vector signed short, vector signed short);
38268     int vec_any_le (vector bool int, vector unsigned int);
38269     int vec_any_le (vector unsigned int, vector bool int);
38270     int vec_any_le (vector unsigned int, vector unsigned int);
38271     int vec_any_le (vector bool int, vector signed int);
38272     int vec_any_le (vector signed int, vector bool int);
38273     int vec_any_le (vector signed int, vector signed int);
38274     int vec_any_le (vector float, vector float);
38275
38276     int vec_any_lt (vector bool char, vector unsigned char);
38277     int vec_any_lt (vector unsigned char, vector bool char);
38278     int vec_any_lt (vector unsigned char, vector unsigned char);
38279     int vec_any_lt (vector bool char, vector signed char);
38280     int vec_any_lt (vector signed char, vector bool char);
38281     int vec_any_lt (vector signed char, vector signed char);
38282     int vec_any_lt (vector bool short, vector unsigned short);
38283     int vec_any_lt (vector unsigned short, vector bool short);
38284     int vec_any_lt (vector unsigned short, vector unsigned short);
38285     int vec_any_lt (vector bool short, vector signed short);
38286     int vec_any_lt (vector signed short, vector bool short);
38287     int vec_any_lt (vector signed short, vector signed short);
38288     int vec_any_lt (vector bool int, vector unsigned int);
38289     int vec_any_lt (vector unsigned int, vector bool int);
38290     int vec_any_lt (vector unsigned int, vector unsigned int);
38291     int vec_any_lt (vector bool int, vector signed int);
38292     int vec_any_lt (vector signed int, vector bool int);
38293     int vec_any_lt (vector signed int, vector signed int);
38294     int vec_any_lt (vector float, vector float);
38295
38296     int vec_any_nan (vector float);
38297
38298     int vec_any_ne (vector signed char, vector bool char);
38299     int vec_any_ne (vector signed char, vector signed char);
38300     int vec_any_ne (vector unsigned char, vector bool char);
38301     int vec_any_ne (vector unsigned char, vector unsigned char);
38302     int vec_any_ne (vector bool char, vector bool char);
38303     int vec_any_ne (vector bool char, vector unsigned char);
38304     int vec_any_ne (vector bool char, vector signed char);
38305     int vec_any_ne (vector signed short, vector bool short);
38306     int vec_any_ne (vector signed short, vector signed short);
38307     int vec_any_ne (vector unsigned short, vector bool short);
38308     int vec_any_ne (vector unsigned short, vector unsigned short);
38309     int vec_any_ne (vector bool short, vector bool short);
38310     int vec_any_ne (vector bool short, vector unsigned short);
38311     int vec_any_ne (vector bool short, vector signed short);
38312     int vec_any_ne (vector pixel, vector pixel);
38313     int vec_any_ne (vector signed int, vector bool int);
38314     int vec_any_ne (vector signed int, vector signed int);
38315     int vec_any_ne (vector unsigned int, vector bool int);
38316     int vec_any_ne (vector unsigned int, vector unsigned int);
38317     int vec_any_ne (vector bool int, vector bool int);
38318     int vec_any_ne (vector bool int, vector unsigned int);
38319     int vec_any_ne (vector bool int, vector signed int);
38320     int vec_any_ne (vector float, vector float);
38321
38322     int vec_any_nge (vector float, vector float);
38323
38324     int vec_any_ngt (vector float, vector float);
38325
38326     int vec_any_nle (vector float, vector float);
38327
38328     int vec_any_nlt (vector float, vector float);
38329
38330     int vec_any_numeric (vector float);
38331
38332     int vec_any_out (vector float, vector float);
38333
38334 If the vector/scalar (VSX) instruction set is available, the following
38335additional functions are available:
38336
38337     vector double vec_abs (vector double);
38338     vector double vec_add (vector double, vector double);
38339     vector double vec_and (vector double, vector double);
38340     vector double vec_and (vector double, vector bool long);
38341     vector double vec_and (vector bool long, vector double);
38342     vector long vec_and (vector long, vector long);
38343     vector long vec_and (vector long, vector bool long);
38344     vector long vec_and (vector bool long, vector long);
38345     vector unsigned long vec_and (vector unsigned long, vector unsigned long);
38346     vector unsigned long vec_and (vector unsigned long, vector bool long);
38347     vector unsigned long vec_and (vector bool long, vector unsigned long);
38348     vector double vec_andc (vector double, vector double);
38349     vector double vec_andc (vector double, vector bool long);
38350     vector double vec_andc (vector bool long, vector double);
38351     vector long vec_andc (vector long, vector long);
38352     vector long vec_andc (vector long, vector bool long);
38353     vector long vec_andc (vector bool long, vector long);
38354     vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
38355     vector unsigned long vec_andc (vector unsigned long, vector bool long);
38356     vector unsigned long vec_andc (vector bool long, vector unsigned long);
38357     vector double vec_ceil (vector double);
38358     vector bool long vec_cmpeq (vector double, vector double);
38359     vector bool long vec_cmpge (vector double, vector double);
38360     vector bool long vec_cmpgt (vector double, vector double);
38361     vector bool long vec_cmple (vector double, vector double);
38362     vector bool long vec_cmplt (vector double, vector double);
38363     vector double vec_cpsgn (vector double, vector double);
38364     vector float vec_div (vector float, vector float);
38365     vector double vec_div (vector double, vector double);
38366     vector long vec_div (vector long, vector long);
38367     vector unsigned long vec_div (vector unsigned long, vector unsigned long);
38368     vector double vec_floor (vector double);
38369     vector double vec_ld (int, const vector double *);
38370     vector double vec_ld (int, const double *);
38371     vector double vec_ldl (int, const vector double *);
38372     vector double vec_ldl (int, const double *);
38373     vector unsigned char vec_lvsl (int, const volatile double *);
38374     vector unsigned char vec_lvsr (int, const volatile double *);
38375     vector double vec_madd (vector double, vector double, vector double);
38376     vector double vec_max (vector double, vector double);
38377     vector signed long vec_mergeh (vector signed long, vector signed long);
38378     vector signed long vec_mergeh (vector signed long, vector bool long);
38379     vector signed long vec_mergeh (vector bool long, vector signed long);
38380     vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
38381     vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
38382     vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
38383     vector signed long vec_mergel (vector signed long, vector signed long);
38384     vector signed long vec_mergel (vector signed long, vector bool long);
38385     vector signed long vec_mergel (vector bool long, vector signed long);
38386     vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
38387     vector unsigned long vec_mergel (vector unsigned long, vector bool long);
38388     vector unsigned long vec_mergel (vector bool long, vector unsigned long);
38389     vector double vec_min (vector double, vector double);
38390     vector float vec_msub (vector float, vector float, vector float);
38391     vector double vec_msub (vector double, vector double, vector double);
38392     vector float vec_mul (vector float, vector float);
38393     vector double vec_mul (vector double, vector double);
38394     vector long vec_mul (vector long, vector long);
38395     vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
38396     vector float vec_nearbyint (vector float);
38397     vector double vec_nearbyint (vector double);
38398     vector float vec_nmadd (vector float, vector float, vector float);
38399     vector double vec_nmadd (vector double, vector double, vector double);
38400     vector double vec_nmsub (vector double, vector double, vector double);
38401     vector double vec_nor (vector double, vector double);
38402     vector long vec_nor (vector long, vector long);
38403     vector long vec_nor (vector long, vector bool long);
38404     vector long vec_nor (vector bool long, vector long);
38405     vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
38406     vector unsigned long vec_nor (vector unsigned long, vector bool long);
38407     vector unsigned long vec_nor (vector bool long, vector unsigned long);
38408     vector double vec_or (vector double, vector double);
38409     vector double vec_or (vector double, vector bool long);
38410     vector double vec_or (vector bool long, vector double);
38411     vector long vec_or (vector long, vector long);
38412     vector long vec_or (vector long, vector bool long);
38413     vector long vec_or (vector bool long, vector long);
38414     vector unsigned long vec_or (vector unsigned long, vector unsigned long);
38415     vector unsigned long vec_or (vector unsigned long, vector bool long);
38416     vector unsigned long vec_or (vector bool long, vector unsigned long);
38417     vector double vec_perm (vector double, vector double, vector unsigned char);
38418     vector long vec_perm (vector long, vector long, vector unsigned char);
38419     vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
38420                                    vector unsigned char);
38421     vector double vec_rint (vector double);
38422     vector double vec_recip (vector double, vector double);
38423     vector double vec_rsqrt (vector double);
38424     vector double vec_rsqrte (vector double);
38425     vector double vec_sel (vector double, vector double, vector bool long);
38426     vector double vec_sel (vector double, vector double, vector unsigned long);
38427     vector long vec_sel (vector long, vector long, vector long);
38428     vector long vec_sel (vector long, vector long, vector unsigned long);
38429     vector long vec_sel (vector long, vector long, vector bool long);
38430     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
38431                                   vector long);
38432     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
38433                                   vector unsigned long);
38434     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
38435                                   vector bool long);
38436     vector double vec_splats (double);
38437     vector signed long vec_splats (signed long);
38438     vector unsigned long vec_splats (unsigned long);
38439     vector float vec_sqrt (vector float);
38440     vector double vec_sqrt (vector double);
38441     void vec_st (vector double, int, vector double *);
38442     void vec_st (vector double, int, double *);
38443     vector double vec_sub (vector double, vector double);
38444     vector double vec_trunc (vector double);
38445     vector double vec_xor (vector double, vector double);
38446     vector double vec_xor (vector double, vector bool long);
38447     vector double vec_xor (vector bool long, vector double);
38448     vector long vec_xor (vector long, vector long);
38449     vector long vec_xor (vector long, vector bool long);
38450     vector long vec_xor (vector bool long, vector long);
38451     vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
38452     vector unsigned long vec_xor (vector unsigned long, vector bool long);
38453     vector unsigned long vec_xor (vector bool long, vector unsigned long);
38454     int vec_all_eq (vector double, vector double);
38455     int vec_all_ge (vector double, vector double);
38456     int vec_all_gt (vector double, vector double);
38457     int vec_all_le (vector double, vector double);
38458     int vec_all_lt (vector double, vector double);
38459     int vec_all_nan (vector double);
38460     int vec_all_ne (vector double, vector double);
38461     int vec_all_nge (vector double, vector double);
38462     int vec_all_ngt (vector double, vector double);
38463     int vec_all_nle (vector double, vector double);
38464     int vec_all_nlt (vector double, vector double);
38465     int vec_all_numeric (vector double);
38466     int vec_any_eq (vector double, vector double);
38467     int vec_any_ge (vector double, vector double);
38468     int vec_any_gt (vector double, vector double);
38469     int vec_any_le (vector double, vector double);
38470     int vec_any_lt (vector double, vector double);
38471     int vec_any_nan (vector double);
38472     int vec_any_ne (vector double, vector double);
38473     int vec_any_nge (vector double, vector double);
38474     int vec_any_ngt (vector double, vector double);
38475     int vec_any_nle (vector double, vector double);
38476     int vec_any_nlt (vector double, vector double);
38477     int vec_any_numeric (vector double);
38478
38479     vector double vec_vsx_ld (int, const vector double *);
38480     vector double vec_vsx_ld (int, const double *);
38481     vector float vec_vsx_ld (int, const vector float *);
38482     vector float vec_vsx_ld (int, const float *);
38483     vector bool int vec_vsx_ld (int, const vector bool int *);
38484     vector signed int vec_vsx_ld (int, const vector signed int *);
38485     vector signed int vec_vsx_ld (int, const int *);
38486     vector signed int vec_vsx_ld (int, const long *);
38487     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
38488     vector unsigned int vec_vsx_ld (int, const unsigned int *);
38489     vector unsigned int vec_vsx_ld (int, const unsigned long *);
38490     vector bool short vec_vsx_ld (int, const vector bool short *);
38491     vector pixel vec_vsx_ld (int, const vector pixel *);
38492     vector signed short vec_vsx_ld (int, const vector signed short *);
38493     vector signed short vec_vsx_ld (int, const short *);
38494     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
38495     vector unsigned short vec_vsx_ld (int, const unsigned short *);
38496     vector bool char vec_vsx_ld (int, const vector bool char *);
38497     vector signed char vec_vsx_ld (int, const vector signed char *);
38498     vector signed char vec_vsx_ld (int, const signed char *);
38499     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
38500     vector unsigned char vec_vsx_ld (int, const unsigned char *);
38501
38502     void vec_vsx_st (vector double, int, vector double *);
38503     void vec_vsx_st (vector double, int, double *);
38504     void vec_vsx_st (vector float, int, vector float *);
38505     void vec_vsx_st (vector float, int, float *);
38506     void vec_vsx_st (vector signed int, int, vector signed int *);
38507     void vec_vsx_st (vector signed int, int, int *);
38508     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
38509     void vec_vsx_st (vector unsigned int, int, unsigned int *);
38510     void vec_vsx_st (vector bool int, int, vector bool int *);
38511     void vec_vsx_st (vector bool int, int, unsigned int *);
38512     void vec_vsx_st (vector bool int, int, int *);
38513     void vec_vsx_st (vector signed short, int, vector signed short *);
38514     void vec_vsx_st (vector signed short, int, short *);
38515     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
38516     void vec_vsx_st (vector unsigned short, int, unsigned short *);
38517     void vec_vsx_st (vector bool short, int, vector bool short *);
38518     void vec_vsx_st (vector bool short, int, unsigned short *);
38519     void vec_vsx_st (vector pixel, int, vector pixel *);
38520     void vec_vsx_st (vector pixel, int, unsigned short *);
38521     void vec_vsx_st (vector pixel, int, short *);
38522     void vec_vsx_st (vector bool short, int, short *);
38523     void vec_vsx_st (vector signed char, int, vector signed char *);
38524     void vec_vsx_st (vector signed char, int, signed char *);
38525     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
38526     void vec_vsx_st (vector unsigned char, int, unsigned char *);
38527     void vec_vsx_st (vector bool char, int, vector bool char *);
38528     void vec_vsx_st (vector bool char, int, unsigned char *);
38529     void vec_vsx_st (vector bool char, int, signed char *);
38530
38531     vector double vec_xxpermdi (vector double, vector double, int);
38532     vector float vec_xxpermdi (vector float, vector float, int);
38533     vector long long vec_xxpermdi (vector long long, vector long long, int);
38534     vector unsigned long long vec_xxpermdi (vector unsigned long long,
38535                                             vector unsigned long long, int);
38536     vector int vec_xxpermdi (vector int, vector int, int);
38537     vector unsigned int vec_xxpermdi (vector unsigned int,
38538                                       vector unsigned int, int);
38539     vector short vec_xxpermdi (vector short, vector short, int);
38540     vector unsigned short vec_xxpermdi (vector unsigned short,
38541                                         vector unsigned short, int);
38542     vector signed char vec_xxpermdi (vector signed char, vector signed char, int);
38543     vector unsigned char vec_xxpermdi (vector unsigned char,
38544                                        vector unsigned char, int);
38545
38546     vector double vec_xxsldi (vector double, vector double, int);
38547     vector float vec_xxsldi (vector float, vector float, int);
38548     vector long long vec_xxsldi (vector long long, vector long long, int);
38549     vector unsigned long long vec_xxsldi (vector unsigned long long,
38550                                           vector unsigned long long, int);
38551     vector int vec_xxsldi (vector int, vector int, int);
38552     vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
38553     vector short vec_xxsldi (vector short, vector short, int);
38554     vector unsigned short vec_xxsldi (vector unsigned short,
38555                                       vector unsigned short, int);
38556     vector signed char vec_xxsldi (vector signed char, vector signed char, int);
38557     vector unsigned char vec_xxsldi (vector unsigned char,
38558                                      vector unsigned char, int);
38559
38560 Note that the `vec_ld' and `vec_st' built-in functions always generate
38561the AltiVec `LVX' and `STVX' instructions even if the VSX instruction
38562set is available.  The `vec_vsx_ld' and `vec_vsx_st' built-in functions
38563always generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X'
38564instructions.
38565
38566 If the ISA 2.07 additions to the vector/scalar (power8-vector)
38567instruction set is available, the following additional functions are
38568available for both 32-bit and 64-bit targets.  For 64-bit targets, you
38569can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
38570instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
38571VECTOR UNSIGNED LONG LONG.
38572
38573     vector long long vec_abs (vector long long);
38574
38575     vector long long vec_add (vector long long, vector long long);
38576     vector unsigned long long vec_add (vector unsigned long long,
38577                                        vector unsigned long long);
38578
38579     int vec_all_eq (vector long long, vector long long);
38580     int vec_all_eq (vector unsigned long long, vector unsigned long long);
38581     int vec_all_ge (vector long long, vector long long);
38582     int vec_all_ge (vector unsigned long long, vector unsigned long long);
38583     int vec_all_gt (vector long long, vector long long);
38584     int vec_all_gt (vector unsigned long long, vector unsigned long long);
38585     int vec_all_le (vector long long, vector long long);
38586     int vec_all_le (vector unsigned long long, vector unsigned long long);
38587     int vec_all_lt (vector long long, vector long long);
38588     int vec_all_lt (vector unsigned long long, vector unsigned long long);
38589     int vec_all_ne (vector long long, vector long long);
38590     int vec_all_ne (vector unsigned long long, vector unsigned long long);
38591
38592     int vec_any_eq (vector long long, vector long long);
38593     int vec_any_eq (vector unsigned long long, vector unsigned long long);
38594     int vec_any_ge (vector long long, vector long long);
38595     int vec_any_ge (vector unsigned long long, vector unsigned long long);
38596     int vec_any_gt (vector long long, vector long long);
38597     int vec_any_gt (vector unsigned long long, vector unsigned long long);
38598     int vec_any_le (vector long long, vector long long);
38599     int vec_any_le (vector unsigned long long, vector unsigned long long);
38600     int vec_any_lt (vector long long, vector long long);
38601     int vec_any_lt (vector unsigned long long, vector unsigned long long);
38602     int vec_any_ne (vector long long, vector long long);
38603     int vec_any_ne (vector unsigned long long, vector unsigned long long);
38604
38605     vector long long vec_eqv (vector long long, vector long long);
38606     vector long long vec_eqv (vector bool long long, vector long long);
38607     vector long long vec_eqv (vector long long, vector bool long long);
38608     vector unsigned long long vec_eqv (vector unsigned long long,
38609                                        vector unsigned long long);
38610     vector unsigned long long vec_eqv (vector bool long long,
38611                                        vector unsigned long long);
38612     vector unsigned long long vec_eqv (vector unsigned long long,
38613                                        vector bool long long);
38614     vector int vec_eqv (vector int, vector int);
38615     vector int vec_eqv (vector bool int, vector int);
38616     vector int vec_eqv (vector int, vector bool int);
38617     vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
38618     vector unsigned int vec_eqv (vector bool unsigned int,
38619                                  vector unsigned int);
38620     vector unsigned int vec_eqv (vector unsigned int,
38621                                  vector bool unsigned int);
38622     vector short vec_eqv (vector short, vector short);
38623     vector short vec_eqv (vector bool short, vector short);
38624     vector short vec_eqv (vector short, vector bool short);
38625     vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
38626     vector unsigned short vec_eqv (vector bool unsigned short,
38627                                    vector unsigned short);
38628     vector unsigned short vec_eqv (vector unsigned short,
38629                                    vector bool unsigned short);
38630     vector signed char vec_eqv (vector signed char, vector signed char);
38631     vector signed char vec_eqv (vector bool signed char, vector signed char);
38632     vector signed char vec_eqv (vector signed char, vector bool signed char);
38633     vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
38634     vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
38635     vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);
38636
38637     vector long long vec_max (vector long long, vector long long);
38638     vector unsigned long long vec_max (vector unsigned long long,
38639                                        vector unsigned long long);
38640
38641     vector signed int vec_mergee (vector signed int, vector signed int);
38642     vector unsigned int vec_mergee (vector unsigned int, vector unsigned int);
38643     vector bool int vec_mergee (vector bool int, vector bool int);
38644
38645     vector signed int vec_mergeo (vector signed int, vector signed int);
38646     vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int);
38647     vector bool int vec_mergeo (vector bool int, vector bool int);
38648
38649     vector long long vec_min (vector long long, vector long long);
38650     vector unsigned long long vec_min (vector unsigned long long,
38651                                        vector unsigned long long);
38652
38653     vector long long vec_nand (vector long long, vector long long);
38654     vector long long vec_nand (vector bool long long, vector long long);
38655     vector long long vec_nand (vector long long, vector bool long long);
38656     vector unsigned long long vec_nand (vector unsigned long long,
38657                                         vector unsigned long long);
38658     vector unsigned long long vec_nand (vector bool long long,
38659                                        vector unsigned long long);
38660     vector unsigned long long vec_nand (vector unsigned long long,
38661                                         vector bool long long);
38662     vector int vec_nand (vector int, vector int);
38663     vector int vec_nand (vector bool int, vector int);
38664     vector int vec_nand (vector int, vector bool int);
38665     vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
38666     vector unsigned int vec_nand (vector bool unsigned int,
38667                                   vector unsigned int);
38668     vector unsigned int vec_nand (vector unsigned int,
38669                                   vector bool unsigned int);
38670     vector short vec_nand (vector short, vector short);
38671     vector short vec_nand (vector bool short, vector short);
38672     vector short vec_nand (vector short, vector bool short);
38673     vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
38674     vector unsigned short vec_nand (vector bool unsigned short,
38675                                     vector unsigned short);
38676     vector unsigned short vec_nand (vector unsigned short,
38677                                     vector bool unsigned short);
38678     vector signed char vec_nand (vector signed char, vector signed char);
38679     vector signed char vec_nand (vector bool signed char, vector signed char);
38680     vector signed char vec_nand (vector signed char, vector bool signed char);
38681     vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
38682     vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
38683     vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);
38684
38685     vector long long vec_orc (vector long long, vector long long);
38686     vector long long vec_orc (vector bool long long, vector long long);
38687     vector long long vec_orc (vector long long, vector bool long long);
38688     vector unsigned long long vec_orc (vector unsigned long long,
38689                                        vector unsigned long long);
38690     vector unsigned long long vec_orc (vector bool long long,
38691                                        vector unsigned long long);
38692     vector unsigned long long vec_orc (vector unsigned long long,
38693                                        vector bool long long);
38694     vector int vec_orc (vector int, vector int);
38695     vector int vec_orc (vector bool int, vector int);
38696     vector int vec_orc (vector int, vector bool int);
38697     vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
38698     vector unsigned int vec_orc (vector bool unsigned int,
38699                                  vector unsigned int);
38700     vector unsigned int vec_orc (vector unsigned int,
38701                                  vector bool unsigned int);
38702     vector short vec_orc (vector short, vector short);
38703     vector short vec_orc (vector bool short, vector short);
38704     vector short vec_orc (vector short, vector bool short);
38705     vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
38706     vector unsigned short vec_orc (vector bool unsigned short,
38707                                    vector unsigned short);
38708     vector unsigned short vec_orc (vector unsigned short,
38709                                    vector bool unsigned short);
38710     vector signed char vec_orc (vector signed char, vector signed char);
38711     vector signed char vec_orc (vector bool signed char, vector signed char);
38712     vector signed char vec_orc (vector signed char, vector bool signed char);
38713     vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
38714     vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
38715     vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);
38716
38717     vector int vec_pack (vector long long, vector long long);
38718     vector unsigned int vec_pack (vector unsigned long long,
38719                                   vector unsigned long long);
38720     vector bool int vec_pack (vector bool long long, vector bool long long);
38721
38722     vector int vec_packs (vector long long, vector long long);
38723     vector unsigned int vec_packs (vector unsigned long long,
38724                                    vector unsigned long long);
38725
38726     vector unsigned int vec_packsu (vector long long, vector long long);
38727     vector unsigned int vec_packsu (vector unsigned long long,
38728                                     vector unsigned long long);
38729
38730     vector long long vec_rl (vector long long,
38731                              vector unsigned long long);
38732     vector long long vec_rl (vector unsigned long long,
38733                              vector unsigned long long);
38734
38735     vector long long vec_sl (vector long long, vector unsigned long long);
38736     vector long long vec_sl (vector unsigned long long,
38737                              vector unsigned long long);
38738
38739     vector long long vec_sr (vector long long, vector unsigned long long);
38740     vector unsigned long long char vec_sr (vector unsigned long long,
38741                                            vector unsigned long long);
38742
38743     vector long long vec_sra (vector long long, vector unsigned long long);
38744     vector unsigned long long vec_sra (vector unsigned long long,
38745                                        vector unsigned long long);
38746
38747     vector long long vec_sub (vector long long, vector long long);
38748     vector unsigned long long vec_sub (vector unsigned long long,
38749                                        vector unsigned long long);
38750
38751     vector long long vec_unpackh (vector int);
38752     vector unsigned long long vec_unpackh (vector unsigned int);
38753
38754     vector long long vec_unpackl (vector int);
38755     vector unsigned long long vec_unpackl (vector unsigned int);
38756
38757     vector long long vec_vaddudm (vector long long, vector long long);
38758     vector long long vec_vaddudm (vector bool long long, vector long long);
38759     vector long long vec_vaddudm (vector long long, vector bool long long);
38760     vector unsigned long long vec_vaddudm (vector unsigned long long,
38761                                            vector unsigned long long);
38762     vector unsigned long long vec_vaddudm (vector bool unsigned long long,
38763                                            vector unsigned long long);
38764     vector unsigned long long vec_vaddudm (vector unsigned long long,
38765                                            vector bool unsigned long long);
38766
38767     vector long long vec_vbpermq (vector signed char, vector signed char);
38768     vector long long vec_vbpermq (vector unsigned char, vector unsigned char);
38769
38770     vector long long vec_cntlz (vector long long);
38771     vector unsigned long long vec_cntlz (vector unsigned long long);
38772     vector int vec_cntlz (vector int);
38773     vector unsigned int vec_cntlz (vector int);
38774     vector short vec_cntlz (vector short);
38775     vector unsigned short vec_cntlz (vector unsigned short);
38776     vector signed char vec_cntlz (vector signed char);
38777     vector unsigned char vec_cntlz (vector unsigned char);
38778
38779     vector long long vec_vclz (vector long long);
38780     vector unsigned long long vec_vclz (vector unsigned long long);
38781     vector int vec_vclz (vector int);
38782     vector unsigned int vec_vclz (vector int);
38783     vector short vec_vclz (vector short);
38784     vector unsigned short vec_vclz (vector unsigned short);
38785     vector signed char vec_vclz (vector signed char);
38786     vector unsigned char vec_vclz (vector unsigned char);
38787
38788     vector signed char vec_vclzb (vector signed char);
38789     vector unsigned char vec_vclzb (vector unsigned char);
38790
38791     vector long long vec_vclzd (vector long long);
38792     vector unsigned long long vec_vclzd (vector unsigned long long);
38793
38794     vector short vec_vclzh (vector short);
38795     vector unsigned short vec_vclzh (vector unsigned short);
38796
38797     vector int vec_vclzw (vector int);
38798     vector unsigned int vec_vclzw (vector int);
38799
38800     vector signed char vec_vgbbd (vector signed char);
38801     vector unsigned char vec_vgbbd (vector unsigned char);
38802
38803     vector long long vec_vmaxsd (vector long long, vector long long);
38804
38805     vector unsigned long long vec_vmaxud (vector unsigned long long,
38806                                           unsigned vector long long);
38807
38808     vector long long vec_vminsd (vector long long, vector long long);
38809
38810     vector unsigned long long vec_vminud (vector long long,
38811                                           vector long long);
38812
38813     vector int vec_vpksdss (vector long long, vector long long);
38814     vector unsigned int vec_vpksdss (vector long long, vector long long);
38815
38816     vector unsigned int vec_vpkudus (vector unsigned long long,
38817                                      vector unsigned long long);
38818
38819     vector int vec_vpkudum (vector long long, vector long long);
38820     vector unsigned int vec_vpkudum (vector unsigned long long,
38821                                      vector unsigned long long);
38822     vector bool int vec_vpkudum (vector bool long long, vector bool long long);
38823
38824     vector long long vec_vpopcnt (vector long long);
38825     vector unsigned long long vec_vpopcnt (vector unsigned long long);
38826     vector int vec_vpopcnt (vector int);
38827     vector unsigned int vec_vpopcnt (vector int);
38828     vector short vec_vpopcnt (vector short);
38829     vector unsigned short vec_vpopcnt (vector unsigned short);
38830     vector signed char vec_vpopcnt (vector signed char);
38831     vector unsigned char vec_vpopcnt (vector unsigned char);
38832
38833     vector signed char vec_vpopcntb (vector signed char);
38834     vector unsigned char vec_vpopcntb (vector unsigned char);
38835
38836     vector long long vec_vpopcntd (vector long long);
38837     vector unsigned long long vec_vpopcntd (vector unsigned long long);
38838
38839     vector short vec_vpopcnth (vector short);
38840     vector unsigned short vec_vpopcnth (vector unsigned short);
38841
38842     vector int vec_vpopcntw (vector int);
38843     vector unsigned int vec_vpopcntw (vector int);
38844
38845     vector long long vec_vrld (vector long long, vector unsigned long long);
38846     vector unsigned long long vec_vrld (vector unsigned long long,
38847                                         vector unsigned long long);
38848
38849     vector long long vec_vsld (vector long long, vector unsigned long long);
38850     vector long long vec_vsld (vector unsigned long long,
38851                                vector unsigned long long);
38852
38853     vector long long vec_vsrad (vector long long, vector unsigned long long);
38854     vector unsigned long long vec_vsrad (vector unsigned long long,
38855                                          vector unsigned long long);
38856
38857     vector long long vec_vsrd (vector long long, vector unsigned long long);
38858     vector unsigned long long char vec_vsrd (vector unsigned long long,
38859                                              vector unsigned long long);
38860
38861     vector long long vec_vsubudm (vector long long, vector long long);
38862     vector long long vec_vsubudm (vector bool long long, vector long long);
38863     vector long long vec_vsubudm (vector long long, vector bool long long);
38864     vector unsigned long long vec_vsubudm (vector unsigned long long,
38865                                            vector unsigned long long);
38866     vector unsigned long long vec_vsubudm (vector bool long long,
38867                                            vector unsigned long long);
38868     vector unsigned long long vec_vsubudm (vector unsigned long long,
38869                                            vector bool long long);
38870
38871     vector long long vec_vupkhsw (vector int);
38872     vector unsigned long long vec_vupkhsw (vector unsigned int);
38873
38874     vector long long vec_vupklsw (vector int);
38875     vector unsigned long long vec_vupklsw (vector int);
38876
38877 If the ISA 2.07 additions to the vector/scalar (power8-vector)
38878instruction set is available, the following additional functions are
38879available for 64-bit targets.  New vector types (VECTOR __INT128_T and
38880VECTOR __UINT128_T) are available to hold the __INT128_T and
38881__UINT128_T types to use these builtins.
38882
38883 The normal vector extract, and set operations work on VECTOR
38884__INT128_T and VECTOR __UINT128_T types, but the index value must be 0.
38885
38886     vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
38887     vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);
38888
38889     vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
38890     vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);
38891
38892     vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
38893                                     vector __int128_t);
38894     vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
38895                                      vector __uint128_t);
38896
38897     vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
38898                                     vector __int128_t);
38899     vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
38900                                      vector __uint128_t);
38901
38902     vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
38903                                     vector __int128_t);
38904     vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
38905                                      vector __uint128_t);
38906
38907     vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
38908                                     vector __int128_t);
38909     vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
38910                                      vector __uint128_t);
38911
38912     vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
38913     vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);
38914
38915     __int128_t vec_vsubuqm (__int128_t, __int128_t);
38916     __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);
38917
38918     vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
38919     int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
38920     int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
38921     int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
38922     int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
38923     vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
38924     int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
38925     int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
38926     int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
38927     int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);
38928
38929 If the cryptographic instructions are enabled (`-mcrypto' or
38930`-mcpu=power8'), the following builtins are enabled.
38931
38932     vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);
38933
38934     vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
38935                                                         vector unsigned long long);
38936
38937     vector unsigned long long __builtin_crypto_vcipherlast
38938                                          (vector unsigned long long,
38939                                           vector unsigned long long);
38940
38941     vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
38942                                                          vector unsigned long long);
38943
38944     vector unsigned long long __builtin_crypto_vncipherlast
38945                                          (vector unsigned long long,
38946                                           vector unsigned long long);
38947
38948     vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
38949                                                     vector unsigned char,
38950                                                     vector unsigned char);
38951
38952     vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
38953                                                      vector unsigned short,
38954                                                      vector unsigned short);
38955
38956     vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
38957                                                    vector unsigned int,
38958                                                    vector unsigned int);
38959
38960     vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
38961                                                          vector unsigned long long,
38962                                                          vector unsigned long long);
38963
38964     vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
38965                                                    vector unsigned char);
38966
38967     vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
38968                                                     vector unsigned short);
38969
38970     vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
38971                                                   vector unsigned int);
38972
38973     vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
38974                                                         vector unsigned long long);
38975
38976     vector unsigned long long __builtin_crypto_vshasigmad
38977                                    (vector unsigned long long, int, int);
38978
38979     vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
38980                                                      int, int);
38981
38982 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and
38983__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant
38984integer that is 0 or 1.  The third argument to these builtin functions
38985must be a constant integer in the range of 0 to 15.
38986
38987
38988File: gcc.info,  Node: PowerPC Hardware Transactional Memory Built-in Functions,  Next: RX Built-in Functions,  Prev: PowerPC AltiVec/VSX Built-in Functions,  Up: Target Builtins
38989
389906.58.21 PowerPC Hardware Transactional Memory Built-in Functions
38991----------------------------------------------------------------
38992
38993GCC provides two interfaces for accessing the Hardware Transactional
38994Memory (HTM) instructions available on some of the PowerPC family of
38995processors (eg, POWER8).  The two interfaces come in a low level
38996interface, consisting of built-in functions specific to PowerPC and a
38997higher level interface consisting of inline functions that are common
38998between PowerPC and S/390.
38999
390006.58.21.1 PowerPC HTM Low Level Built-in Functions
39001..................................................
39002
39003The following low level built-in functions are available with `-mhtm'
39004or `-mcpu=CPU' where CPU is `power8' or later.  They all generate the
39005machine instruction that is part of the name.
39006
39007 The HTM builtins (with the exception of `__builtin_tbegin') return the
39008full 4-bit condition register value set by their associated hardware
39009instruction.  The header file `htmintrin.h' defines some macros that can
39010be used to decipher the return value.  The `__builtin_tbegin' builtin
39011returns a simple true or false value depending on whether a transaction
39012was successfully started or not.  The arguments of the builtins match
39013exactly the type and order of the associated hardware instruction's
39014operands, except for the `__builtin_tcheck' builtin, which does not
39015take any input arguments.  Refer to the ISA manual for a description of
39016each instruction's operands.
39017
39018     unsigned int __builtin_tbegin (unsigned int)
39019     unsigned int __builtin_tend (unsigned int)
39020
39021     unsigned int __builtin_tabort (unsigned int)
39022     unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
39023     unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
39024     unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
39025     unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)
39026
39027     unsigned int __builtin_tcheck (void)
39028     unsigned int __builtin_treclaim (unsigned int)
39029     unsigned int __builtin_trechkpt (void)
39030     unsigned int __builtin_tsr (unsigned int)
39031
39032 In addition to the above HTM built-ins, we have added built-ins for
39033some common extended mnemonics of the HTM instructions:
39034
39035     unsigned int __builtin_tendall (void)
39036     unsigned int __builtin_tresume (void)
39037     unsigned int __builtin_tsuspend (void)
39038
39039 Note that the semantics of the above HTM builtins are required to mimic
39040the locking semantics used for critical sections.  Builtins that are
39041used to create a new transaction or restart a suspended transaction
39042must have lock acquisition like semantics while those builtins that end
39043or suspend a transaction must have lock release like semantics.
39044Specifically, this must mimic lock semantics as specified by C++11, for
39045example: Lock acquisition is as-if an execution of
39046__atomic_exchange_n(&globallock,1,__ATOMIC_ACQUIRE) that returns 0, and
39047lock release is as-if an execution of
39048__atomic_store(&globallock,0,__ATOMIC_RELEASE), with globallock being an
39049implicit implementation-defined lock used for all transactions.  The HTM
39050instructions associated with with the builtins inherently provide the
39051correct acquisition and release hardware barriers required.  However,
39052the compiler must also be prohibited from moving loads and stores across
39053the builtins in a way that would violate their semantics.  This has been
39054accomplished by adding memory barriers to the associated HTM
39055instructions (which is a conservative approach to provide acquire and
39056release semantics).  Earlier versions of the compiler did not treat the
39057HTM instructions as memory barriers.  A `__TM_FENCE__' macro has been
39058added, which can be used to determine whether the current compiler
39059treats HTM instructions as memory barriers or not.  This allows the
39060user to explicitly add memory barriers to their code when using an
39061older version of the compiler.
39062
39063 The following set of built-in functions are available to gain access
39064to the HTM specific special purpose registers.
39065
39066     unsigned long __builtin_get_texasr (void)
39067     unsigned long __builtin_get_texasru (void)
39068     unsigned long __builtin_get_tfhar (void)
39069     unsigned long __builtin_get_tfiar (void)
39070
39071     void __builtin_set_texasr (unsigned long);
39072     void __builtin_set_texasru (unsigned long);
39073     void __builtin_set_tfhar (unsigned long);
39074     void __builtin_set_tfiar (unsigned long);
39075
39076 Example usage of these low level built-in functions may look like:
39077
39078     #include <htmintrin.h>
39079
39080     int num_retries = 10;
39081
39082     while (1)
39083       {
39084         if (__builtin_tbegin (0))
39085           {
39086             /* Transaction State Initiated.  */
39087             if (is_locked (lock))
39088               __builtin_tabort (0);
39089             ... transaction code...
39090             __builtin_tend (0);
39091             break;
39092           }
39093         else
39094           {
39095             /* Transaction State Failed.  Use locks if the transaction
39096                failure is "persistent" or we've tried too many times.  */
39097             if (num_retries-- <= 0
39098                 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
39099               {
39100                 acquire_lock (lock);
39101                 ... non transactional fallback path...
39102                 release_lock (lock);
39103                 break;
39104               }
39105           }
39106       }
39107
39108 One final built-in function has been added that returns the value of
39109the 2-bit Transaction State field of the Machine Status Register (MSR)
39110as stored in `CR0'.
39111
39112     unsigned long __builtin_ttest (void)
39113
39114 This built-in can be used to determine the current transaction state
39115using the following code example:
39116
39117     #include <htmintrin.h>
39118
39119     unsigned char tx_state = _HTM_STATE (__builtin_ttest ());
39120
39121     if (tx_state == _HTM_TRANSACTIONAL)
39122       {
39123         /* Code to use in transactional state.  */
39124       }
39125     else if (tx_state == _HTM_NONTRANSACTIONAL)
39126       {
39127         /* Code to use in non-transactional state.  */
39128       }
39129     else if (tx_state == _HTM_SUSPENDED)
39130       {
39131         /* Code to use in transaction suspended state.  */
39132       }
39133
391346.58.21.2 PowerPC HTM High Level Inline Functions
39135.................................................
39136
39137The following high level HTM interface is made available by including
39138`<htmxlintrin.h>' and using `-mhtm' or `-mcpu=CPU' where CPU is
39139`power8' or later.  This interface is common between PowerPC and S/390,
39140allowing users to write one HTM source implementation that can be
39141compiled and executed on either system.
39142
39143     long __TM_simple_begin (void)
39144     long __TM_begin (void* const TM_buff)
39145     long __TM_end (void)
39146     void __TM_abort (void)
39147     void __TM_named_abort (unsigned char const code)
39148     void __TM_resume (void)
39149     void __TM_suspend (void)
39150
39151     long __TM_is_user_abort (void* const TM_buff)
39152     long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
39153     long __TM_is_illegal (void* const TM_buff)
39154     long __TM_is_footprint_exceeded (void* const TM_buff)
39155     long __TM_nesting_depth (void* const TM_buff)
39156     long __TM_is_nested_too_deep(void* const TM_buff)
39157     long __TM_is_conflict(void* const TM_buff)
39158     long __TM_is_failure_persistent(void* const TM_buff)
39159     long __TM_failure_address(void* const TM_buff)
39160     long long __TM_failure_code(void* const TM_buff)
39161
39162 Using these common set of HTM inline functions, we can create a more
39163portable version of the HTM example in the previous section that will
39164work on either PowerPC or S/390:
39165
39166     #include <htmxlintrin.h>
39167
39168     int num_retries = 10;
39169     TM_buff_type TM_buff;
39170
39171     while (1)
39172       {
39173         if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
39174           {
39175             /* Transaction State Initiated.  */
39176             if (is_locked (lock))
39177               __TM_abort ();
39178             ... transaction code...
39179             __TM_end ();
39180             break;
39181           }
39182         else
39183           {
39184             /* Transaction State Failed.  Use locks if the transaction
39185                failure is "persistent" or we've tried too many times.  */
39186             if (num_retries-- <= 0
39187                 || __TM_is_failure_persistent (TM_buff))
39188               {
39189                 acquire_lock (lock);
39190                 ... non transactional fallback path...
39191                 release_lock (lock);
39192                 break;
39193               }
39194           }
39195       }
39196
39197
39198File: gcc.info,  Node: RX Built-in Functions,  Next: S/390 System z Built-in Functions,  Prev: PowerPC Hardware Transactional Memory Built-in Functions,  Up: Target Builtins
39199
392006.58.22 RX Built-in Functions
39201-----------------------------
39202
39203GCC supports some of the RX instructions which cannot be expressed in
39204the C programming language via the use of built-in functions.  The
39205following functions are supported:
39206
39207 -- Built-in Function: void __builtin_rx_brk (void)
39208     Generates the `brk' machine instruction.
39209
39210 -- Built-in Function: void __builtin_rx_clrpsw (int)
39211     Generates the `clrpsw' machine instruction to clear the specified
39212     bit in the processor status word.
39213
39214 -- Built-in Function: void __builtin_rx_int (int)
39215     Generates the `int' machine instruction to generate an interrupt
39216     with the specified value.
39217
39218 -- Built-in Function: void __builtin_rx_machi (int, int)
39219     Generates the `machi' machine instruction to add the result of
39220     multiplying the top 16 bits of the two arguments into the
39221     accumulator.
39222
39223 -- Built-in Function: void __builtin_rx_maclo (int, int)
39224     Generates the `maclo' machine instruction to add the result of
39225     multiplying the bottom 16 bits of the two arguments into the
39226     accumulator.
39227
39228 -- Built-in Function: void __builtin_rx_mulhi (int, int)
39229     Generates the `mulhi' machine instruction to place the result of
39230     multiplying the top 16 bits of the two arguments into the
39231     accumulator.
39232
39233 -- Built-in Function: void __builtin_rx_mullo (int, int)
39234     Generates the `mullo' machine instruction to place the result of
39235     multiplying the bottom 16 bits of the two arguments into the
39236     accumulator.
39237
39238 -- Built-in Function: int __builtin_rx_mvfachi (void)
39239     Generates the `mvfachi' machine instruction to read the top 32
39240     bits of the accumulator.
39241
39242 -- Built-in Function: int __builtin_rx_mvfacmi (void)
39243     Generates the `mvfacmi' machine instruction to read the middle 32
39244     bits of the accumulator.
39245
39246 -- Built-in Function: int __builtin_rx_mvfc (int)
39247     Generates the `mvfc' machine instruction which reads the control
39248     register specified in its argument and returns its value.
39249
39250 -- Built-in Function: void __builtin_rx_mvtachi (int)
39251     Generates the `mvtachi' machine instruction to set the top 32 bits
39252     of the accumulator.
39253
39254 -- Built-in Function: void __builtin_rx_mvtaclo (int)
39255     Generates the `mvtaclo' machine instruction to set the bottom 32
39256     bits of the accumulator.
39257
39258 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
39259     Generates the `mvtc' machine instruction which sets control
39260     register number `reg' to `val'.
39261
39262 -- Built-in Function: void __builtin_rx_mvtipl (int)
39263     Generates the `mvtipl' machine instruction set the interrupt
39264     priority level.
39265
39266 -- Built-in Function: void __builtin_rx_racw (int)
39267     Generates the `racw' machine instruction to round the accumulator
39268     according to the specified mode.
39269
39270 -- Built-in Function: int __builtin_rx_revw (int)
39271     Generates the `revw' machine instruction which swaps the bytes in
39272     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
39273     and also bits 16-23 occupy bits 24-31 and vice versa.
39274
39275 -- Built-in Function: void __builtin_rx_rmpa (void)
39276     Generates the `rmpa' machine instruction which initiates a
39277     repeated multiply and accumulate sequence.
39278
39279 -- Built-in Function: void __builtin_rx_round (float)
39280     Generates the `round' machine instruction which returns the
39281     floating-point argument rounded according to the current rounding
39282     mode set in the floating-point status word register.
39283
39284 -- Built-in Function: int __builtin_rx_sat (int)
39285     Generates the `sat' machine instruction which returns the
39286     saturated value of the argument.
39287
39288 -- Built-in Function: void __builtin_rx_setpsw (int)
39289     Generates the `setpsw' machine instruction to set the specified
39290     bit in the processor status word.
39291
39292 -- Built-in Function: void __builtin_rx_wait (void)
39293     Generates the `wait' machine instruction.
39294
39295
39296File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins
39297
392986.58.23 S/390 System z Built-in Functions
39299-----------------------------------------
39300
39301 -- Built-in Function: int __builtin_tbegin (void*)
39302     Generates the `tbegin' machine instruction starting a
39303     non-constraint hardware transaction.  If the parameter is non-NULL
39304     the memory area is used to store the transaction diagnostic buffer
39305     and will be passed as first operand to `tbegin'.  This buffer can
39306     be defined using the `struct __htm_tdb' C struct defined in
39307     `htmintrin.h' and must reside on a double-word boundary.  The
39308     second tbegin operand is set to `0xff0c'. This enables
39309     save/restore of all GPRs and disables aborts for FPR and AR
39310     manipulations inside the transaction body.  The condition code set
39311     by the tbegin instruction is returned as integer value.  The tbegin
39312     instruction by definition overwrites the content of all FPRs.  The
39313     compiler will generate code which saves and restores the FPRs.  For
39314     soft-float code it is recommended to used the `*_nofloat' variant.
39315     In order to prevent a TDB from being written it is required to
39316     pass an constant zero value as parameter.  Passing the zero value
39317     through a variable is not sufficient.  Although modifications of
39318     access registers inside the transaction will not trigger an
39319     transaction abort it is not supported to actually modify them.
39320     Access registers do not get saved when entering a transaction.
39321     They will have undefined state when reaching the abort code.
39322
39323 Macros for the possible return codes of tbegin are defined in the
39324`htmintrin.h' header file:
39325
39326`_HTM_TBEGIN_STARTED'
39327     `tbegin' has been executed as part of normal processing.  The
39328     transaction body is supposed to be executed.
39329
39330`_HTM_TBEGIN_INDETERMINATE'
39331     The transaction was aborted due to an indeterminate condition which
39332     might be persistent.
39333
39334`_HTM_TBEGIN_TRANSIENT'
39335     The transaction aborted due to a transient failure.  The
39336     transaction should be re-executed in that case.
39337
39338`_HTM_TBEGIN_PERSISTENT'
39339     The transaction aborted due to a persistent failure.  Re-execution
39340     under same circumstances will not be productive.
39341
39342 -- Macro: _HTM_FIRST_USER_ABORT_CODE
39343     The `_HTM_FIRST_USER_ABORT_CODE' defined in `htmintrin.h'
39344     specifies the first abort code which can be used for
39345     `__builtin_tabort'.  Values below this threshold are reserved for
39346     machine use.
39347
39348 -- Data type: struct __htm_tdb
39349     The `struct __htm_tdb' defined in `htmintrin.h' describes the
39350     structure of the transaction diagnostic block as specified in the
39351     Principles of Operation manual chapter 5-91.
39352
39353 -- Built-in Function: int __builtin_tbegin_nofloat (void*)
39354     Same as `__builtin_tbegin' but without FPR saves and restores.
39355     Using this variant in code making use of FPRs will leave the FPRs
39356     in undefined state when entering the transaction abort handler
39357     code.
39358
39359 -- Built-in Function: int __builtin_tbegin_retry (void*, int)
39360     In addition to `__builtin_tbegin' a loop for transient failures is
39361     generated.  If tbegin returns a condition code of 2 the transaction
39362     will be retried as often as specified in the second argument.  The
39363     perform processor assist instruction is used to tell the CPU about
39364     the number of fails so far.
39365
39366 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
39367     Same as `__builtin_tbegin_retry' but without FPR saves and
39368     restores.  Using this variant in code making use of FPRs will leave
39369     the FPRs in undefined state when entering the transaction abort
39370     handler code.
39371
39372 -- Built-in Function: void __builtin_tbeginc (void)
39373     Generates the `tbeginc' machine instruction starting a constraint
39374     hardware transaction.  The second operand is set to `0xff08'.
39375
39376 -- Built-in Function: int __builtin_tend (void)
39377     Generates the `tend' machine instruction finishing a transaction
39378     and making the changes visible to other threads.  The condition
39379     code generated by tend is returned as integer value.
39380
39381 -- Built-in Function: void __builtin_tabort (int)
39382     Generates the `tabort' machine instruction with the specified
39383     abort code.  Abort codes from 0 through 255 are reserved and will
39384     result in an error message.
39385
39386 -- Built-in Function: void __builtin_tx_assist (int)
39387     Generates the `ppa rX,rY,1' machine instruction.  Where the
39388     integer parameter is loaded into rX and a value of zero is loaded
39389     into rY.  The integer parameter specifies the number of times the
39390     transaction repeatedly aborted.
39391
39392 -- Built-in Function: int __builtin_tx_nesting_depth (void)
39393     Generates the `etnd' machine instruction.  The current nesting
39394     depth is returned as integer value.  For a nesting depth of 0 the
39395     code is not executed as part of an transaction.
39396
39397 -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
39398          uint64_t)
39399     Generates the `ntstg' machine instruction.  The second argument is
39400     written to the first arguments location.  The store operation will
39401     not be rolled-back in case of an transaction abort.
39402
39403
39404File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins
39405
394066.58.24 SH Built-in Functions
39407-----------------------------
39408
39409The following built-in functions are supported on the SH1, SH2, SH3 and
39410SH4 families of processors:
39411
39412 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
39413     Sets the `GBR' register to the specified value PTR.  This is
39414     usually used by system code that manages threads and execution
39415     contexts.  The compiler normally does not generate code that
39416     modifies the contents of `GBR' and thus the value is preserved
39417     across function calls.  Changing the `GBR' value in user code must
39418     be done with caution, since the compiler might use `GBR' in order
39419     to access thread local variables.
39420
39421
39422 -- Built-in Function: void * __builtin_thread_pointer (void)
39423     Returns the value that is currently set in the `GBR' register.
39424     Memory loads and stores that use the thread pointer as a base
39425     address are turned into `GBR' based displacement loads and stores,
39426     if possible.  For example:
39427          struct my_tcb
39428          {
39429             int a, b, c, d, e;
39430          };
39431
39432          int get_tcb_value (void)
39433          {
39434            // Generate `mov.l @(8,gbr),r0' instruction
39435            return ((my_tcb*)__builtin_thread_pointer ())->c;
39436          }
39437
39438 -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void)
39439     Returns the value that is currently set in the `FPSCR' register.
39440
39441 -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL)
39442     Sets the `FPSCR' register to the specified value VAL, while
39443     preserving the current values of the FR, SZ and PR bits.
39444
39445
39446File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins
39447
394486.58.25 SPARC VIS Built-in Functions
39449------------------------------------
39450
39451GCC supports SIMD operations on the SPARC using both the generic vector
39452extensions (*note Vector Extensions::) as well as built-in functions for
39453the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
39454switch, the VIS extension is exposed as the following built-in
39455functions:
39456
39457     typedef int v1si __attribute__ ((vector_size (4)));
39458     typedef int v2si __attribute__ ((vector_size (8)));
39459     typedef short v4hi __attribute__ ((vector_size (8)));
39460     typedef short v2hi __attribute__ ((vector_size (4)));
39461     typedef unsigned char v8qi __attribute__ ((vector_size (8)));
39462     typedef unsigned char v4qi __attribute__ ((vector_size (4)));
39463
39464     void __builtin_vis_write_gsr (int64_t);
39465     int64_t __builtin_vis_read_gsr (void);
39466
39467     void * __builtin_vis_alignaddr (void *, long);
39468     void * __builtin_vis_alignaddrl (void *, long);
39469     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
39470     v2si __builtin_vis_faligndatav2si (v2si, v2si);
39471     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
39472     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
39473
39474     v4hi __builtin_vis_fexpand (v4qi);
39475
39476     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
39477     v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
39478     v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
39479     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
39480     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
39481     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
39482     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
39483
39484     v4qi __builtin_vis_fpack16 (v4hi);
39485     v8qi __builtin_vis_fpack32 (v2si, v8qi);
39486     v2hi __builtin_vis_fpackfix (v2si);
39487     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
39488
39489     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
39490
39491     long __builtin_vis_edge8 (void *, void *);
39492     long __builtin_vis_edge8l (void *, void *);
39493     long __builtin_vis_edge16 (void *, void *);
39494     long __builtin_vis_edge16l (void *, void *);
39495     long __builtin_vis_edge32 (void *, void *);
39496     long __builtin_vis_edge32l (void *, void *);
39497
39498     long __builtin_vis_fcmple16 (v4hi, v4hi);
39499     long __builtin_vis_fcmple32 (v2si, v2si);
39500     long __builtin_vis_fcmpne16 (v4hi, v4hi);
39501     long __builtin_vis_fcmpne32 (v2si, v2si);
39502     long __builtin_vis_fcmpgt16 (v4hi, v4hi);
39503     long __builtin_vis_fcmpgt32 (v2si, v2si);
39504     long __builtin_vis_fcmpeq16 (v4hi, v4hi);
39505     long __builtin_vis_fcmpeq32 (v2si, v2si);
39506
39507     v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
39508     v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
39509     v2si __builtin_vis_fpadd32 (v2si, v2si);
39510     v1si __builtin_vis_fpadd32s (v1si, v1si);
39511     v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
39512     v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
39513     v2si __builtin_vis_fpsub32 (v2si, v2si);
39514     v1si __builtin_vis_fpsub32s (v1si, v1si);
39515
39516     long __builtin_vis_array8 (long, long);
39517     long __builtin_vis_array16 (long, long);
39518     long __builtin_vis_array32 (long, long);
39519
39520 When you use the `-mvis2' switch, the VIS version 2.0 built-in
39521functions also become available:
39522
39523     long __builtin_vis_bmask (long, long);
39524     int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
39525     v2si __builtin_vis_bshufflev2si (v2si, v2si);
39526     v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
39527     v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);
39528
39529     long __builtin_vis_edge8n (void *, void *);
39530     long __builtin_vis_edge8ln (void *, void *);
39531     long __builtin_vis_edge16n (void *, void *);
39532     long __builtin_vis_edge16ln (void *, void *);
39533     long __builtin_vis_edge32n (void *, void *);
39534     long __builtin_vis_edge32ln (void *, void *);
39535
39536 When you use the `-mvis3' switch, the VIS version 3.0 built-in
39537functions also become available:
39538
39539     void __builtin_vis_cmask8 (long);
39540     void __builtin_vis_cmask16 (long);
39541     void __builtin_vis_cmask32 (long);
39542
39543     v4hi __builtin_vis_fchksm16 (v4hi, v4hi);
39544
39545     v4hi __builtin_vis_fsll16 (v4hi, v4hi);
39546     v4hi __builtin_vis_fslas16 (v4hi, v4hi);
39547     v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
39548     v4hi __builtin_vis_fsra16 (v4hi, v4hi);
39549     v2si __builtin_vis_fsll16 (v2si, v2si);
39550     v2si __builtin_vis_fslas16 (v2si, v2si);
39551     v2si __builtin_vis_fsrl16 (v2si, v2si);
39552     v2si __builtin_vis_fsra16 (v2si, v2si);
39553
39554     long __builtin_vis_pdistn (v8qi, v8qi);
39555
39556     v4hi __builtin_vis_fmean16 (v4hi, v4hi);
39557
39558     int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
39559     int64_t __builtin_vis_fpsub64 (int64_t, int64_t);
39560
39561     v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
39562     v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
39563     v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
39564     v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
39565     v2si __builtin_vis_fpadds32 (v2si, v2si);
39566     v1si __builtin_vis_fpadds32s (v1si, v1si);
39567     v2si __builtin_vis_fpsubs32 (v2si, v2si);
39568     v1si __builtin_vis_fpsubs32s (v1si, v1si);
39569
39570     long __builtin_vis_fucmple8 (v8qi, v8qi);
39571     long __builtin_vis_fucmpne8 (v8qi, v8qi);
39572     long __builtin_vis_fucmpgt8 (v8qi, v8qi);
39573     long __builtin_vis_fucmpeq8 (v8qi, v8qi);
39574
39575     float __builtin_vis_fhadds (float, float);
39576     double __builtin_vis_fhaddd (double, double);
39577     float __builtin_vis_fhsubs (float, float);
39578     double __builtin_vis_fhsubd (double, double);
39579     float __builtin_vis_fnhadds (float, float);
39580     double __builtin_vis_fnhaddd (double, double);
39581
39582     int64_t __builtin_vis_umulxhi (int64_t, int64_t);
39583     int64_t __builtin_vis_xmulx (int64_t, int64_t);
39584     int64_t __builtin_vis_xmulxhi (int64_t, int64_t);
39585
39586
39587File: gcc.info,  Node: SPU Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins
39588
395896.58.26 SPU Built-in Functions
39590------------------------------
39591
39592GCC provides extensions for the SPU processor as described in the
39593Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
39594found at `http://cell.scei.co.jp/' or
39595`http://www.ibm.com/developerworks/power/cell/'.  GCC's implementation
39596differs in several ways.
39597
39598   * The optional extension of specifying vector constants in
39599     parentheses is not supported.
39600
39601   * A vector initializer requires no cast if the vector constant is of
39602     the same type as the variable it is initializing.
39603
39604   * If `signed' or `unsigned' is omitted, the signedness of the vector
39605     type is the default signedness of the base type.  The default
39606     varies depending on the operating system, so a portable program
39607     should always specify the signedness.
39608
39609   * By default, the keyword `__vector' is added. The macro `vector' is
39610     defined in `<spu_intrinsics.h>' and can be undefined.
39611
39612   * GCC allows using a `typedef' name as the type specifier for a
39613     vector type.
39614
39615   * For C, overloaded functions are implemented with macros so the
39616     following does not work:
39617
39618            spu_add ((vector signed int){1, 2, 3, 4}, foo);
39619
39620     Since `spu_add' is a macro, the vector constant in the example is
39621     treated as four separate arguments.  Wrap the entire argument in
39622     parentheses for this to work.
39623
39624   * The extended version of `__builtin_expect' is not supported.
39625
39626
39627 _Note:_ Only the interface described in the aforementioned
39628specification is supported. Internally, GCC uses built-in functions to
39629implement the required functionality, but these are not supported and
39630are subject to change without notice.
39631
39632
39633File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPU Built-in Functions,  Up: Target Builtins
39634
396356.58.27 TI C6X Built-in Functions
39636---------------------------------
39637
39638GCC provides intrinsics to access certain instructions of the TI C6X
39639processors.  These intrinsics, listed below, are available after
39640inclusion of the `c6x_intrinsics.h' header file.  They map directly to
39641C6X instructions.
39642
39643
39644     int _sadd (int, int)
39645     int _ssub (int, int)
39646     int _sadd2 (int, int)
39647     int _ssub2 (int, int)
39648     long long _mpy2 (int, int)
39649     long long _smpy2 (int, int)
39650     int _add4 (int, int)
39651     int _sub4 (int, int)
39652     int _saddu4 (int, int)
39653
39654     int _smpy (int, int)
39655     int _smpyh (int, int)
39656     int _smpyhl (int, int)
39657     int _smpylh (int, int)
39658
39659     int _sshl (int, int)
39660     int _subc (int, int)
39661
39662     int _avg2 (int, int)
39663     int _avgu4 (int, int)
39664
39665     int _clrr (int, int)
39666     int _extr (int, int)
39667     int _extru (int, int)
39668     int _abs (int)
39669     int _abs2 (int)
39670
39671
39672File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins
39673
396746.58.28 TILE-Gx Built-in Functions
39675----------------------------------
39676
39677GCC provides intrinsics to access every instruction of the TILE-Gx
39678processor.  The intrinsics are of the form:
39679
39680
39681     unsigned long long __insn_OP (...)
39682
39683 Where OP is the name of the instruction.  Refer to the ISA manual for
39684the complete list of instructions.
39685
39686 GCC also provides intrinsics to directly access the network registers.
39687The intrinsics are:
39688
39689
39690     unsigned long long __tile_idn0_receive (void)
39691     unsigned long long __tile_idn1_receive (void)
39692     unsigned long long __tile_udn0_receive (void)
39693     unsigned long long __tile_udn1_receive (void)
39694     unsigned long long __tile_udn2_receive (void)
39695     unsigned long long __tile_udn3_receive (void)
39696     void __tile_idn_send (unsigned long long)
39697     void __tile_udn_send (unsigned long long)
39698
39699 The intrinsic `void __tile_network_barrier (void)' is used to
39700guarantee that no network operations before it are reordered with those
39701after it.
39702
39703
39704File: gcc.info,  Node: TILEPro Built-in Functions,  Next: x86 Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins
39705
397066.58.29 TILEPro Built-in Functions
39707----------------------------------
39708
39709GCC provides intrinsics to access every instruction of the TILEPro
39710processor.  The intrinsics are of the form:
39711
39712
39713     unsigned __insn_OP (...)
39714
39715where OP is the name of the instruction.  Refer to the ISA manual for
39716the complete list of instructions.
39717
39718 GCC also provides intrinsics to directly access the network registers.
39719The intrinsics are:
39720
39721
39722     unsigned __tile_idn0_receive (void)
39723     unsigned __tile_idn1_receive (void)
39724     unsigned __tile_sn_receive (void)
39725     unsigned __tile_udn0_receive (void)
39726     unsigned __tile_udn1_receive (void)
39727     unsigned __tile_udn2_receive (void)
39728     unsigned __tile_udn3_receive (void)
39729     void __tile_idn_send (unsigned)
39730     void __tile_sn_send (unsigned)
39731     void __tile_udn_send (unsigned)
39732
39733 The intrinsic `void __tile_network_barrier (void)' is used to
39734guarantee that no network operations before it are reordered with those
39735after it.
39736
39737
39738File: gcc.info,  Node: x86 Built-in Functions,  Next: x86 transactional memory intrinsics,  Prev: TILEPro Built-in Functions,  Up: Target Builtins
39739
397406.58.30 x86 Built-in Functions
39741------------------------------
39742
39743These built-in functions are available for the x86-32 and x86-64 family
39744of computers, depending on the command-line switches used.
39745
39746 If you specify command-line switches such as `-msse', the compiler
39747could use the extended instruction sets even if the built-ins are not
39748used explicitly in the program.  For this reason, applications that
39749perform run-time CPU detection must compile separate files for each
39750supported architecture, using the appropriate flags.  In particular,
39751the file containing the CPU detection code should be compiled without
39752these options.
39753
39754 The following machine modes are available for use with MMX built-in
39755functions (*note Vector Extensions::): `V2SI' for a vector of two
3975632-bit integers, `V4HI' for a vector of four 16-bit integers, and
39757`V8QI' for a vector of eight 8-bit integers.  Some of the built-in
39758functions operate on MMX registers as a whole 64-bit entity, these use
39759`V1DI' as their mode.
39760
39761 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector
39762of two 32-bit floating-point values.
39763
39764 If SSE extensions are enabled, `V4SF' is used for a vector of four
3976532-bit floating-point values.  Some instructions use a vector of four
3976632-bit integers, these use `V4SI'.  Finally, some instructions operate
39767on an entire vector register, interpreting it as a 128-bit integer,
39768these use mode `TI'.
39769
39770 In 64-bit mode, the x86-64 family of processors uses additional
39771built-in functions for efficient use of `TF' (`__float128') 128-bit
39772floating point and `TC' 128-bit complex floating-point values.
39773
39774 The following floating-point built-in functions are available in 64-bit
39775mode.  All of them implement the function that is part of the name.
39776
39777     __float128 __builtin_fabsq (__float128)
39778     __float128 __builtin_copysignq (__float128, __float128)
39779
39780 The following built-in function is always available.
39781
39782`void __builtin_ia32_pause (void)'
39783     Generates the `pause' machine instruction with a compiler memory
39784     barrier.
39785
39786 The following floating-point built-in functions are made available in
39787the 64-bit mode.
39788
39789`__float128 __builtin_infq (void)'
39790     Similar to `__builtin_inf', except the return type is `__float128'.
39791
39792`__float128 __builtin_huge_valq (void)'
39793     Similar to `__builtin_huge_val', except the return type is
39794     `__float128'.
39795
39796 The following built-in functions are always available and can be used
39797to check the target platform type.
39798
39799 -- Built-in Function: void __builtin_cpu_init (void)
39800     This function runs the CPU detection code to check the type of CPU
39801     and the features supported.  This built-in function needs to be
39802     invoked along with the built-in functions to check CPU type and
39803     features, `__builtin_cpu_is' and `__builtin_cpu_supports', only
39804     when used in a function that is executed before any constructors
39805     are called.  The CPU detection code is automatically executed in a
39806     very high priority constructor.
39807
39808     For example, this function has to be used in `ifunc' resolvers that
39809     check for CPU type using the built-in functions `__builtin_cpu_is'
39810     and `__builtin_cpu_supports', or in constructors on targets that
39811     don't support constructor priority.
39812
39813          static void (*resolve_memcpy (void)) (void)
39814          {
39815            // ifunc resolvers fire before constructors, explicitly call the init
39816            // function.
39817            __builtin_cpu_init ();
39818            if (__builtin_cpu_supports ("ssse3"))
39819              return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
39820            else
39821              return default_memcpy;
39822          }
39823
39824          void *memcpy (void *, const void *, size_t)
39825               __attribute__ ((ifunc ("resolve_memcpy")));
39826
39827
39828 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
39829     This function returns a positive integer if the run-time CPU is of
39830     type CPUNAME and returns `0' otherwise. The following CPU names
39831     can be detected:
39832
39833    `intel'
39834          Intel CPU.
39835
39836    `atom'
39837          Intel Atom CPU.
39838
39839    `core2'
39840          Intel Core 2 CPU.
39841
39842    `corei7'
39843          Intel Core i7 CPU.
39844
39845    `nehalem'
39846          Intel Core i7 Nehalem CPU.
39847
39848    `westmere'
39849          Intel Core i7 Westmere CPU.
39850
39851    `sandybridge'
39852          Intel Core i7 Sandy Bridge CPU.
39853
39854    `amd'
39855          AMD CPU.
39856
39857    `amdfam10h'
39858          AMD Family 10h CPU.
39859
39860    `barcelona'
39861          AMD Family 10h Barcelona CPU.
39862
39863    `shanghai'
39864          AMD Family 10h Shanghai CPU.
39865
39866    `istanbul'
39867          AMD Family 10h Istanbul CPU.
39868
39869    `btver1'
39870          AMD Family 14h CPU.
39871
39872    `amdfam15h'
39873          AMD Family 15h CPU.
39874
39875    `bdver1'
39876          AMD Family 15h Bulldozer version 1.
39877
39878    `bdver2'
39879          AMD Family 15h Bulldozer version 2.
39880
39881    `bdver3'
39882          AMD Family 15h Bulldozer version 3.
39883
39884    `bdver4'
39885          AMD Family 15h Bulldozer version 4.
39886
39887    `btver2'
39888          AMD Family 16h CPU.
39889
39890     Here is an example:
39891          if (__builtin_cpu_is ("corei7"))
39892            {
39893               do_corei7 (); // Core i7 specific implementation.
39894            }
39895          else
39896            {
39897               do_generic (); // Generic implementation.
39898            }
39899
39900 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
39901     This function returns a positive integer if the run-time CPU
39902     supports FEATURE and returns `0' otherwise. The following features
39903     can be detected:
39904
39905    `cmov'
39906          CMOV instruction.
39907
39908    `mmx'
39909          MMX instructions.
39910
39911    `popcnt'
39912          POPCNT instruction.
39913
39914    `sse'
39915          SSE instructions.
39916
39917    `sse2'
39918          SSE2 instructions.
39919
39920    `sse3'
39921          SSE3 instructions.
39922
39923    `ssse3'
39924          SSSE3 instructions.
39925
39926    `sse4.1'
39927          SSE4.1 instructions.
39928
39929    `sse4.2'
39930          SSE4.2 instructions.
39931
39932    `avx'
39933          AVX instructions.
39934
39935    `avx2'
39936          AVX2 instructions.
39937
39938    `avx512f'
39939          AVX512F instructions.
39940
39941     Here is an example:
39942          if (__builtin_cpu_supports ("popcnt"))
39943            {
39944               asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
39945            }
39946          else
39947            {
39948               count = generic_countbits (n); //generic implementation.
39949            }
39950
39951 The following built-in functions are made available by `-mmmx'.  All
39952of them generate the machine instruction that is part of the name.
39953
39954     v8qi __builtin_ia32_paddb (v8qi, v8qi)
39955     v4hi __builtin_ia32_paddw (v4hi, v4hi)
39956     v2si __builtin_ia32_paddd (v2si, v2si)
39957     v8qi __builtin_ia32_psubb (v8qi, v8qi)
39958     v4hi __builtin_ia32_psubw (v4hi, v4hi)
39959     v2si __builtin_ia32_psubd (v2si, v2si)
39960     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
39961     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
39962     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
39963     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
39964     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
39965     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
39966     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
39967     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
39968     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
39969     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
39970     di __builtin_ia32_pand (di, di)
39971     di __builtin_ia32_pandn (di,di)
39972     di __builtin_ia32_por (di, di)
39973     di __builtin_ia32_pxor (di, di)
39974     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
39975     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
39976     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
39977     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
39978     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
39979     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
39980     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
39981     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
39982     v2si __builtin_ia32_punpckhdq (v2si, v2si)
39983     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
39984     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
39985     v2si __builtin_ia32_punpckldq (v2si, v2si)
39986     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
39987     v4hi __builtin_ia32_packssdw (v2si, v2si)
39988     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
39989
39990     v4hi __builtin_ia32_psllw (v4hi, v4hi)
39991     v2si __builtin_ia32_pslld (v2si, v2si)
39992     v1di __builtin_ia32_psllq (v1di, v1di)
39993     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
39994     v2si __builtin_ia32_psrld (v2si, v2si)
39995     v1di __builtin_ia32_psrlq (v1di, v1di)
39996     v4hi __builtin_ia32_psraw (v4hi, v4hi)
39997     v2si __builtin_ia32_psrad (v2si, v2si)
39998     v4hi __builtin_ia32_psllwi (v4hi, int)
39999     v2si __builtin_ia32_pslldi (v2si, int)
40000     v1di __builtin_ia32_psllqi (v1di, int)
40001     v4hi __builtin_ia32_psrlwi (v4hi, int)
40002     v2si __builtin_ia32_psrldi (v2si, int)
40003     v1di __builtin_ia32_psrlqi (v1di, int)
40004     v4hi __builtin_ia32_psrawi (v4hi, int)
40005     v2si __builtin_ia32_psradi (v2si, int)
40006
40007 The following built-in functions are made available either with
40008`-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
40009of them generate the machine instruction that is part of the name.
40010
40011     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
40012     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
40013     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
40014     v1di __builtin_ia32_psadbw (v8qi, v8qi)
40015     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
40016     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
40017     v8qi __builtin_ia32_pminub (v8qi, v8qi)
40018     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
40019     int __builtin_ia32_pmovmskb (v8qi)
40020     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
40021     void __builtin_ia32_movntq (di *, di)
40022     void __builtin_ia32_sfence (void)
40023
40024 The following built-in functions are available when `-msse' is used.
40025All of them generate the machine instruction that is part of the name.
40026
40027     int __builtin_ia32_comieq (v4sf, v4sf)
40028     int __builtin_ia32_comineq (v4sf, v4sf)
40029     int __builtin_ia32_comilt (v4sf, v4sf)
40030     int __builtin_ia32_comile (v4sf, v4sf)
40031     int __builtin_ia32_comigt (v4sf, v4sf)
40032     int __builtin_ia32_comige (v4sf, v4sf)
40033     int __builtin_ia32_ucomieq (v4sf, v4sf)
40034     int __builtin_ia32_ucomineq (v4sf, v4sf)
40035     int __builtin_ia32_ucomilt (v4sf, v4sf)
40036     int __builtin_ia32_ucomile (v4sf, v4sf)
40037     int __builtin_ia32_ucomigt (v4sf, v4sf)
40038     int __builtin_ia32_ucomige (v4sf, v4sf)
40039     v4sf __builtin_ia32_addps (v4sf, v4sf)
40040     v4sf __builtin_ia32_subps (v4sf, v4sf)
40041     v4sf __builtin_ia32_mulps (v4sf, v4sf)
40042     v4sf __builtin_ia32_divps (v4sf, v4sf)
40043     v4sf __builtin_ia32_addss (v4sf, v4sf)
40044     v4sf __builtin_ia32_subss (v4sf, v4sf)
40045     v4sf __builtin_ia32_mulss (v4sf, v4sf)
40046     v4sf __builtin_ia32_divss (v4sf, v4sf)
40047     v4sf __builtin_ia32_cmpeqps (v4sf, v4sf)
40048     v4sf __builtin_ia32_cmpltps (v4sf, v4sf)
40049     v4sf __builtin_ia32_cmpleps (v4sf, v4sf)
40050     v4sf __builtin_ia32_cmpgtps (v4sf, v4sf)
40051     v4sf __builtin_ia32_cmpgeps (v4sf, v4sf)
40052     v4sf __builtin_ia32_cmpunordps (v4sf, v4sf)
40053     v4sf __builtin_ia32_cmpneqps (v4sf, v4sf)
40054     v4sf __builtin_ia32_cmpnltps (v4sf, v4sf)
40055     v4sf __builtin_ia32_cmpnleps (v4sf, v4sf)
40056     v4sf __builtin_ia32_cmpngtps (v4sf, v4sf)
40057     v4sf __builtin_ia32_cmpngeps (v4sf, v4sf)
40058     v4sf __builtin_ia32_cmpordps (v4sf, v4sf)
40059     v4sf __builtin_ia32_cmpeqss (v4sf, v4sf)
40060     v4sf __builtin_ia32_cmpltss (v4sf, v4sf)
40061     v4sf __builtin_ia32_cmpless (v4sf, v4sf)
40062     v4sf __builtin_ia32_cmpunordss (v4sf, v4sf)
40063     v4sf __builtin_ia32_cmpneqss (v4sf, v4sf)
40064     v4sf __builtin_ia32_cmpnltss (v4sf, v4sf)
40065     v4sf __builtin_ia32_cmpnless (v4sf, v4sf)
40066     v4sf __builtin_ia32_cmpordss (v4sf, v4sf)
40067     v4sf __builtin_ia32_maxps (v4sf, v4sf)
40068     v4sf __builtin_ia32_maxss (v4sf, v4sf)
40069     v4sf __builtin_ia32_minps (v4sf, v4sf)
40070     v4sf __builtin_ia32_minss (v4sf, v4sf)
40071     v4sf __builtin_ia32_andps (v4sf, v4sf)
40072     v4sf __builtin_ia32_andnps (v4sf, v4sf)
40073     v4sf __builtin_ia32_orps (v4sf, v4sf)
40074     v4sf __builtin_ia32_xorps (v4sf, v4sf)
40075     v4sf __builtin_ia32_movss (v4sf, v4sf)
40076     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
40077     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
40078     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
40079     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
40080     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
40081     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
40082     v2si __builtin_ia32_cvtps2pi (v4sf)
40083     int __builtin_ia32_cvtss2si (v4sf)
40084     v2si __builtin_ia32_cvttps2pi (v4sf)
40085     int __builtin_ia32_cvttss2si (v4sf)
40086     v4sf __builtin_ia32_rcpps (v4sf)
40087     v4sf __builtin_ia32_rsqrtps (v4sf)
40088     v4sf __builtin_ia32_sqrtps (v4sf)
40089     v4sf __builtin_ia32_rcpss (v4sf)
40090     v4sf __builtin_ia32_rsqrtss (v4sf)
40091     v4sf __builtin_ia32_sqrtss (v4sf)
40092     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
40093     void __builtin_ia32_movntps (float *, v4sf)
40094     int __builtin_ia32_movmskps (v4sf)
40095
40096 The following built-in functions are available when `-msse' is used.
40097
40098`v4sf __builtin_ia32_loadups (float *)'
40099     Generates the `movups' machine instruction as a load from memory.
40100
40101`void __builtin_ia32_storeups (float *, v4sf)'
40102     Generates the `movups' machine instruction as a store to memory.
40103
40104`v4sf __builtin_ia32_loadss (float *)'
40105     Generates the `movss' machine instruction as a load from memory.
40106
40107`v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
40108     Generates the `movhps' machine instruction as a load from memory.
40109
40110`v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
40111     Generates the `movlps' machine instruction as a load from memory
40112
40113`void __builtin_ia32_storehps (v2sf *, v4sf)'
40114     Generates the `movhps' machine instruction as a store to memory.
40115
40116`void __builtin_ia32_storelps (v2sf *, v4sf)'
40117     Generates the `movlps' machine instruction as a store to memory.
40118
40119 The following built-in functions are available when `-msse2' is used.
40120All of them generate the machine instruction that is part of the name.
40121
40122     int __builtin_ia32_comisdeq (v2df, v2df)
40123     int __builtin_ia32_comisdlt (v2df, v2df)
40124     int __builtin_ia32_comisdle (v2df, v2df)
40125     int __builtin_ia32_comisdgt (v2df, v2df)
40126     int __builtin_ia32_comisdge (v2df, v2df)
40127     int __builtin_ia32_comisdneq (v2df, v2df)
40128     int __builtin_ia32_ucomisdeq (v2df, v2df)
40129     int __builtin_ia32_ucomisdlt (v2df, v2df)
40130     int __builtin_ia32_ucomisdle (v2df, v2df)
40131     int __builtin_ia32_ucomisdgt (v2df, v2df)
40132     int __builtin_ia32_ucomisdge (v2df, v2df)
40133     int __builtin_ia32_ucomisdneq (v2df, v2df)
40134     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
40135     v2df __builtin_ia32_cmpltpd (v2df, v2df)
40136     v2df __builtin_ia32_cmplepd (v2df, v2df)
40137     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
40138     v2df __builtin_ia32_cmpgepd (v2df, v2df)
40139     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
40140     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
40141     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
40142     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
40143     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
40144     v2df __builtin_ia32_cmpngepd (v2df, v2df)
40145     v2df __builtin_ia32_cmpordpd (v2df, v2df)
40146     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
40147     v2df __builtin_ia32_cmpltsd (v2df, v2df)
40148     v2df __builtin_ia32_cmplesd (v2df, v2df)
40149     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
40150     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
40151     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
40152     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
40153     v2df __builtin_ia32_cmpordsd (v2df, v2df)
40154     v2di __builtin_ia32_paddq (v2di, v2di)
40155     v2di __builtin_ia32_psubq (v2di, v2di)
40156     v2df __builtin_ia32_addpd (v2df, v2df)
40157     v2df __builtin_ia32_subpd (v2df, v2df)
40158     v2df __builtin_ia32_mulpd (v2df, v2df)
40159     v2df __builtin_ia32_divpd (v2df, v2df)
40160     v2df __builtin_ia32_addsd (v2df, v2df)
40161     v2df __builtin_ia32_subsd (v2df, v2df)
40162     v2df __builtin_ia32_mulsd (v2df, v2df)
40163     v2df __builtin_ia32_divsd (v2df, v2df)
40164     v2df __builtin_ia32_minpd (v2df, v2df)
40165     v2df __builtin_ia32_maxpd (v2df, v2df)
40166     v2df __builtin_ia32_minsd (v2df, v2df)
40167     v2df __builtin_ia32_maxsd (v2df, v2df)
40168     v2df __builtin_ia32_andpd (v2df, v2df)
40169     v2df __builtin_ia32_andnpd (v2df, v2df)
40170     v2df __builtin_ia32_orpd (v2df, v2df)
40171     v2df __builtin_ia32_xorpd (v2df, v2df)
40172     v2df __builtin_ia32_movsd (v2df, v2df)
40173     v2df __builtin_ia32_unpckhpd (v2df, v2df)
40174     v2df __builtin_ia32_unpcklpd (v2df, v2df)
40175     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
40176     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
40177     v4si __builtin_ia32_paddd128 (v4si, v4si)
40178     v2di __builtin_ia32_paddq128 (v2di, v2di)
40179     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
40180     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
40181     v4si __builtin_ia32_psubd128 (v4si, v4si)
40182     v2di __builtin_ia32_psubq128 (v2di, v2di)
40183     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
40184     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
40185     v2di __builtin_ia32_pand128 (v2di, v2di)
40186     v2di __builtin_ia32_pandn128 (v2di, v2di)
40187     v2di __builtin_ia32_por128 (v2di, v2di)
40188     v2di __builtin_ia32_pxor128 (v2di, v2di)
40189     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
40190     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
40191     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
40192     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
40193     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
40194     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
40195     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
40196     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
40197     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
40198     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
40199     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
40200     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
40201     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
40202     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
40203     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
40204     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
40205     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
40206     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
40207     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
40208     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
40209     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
40210     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
40211     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
40212     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
40213     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
40214     v2df __builtin_ia32_loadupd (double *)
40215     void __builtin_ia32_storeupd (double *, v2df)
40216     v2df __builtin_ia32_loadhpd (v2df, double const *)
40217     v2df __builtin_ia32_loadlpd (v2df, double const *)
40218     int __builtin_ia32_movmskpd (v2df)
40219     int __builtin_ia32_pmovmskb128 (v16qi)
40220     void __builtin_ia32_movnti (int *, int)
40221     void __builtin_ia32_movnti64 (long long int *, long long int)
40222     void __builtin_ia32_movntpd (double *, v2df)
40223     void __builtin_ia32_movntdq (v2df *, v2df)
40224     v4si __builtin_ia32_pshufd (v4si, int)
40225     v8hi __builtin_ia32_pshuflw (v8hi, int)
40226     v8hi __builtin_ia32_pshufhw (v8hi, int)
40227     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
40228     v2df __builtin_ia32_sqrtpd (v2df)
40229     v2df __builtin_ia32_sqrtsd (v2df)
40230     v2df __builtin_ia32_shufpd (v2df, v2df, int)
40231     v2df __builtin_ia32_cvtdq2pd (v4si)
40232     v4sf __builtin_ia32_cvtdq2ps (v4si)
40233     v4si __builtin_ia32_cvtpd2dq (v2df)
40234     v2si __builtin_ia32_cvtpd2pi (v2df)
40235     v4sf __builtin_ia32_cvtpd2ps (v2df)
40236     v4si __builtin_ia32_cvttpd2dq (v2df)
40237     v2si __builtin_ia32_cvttpd2pi (v2df)
40238     v2df __builtin_ia32_cvtpi2pd (v2si)
40239     int __builtin_ia32_cvtsd2si (v2df)
40240     int __builtin_ia32_cvttsd2si (v2df)
40241     long long __builtin_ia32_cvtsd2si64 (v2df)
40242     long long __builtin_ia32_cvttsd2si64 (v2df)
40243     v4si __builtin_ia32_cvtps2dq (v4sf)
40244     v2df __builtin_ia32_cvtps2pd (v4sf)
40245     v4si __builtin_ia32_cvttps2dq (v4sf)
40246     v2df __builtin_ia32_cvtsi2sd (v2df, int)
40247     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
40248     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
40249     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
40250     void __builtin_ia32_clflush (const void *)
40251     void __builtin_ia32_lfence (void)
40252     void __builtin_ia32_mfence (void)
40253     v16qi __builtin_ia32_loaddqu (const char *)
40254     void __builtin_ia32_storedqu (char *, v16qi)
40255     v1di __builtin_ia32_pmuludq (v2si, v2si)
40256     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
40257     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
40258     v4si __builtin_ia32_pslld128 (v4si, v4si)
40259     v2di __builtin_ia32_psllq128 (v2di, v2di)
40260     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
40261     v4si __builtin_ia32_psrld128 (v4si, v4si)
40262     v2di __builtin_ia32_psrlq128 (v2di, v2di)
40263     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
40264     v4si __builtin_ia32_psrad128 (v4si, v4si)
40265     v2di __builtin_ia32_pslldqi128 (v2di, int)
40266     v8hi __builtin_ia32_psllwi128 (v8hi, int)
40267     v4si __builtin_ia32_pslldi128 (v4si, int)
40268     v2di __builtin_ia32_psllqi128 (v2di, int)
40269     v2di __builtin_ia32_psrldqi128 (v2di, int)
40270     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
40271     v4si __builtin_ia32_psrldi128 (v4si, int)
40272     v2di __builtin_ia32_psrlqi128 (v2di, int)
40273     v8hi __builtin_ia32_psrawi128 (v8hi, int)
40274     v4si __builtin_ia32_psradi128 (v4si, int)
40275     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
40276     v2di __builtin_ia32_movq128 (v2di)
40277
40278 The following built-in functions are available when `-msse3' is used.
40279All of them generate the machine instruction that is part of the name.
40280
40281     v2df __builtin_ia32_addsubpd (v2df, v2df)
40282     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
40283     v2df __builtin_ia32_haddpd (v2df, v2df)
40284     v4sf __builtin_ia32_haddps (v4sf, v4sf)
40285     v2df __builtin_ia32_hsubpd (v2df, v2df)
40286     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
40287     v16qi __builtin_ia32_lddqu (char const *)
40288     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
40289     v4sf __builtin_ia32_movshdup (v4sf)
40290     v4sf __builtin_ia32_movsldup (v4sf)
40291     void __builtin_ia32_mwait (unsigned int, unsigned int)
40292
40293 The following built-in functions are available when `-mssse3' is used.
40294All of them generate the machine instruction that is part of the name.
40295
40296     v2si __builtin_ia32_phaddd (v2si, v2si)
40297     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
40298     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
40299     v2si __builtin_ia32_phsubd (v2si, v2si)
40300     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
40301     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
40302     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
40303     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
40304     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
40305     v8qi __builtin_ia32_psignb (v8qi, v8qi)
40306     v2si __builtin_ia32_psignd (v2si, v2si)
40307     v4hi __builtin_ia32_psignw (v4hi, v4hi)
40308     v1di __builtin_ia32_palignr (v1di, v1di, int)
40309     v8qi __builtin_ia32_pabsb (v8qi)
40310     v2si __builtin_ia32_pabsd (v2si)
40311     v4hi __builtin_ia32_pabsw (v4hi)
40312
40313 The following built-in functions are available when `-mssse3' is used.
40314All of them generate the machine instruction that is part of the name.
40315
40316     v4si __builtin_ia32_phaddd128 (v4si, v4si)
40317     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
40318     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
40319     v4si __builtin_ia32_phsubd128 (v4si, v4si)
40320     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
40321     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
40322     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
40323     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
40324     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
40325     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
40326     v4si __builtin_ia32_psignd128 (v4si, v4si)
40327     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
40328     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
40329     v16qi __builtin_ia32_pabsb128 (v16qi)
40330     v4si __builtin_ia32_pabsd128 (v4si)
40331     v8hi __builtin_ia32_pabsw128 (v8hi)
40332
40333 The following built-in functions are available when `-msse4.1' is
40334used.  All of them generate the machine instruction that is part of the
40335name.
40336
40337     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
40338     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
40339     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
40340     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
40341     v2df __builtin_ia32_dppd (v2df, v2df, const int)
40342     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
40343     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
40344     v2di __builtin_ia32_movntdqa (v2di *);
40345     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
40346     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
40347     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
40348     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
40349     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
40350     v8hi __builtin_ia32_phminposuw128 (v8hi)
40351     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
40352     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
40353     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
40354     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
40355     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
40356     v4si __builtin_ia32_pminsd128 (v4si, v4si)
40357     v4si __builtin_ia32_pminud128 (v4si, v4si)
40358     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
40359     v4si __builtin_ia32_pmovsxbd128 (v16qi)
40360     v2di __builtin_ia32_pmovsxbq128 (v16qi)
40361     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
40362     v2di __builtin_ia32_pmovsxdq128 (v4si)
40363     v4si __builtin_ia32_pmovsxwd128 (v8hi)
40364     v2di __builtin_ia32_pmovsxwq128 (v8hi)
40365     v4si __builtin_ia32_pmovzxbd128 (v16qi)
40366     v2di __builtin_ia32_pmovzxbq128 (v16qi)
40367     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
40368     v2di __builtin_ia32_pmovzxdq128 (v4si)
40369     v4si __builtin_ia32_pmovzxwd128 (v8hi)
40370     v2di __builtin_ia32_pmovzxwq128 (v8hi)
40371     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
40372     v4si __builtin_ia32_pmulld128 (v4si, v4si)
40373     int __builtin_ia32_ptestc128 (v2di, v2di)
40374     int __builtin_ia32_ptestnzc128 (v2di, v2di)
40375     int __builtin_ia32_ptestz128 (v2di, v2di)
40376     v2df __builtin_ia32_roundpd (v2df, const int)
40377     v4sf __builtin_ia32_roundps (v4sf, const int)
40378     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
40379     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
40380
40381 The following built-in functions are available when `-msse4.1' is used.
40382
40383`v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
40384     Generates the `insertps' machine instruction.
40385
40386`int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
40387     Generates the `pextrb' machine instruction.
40388
40389`v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
40390     Generates the `pinsrb' machine instruction.
40391
40392`v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
40393     Generates the `pinsrd' machine instruction.
40394
40395`v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
40396     Generates the `pinsrq' machine instruction in 64bit mode.
40397
40398 The following built-in functions are changed to generate new SSE4.1
40399instructions when `-msse4.1' is used.
40400
40401`float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
40402     Generates the `extractps' machine instruction.
40403
40404`int __builtin_ia32_vec_ext_v4si (v4si, const int)'
40405     Generates the `pextrd' machine instruction.
40406
40407`long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
40408     Generates the `pextrq' machine instruction in 64bit mode.
40409
40410 The following built-in functions are available when `-msse4.2' is
40411used.  All of them generate the machine instruction that is part of the
40412name.
40413
40414     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
40415     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
40416     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
40417     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
40418     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
40419     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
40420     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
40421     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
40422     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
40423     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
40424     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
40425     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
40426     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
40427     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
40428     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
40429
40430 The following built-in functions are available when `-msse4.2' is used.
40431
40432`unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
40433     Generates the `crc32b' machine instruction.
40434
40435`unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
40436     Generates the `crc32w' machine instruction.
40437
40438`unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
40439     Generates the `crc32l' machine instruction.
40440
40441`unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
40442     Generates the `crc32q' machine instruction.
40443
40444 The following built-in functions are changed to generate new SSE4.2
40445instructions when `-msse4.2' is used.
40446
40447`int __builtin_popcount (unsigned int)'
40448     Generates the `popcntl' machine instruction.
40449
40450`int __builtin_popcountl (unsigned long)'
40451     Generates the `popcntl' or `popcntq' machine instruction,
40452     depending on the size of `unsigned long'.
40453
40454`int __builtin_popcountll (unsigned long long)'
40455     Generates the `popcntq' machine instruction.
40456
40457 The following built-in functions are available when `-mavx' is used.
40458All of them generate the machine instruction that is part of the name.
40459
40460     v4df __builtin_ia32_addpd256 (v4df,v4df)
40461     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
40462     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
40463     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
40464     v4df __builtin_ia32_andnpd256 (v4df,v4df)
40465     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
40466     v4df __builtin_ia32_andpd256 (v4df,v4df)
40467     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
40468     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
40469     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
40470     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
40471     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
40472     v2df __builtin_ia32_cmppd (v2df,v2df,int)
40473     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
40474     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
40475     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
40476     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
40477     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
40478     v4df __builtin_ia32_cvtdq2pd256 (v4si)
40479     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
40480     v4si __builtin_ia32_cvtpd2dq256 (v4df)
40481     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
40482     v8si __builtin_ia32_cvtps2dq256 (v8sf)
40483     v4df __builtin_ia32_cvtps2pd256 (v4sf)
40484     v4si __builtin_ia32_cvttpd2dq256 (v4df)
40485     v8si __builtin_ia32_cvttps2dq256 (v8sf)
40486     v4df __builtin_ia32_divpd256 (v4df,v4df)
40487     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
40488     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
40489     v4df __builtin_ia32_haddpd256 (v4df,v4df)
40490     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
40491     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
40492     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
40493     v32qi __builtin_ia32_lddqu256 (pcchar)
40494     v32qi __builtin_ia32_loaddqu256 (pcchar)
40495     v4df __builtin_ia32_loadupd256 (pcdouble)
40496     v8sf __builtin_ia32_loadups256 (pcfloat)
40497     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
40498     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
40499     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
40500     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
40501     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
40502     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
40503     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
40504     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
40505     v4df __builtin_ia32_maxpd256 (v4df,v4df)
40506     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
40507     v4df __builtin_ia32_minpd256 (v4df,v4df)
40508     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
40509     v4df __builtin_ia32_movddup256 (v4df)
40510     int __builtin_ia32_movmskpd256 (v4df)
40511     int __builtin_ia32_movmskps256 (v8sf)
40512     v8sf __builtin_ia32_movshdup256 (v8sf)
40513     v8sf __builtin_ia32_movsldup256 (v8sf)
40514     v4df __builtin_ia32_mulpd256 (v4df,v4df)
40515     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
40516     v4df __builtin_ia32_orpd256 (v4df,v4df)
40517     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
40518     v2df __builtin_ia32_pd_pd256 (v4df)
40519     v4df __builtin_ia32_pd256_pd (v2df)
40520     v4sf __builtin_ia32_ps_ps256 (v8sf)
40521     v8sf __builtin_ia32_ps256_ps (v4sf)
40522     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
40523     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
40524     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
40525     v8sf __builtin_ia32_rcpps256 (v8sf)
40526     v4df __builtin_ia32_roundpd256 (v4df,int)
40527     v8sf __builtin_ia32_roundps256 (v8sf,int)
40528     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
40529     v8sf __builtin_ia32_rsqrtps256 (v8sf)
40530     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
40531     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
40532     v4si __builtin_ia32_si_si256 (v8si)
40533     v8si __builtin_ia32_si256_si (v4si)
40534     v4df __builtin_ia32_sqrtpd256 (v4df)
40535     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
40536     v8sf __builtin_ia32_sqrtps256 (v8sf)
40537     void __builtin_ia32_storedqu256 (pchar,v32qi)
40538     void __builtin_ia32_storeupd256 (pdouble,v4df)
40539     void __builtin_ia32_storeups256 (pfloat,v8sf)
40540     v4df __builtin_ia32_subpd256 (v4df,v4df)
40541     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
40542     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
40543     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
40544     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
40545     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
40546     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
40547     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
40548     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
40549     v4sf __builtin_ia32_vbroadcastss (pcfloat)
40550     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
40551     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
40552     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
40553     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
40554     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
40555     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
40556     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
40557     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
40558     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
40559     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
40560     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
40561     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
40562     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
40563     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
40564     v2df __builtin_ia32_vpermilpd (v2df,int)
40565     v4df __builtin_ia32_vpermilpd256 (v4df,int)
40566     v4sf __builtin_ia32_vpermilps (v4sf,int)
40567     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
40568     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
40569     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
40570     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
40571     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
40572     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
40573     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
40574     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
40575     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
40576     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
40577     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
40578     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
40579     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
40580     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
40581     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
40582     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
40583     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
40584     void __builtin_ia32_vzeroall (void)
40585     void __builtin_ia32_vzeroupper (void)
40586     v4df __builtin_ia32_xorpd256 (v4df,v4df)
40587     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
40588
40589 The following built-in functions are available when `-mavx2' is used.
40590All of them generate the machine instruction that is part of the name.
40591
40592     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
40593     v32qi __builtin_ia32_pabsb256 (v32qi)
40594     v16hi __builtin_ia32_pabsw256 (v16hi)
40595     v8si __builtin_ia32_pabsd256 (v8si)
40596     v16hi __builtin_ia32_packssdw256 (v8si,v8si)
40597     v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
40598     v16hi __builtin_ia32_packusdw256 (v8si,v8si)
40599     v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
40600     v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
40601     v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
40602     v8si __builtin_ia32_paddd256 (v8si,v8si)
40603     v4di __builtin_ia32_paddq256 (v4di,v4di)
40604     v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
40605     v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
40606     v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
40607     v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
40608     v4di __builtin_ia32_palignr256 (v4di,v4di,int)
40609     v4di __builtin_ia32_andsi256 (v4di,v4di)
40610     v4di __builtin_ia32_andnotsi256 (v4di,v4di)
40611     v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
40612     v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
40613     v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
40614     v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
40615     v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
40616     v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
40617     v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
40618     v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
40619     v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
40620     v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
40621     v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
40622     v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
40623     v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
40624     v8si __builtin_ia32_phaddd256 (v8si,v8si)
40625     v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
40626     v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
40627     v8si __builtin_ia32_phsubd256 (v8si,v8si)
40628     v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
40629     v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
40630     v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
40631     v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
40632     v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
40633     v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
40634     v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
40635     v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
40636     v8si __builtin_ia32_pmaxud256 (v8si,v8si)
40637     v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
40638     v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
40639     v8si __builtin_ia32_pminsd256 (v8si,v8si)
40640     v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
40641     v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
40642     v8si __builtin_ia32_pminud256 (v8si,v8si)
40643     int __builtin_ia32_pmovmskb256 (v32qi)
40644     v16hi __builtin_ia32_pmovsxbw256 (v16qi)
40645     v8si __builtin_ia32_pmovsxbd256 (v16qi)
40646     v4di __builtin_ia32_pmovsxbq256 (v16qi)
40647     v8si __builtin_ia32_pmovsxwd256 (v8hi)
40648     v4di __builtin_ia32_pmovsxwq256 (v8hi)
40649     v4di __builtin_ia32_pmovsxdq256 (v4si)
40650     v16hi __builtin_ia32_pmovzxbw256 (v16qi)
40651     v8si __builtin_ia32_pmovzxbd256 (v16qi)
40652     v4di __builtin_ia32_pmovzxbq256 (v16qi)
40653     v8si __builtin_ia32_pmovzxwd256 (v8hi)
40654     v4di __builtin_ia32_pmovzxwq256 (v8hi)
40655     v4di __builtin_ia32_pmovzxdq256 (v4si)
40656     v4di __builtin_ia32_pmuldq256 (v8si,v8si)
40657     v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
40658     v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
40659     v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
40660     v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
40661     v8si __builtin_ia32_pmulld256 (v8si,v8si)
40662     v4di __builtin_ia32_pmuludq256 (v8si,v8si)
40663     v4di __builtin_ia32_por256 (v4di,v4di)
40664     v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
40665     v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
40666     v8si __builtin_ia32_pshufd256 (v8si,int)
40667     v16hi __builtin_ia32_pshufhw256 (v16hi,int)
40668     v16hi __builtin_ia32_pshuflw256 (v16hi,int)
40669     v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
40670     v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
40671     v8si __builtin_ia32_psignd256 (v8si,v8si)
40672     v4di __builtin_ia32_pslldqi256 (v4di,int)
40673     v16hi __builtin_ia32_psllwi256 (16hi,int)
40674     v16hi __builtin_ia32_psllw256(v16hi,v8hi)
40675     v8si __builtin_ia32_pslldi256 (v8si,int)
40676     v8si __builtin_ia32_pslld256(v8si,v4si)
40677     v4di __builtin_ia32_psllqi256 (v4di,int)
40678     v4di __builtin_ia32_psllq256(v4di,v2di)
40679     v16hi __builtin_ia32_psrawi256 (v16hi,int)
40680     v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
40681     v8si __builtin_ia32_psradi256 (v8si,int)
40682     v8si __builtin_ia32_psrad256 (v8si,v4si)
40683     v4di __builtin_ia32_psrldqi256 (v4di, int)
40684     v16hi __builtin_ia32_psrlwi256 (v16hi,int)
40685     v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
40686     v8si __builtin_ia32_psrldi256 (v8si,int)
40687     v8si __builtin_ia32_psrld256 (v8si,v4si)
40688     v4di __builtin_ia32_psrlqi256 (v4di,int)
40689     v4di __builtin_ia32_psrlq256(v4di,v2di)
40690     v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
40691     v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
40692     v8si __builtin_ia32_psubd256 (v8si,v8si)
40693     v4di __builtin_ia32_psubq256 (v4di,v4di)
40694     v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
40695     v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
40696     v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
40697     v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
40698     v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
40699     v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
40700     v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
40701     v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
40702     v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
40703     v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
40704     v8si __builtin_ia32_punpckldq256 (v8si,v8si)
40705     v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
40706     v4di __builtin_ia32_pxor256 (v4di,v4di)
40707     v4di __builtin_ia32_movntdqa256 (pv4di)
40708     v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
40709     v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
40710     v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
40711     v4di __builtin_ia32_vbroadcastsi256 (v2di)
40712     v4si __builtin_ia32_pblendd128 (v4si,v4si)
40713     v8si __builtin_ia32_pblendd256 (v8si,v8si)
40714     v32qi __builtin_ia32_pbroadcastb256 (v16qi)
40715     v16hi __builtin_ia32_pbroadcastw256 (v8hi)
40716     v8si __builtin_ia32_pbroadcastd256 (v4si)
40717     v4di __builtin_ia32_pbroadcastq256 (v2di)
40718     v16qi __builtin_ia32_pbroadcastb128 (v16qi)
40719     v8hi __builtin_ia32_pbroadcastw128 (v8hi)
40720     v4si __builtin_ia32_pbroadcastd128 (v4si)
40721     v2di __builtin_ia32_pbroadcastq128 (v2di)
40722     v8si __builtin_ia32_permvarsi256 (v8si,v8si)
40723     v4df __builtin_ia32_permdf256 (v4df,int)
40724     v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
40725     v4di __builtin_ia32_permdi256 (v4di,int)
40726     v4di __builtin_ia32_permti256 (v4di,v4di,int)
40727     v4di __builtin_ia32_extract128i256 (v4di,int)
40728     v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
40729     v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
40730     v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
40731     v4si __builtin_ia32_maskloadd (pcv4si,v4si)
40732     v2di __builtin_ia32_maskloadq (pcv2di,v2di)
40733     void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
40734     void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
40735     void __builtin_ia32_maskstored (pv4si,v4si,v4si)
40736     void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
40737     v8si __builtin_ia32_psllv8si (v8si,v8si)
40738     v4si __builtin_ia32_psllv4si (v4si,v4si)
40739     v4di __builtin_ia32_psllv4di (v4di,v4di)
40740     v2di __builtin_ia32_psllv2di (v2di,v2di)
40741     v8si __builtin_ia32_psrav8si (v8si,v8si)
40742     v4si __builtin_ia32_psrav4si (v4si,v4si)
40743     v8si __builtin_ia32_psrlv8si (v8si,v8si)
40744     v4si __builtin_ia32_psrlv4si (v4si,v4si)
40745     v4di __builtin_ia32_psrlv4di (v4di,v4di)
40746     v2di __builtin_ia32_psrlv2di (v2di,v2di)
40747     v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
40748     v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
40749     v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
40750     v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
40751     v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
40752     v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
40753     v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
40754     v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
40755     v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
40756     v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
40757     v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
40758     v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
40759     v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
40760     v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
40761     v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
40762     v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)
40763
40764 The following built-in functions are available when `-maes' is used.
40765All of them generate the machine instruction that is part of the name.
40766
40767     v2di __builtin_ia32_aesenc128 (v2di, v2di)
40768     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
40769     v2di __builtin_ia32_aesdec128 (v2di, v2di)
40770     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
40771     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
40772     v2di __builtin_ia32_aesimc128 (v2di)
40773
40774 The following built-in function is available when `-mpclmul' is used.
40775
40776`v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
40777     Generates the `pclmulqdq' machine instruction.
40778
40779 The following built-in function is available when `-mfsgsbase' is
40780used.  All of them generate the machine instruction that is part of the
40781name.
40782
40783     unsigned int __builtin_ia32_rdfsbase32 (void)
40784     unsigned long long __builtin_ia32_rdfsbase64 (void)
40785     unsigned int __builtin_ia32_rdgsbase32 (void)
40786     unsigned long long __builtin_ia32_rdgsbase64 (void)
40787     void _writefsbase_u32 (unsigned int)
40788     void _writefsbase_u64 (unsigned long long)
40789     void _writegsbase_u32 (unsigned int)
40790     void _writegsbase_u64 (unsigned long long)
40791
40792 The following built-in function is available when `-mrdrnd' is used.
40793All of them generate the machine instruction that is part of the name.
40794
40795     unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
40796     unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
40797     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)
40798
40799 The following built-in functions are available when `-msse4a' is used.
40800All of them generate the machine instruction that is part of the name.
40801
40802     void __builtin_ia32_movntsd (double *, v2df)
40803     void __builtin_ia32_movntss (float *, v4sf)
40804     v2di __builtin_ia32_extrq  (v2di, v16qi)
40805     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
40806     v2di __builtin_ia32_insertq (v2di, v2di)
40807     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)
40808
40809 The following built-in functions are available when `-mxop' is used.
40810     v2df __builtin_ia32_vfrczpd (v2df)
40811     v4sf __builtin_ia32_vfrczps (v4sf)
40812     v2df __builtin_ia32_vfrczsd (v2df)
40813     v4sf __builtin_ia32_vfrczss (v4sf)
40814     v4df __builtin_ia32_vfrczpd256 (v4df)
40815     v8sf __builtin_ia32_vfrczps256 (v8sf)
40816     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
40817     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
40818     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
40819     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
40820     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
40821     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
40822     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
40823     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
40824     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
40825     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
40826     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
40827     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
40828     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
40829     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
40830     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
40831     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
40832     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
40833     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
40834     v4si __builtin_ia32_vpcomequd (v4si, v4si)
40835     v2di __builtin_ia32_vpcomequq (v2di, v2di)
40836     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
40837     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
40838     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
40839     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
40840     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
40841     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
40842     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
40843     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
40844     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
40845     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
40846     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
40847     v4si __builtin_ia32_vpcomged (v4si, v4si)
40848     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
40849     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
40850     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
40851     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
40852     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
40853     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
40854     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
40855     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
40856     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
40857     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
40858     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
40859     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
40860     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
40861     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
40862     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
40863     v4si __builtin_ia32_vpcomled (v4si, v4si)
40864     v2di __builtin_ia32_vpcomleq (v2di, v2di)
40865     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
40866     v4si __builtin_ia32_vpcomleud (v4si, v4si)
40867     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
40868     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
40869     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
40870     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
40871     v4si __builtin_ia32_vpcomltd (v4si, v4si)
40872     v2di __builtin_ia32_vpcomltq (v2di, v2di)
40873     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
40874     v4si __builtin_ia32_vpcomltud (v4si, v4si)
40875     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
40876     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
40877     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
40878     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
40879     v4si __builtin_ia32_vpcomned (v4si, v4si)
40880     v2di __builtin_ia32_vpcomneq (v2di, v2di)
40881     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
40882     v4si __builtin_ia32_vpcomneud (v4si, v4si)
40883     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
40884     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
40885     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
40886     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
40887     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
40888     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
40889     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
40890     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
40891     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
40892     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
40893     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
40894     v4si __builtin_ia32_vphaddbd (v16qi)
40895     v2di __builtin_ia32_vphaddbq (v16qi)
40896     v8hi __builtin_ia32_vphaddbw (v16qi)
40897     v2di __builtin_ia32_vphadddq (v4si)
40898     v4si __builtin_ia32_vphaddubd (v16qi)
40899     v2di __builtin_ia32_vphaddubq (v16qi)
40900     v8hi __builtin_ia32_vphaddubw (v16qi)
40901     v2di __builtin_ia32_vphaddudq (v4si)
40902     v4si __builtin_ia32_vphadduwd (v8hi)
40903     v2di __builtin_ia32_vphadduwq (v8hi)
40904     v4si __builtin_ia32_vphaddwd (v8hi)
40905     v2di __builtin_ia32_vphaddwq (v8hi)
40906     v8hi __builtin_ia32_vphsubbw (v16qi)
40907     v2di __builtin_ia32_vphsubdq (v4si)
40908     v4si __builtin_ia32_vphsubwd (v8hi)
40909     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
40910     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
40911     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
40912     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
40913     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
40914     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
40915     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
40916     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
40917     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
40918     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
40919     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
40920     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
40921     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
40922     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
40923     v4si __builtin_ia32_vprotd (v4si, v4si)
40924     v2di __builtin_ia32_vprotq (v2di, v2di)
40925     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
40926     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
40927     v4si __builtin_ia32_vpshad (v4si, v4si)
40928     v2di __builtin_ia32_vpshaq (v2di, v2di)
40929     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
40930     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
40931     v4si __builtin_ia32_vpshld (v4si, v4si)
40932     v2di __builtin_ia32_vpshlq (v2di, v2di)
40933     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)
40934
40935 The following built-in functions are available when `-mfma4' is used.
40936All of them generate the machine instruction that is part of the name.
40937
40938     v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df)
40939     v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf)
40940     v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df)
40941     v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf)
40942     v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df)
40943     v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf)
40944     v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df)
40945     v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf)
40946     v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df)
40947     v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf)
40948     v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df)
40949     v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf)
40950     v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df)
40951     v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf)
40952     v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df)
40953     v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf)
40954     v2df __builtin_ia32_vfmaddsubpd  (v2df, v2df, v2df)
40955     v4sf __builtin_ia32_vfmaddsubps  (v4sf, v4sf, v4sf)
40956     v2df __builtin_ia32_vfmsubaddpd  (v2df, v2df, v2df)
40957     v4sf __builtin_ia32_vfmsubaddps  (v4sf, v4sf, v4sf)
40958     v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df)
40959     v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf)
40960     v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df)
40961     v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf)
40962     v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df)
40963     v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf)
40964     v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df)
40965     v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf)
40966     v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df)
40967     v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf)
40968     v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df)
40969     v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf)
40970
40971 The following built-in functions are available when `-mlwp' is used.
40972
40973     void __builtin_ia32_llwpcb16 (void *);
40974     void __builtin_ia32_llwpcb32 (void *);
40975     void __builtin_ia32_llwpcb64 (void *);
40976     void * __builtin_ia32_llwpcb16 (void);
40977     void * __builtin_ia32_llwpcb32 (void);
40978     void * __builtin_ia32_llwpcb64 (void);
40979     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
40980     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
40981     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
40982     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
40983     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
40984     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)
40985
40986 The following built-in functions are available when `-mbmi' is used.
40987All of them generate the machine instruction that is part of the name.
40988     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
40989     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);
40990
40991 The following built-in functions are available when `-mbmi2' is used.
40992All of them generate the machine instruction that is part of the name.
40993     unsigned int _bzhi_u32 (unsigned int, unsigned int)
40994     unsigned int _pdep_u32 (unsigned int, unsigned int)
40995     unsigned int _pext_u32 (unsigned int, unsigned int)
40996     unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
40997     unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
40998     unsigned long long _pext_u64 (unsigned long long, unsigned long long)
40999
41000 The following built-in functions are available when `-mlzcnt' is used.
41001All of them generate the machine instruction that is part of the name.
41002     unsigned short __builtin_ia32_lzcnt_16(unsigned short);
41003     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
41004     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);
41005
41006 The following built-in functions are available when `-mfxsr' is used.
41007All of them generate the machine instruction that is part of the name.
41008     void __builtin_ia32_fxsave (void *)
41009     void __builtin_ia32_fxrstor (void *)
41010     void __builtin_ia32_fxsave64 (void *)
41011     void __builtin_ia32_fxrstor64 (void *)
41012
41013 The following built-in functions are available when `-mxsave' is used.
41014All of them generate the machine instruction that is part of the name.
41015     void __builtin_ia32_xsave (void *, long long)
41016     void __builtin_ia32_xrstor (void *, long long)
41017     void __builtin_ia32_xsave64 (void *, long long)
41018     void __builtin_ia32_xrstor64 (void *, long long)
41019
41020 The following built-in functions are available when `-mxsaveopt' is
41021used.  All of them generate the machine instruction that is part of the
41022name.
41023     void __builtin_ia32_xsaveopt (void *, long long)
41024     void __builtin_ia32_xsaveopt64 (void *, long long)
41025
41026 The following built-in functions are available when `-mtbm' is used.
41027Both of them generate the immediate form of the bextr machine
41028instruction.
41029     unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int);
41030     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long);
41031
41032 The following built-in functions are available when `-m3dnow' is used.
41033All of them generate the machine instruction that is part of the name.
41034
41035     void __builtin_ia32_femms (void)
41036     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
41037     v2si __builtin_ia32_pf2id (v2sf)
41038     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
41039     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
41040     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
41041     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
41042     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
41043     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
41044     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
41045     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
41046     v2sf __builtin_ia32_pfrcp (v2sf)
41047     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
41048     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
41049     v2sf __builtin_ia32_pfrsqrt (v2sf)
41050     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
41051     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
41052     v2sf __builtin_ia32_pi2fd (v2si)
41053     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
41054
41055 The following built-in functions are available when both `-m3dnow' and
41056`-march=athlon' are used.  All of them generate the machine instruction
41057that is part of the name.
41058
41059     v2si __builtin_ia32_pf2iw (v2sf)
41060     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
41061     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
41062     v2sf __builtin_ia32_pi2fw (v2si)
41063     v2sf __builtin_ia32_pswapdsf (v2sf)
41064     v2si __builtin_ia32_pswapdsi (v2si)
41065
41066 The following built-in functions are available when `-mrtm' is used
41067They are used for restricted transactional memory. These are the
41068internal low level functions. Normally the functions in *Note x86
41069transactional memory intrinsics:: should be used instead.
41070
41071     int __builtin_ia32_xbegin ()
41072     void __builtin_ia32_xend ()
41073     void __builtin_ia32_xabort (status)
41074     int __builtin_ia32_xtest ()
41075
41076 The following built-in functions are available when `-mmwaitx' is used.
41077All of them generate the machine instruction that is part of the name.
41078     void __builtin_ia32_monitorx (void *, unsigned int, unsigned int)
41079     void __builtin_ia32_mwaitx (unsigned int, unsigned int, unsigned int)
41080
41081
41082File: gcc.info,  Node: x86 transactional memory intrinsics,  Prev: x86 Built-in Functions,  Up: Target Builtins
41083
410846.58.31 x86 Transactional Memory Intrinsics
41085-------------------------------------------
41086
41087These hardware transactional memory intrinsics for x86 allow you to use
41088memory transactions with RTM (Restricted Transactional Memory).  This
41089support is enabled with the `-mrtm' option.  For using HLE (Hardware
41090Lock Elision) see *Note x86 specific memory model extensions for
41091transactional memory:: instead.
41092
41093 A memory transaction commits all changes to memory in an atomic way,
41094as visible to other threads. If the transaction fails it is rolled back
41095and all side effects discarded.
41096
41097 Generally there is no guarantee that a memory transaction ever succeeds
41098and suitable fallback code always needs to be supplied.
41099
41100 -- RTM Function: unsigned _xbegin ()
41101     Start a RTM (Restricted Transactional Memory) transaction.
41102     Returns `_XBEGIN_STARTED' when the transaction started
41103     successfully (note this is not 0, so the constant has to be
41104     explicitly tested).
41105
41106     If the transaction aborts, all side-effects are undone and an
41107     abort code encoded as a bit mask is returned.  The following
41108     macros are defined:
41109
41110    `_XABORT_EXPLICIT'
41111          Transaction was explicitly aborted with `_xabort'.  The
41112          parameter passed to `_xabort' is available with
41113          `_XABORT_CODE(status)'.
41114
41115    `_XABORT_RETRY'
41116          Transaction retry is possible.
41117
41118    `_XABORT_CONFLICT'
41119          Transaction abort due to a memory conflict with another
41120          thread.
41121
41122    `_XABORT_CAPACITY'
41123          Transaction abort due to the transaction using too much
41124          memory.
41125
41126    `_XABORT_DEBUG'
41127          Transaction abort due to a debug trap.
41128
41129    `_XABORT_NESTED'
41130          Transaction abort in an inner nested transaction.
41131
41132     There is no guarantee any transaction ever succeeds, so there
41133     always needs to be a valid fallback path.
41134
41135 -- RTM Function: void _xend ()
41136     Commit the current transaction. When no transaction is active this
41137     faults.  All memory side-effects of the transaction become visible
41138     to other threads in an atomic manner.
41139
41140 -- RTM Function: int _xtest ()
41141     Return a nonzero value if a transaction is currently active,
41142     otherwise 0.
41143
41144 -- RTM Function: void _xabort (status)
41145     Abort the current transaction. When no transaction is active this
41146     is a no-op.  The STATUS is an 8-bit constant; its value is encoded
41147     in the return value from `_xbegin'.
41148
41149 Here is an example showing handling for `_XABORT_RETRY' and a fallback
41150path for other failures:
41151
41152     #include <immintrin.h>
41153
41154     int n_tries, max_tries;
41155     unsigned status = _XABORT_EXPLICIT;
41156     ...
41157
41158     for (n_tries = 0; n_tries < max_tries; n_tries++)
41159       {
41160         status = _xbegin ();
41161         if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY))
41162           break;
41163       }
41164     if (status == _XBEGIN_STARTED)
41165       {
41166         ... transaction code...
41167         _xend ();
41168       }
41169     else
41170       {
41171         ... non-transactional fallback path...
41172       }
41173
41174Note that, in most cases, the transactional and non-transactional code
41175must synchronize together to ensure consistency.
41176
41177
41178File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
41179
411806.59 Format Checks Specific to Particular Target Machines
41181=========================================================
41182
41183For some target machines, GCC supports additional options to the format
41184attribute (*note Declaring Attributes of Functions: Function
41185Attributes.).
41186
41187* Menu:
41188
41189* Solaris Format Checks::
41190* Darwin Format Checks::
41191
41192
41193File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks
41194
411956.59.1 Solaris Format Checks
41196----------------------------
41197
41198Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
41199`cmn_err' accepts a subset of the standard `printf' conversions, and
41200the two-argument `%b' conversion for displaying bit-fields.  See the
41201Solaris man page for `cmn_err' for more information.
41202
41203
41204File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks
41205
412066.59.2 Darwin Format Checks
41207---------------------------
41208
41209Darwin targets support the `CFString' (or `__CFString__') in the format
41210attribute context.  Declarations made with such attribution are parsed
41211for correct syntax and format argument types.  However, parsing of the
41212format string itself is currently undefined and is not carried out by
41213this version of the compiler.
41214
41215 Additionally, `CFStringRefs' (defined by the `CoreFoundation' headers)
41216may also be used as format arguments.  Note that the relevant headers
41217are only likely to be available on Darwin (OSX) installations.  On such
41218installations, the XCode and system documentation provide descriptions
41219of `CFString', `CFStringRefs' and associated functions.
41220
41221
41222File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
41223
412246.60 Pragmas Accepted by GCC
41225============================
41226
41227GCC supports several types of pragmas, primarily in order to compile
41228code originally written for other compilers.  Note that in general we
41229do not recommend the use of pragmas; *Note Function Attributes::, for
41230further explanation.
41231
41232* Menu:
41233
41234* ARM Pragmas::
41235* M32C Pragmas::
41236* MeP Pragmas::
41237* RS/6000 and PowerPC Pragmas::
41238* Darwin Pragmas::
41239* Solaris Pragmas::
41240* Symbol-Renaming Pragmas::
41241* Structure-Packing Pragmas::
41242* Weak Pragmas::
41243* Diagnostic Pragmas::
41244* Visibility Pragmas::
41245* Push/Pop Macro Pragmas::
41246* Function Specific Option Pragmas::
41247* Loop-Specific Pragmas::
41248
41249
41250File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
41251
412526.60.1 ARM Pragmas
41253------------------
41254
41255The ARM target defines pragmas for controlling the default addition of
41256`long_call' and `short_call' attributes to functions.  *Note Function
41257Attributes::, for information about the effects of these attributes.
41258
41259`long_calls'
41260     Set all subsequent functions to have the `long_call' attribute.
41261
41262`no_long_calls'
41263     Set all subsequent functions to have the `short_call' attribute.
41264
41265`long_calls_off'
41266     Do not affect the `long_call' or `short_call' attributes of
41267     subsequent functions.
41268
41269
41270File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
41271
412726.60.2 M32C Pragmas
41273-------------------
41274
41275`GCC memregs NUMBER'
41276     Overrides the command-line option `-memregs=' for the current
41277     file.  Use with care!  This pragma must be before any function in
41278     the file, and mixing different memregs values in different objects
41279     may make them incompatible.  This pragma is useful when a
41280     performance-critical function uses a memreg for temporary values,
41281     as it may allow you to reduce the number of memregs used.
41282
41283`ADDRESS NAME ADDRESS'
41284     For any declared symbols matching NAME, this does three things to
41285     that symbol: it forces the symbol to be located at the given
41286     address (a number), it forces the symbol to be volatile, and it
41287     changes the symbol's scope to be static.  This pragma exists for
41288     compatibility with other compilers, but note that the common
41289     `1234H' numeric syntax is not supported (use `0x1234' instead).
41290     Example:
41291
41292          #pragma ADDRESS port3 0x103
41293          char port3;
41294
41295
41296
41297File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
41298
412996.60.3 MeP Pragmas
41300------------------
41301
41302`custom io_volatile (on|off)'
41303     Overrides the command-line option `-mio-volatile' for the current
41304     file.  Note that for compatibility with future GCC releases, this
41305     option should only be used once before any `io' variables in each
41306     file.
41307
41308`GCC coprocessor available REGISTERS'
41309     Specifies which coprocessor registers are available to the register
41310     allocator.  REGISTERS may be a single register, register range
41311     separated by ellipses, or comma-separated list of those.  Example:
41312
41313          #pragma GCC coprocessor available $c0...$c10, $c28
41314
41315`GCC coprocessor call_saved REGISTERS'
41316     Specifies which coprocessor registers are to be saved and restored
41317     by any function using them.  REGISTERS may be a single register,
41318     register range separated by ellipses, or comma-separated list of
41319     those.  Example:
41320
41321          #pragma GCC coprocessor call_saved $c4...$c6, $c31
41322
41323`GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
41324     Creates and defines a register class.  These register classes can
41325     be used by inline `asm' constructs.  REGISTERS may be a single
41326     register, register range separated by ellipses, or comma-separated
41327     list of those.  Example:
41328
41329          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6
41330
41331          asm ("cpfoo %0" : "=B" (x));
41332
41333`GCC disinterrupt NAME , NAME ...'
41334     For the named functions, the compiler adds code to disable
41335     interrupts for the duration of those functions.  If any functions
41336     so named are not encountered in the source, a warning is emitted
41337     that the pragma is not used.  Examples:
41338
41339          #pragma disinterrupt foo
41340          #pragma disinterrupt bar, grill
41341          int foo () { ... }
41342
41343`GCC call NAME , NAME ...'
41344     For the named functions, the compiler always uses a
41345     register-indirect call model when calling the named functions.
41346     Examples:
41347
41348          extern int foo ();
41349          #pragma call foo
41350
41351
41352
41353File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas
41354
413556.60.4 RS/6000 and PowerPC Pragmas
41356----------------------------------
41357
41358The RS/6000 and PowerPC targets define one pragma for controlling
41359whether or not the `longcall' attribute is added to function
41360declarations by default.  This pragma overrides the `-mlongcall'
41361option, but not the `longcall' and `shortcall' attributes.  *Note
41362RS/6000 and PowerPC Options::, for more information about when long
41363calls are and are not necessary.
41364
41365`longcall (1)'
41366     Apply the `longcall' attribute to all subsequent function
41367     declarations.
41368
41369`longcall (0)'
41370     Do not apply the `longcall' attribute to subsequent function
41371     declarations.
41372
41373
41374File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
41375
413766.60.5 Darwin Pragmas
41377---------------------
41378
41379The following pragmas are available for all architectures running the
41380Darwin operating system.  These are useful for compatibility with other
41381Mac OS compilers.
41382
41383`mark TOKENS...'
41384     This pragma is accepted, but has no effect.
41385
41386`options align=ALIGNMENT'
41387     This pragma sets the alignment of fields in structures.  The
41388     values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
41389     `power', to emulate PowerPC alignment.  Uses of this pragma nest
41390     properly; to restore the previous setting, use `reset' for the
41391     ALIGNMENT.
41392
41393`segment TOKENS...'
41394     This pragma is accepted, but has no effect.
41395
41396`unused (VAR [, VAR]...)'
41397     This pragma declares variables to be possibly unused.  GCC does not
41398     produce warnings for the listed variables.  The effect is similar
41399     to that of the `unused' attribute, except that this pragma may
41400     appear anywhere within the variables' scopes.
41401
41402
41403File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
41404
414056.60.6 Solaris Pragmas
41406----------------------
41407
41408The Solaris target supports `#pragma redefine_extname' (*note
41409Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
41410directives for compatibility with the system compiler.
41411
41412`align ALIGNMENT (VARIABLE [, VARIABLE]...)'
41413     Increase the minimum alignment of each VARIABLE to ALIGNMENT.
41414     This is the same as GCC's `aligned' attribute *note Variable
41415     Attributes::).  Macro expansion occurs on the arguments to this
41416     pragma when compiling C and Objective-C.  It does not currently
41417     occur when compiling C++, but this is a bug which may be fixed in
41418     a future release.
41419
41420`fini (FUNCTION [, FUNCTION]...)'
41421     This pragma causes each listed FUNCTION to be called after main,
41422     or during shared module unloading, by adding a call to the `.fini'
41423     section.
41424
41425`init (FUNCTION [, FUNCTION]...)'
41426     This pragma causes each listed FUNCTION to be called during
41427     initialization (before `main') or during shared module loading, by
41428     adding a call to the `.init' section.
41429
41430
41431
41432File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
41433
414346.60.7 Symbol-Renaming Pragmas
41435------------------------------
41436
41437GCC supports a `#pragma' directive that changes the name used in
41438assembly for a given declaration. While this pragma is supported on all
41439platforms, it is intended primarily to provide compatibility with the
41440Solaris system headers. This effect can also be achieved using the asm
41441labels extension (*note Asm Labels::).
41442
41443`redefine_extname OLDNAME NEWNAME'
41444     This pragma gives the C function OLDNAME the assembly symbol
41445     NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' is
41446     defined if this pragma is available (currently on all platforms).
41447
41448 This pragma and the asm labels extension interact in a complicated
41449manner.  Here are some corner cases you may want to be aware of:
41450
41451  1. This pragma silently applies only to declarations with external
41452     linkage.  Asm labels do not have this restriction.
41453
41454  2. In C++, this pragma silently applies only to declarations with "C"
41455     linkage.  Again, asm labels do not have this restriction.
41456
41457  3. If either of the ways of changing the assembly name of a
41458     declaration are applied to a declaration whose assembly name has
41459     already been determined (either by a previous use of one of these
41460     features, or because the compiler needed the assembly name in
41461     order to generate code), and the new name is different, a warning
41462     issues and the name does not change.
41463
41464  4. The OLDNAME used by `#pragma redefine_extname' is always the
41465     C-language name.
41466
41467
41468File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
41469
414706.60.8 Structure-Packing Pragmas
41471--------------------------------
41472
41473For compatibility with Microsoft Windows compilers, GCC supports a set
41474of `#pragma' directives that change the maximum alignment of members of
41475structures (other than zero-width bit-fields), unions, and classes
41476subsequently defined. The N value below always is required to be a
41477small power of two and specifies the new alignment in bytes.
41478
41479  1. `#pragma pack(N)' simply sets the new alignment.
41480
41481  2. `#pragma pack()' sets the alignment to the one that was in effect
41482     when compilation started (see also command-line option
41483     `-fpack-struct[=N]' *note Code Gen Options::).
41484
41485  3. `#pragma pack(push[,N])' pushes the current alignment setting on
41486     an internal stack and then optionally sets the new alignment.
41487
41488  4. `#pragma pack(pop)' restores the alignment setting to the one
41489     saved at the top of the internal stack (and removes that stack
41490     entry).  Note that `#pragma pack([N])' does not influence this
41491     internal stack; thus it is possible to have `#pragma pack(push)'
41492     followed by multiple `#pragma pack(N)' instances and finalized by
41493     a single `#pragma pack(pop)'.
41494
41495 Some targets, e.g. x86 and PowerPC, support the `ms_struct' `#pragma'
41496which lays out a structure as the documented `__attribute__
41497((ms_struct))'.
41498  1. `#pragma ms_struct on' turns on the layout for structures declared.
41499
41500  2. `#pragma ms_struct off' turns off the layout for structures
41501     declared.
41502
41503  3. `#pragma ms_struct reset' goes back to the default layout.
41504
41505
41506File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
41507
415086.60.9 Weak Pragmas
41509-------------------
41510
41511For compatibility with SVR4, GCC supports a set of `#pragma' directives
41512for declaring symbols to be weak, and defining weak aliases.
41513
41514`#pragma weak SYMBOL'
41515     This pragma declares SYMBOL to be weak, as if the declaration had
41516     the attribute of the same name.  The pragma may appear before or
41517     after the declaration of SYMBOL.  It is not an error for SYMBOL to
41518     never be defined at all.
41519
41520`#pragma weak SYMBOL1 = SYMBOL2'
41521     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
41522     an error if SYMBOL2 is not defined in the current translation unit.
41523
41524
41525File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
41526
415276.60.10 Diagnostic Pragmas
41528--------------------------
41529
41530GCC allows the user to selectively enable or disable certain types of
41531diagnostics, and change the kind of the diagnostic.  For example, a
41532project's policy might require that all sources compile with `-Werror'
41533but certain files might have exceptions allowing specific types of
41534warnings.  Or, a project might selectively enable diagnostics and treat
41535them as errors depending on which preprocessor macros are defined.
41536
41537`#pragma GCC diagnostic KIND OPTION'
41538     Modifies the disposition of a diagnostic.  Note that not all
41539     diagnostics are modifiable; at the moment only warnings (normally
41540     controlled by `-W...') can be controlled, and not all of them.
41541     Use `-fdiagnostics-show-option' to determine which diagnostics are
41542     controllable and which option controls them.
41543
41544     KIND is `error' to treat this diagnostic as an error, `warning' to
41545     treat it like a warning (even if `-Werror' is in effect), or
41546     `ignored' if the diagnostic is to be ignored.  OPTION is a double
41547     quoted string that matches the command-line option.
41548
41549          #pragma GCC diagnostic warning "-Wformat"
41550          #pragma GCC diagnostic error "-Wformat"
41551          #pragma GCC diagnostic ignored "-Wformat"
41552
41553     Note that these pragmas override any command-line options.  GCC
41554     keeps track of the location of each pragma, and issues diagnostics
41555     according to the state as of that point in the source file.  Thus,
41556     pragmas occurring after a line do not affect diagnostics caused by
41557     that line.
41558
41559`#pragma GCC diagnostic push'
41560`#pragma GCC diagnostic pop'
41561     Causes GCC to remember the state of the diagnostics as of each
41562     `push', and restore to that point at each `pop'.  If a `pop' has
41563     no matching `push', the command-line options are restored.
41564
41565          #pragma GCC diagnostic error "-Wuninitialized"
41566            foo(a);                       /* error is given for this one */
41567          #pragma GCC diagnostic push
41568          #pragma GCC diagnostic ignored "-Wuninitialized"
41569            foo(b);                       /* no diagnostic for this one */
41570          #pragma GCC diagnostic pop
41571            foo(c);                       /* error is given for this one */
41572          #pragma GCC diagnostic pop
41573            foo(d);                       /* depends on command-line options */
41574
41575
41576 GCC also offers a simple mechanism for printing messages during
41577compilation.
41578
41579`#pragma message STRING'
41580     Prints STRING as a compiler message on compilation.  The message
41581     is informational only, and is neither a compilation warning nor an
41582     error.
41583
41584          #pragma message "Compiling " __FILE__ "..."
41585
41586     STRING may be parenthesized, and is printed with location
41587     information.  For example,
41588
41589          #define DO_PRAGMA(x) _Pragma (#x)
41590          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))
41591
41592          TODO(Remember to fix this)
41593
41594     prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to
41595     fix this'.
41596
41597
41598
41599File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
41600
416016.60.11 Visibility Pragmas
41602--------------------------
41603
41604`#pragma GCC visibility push(VISIBILITY)'
41605`#pragma GCC visibility pop'
41606     This pragma allows the user to set the visibility for multiple
41607     declarations without having to give each a visibility attribute
41608     (*note Function Attributes::).
41609
41610     In C++, `#pragma GCC visibility' affects only namespace-scope
41611     declarations.  Class members and template specializations are not
41612     affected; if you want to override the visibility for a particular
41613     member or instantiation, you must use an attribute.
41614
41615
41616
41617File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas
41618
416196.60.12 Push/Pop Macro Pragmas
41620------------------------------
41621
41622For compatibility with Microsoft Windows compilers, GCC supports
41623`#pragma push_macro("MACRO_NAME")' and `#pragma
41624pop_macro("MACRO_NAME")'.
41625
41626`#pragma push_macro("MACRO_NAME")'
41627     This pragma saves the value of the macro named as MACRO_NAME to
41628     the top of the stack for this macro.
41629
41630`#pragma pop_macro("MACRO_NAME")'
41631     This pragma sets the value of the macro named as MACRO_NAME to the
41632     value on top of the stack for this macro. If the stack for
41633     MACRO_NAME is empty, the value of the macro remains unchanged.
41634
41635 For example:
41636
41637     #define X  1
41638     #pragma push_macro("X")
41639     #undef X
41640     #define X -1
41641     #pragma pop_macro("X")
41642     int x [X];
41643
41644In this example, the definition of X as 1 is saved by `#pragma
41645push_macro' and restored by `#pragma pop_macro'.
41646
41647
41648File: gcc.info,  Node: Function Specific Option Pragmas,  Next: Loop-Specific Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas
41649
416506.60.13 Function Specific Option Pragmas
41651----------------------------------------
41652
41653`#pragma GCC target ("STRING"...)'
41654     This pragma allows you to set target specific options for functions
41655     defined later in the source file.  One or more strings can be
41656     specified.  Each function that is defined after this point is as
41657     if `attribute((target("STRING")))' was specified for that
41658     function.  The parenthesis around the options is optional.  *Note
41659     Function Attributes::, for more information about the `target'
41660     attribute and the attribute syntax.
41661
41662     The `#pragma GCC target' pragma is presently implemented for x86,
41663     PowerPC, and Nios II targets only.
41664
41665`#pragma GCC optimize ("STRING"...)'
41666     This pragma allows you to set global optimization options for
41667     functions defined later in the source file.  One or more strings
41668     can be specified.  Each function that is defined after this point
41669     is as if `attribute((optimize("STRING")))' was specified for that
41670     function.  The parenthesis around the options is optional.  *Note
41671     Function Attributes::, for more information about the `optimize'
41672     attribute and the attribute syntax.
41673
41674`#pragma GCC push_options'
41675`#pragma GCC pop_options'
41676     These pragmas maintain a stack of the current target and
41677     optimization options.  It is intended for include files where you
41678     temporarily want to switch to using a different `#pragma GCC
41679     target' or `#pragma GCC optimize' and then to pop back to the
41680     previous options.
41681
41682`#pragma GCC reset_options'
41683     This pragma clears the current `#pragma GCC target' and `#pragma
41684     GCC optimize' to use the default switches as specified on the
41685     command line.
41686
41687
41688File: gcc.info,  Node: Loop-Specific Pragmas,  Prev: Function Specific Option Pragmas,  Up: Pragmas
41689
416906.60.14 Loop-Specific Pragmas
41691-----------------------------
41692
41693`#pragma GCC ivdep'
41694
41695 With this pragma, the programmer asserts that there are no loop-carried
41696dependencies which would prevent consecutive iterations of the
41697following loop from executing concurrently with SIMD (single
41698instruction multiple data) instructions.
41699
41700 For example, the compiler can only unconditionally vectorize the
41701following loop with the pragma:
41702
41703     void foo (int n, int *a, int *b, int *c)
41704     {
41705       int i, j;
41706     #pragma GCC ivdep
41707       for (i = 0; i < n; ++i)
41708         a[i] = b[i] + c[i];
41709     }
41710
41711In this example, using the `restrict' qualifier had the same effect. In
41712the following example, that would not be possible. Assume k < -m or k
41713>= m. Only with the pragma, the compiler knows that it can
41714unconditionally vectorize the following loop:
41715
41716     void ignore_vec_dep (int *a, int k, int c, int m)
41717     {
41718     #pragma GCC ivdep
41719       for (int i = 0; i < m; i++)
41720         a[i] = a[i + k] * c;
41721     }
41722
41723
41724File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
41725
417266.61 Unnamed Structure and Union Fields
41727=======================================
41728
41729As permitted by ISO C11 and for compatibility with other compilers, GCC
41730allows you to define a structure or union that contains, as fields,
41731structures and unions without names.  For example:
41732
41733     struct {
41734       int a;
41735       union {
41736         int b;
41737         float c;
41738       };
41739       int d;
41740     } foo;
41741
41742In this example, you are able to access members of the unnamed union
41743with code like `foo.b'.  Note that only unnamed structs and unions are
41744allowed, you may not have, for example, an unnamed `int'.
41745
41746 You must never create such structures that cause ambiguous field
41747definitions.  For example, in this structure:
41748
41749     struct {
41750       int a;
41751       struct {
41752         int a;
41753       };
41754     } foo;
41755
41756it is ambiguous which `a' is being referred to with `foo.a'.  The
41757compiler gives errors for such constructs.
41758
41759 Unless `-fms-extensions' is used, the unnamed field must be a
41760structure or union definition without a tag (for example, `struct { int
41761a; };').  If `-fms-extensions' is used, the field may also be a
41762definition with a tag such as `struct foo { int a; };', a reference to
41763a previously defined structure or union such as `struct foo;', or a
41764reference to a `typedef' name for a previously defined structure or
41765union type.
41766
41767 The option `-fplan9-extensions' enables `-fms-extensions' as well as
41768two other extensions.  First, a pointer to a structure is automatically
41769converted to a pointer to an anonymous field for assignments and
41770function calls.  For example:
41771
41772     struct s1 { int a; };
41773     struct s2 { struct s1; };
41774     extern void f1 (struct s1 *);
41775     void f2 (struct s2 *p) { f1 (p); }
41776
41777In the call to `f1' inside `f2', the pointer `p' is converted into a
41778pointer to the anonymous field.
41779
41780 Second, when the type of an anonymous field is a `typedef' for a
41781`struct' or `union', code may refer to the field using the name of the
41782`typedef'.
41783
41784     typedef struct { int a; } s1;
41785     struct s2 { s1; };
41786     s1 f1 (struct s2 *p) { return p->s1; }
41787
41788 These usages are only permitted when they are not ambiguous.
41789
41790
41791File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions
41792
417936.62 Thread-Local Storage
41794=========================
41795
41796Thread-local storage (TLS) is a mechanism by which variables are
41797allocated such that there is one instance of the variable per extant
41798thread.  The runtime model GCC uses to implement this originates in the
41799IA-64 processor-specific ABI, but has since been migrated to other
41800processors as well.  It requires significant support from the linker
41801(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
41802`libpthread.so'), so it is not available everywhere.
41803
41804 At the user level, the extension is visible with a new storage class
41805keyword: `__thread'.  For example:
41806
41807     __thread int i;
41808     extern __thread struct state s;
41809     static __thread char *p;
41810
41811 The `__thread' specifier may be used alone, with the `extern' or
41812`static' specifiers, but with no other storage class specifier.  When
41813used with `extern' or `static', `__thread' must appear immediately
41814after the other storage class specifier.
41815
41816 The `__thread' specifier may be applied to any global, file-scoped
41817static, function-scoped static, or static data member of a class.  It
41818may not be applied to block-scoped automatic or non-static data member.
41819
41820 When the address-of operator is applied to a thread-local variable, it
41821is evaluated at run time and returns the address of the current thread's
41822instance of that variable.  An address so obtained may be used by any
41823thread.  When a thread terminates, any pointers to thread-local
41824variables in that thread become invalid.
41825
41826 No static initialization may refer to the address of a thread-local
41827variable.
41828
41829 In C++, if an initializer is present for a thread-local variable, it
41830must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
41831standard.
41832
41833 See ELF Handling For Thread-Local Storage
41834(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
41835the four thread-local storage addressing models, and how the runtime is
41836expected to function.
41837
41838* Menu:
41839
41840* C99 Thread-Local Edits::
41841* C++98 Thread-Local Edits::
41842
41843
41844File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
41845
418466.62.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
41847-------------------------------------------------------
41848
41849The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
41850document the exact semantics of the language extension.
41851
41852   * `5.1.2  Execution environments'
41853
41854     Add new text after paragraph 1
41855
41856          Within either execution environment, a "thread" is a flow of
41857          control within a program.  It is implementation defined
41858          whether or not there may be more than one thread associated
41859          with a program.  It is implementation defined how threads
41860          beyond the first are created, the name and type of the
41861          function called at thread startup, and how threads may be
41862          terminated.  However, objects with thread storage duration
41863          shall be initialized before thread startup.
41864
41865   * `6.2.4  Storage durations of objects'
41866
41867     Add new text before paragraph 3
41868
41869          An object whose identifier is declared with the storage-class
41870          specifier `__thread' has "thread storage duration".  Its
41871          lifetime is the entire execution of the thread, and its
41872          stored value is initialized only once, prior to thread
41873          startup.
41874
41875   * `6.4.1  Keywords'
41876
41877     Add `__thread'.
41878
41879   * `6.7.1  Storage-class specifiers'
41880
41881     Add `__thread' to the list of storage class specifiers in
41882     paragraph 1.
41883
41884     Change paragraph 2 to
41885
41886          With the exception of `__thread', at most one storage-class
41887          specifier may be given [...].  The `__thread' specifier may
41888          be used alone, or immediately following `extern' or `static'.
41889
41890     Add new text after paragraph 6
41891
41892          The declaration of an identifier for a variable that has
41893          block scope that specifies `__thread' shall also specify
41894          either `extern' or `static'.
41895
41896          The `__thread' specifier shall be used only with variables.
41897
41898
41899File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
41900
419016.62.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
41902--------------------------------------------------------
41903
41904The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
41905that document the exact semantics of the language extension.
41906
41907   * [intro.execution]
41908
41909     New text after paragraph 4
41910
41911          A "thread" is a flow of control within the abstract machine.
41912          It is implementation defined whether or not there may be more
41913          than one thread.
41914
41915     New text after paragraph 7
41916
41917          It is unspecified whether additional action must be taken to
41918          ensure when and whether side effects are visible to other
41919          threads.
41920
41921   * [lex.key]
41922
41923     Add `__thread'.
41924
41925   * [basic.start.main]
41926
41927     Add after paragraph 5
41928
41929          The thread that begins execution at the `main' function is
41930          called the "main thread".  It is implementation defined how
41931          functions beginning threads other than the main thread are
41932          designated or typed.  A function so designated, as well as
41933          the `main' function, is called a "thread startup function".
41934          It is implementation defined what happens if a thread startup
41935          function returns.  It is implementation defined what happens
41936          to other threads when any thread calls `exit'.
41937
41938   * [basic.start.init]
41939
41940     Add after paragraph 4
41941
41942          The storage for an object of thread storage duration shall be
41943          statically initialized before the first statement of the
41944          thread startup function.  An object of thread storage
41945          duration shall not require dynamic initialization.
41946
41947   * [basic.start.term]
41948
41949     Add after paragraph 3
41950
41951          The type of an object with thread storage duration shall not
41952          have a non-trivial destructor, nor shall it be an array type
41953          whose elements (directly or indirectly) have non-trivial
41954          destructors.
41955
41956   * [basic.stc]
41957
41958     Add "thread storage duration" to the list in paragraph 1.
41959
41960     Change paragraph 2
41961
41962          Thread, static, and automatic storage durations are
41963          associated with objects introduced by declarations [...].
41964
41965     Add `__thread' to the list of specifiers in paragraph 3.
41966
41967   * [basic.stc.thread]
41968
41969     New section before [basic.stc.static]
41970
41971          The keyword `__thread' applied to a non-local object gives the
41972          object thread storage duration.
41973
41974          A local variable or class data member declared both `static'
41975          and `__thread' gives the variable or member thread storage
41976          duration.
41977
41978   * [basic.stc.static]
41979
41980     Change paragraph 1
41981
41982          All objects that have neither thread storage duration, dynamic
41983          storage duration nor are local [...].
41984
41985   * [dcl.stc]
41986
41987     Add `__thread' to the list in paragraph 1.
41988
41989     Change paragraph 1
41990
41991          With the exception of `__thread', at most one
41992          STORAGE-CLASS-SPECIFIER shall appear in a given
41993          DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
41994          alone, or immediately following the `extern' or `static'
41995          specifiers.  [...]
41996
41997     Add after paragraph 5
41998
41999          The `__thread' specifier can be applied only to the names of
42000          objects and to anonymous unions.
42001
42002   * [class.mem]
42003
42004     Add after paragraph 6
42005
42006          Non-`static' members shall not be `__thread'.
42007
42008
42009File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions
42010
420116.63 Binary Constants using the `0b' Prefix
42012===========================================
42013
42014Integer constants can be written as binary constants, consisting of a
42015sequence of `0' and `1' digits, prefixed by `0b' or `0B'.  This is
42016particularly useful in environments that operate a lot on the bit level
42017(like microcontrollers).
42018
42019 The following statements are identical:
42020
42021     i =       42;
42022     i =     0x2a;
42023     i =      052;
42024     i = 0b101010;
42025
42026 The type of these constants follows the same rules as for octal or
42027hexadecimal integer constants, so suffixes like `L' or `UL' can be
42028applied.
42029
42030
42031File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
42032
420337 Extensions to the C++ Language
42034********************************
42035
42036The GNU compiler provides these extensions to the C++ language (and you
42037can also use most of the C language extensions in your C++ programs).
42038If you want to write code that checks whether these features are
42039available, you can test for the GNU compiler the same way as for C
42040programs: check for a predefined macro `__GNUC__'.  You can also use
42041`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
42042(cpp)Common Predefined Macros.).
42043
42044* Menu:
42045
42046* C++ Volatiles::       What constitutes an access to a volatile object.
42047* Restricted Pointers:: C99 restricted pointers and references.
42048* Vague Linkage::       Where G++ puts inlines, vtables and such.
42049* C++ Interface::       You can use a single C++ header file for both
42050                        declarations and definitions.
42051* Template Instantiation:: Methods for ensuring that exactly one copy of
42052                        each needed template instantiation is emitted.
42053* Bound member functions:: You can extract a function pointer to the
42054                        method denoted by a `->*' or `.*' expression.
42055* C++ Attributes::      Variable, function, and type attributes for C++ only.
42056* Function Multiversioning::   Declaring multiple function versions.
42057* Namespace Association:: Strong using-directives for namespace association.
42058* Type Traits::         Compiler support for type traits
42059* Java Exceptions::     Tweaking exception handling to work with Java.
42060* Deprecated Features:: Things will disappear from G++.
42061* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
42062
42063
42064File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
42065
420667.1 When is a Volatile C++ Object Accessed?
42067===========================================
42068
42069The C++ standard differs from the C standard in its treatment of
42070volatile objects.  It fails to specify what constitutes a volatile
42071access, except to say that C++ should behave in a similar manner to C
42072with respect to volatiles, where possible.  However, the different
42073lvalueness of expressions between C and C++ complicate the behavior.
42074G++ behaves the same as GCC for volatile access, *Note Volatiles: C
42075Extensions, for a description of GCC's behavior.
42076
42077 The C and C++ language specifications differ when an object is
42078accessed in a void context:
42079
42080     volatile int *src = SOMEVALUE;
42081     *src;
42082
42083 The C++ standard specifies that such expressions do not undergo lvalue
42084to rvalue conversion, and that the type of the dereferenced object may
42085be incomplete.  The C++ standard does not specify explicitly that it is
42086lvalue to rvalue conversion that is responsible for causing an access.
42087There is reason to believe that it is, because otherwise certain simple
42088expressions become undefined.  However, because it would surprise most
42089programmers, G++ treats dereferencing a pointer to volatile object of
42090complete type as GCC would do for an equivalent type in C.  When the
42091object has incomplete type, G++ issues a warning; if you wish to force
42092an error, you must force a conversion to rvalue with, for instance, a
42093static cast.
42094
42095 When using a reference to volatile, G++ does not treat equivalent
42096expressions as accesses to volatiles, but instead issues a warning that
42097no volatile is accessed.  The rationale for this is that otherwise it
42098becomes difficult to determine where volatile access occur, and not
42099possible to ignore the return value from functions returning volatile
42100references.  Again, if you wish to force a read, cast the reference to
42101an rvalue.
42102
42103 G++ implements the same behavior as GCC does when assigning to a
42104volatile object--there is no reread of the assigned-to object, the
42105assigned rvalue is reused.  Note that in C++ assignment expressions are
42106lvalues, and if used as an lvalue, the volatile object is referred to.
42107For instance, VREF refers to VOBJ, as expected, in the following
42108example:
42109
42110     volatile int vobj;
42111     volatile int &vref = vobj = SOMETHING;
42112
42113
42114File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions
42115
421167.2 Restricting Pointer Aliasing
42117================================
42118
42119As with the C front end, G++ understands the C99 feature of restricted
42120pointers, specified with the `__restrict__', or `__restrict' type
42121qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
42122language flag, `restrict' is not a keyword in C++.
42123
42124 In addition to allowing restricted pointers, you can specify restricted
42125references, which indicate that the reference is not aliased in the
42126local context.
42127
42128     void fn (int *__restrict__ rptr, int &__restrict__ rref)
42129     {
42130       /* ... */
42131     }
42132
42133In the body of `fn', RPTR points to an unaliased integer and RREF
42134refers to a (different) unaliased integer.
42135
42136 You may also specify whether a member function's THIS pointer is
42137unaliased by using `__restrict__' as a member function qualifier.
42138
42139     void T::fn () __restrict__
42140     {
42141       /* ... */
42142     }
42143
42144Within the body of `T::fn', THIS has the effective definition `T
42145*__restrict__ const this'.  Notice that the interpretation of a
42146`__restrict__' member function qualifier is different to that of
42147`const' or `volatile' qualifier, in that it is applied to the pointer
42148rather than the object.  This is consistent with other compilers that
42149implement restricted pointers.
42150
42151 As with all outermost parameter qualifiers, `__restrict__' is ignored
42152in function definition matching.  This means you only need to specify
42153`__restrict__' in a function definition, rather than in a function
42154prototype as well.
42155
42156
42157File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
42158
421597.3 Vague Linkage
42160=================
42161
42162There are several constructs in C++ that require space in the object
42163file but are not clearly tied to a single translation unit.  We say that
42164these constructs have "vague linkage".  Typically such constructs are
42165emitted wherever they are needed, though sometimes we can be more
42166clever.
42167
42168Inline Functions
42169     Inline functions are typically defined in a header file which can
42170     be included in many different compilations.  Hopefully they can
42171     usually be inlined, but sometimes an out-of-line copy is
42172     necessary, if the address of the function is taken or if inlining
42173     fails.  In general, we emit an out-of-line copy in all translation
42174     units where one is needed.  As an exception, we only emit inline
42175     virtual functions with the vtable, since it always requires a copy.
42176
42177     Local static variables and string constants used in an inline
42178     function are also considered to have vague linkage, since they
42179     must be shared between all inlined and out-of-line instances of
42180     the function.
42181
42182VTables
42183     C++ virtual functions are implemented in most compilers using a
42184     lookup table, known as a vtable.  The vtable contains pointers to
42185     the virtual functions provided by a class, and each object of the
42186     class contains a pointer to its vtable (or vtables, in some
42187     multiple-inheritance situations).  If the class declares any
42188     non-inline, non-pure virtual functions, the first one is chosen as
42189     the "key method" for the class, and the vtable is only emitted in
42190     the translation unit where the key method is defined.
42191
42192     _Note:_ If the chosen key method is later defined as inline, the
42193     vtable is still emitted in every translation unit that defines it.
42194     Make sure that any inline virtuals are declared inline in the class
42195     body, even if they are not defined there.
42196
42197`type_info' objects
42198     C++ requires information about types to be written out in order to
42199     implement `dynamic_cast', `typeid' and exception handling.  For
42200     polymorphic classes (classes with virtual functions), the
42201     `type_info' object is written out along with the vtable so that
42202     `dynamic_cast' can determine the dynamic type of a class object at
42203     run time.  For all other types, we write out the `type_info'
42204     object when it is used: when applying `typeid' to an expression,
42205     throwing an object, or referring to a type in a catch clause or
42206     exception specification.
42207
42208Template Instantiations
42209     Most everything in this section also applies to template
42210     instantiations, but there are other options as well.  *Note
42211     Where's the Template?: Template Instantiation.
42212
42213
42214 When used with GNU ld version 2.8 or later on an ELF system such as
42215GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
42216these constructs will be discarded at link time.  This is known as
42217COMDAT support.
42218
42219 On targets that don't support COMDAT, but do support weak symbols, GCC
42220uses them.  This way one copy overrides all the others, but the unused
42221copies still take up space in the executable.
42222
42223 For targets that do not support either COMDAT or weak symbols, most
42224entities with vague linkage are emitted as local symbols to avoid
42225duplicate definition errors from the linker.  This does not happen for
42226local statics in inlines, however, as having multiple copies almost
42227certainly breaks things.
42228
42229 *Note Declarations and Definitions in One Header: C++ Interface, for
42230another way to control placement of these constructs.
42231
42232
42233File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
42234
422357.4 C++ Interface and Implementation Pragmas
42236============================================
42237
42238`#pragma interface' and `#pragma implementation' provide the user with
42239a way of explicitly directing the compiler to emit entities with vague
42240linkage (and debugging information) in a particular translation unit.
42241
42242 _Note:_ These `#pragma's have been superceded as of GCC 2.7.2 by
42243COMDAT support and the "key method" heuristic mentioned in *Note Vague
42244Linkage::.  Using them can actually cause your program to grow due to
42245unnecessary out-of-line copies of inline functions.
42246
42247`#pragma interface'
42248`#pragma interface "SUBDIR/OBJECTS.h"'
42249     Use this directive in _header files_ that define object classes,
42250     to save space in most of the object files that use those classes.
42251     Normally, local copies of certain information (backup copies of
42252     inline member functions, debugging information, and the internal
42253     tables that implement virtual functions) must be kept in each
42254     object file that includes class definitions.  You can use this
42255     pragma to avoid such duplication.  When a header file containing
42256     `#pragma interface' is included in a compilation, this auxiliary
42257     information is not generated (unless the main input source file
42258     itself uses `#pragma implementation').  Instead, the object files
42259     contain references to be resolved at link time.
42260
42261     The second form of this directive is useful for the case where you
42262     have multiple headers with the same name in different directories.
42263     If you use this form, you must specify the same string to `#pragma
42264     implementation'.
42265
42266`#pragma implementation'
42267`#pragma implementation "OBJECTS.h"'
42268     Use this pragma in a _main input file_, when you want full output
42269     from included header files to be generated (and made globally
42270     visible).  The included header file, in turn, should use `#pragma
42271     interface'.  Backup copies of inline member functions, debugging
42272     information, and the internal tables used to implement virtual
42273     functions are all generated in implementation files.
42274
42275     If you use `#pragma implementation' with no argument, it applies to
42276     an include file with the same basename(1) as your source file.
42277     For example, in `allclass.cc', giving just `#pragma implementation'
42278     by itself is equivalent to `#pragma implementation "allclass.h"'.
42279
42280     Use the string argument if you want a single implementation file to
42281     include code from multiple header files.  (You must also use
42282     `#include' to include the header file; `#pragma implementation'
42283     only specifies how to use the file--it doesn't actually include
42284     it.)
42285
42286     There is no way to split up the contents of a single header file
42287     into multiple implementation files.
42288
42289 `#pragma implementation' and `#pragma interface' also have an effect
42290on function inlining.
42291
42292 If you define a class in a header file marked with `#pragma
42293interface', the effect on an inline function defined in that class is
42294similar to an explicit `extern' declaration--the compiler emits no code
42295at all to define an independent version of the function.  Its
42296definition is used only for inlining with its callers.
42297
42298 Conversely, when you include the same header file in a main source file
42299that declares it as `#pragma implementation', the compiler emits code
42300for the function itself; this defines a version of the function that
42301can be found via pointers (or by callers compiled without inlining).
42302If all calls to the function can be inlined, you can avoid emitting the
42303function by compiling with `-fno-implement-inlines'.  If any calls are
42304not inlined, you will get linker errors.
42305
42306 ---------- Footnotes ----------
42307
42308 (1) A file's "basename" is the name stripped of all leading path
42309information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
42310
42311
42312File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
42313
423147.5 Where's the Template?
42315=========================
42316
42317C++ templates are the first language feature to require more
42318intelligence from the environment than one usually finds on a UNIX
42319system.  Somehow the compiler and linker have to make sure that each
42320template instance occurs exactly once in the executable if it is needed,
42321and not at all otherwise.  There are two basic approaches to this
42322problem, which are referred to as the Borland model and the Cfront
42323model.
42324
42325Borland model
42326     Borland C++ solved the template instantiation problem by adding
42327     the code equivalent of common blocks to their linker; the compiler
42328     emits template instances in each translation unit that uses them,
42329     and the linker collapses them together.  The advantage of this
42330     model is that the linker only has to consider the object files
42331     themselves; there is no external complexity to worry about.  This
42332     disadvantage is that compilation time is increased because the
42333     template code is being compiled repeatedly.  Code written for this
42334     model tends to include definitions of all templates in the header
42335     file, since they must be seen to be instantiated.
42336
42337Cfront model
42338     The AT&T C++ translator, Cfront, solved the template instantiation
42339     problem by creating the notion of a template repository, an
42340     automatically maintained place where template instances are
42341     stored.  A more modern version of the repository works as follows:
42342     As individual object files are built, the compiler places any
42343     template definitions and instantiations encountered in the
42344     repository.  At link time, the link wrapper adds in the objects in
42345     the repository and compiles any needed instances that were not
42346     previously emitted.  The advantages of this model are more optimal
42347     compilation speed and the ability to use the system linker; to
42348     implement the Borland model a compiler vendor also needs to
42349     replace the linker.  The disadvantages are vastly increased
42350     complexity, and thus potential for error; for some code this can be
42351     just as transparent, but in practice it can been very difficult to
42352     build multiple programs in one directory and one program in
42353     multiple directories.  Code written for this model tends to
42354     separate definitions of non-inline member templates into a
42355     separate file, which should be compiled separately.
42356
42357 When used with GNU ld version 2.8 or later on an ELF system such as
42358GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
42359Borland model.  On other systems, G++ implements neither automatic
42360model.
42361
42362 You have the following options for dealing with template
42363instantiations:
42364
42365  1. Compile your template-using code with `-frepo'.  The compiler
42366     generates files with the extension `.rpo' listing all of the
42367     template instantiations used in the corresponding object files that
42368     could be instantiated there; the link wrapper, `collect2', then
42369     updates the `.rpo' files to tell the compiler where to place those
42370     instantiations and rebuild any affected object files.  The
42371     link-time overhead is negligible after the first pass, as the
42372     compiler continues to place the instantiations in the same files.
42373
42374     This is your best option for application code written for the
42375     Borland model, as it just works.  Code written for the Cfront model
42376     needs to be modified so that the template definitions are
42377     available at one or more points of instantiation; usually this is
42378     as simple as adding `#include <tmethods.cc>' to the end of each
42379     template header.
42380
42381     For library code, if you want the library to provide all of the
42382     template instantiations it needs, just try to link all of its
42383     object files together; the link will fail, but cause the
42384     instantiations to be generated as a side effect.  Be warned,
42385     however, that this may cause conflicts if multiple libraries try
42386     to provide the same instantiations.  For greater control, use
42387     explicit instantiation as described in the next option.
42388
42389  2. Compile your code with `-fno-implicit-templates' to disable the
42390     implicit generation of template instances, and explicitly
42391     instantiate all the ones you use.  This approach requires more
42392     knowledge of exactly which instances you need than do the others,
42393     but it's less mysterious and allows greater control.  You can
42394     scatter the explicit instantiations throughout your program,
42395     perhaps putting them in the translation units where the instances
42396     are used or the translation units that define the templates
42397     themselves; you can put all of the explicit instantiations you
42398     need into one big file; or you can create small files like
42399
42400          #include "Foo.h"
42401          #include "Foo.cc"
42402
42403          template class Foo<int>;
42404          template ostream& operator <<
42405                          (ostream&, const Foo<int>&);
42406
42407     for each of the instances you need, and create a template
42408     instantiation library from those.
42409
42410     If you are using Cfront-model code, you can probably get away with
42411     not using `-fno-implicit-templates' when compiling files that don't
42412     `#include' the member template definitions.
42413
42414     If you use one big file to do the instantiations, you may want to
42415     compile it without `-fno-implicit-templates' so you get all of the
42416     instances required by your explicit instantiations (but not by any
42417     other files) without having to specify them as well.
42418
42419     The ISO C++ 2011 standard allows forward declaration of explicit
42420     instantiations (with `extern'). G++ supports explicit instantiation
42421     declarations in C++98 mode and has extended the template
42422     instantiation syntax to support instantiation of the compiler
42423     support data for a template class (i.e. the vtable) without
42424     instantiating any of its members (with `inline'), and
42425     instantiation of only the static data members of a template class,
42426     without the support data or member functions (with `static'):
42427
42428          extern template int max (int, int);
42429          inline template class Foo<int>;
42430          static template class Foo<int>;
42431
42432  3. Do nothing.  Pretend G++ does implement automatic instantiation
42433     management.  Code written for the Borland model works fine, but
42434     each translation unit contains instances of each of the templates
42435     it uses.  In a large program, this can lead to an unacceptable
42436     amount of code duplication.
42437
42438
42439File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
42440
424417.6 Extracting the Function Pointer from a Bound Pointer to Member Function
42442===========================================================================
42443
42444In C++, pointer to member functions (PMFs) are implemented using a wide
42445pointer of sorts to handle all the possible call mechanisms; the PMF
42446needs to store information about how to adjust the `this' pointer, and
42447if the function pointed to is virtual, where to find the vtable, and
42448where in the vtable to look for the member function.  If you are using
42449PMFs in an inner loop, you should really reconsider that decision.  If
42450that is not an option, you can extract the pointer to the function that
42451would be called for a given object/PMF pair and call it directly inside
42452the inner loop, to save a bit of time.
42453
42454 Note that you still pay the penalty for the call through a function
42455pointer; on most modern architectures, such a call defeats the branch
42456prediction features of the CPU.  This is also true of normal virtual
42457function calls.
42458
42459 The syntax for this extension is
42460
42461     extern A a;
42462     extern int (A::*fp)();
42463     typedef int (*fptr)(A *);
42464
42465     fptr p = (fptr)(a.*fp);
42466
42467 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
42468object is needed to obtain the address of the function.  They can be
42469converted to function pointers directly:
42470
42471     fptr p1 = (fptr)(&A::foo);
42472
42473 You must specify `-Wno-pmf-conversions' to use this extension.
42474
42475
42476File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions
42477
424787.7 C++-Specific Variable, Function, and Type Attributes
42479========================================================
42480
42481Some attributes only make sense for C++ programs.
42482
42483`abi_tag ("TAG", ...)'
42484     The `abi_tag' attribute can be applied to a function, variable, or
42485     class declaration.  It modifies the mangled name of the entity to
42486     incorporate the tag name, in order to distinguish the function or
42487     class from an earlier version with a different ABI; perhaps the
42488     class has changed size, or the function has a different return
42489     type that is not encoded in the mangled name.
42490
42491     The attribute can also be applied to an inline namespace, but does
42492     not affect the mangled name of the namespace; in this case it is
42493     only used for `-Wabi-tag' warnings and automatic tagging of
42494     functions and variables.  Tagging inline namespaces is generally
42495     preferable to tagging individual declarations, but the latter is
42496     sometimes necessary, such as when only certain members of a class
42497     need to be tagged.
42498
42499     The argument can be a list of strings of arbitrary length.  The
42500     strings are sorted on output, so the order of the list is
42501     unimportant.
42502
42503     A redeclaration of an entity must not add new ABI tags, since
42504     doing so would change the mangled name.
42505
42506     The ABI tags apply to a name, so all instantiations and
42507     specializations of a template have the same tags.  The attribute
42508     will be ignored if applied to an explicit specialization or
42509     instantiation.
42510
42511     The `-Wabi-tag' flag enables a warning about a class which does
42512     not have all the ABI tags used by its subobjects and virtual
42513     functions; for users with code that needs to coexist with an
42514     earlier ABI, using this option can help to find all affected types
42515     that need to be tagged.
42516
42517     When a type involving an ABI tag is used as the type of a variable
42518     or return type of a function where that tag is not already present
42519     in the signature of the function, the tag is automatically applied
42520     to the variable or function.  `-Wabi-tag' also warns about this
42521     situation; this warning can be avoided by explicitly tagging the
42522     variable or function or moving it into a tagged inline namespace.
42523
42524`init_priority (PRIORITY)'
42525     In Standard C++, objects defined at namespace scope are guaranteed
42526     to be initialized in an order in strict accordance with that of
42527     their definitions _in a given translation unit_.  No guarantee is
42528     made for initializations across translation units.  However, GNU
42529     C++ allows users to control the order of initialization of objects
42530     defined at namespace scope with the `init_priority' attribute by
42531     specifying a relative PRIORITY, a constant integral expression
42532     currently bounded between 101 and 65535 inclusive.  Lower numbers
42533     indicate a higher priority.
42534
42535     In the following example, `A' would normally be created before
42536     `B', but the `init_priority' attribute reverses that order:
42537
42538          Some_Class  A  __attribute__ ((init_priority (2000)));
42539          Some_Class  B  __attribute__ ((init_priority (543)));
42540
42541     Note that the particular values of PRIORITY do not matter; only
42542     their relative ordering.
42543
42544`java_interface'
42545     This type attribute informs C++ that the class is a Java
42546     interface.  It may only be applied to classes declared within an
42547     `extern "Java"' block.  Calls to methods declared in this
42548     interface are dispatched using GCJ's interface table mechanism,
42549     instead of regular virtual table dispatch.
42550
42551`warn_unused'
42552     For C++ types with non-trivial constructors and/or destructors it
42553     is impossible for the compiler to determine whether a variable of
42554     this type is truly unused if it is not referenced. This type
42555     attribute informs the compiler that variables of this type should
42556     be warned about if they appear to be unused, just like variables
42557     of fundamental types.
42558
42559     This attribute is appropriate for types which just represent a
42560     value, such as `std::string'; it is not appropriate for types which
42561     control a resource, such as `std::mutex'.
42562
42563     This attribute is also accepted in C, but it is unnecessary
42564     because C does not have constructors or destructors.
42565
42566
42567 See also *Note Namespace Association::.
42568
42569
42570File: gcc.info,  Node: Function Multiversioning,  Next: Namespace Association,  Prev: C++ Attributes,  Up: C++ Extensions
42571
425727.8 Function Multiversioning
42573============================
42574
42575With the GNU C++ front end, for x86 targets, you may specify multiple
42576versions of a function, where each function is specialized for a
42577specific target feature.  At runtime, the appropriate version of the
42578function is automatically executed depending on the characteristics of
42579the execution platform.  Here is an example.
42580
42581     __attribute__ ((target ("default")))
42582     int foo ()
42583     {
42584       // The default version of foo.
42585       return 0;
42586     }
42587
42588     __attribute__ ((target ("sse4.2")))
42589     int foo ()
42590     {
42591       // foo version for SSE4.2
42592       return 1;
42593     }
42594
42595     __attribute__ ((target ("arch=atom")))
42596     int foo ()
42597     {
42598       // foo version for the Intel ATOM processor
42599       return 2;
42600     }
42601
42602     __attribute__ ((target ("arch=amdfam10")))
42603     int foo ()
42604     {
42605       // foo version for the AMD Family 0x10 processors.
42606       return 3;
42607     }
42608
42609     int main ()
42610     {
42611       int (*p)() = &foo;
42612       assert ((*p) () == foo ());
42613       return 0;
42614     }
42615
42616 In the above example, four versions of function foo are created. The
42617first version of foo with the target attribute "default" is the default
42618version.  This version gets executed when no other target specific
42619version qualifies for execution on a particular platform. A new version
42620of foo is created by using the same function signature but with a
42621different target string.  Function foo is called or a pointer to it is
42622taken just like a regular function.  GCC takes care of doing the
42623dispatching to call the right version at runtime.  Refer to the GCC
42624wiki on Function Multiversioning
42625(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.
42626
42627
42628File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: Function Multiversioning,  Up: C++ Extensions
42629
426307.9 Namespace Association
42631=========================
42632
42633*Caution:* The semantics of this extension are equivalent to C++ 2011
42634inline namespaces.  Users should use inline namespaces instead as this
42635extension will be removed in future versions of G++.
42636
42637 A using-directive with `__attribute ((strong))' is stronger than a
42638normal using-directive in two ways:
42639
42640   * Templates from the used namespace can be specialized and explicitly
42641     instantiated as though they were members of the using namespace.
42642
42643   * The using namespace is considered an associated namespace of all
42644     templates in the used namespace for purposes of argument-dependent
42645     name lookup.
42646
42647 The used namespace must be nested within the using namespace so that
42648normal unqualified lookup works properly.
42649
42650 This is useful for composing a namespace transparently from
42651implementation namespaces.  For example:
42652
42653     namespace std {
42654       namespace debug {
42655         template <class T> struct A { };
42656       }
42657       using namespace debug __attribute ((__strong__));
42658       template <> struct A<int> { };   // OK to specialize
42659
42660       template <class T> void f (A<T>);
42661     }
42662
42663     int main()
42664     {
42665       f (std::A<float>());             // lookup finds std::f
42666       f (std::A<int>());
42667     }
42668
42669
42670File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions
42671
426727.10 Type Traits
42673================
42674
42675The C++ front end implements syntactic extensions that allow
42676compile-time determination of various characteristics of a type (or of a
42677pair of types).
42678
42679`__has_nothrow_assign (type)'
42680     If `type' is const qualified or is a reference type then the trait
42681     is false.  Otherwise if `__has_trivial_assign (type)' is true then
42682     the trait is true, else if `type' is a cv class or union type with
42683     copy assignment operators that are known not to throw an exception
42684     then the trait is true, else it is false.  Requires: `type' shall
42685     be a complete type, (possibly cv-qualified) `void', or an array of
42686     unknown bound.
42687
42688`__has_nothrow_copy (type)'
42689     If `__has_trivial_copy (type)' is true then the trait is true,
42690     else if `type' is a cv class or union type with copy constructors
42691     that are known not to throw an exception then the trait is true,
42692     else it is false.  Requires: `type' shall be a complete type,
42693     (possibly cv-qualified) `void', or an array of unknown bound.
42694
42695`__has_nothrow_constructor (type)'
42696     If `__has_trivial_constructor (type)' is true then the trait is
42697     true, else if `type' is a cv class or union type (or array
42698     thereof) with a default constructor that is known not to throw an
42699     exception then the trait is true, else it is false.  Requires:
42700     `type' shall be a complete type, (possibly cv-qualified) `void',
42701     or an array of unknown bound.
42702
42703`__has_trivial_assign (type)'
42704     If `type' is const qualified or is a reference type then the trait
42705     is false.  Otherwise if `__is_pod (type)' is true then the trait is
42706     true, else if `type' is a cv class or union type with a trivial
42707     copy assignment ([class.copy]) then the trait is true, else it is
42708     false.  Requires: `type' shall be a complete type, (possibly
42709     cv-qualified) `void', or an array of unknown bound.
42710
42711`__has_trivial_copy (type)'
42712     If `__is_pod (type)' is true or `type' is a reference type then
42713     the trait is true, else if `type' is a cv class or union type with
42714     a trivial copy constructor ([class.copy]) then the trait is true,
42715     else it is false.  Requires: `type' shall be a complete type,
42716     (possibly cv-qualified) `void', or an array of unknown bound.
42717
42718`__has_trivial_constructor (type)'
42719     If `__is_pod (type)' is true then the trait is true, else if
42720     `type' is a cv class or union type (or array thereof) with a
42721     trivial default constructor ([class.ctor]) then the trait is true,
42722     else it is false.  Requires: `type' shall be a complete type,
42723     (possibly cv-qualified) `void', or an array of unknown bound.
42724
42725`__has_trivial_destructor (type)'
42726     If `__is_pod (type)' is true or `type' is a reference type then
42727     the trait is true, else if `type' is a cv class or union type (or
42728     array thereof) with a trivial destructor ([class.dtor]) then the
42729     trait is true, else it is false.  Requires: `type' shall be a
42730     complete type, (possibly cv-qualified) `void', or an array of
42731     unknown bound.
42732
42733`__has_virtual_destructor (type)'
42734     If `type' is a class type with a virtual destructor ([class.dtor])
42735     then the trait is true, else it is false.  Requires: `type' shall
42736     be a complete type, (possibly cv-qualified) `void', or an array of
42737     unknown bound.
42738
42739`__is_abstract (type)'
42740     If `type' is an abstract class ([class.abstract]) then the trait
42741     is true, else it is false.  Requires: `type' shall be a complete
42742     type, (possibly cv-qualified) `void', or an array of unknown bound.
42743
42744`__is_base_of (base_type, derived_type)'
42745     If `base_type' is a base class of `derived_type' ([class.derived])
42746     then the trait is true, otherwise it is false.  Top-level cv
42747     qualifications of `base_type' and `derived_type' are ignored.  For
42748     the purposes of this trait, a class type is considered is own
42749     base.  Requires: if `__is_class (base_type)' and `__is_class
42750     (derived_type)' are true and `base_type' and `derived_type' are
42751     not the same type (disregarding cv-qualifiers), `derived_type'
42752     shall be a complete type.  Diagnostic is produced if this
42753     requirement is not met.
42754
42755`__is_class (type)'
42756     If `type' is a cv class type, and not a union type
42757     ([basic.compound]) the trait is true, else it is false.
42758
42759`__is_empty (type)'
42760     If `__is_class (type)' is false then the trait is false.
42761     Otherwise `type' is considered empty if and only if: `type' has no
42762     non-static data members, or all non-static data members, if any,
42763     are bit-fields of length 0, and `type' has no virtual members, and
42764     `type' has no virtual base classes, and `type' has no base classes
42765     `base_type' for which `__is_empty (base_type)' is false.
42766     Requires: `type' shall be a complete type, (possibly cv-qualified)
42767     `void', or an array of unknown bound.
42768
42769`__is_enum (type)'
42770     If `type' is a cv enumeration type ([basic.compound]) the trait is
42771     true, else it is false.
42772
42773`__is_literal_type (type)'
42774     If `type' is a literal type ([basic.types]) the trait is true,
42775     else it is false.  Requires: `type' shall be a complete type,
42776     (possibly cv-qualified) `void', or an array of unknown bound.
42777
42778`__is_pod (type)'
42779     If `type' is a cv POD type ([basic.types]) then the trait is true,
42780     else it is false.  Requires: `type' shall be a complete type,
42781     (possibly cv-qualified) `void', or an array of unknown bound.
42782
42783`__is_polymorphic (type)'
42784     If `type' is a polymorphic class ([class.virtual]) then the trait
42785     is true, else it is false.  Requires: `type' shall be a complete
42786     type, (possibly cv-qualified) `void', or an array of unknown bound.
42787
42788`__is_standard_layout (type)'
42789     If `type' is a standard-layout type ([basic.types]) the trait is
42790     true, else it is false.  Requires: `type' shall be a complete
42791     type, (possibly cv-qualified) `void', or an array of unknown bound.
42792
42793`__is_trivial (type)'
42794     If `type' is a trivial type ([basic.types]) the trait is true,
42795     else it is false.  Requires: `type' shall be a complete type,
42796     (possibly cv-qualified) `void', or an array of unknown bound.
42797
42798`__is_union (type)'
42799     If `type' is a cv union type ([basic.compound]) the trait is true,
42800     else it is false.
42801
42802`__underlying_type (type)'
42803     The underlying type of `type'.  Requires: `type' shall be an
42804     enumeration type ([dcl.enum]).
42805
42806
42807
42808File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions
42809
428107.11 Java Exceptions
42811====================
42812
42813The Java language uses a slightly different exception handling model
42814from C++.  Normally, GNU C++ automatically detects when you are writing
42815C++ code that uses Java exceptions, and handle them appropriately.
42816However, if C++ code only needs to execute destructors when Java
42817exceptions are thrown through it, GCC guesses incorrectly.  Sample
42818problematic code is:
42819
42820       struct S { ~S(); };
42821       extern void bar();    // is written in Java, and may throw exceptions
42822       void foo()
42823       {
42824         S s;
42825         bar();
42826       }
42827
42828The usual effect of an incorrect guess is a link failure, complaining of
42829a missing routine called `__gxx_personality_v0'.
42830
42831 You can inform the compiler that Java exceptions are to be used in a
42832translation unit, irrespective of what it might think, by writing
42833`#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
42834must appear before any functions that throw or catch exceptions, or run
42835destructors when exceptions are thrown through them.
42836
42837 You cannot mix Java and C++ exceptions in the same translation unit.
42838It is believed to be safe to throw a C++ exception from one file through
42839another file compiled for the Java exception model, or vice versa, but
42840there may be bugs in this area.
42841
42842
42843File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
42844
428457.12 Deprecated Features
42846========================
42847
42848In the past, the GNU C++ compiler was extended to experiment with new
42849features, at a time when the C++ language was still evolving.  Now that
42850the C++ standard is complete, some of those features are superseded by
42851superior alternatives.  Using the old features might cause a warning in
42852some cases that the feature will be dropped in the future.  In other
42853cases, the feature might be gone already.
42854
42855 While the list below is not exhaustive, it documents some of the
42856options that are now deprecated:
42857
42858`-fexternal-templates'
42859`-falt-external-templates'
42860     These are two of the many ways for G++ to implement template
42861     instantiation.  *Note Template Instantiation::.  The C++ standard
42862     clearly defines how template definitions have to be organized
42863     across implementation units.  G++ has an implicit instantiation
42864     mechanism that should work just fine for standard-conforming code.
42865
42866`-fstrict-prototype'
42867`-fno-strict-prototype'
42868     Previously it was possible to use an empty prototype parameter
42869     list to indicate an unspecified number of parameters (like C),
42870     rather than no parameters, as C++ demands.  This feature has been
42871     removed, except where it is required for backwards compatibility.
42872     *Note Backwards Compatibility::.
42873
42874 G++ allows a virtual function returning `void *' to be overridden by
42875one returning a different pointer type.  This extension to the
42876covariant return type rules is now deprecated and will be removed from a
42877future version.
42878
42879 The G++ minimum and maximum operators (`<?' and `>?') and their
42880compound forms (`<?=') and `>?=') have been deprecated and are now
42881removed from G++.  Code using these operators should be modified to use
42882`std::min' and `std::max' instead.
42883
42884 The named return value extension has been deprecated, and is now
42885removed from G++.
42886
42887 The use of initializer lists with new expressions has been deprecated,
42888and is now removed from G++.
42889
42890 Floating and complex non-type template parameters have been deprecated,
42891and are now removed from G++.
42892
42893 The implicit typename extension has been deprecated and is now removed
42894from G++.
42895
42896 The use of default arguments in function pointers, function typedefs
42897and other places where they are not permitted by the standard is
42898deprecated and will be removed from a future version of G++.
42899
42900 G++ allows floating-point literals to appear in integral constant
42901expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
42902deprecated and will be removed from a future version.
42903
42904 G++ allows static data members of const floating-point type to be
42905declared with an initializer in a class definition. The standard only
42906allows initializers for static members of const integral types and const
42907enumeration types so this extension has been deprecated and will be
42908removed from a future version.
42909
42910
42911File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
42912
429137.13 Backwards Compatibility
42914============================
42915
42916Now that there is a definitive ISO standard C++, G++ has a specification
42917to adhere to.  The C++ language evolved over time, and features that
42918used to be acceptable in previous drafts of the standard, such as the
42919ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
42920to allow compilation of C++ written to such drafts, G++ contains some
42921backwards compatibilities.  _All such backwards compatibility features
42922are liable to disappear in future versions of G++._ They should be
42923considered deprecated.   *Note Deprecated Features::.
42924
42925`For scope'
42926     If a variable is declared at for scope, it used to remain in scope
42927     until the end of the scope that contained the for statement
42928     (rather than just within the for scope).  G++ retains this, but
42929     issues a warning, if such a variable is accessed outside the for
42930     scope.
42931
42932`Implicit C language'
42933     Old C system header files did not contain an `extern "C" {...}'
42934     scope to set the language.  On such systems, all header files are
42935     implicitly scoped inside a C language scope.  Also, an empty
42936     prototype `()' is treated as an unspecified number of arguments,
42937     rather than no arguments, as C++ demands.
42938
42939
42940File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
42941
429428 GNU Objective-C Features
42943**************************
42944
42945This document is meant to describe some of the GNU Objective-C
42946features.  It is not intended to teach you Objective-C.  There are
42947several resources on the Internet that present the language.
42948
42949* Menu:
42950
42951* GNU Objective-C runtime API::
42952* Executing code before main::
42953* Type encoding::
42954* Garbage Collection::
42955* Constant string objects::
42956* compatibility_alias::
42957* Exceptions::
42958* Synchronization::
42959* Fast enumeration::
42960* Messaging with the GNU Objective-C runtime::
42961
42962
42963File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C
42964
429658.1 GNU Objective-C Runtime API
42966===============================
42967
42968This section is specific for the GNU Objective-C runtime.  If you are
42969using a different runtime, you can skip it.
42970
42971 The GNU Objective-C runtime provides an API that allows you to
42972interact with the Objective-C runtime system, querying the live runtime
42973structures and even manipulating them.  This allows you for example to
42974inspect and navigate classes, methods and protocols; to define new
42975classes or new methods, and even to modify existing classes or
42976protocols.
42977
42978 If you are using a "Foundation" library such as GNUstep-Base, this
42979library will provide you with a rich set of functionality to do most of
42980the inspection tasks, and you probably will only need direct access to
42981the GNU Objective-C runtime API to define new classes or methods.
42982
42983* Menu:
42984
42985* Modern GNU Objective-C runtime API::
42986* Traditional GNU Objective-C runtime API::
42987
42988
42989File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
42990
429918.1.1 Modern GNU Objective-C Runtime API
42992----------------------------------------
42993
42994The GNU Objective-C runtime provides an API which is similar to the one
42995provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
42996API is documented in the public header files of the GNU Objective-C
42997runtime:
42998
42999   * `objc/objc.h': this is the basic Objective-C header file, defining
43000     the basic Objective-C types such as `id', `Class' and `BOOL'.  You
43001     have to include this header to do almost anything with Objective-C.
43002
43003   * `objc/runtime.h': this header declares most of the public runtime
43004     API functions allowing you to inspect and manipulate the
43005     Objective-C runtime data structures.  These functions are fairly
43006     standardized across Objective-C runtimes and are almost identical
43007     to the Apple/NeXT Objective-C runtime ones.  It does not declare
43008     functions in some specialized areas (constructing and forwarding
43009     message invocations, threading) which are in the other headers
43010     below.  You have to include `objc/objc.h' and `objc/runtime.h' to
43011     use any of the functions, such as `class_getName()', declared in
43012     `objc/runtime.h'.
43013
43014   * `objc/message.h': this header declares public functions used to
43015     construct, deconstruct and forward message invocations.  Because
43016     messaging is done in quite a different way on different runtimes,
43017     functions in this header are specific to the GNU Objective-C
43018     runtime implementation.
43019
43020   * `objc/objc-exception.h': this header declares some public
43021     functions related to Objective-C exceptions.  For example
43022     functions in this header allow you to throw an Objective-C
43023     exception from plain C/C++ code.
43024
43025   * `objc/objc-sync.h': this header declares some public functions
43026     related to the Objective-C `@synchronized()' syntax, allowing you
43027     to emulate an Objective-C `@synchronized()' block in plain C/C++
43028     code.
43029
43030   * `objc/thr.h': this header declares a public runtime API threading
43031     layer that is only provided by the GNU Objective-C runtime.  It
43032     declares functions such as `objc_mutex_lock()', which provide a
43033     platform-independent set of threading functions.
43034
43035
43036 The header files contain detailed documentation for each function in
43037the GNU Objective-C runtime API.
43038
43039
43040File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API
43041
430428.1.2 Traditional GNU Objective-C Runtime API
43043---------------------------------------------
43044
43045The GNU Objective-C runtime used to provide a different API, which we
43046call the "traditional" GNU Objective-C runtime API.  Functions
43047belonging to this API are easy to recognize because they use a
43048different naming convention, such as `class_get_super_class()'
43049(traditional API) instead of `class_getSuperclass()' (modern API).
43050Software using this API includes the file `objc/objc-api.h' where it is
43051declared.
43052
43053 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
43054available.
43055
43056
43057File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C
43058
430598.2 `+load': Executing Code before `main'
43060=========================================
43061
43062This section is specific for the GNU Objective-C runtime.  If you are
43063using a different runtime, you can skip it.
43064
43065 The GNU Objective-C runtime provides a way that allows you to execute
43066code before the execution of the program enters the `main' function.
43067The code is executed on a per-class and a per-category basis, through a
43068special class method `+load'.
43069
43070 This facility is very useful if you want to initialize global variables
43071which can be accessed by the program directly, without sending a message
43072to the class first.  The usual way to initialize global variables, in
43073the `+initialize' method, might not be useful because `+initialize' is
43074only called when the first message is sent to a class object, which in
43075some cases could be too late.
43076
43077 Suppose for example you have a `FileStream' class that declares
43078`Stdin', `Stdout' and `Stderr' as global variables, like below:
43079
43080
43081     FileStream *Stdin = nil;
43082     FileStream *Stdout = nil;
43083     FileStream *Stderr = nil;
43084
43085     @implementation FileStream
43086
43087     + (void)initialize
43088     {
43089         Stdin = [[FileStream new] initWithFd:0];
43090         Stdout = [[FileStream new] initWithFd:1];
43091         Stderr = [[FileStream new] initWithFd:2];
43092     }
43093
43094     /* Other methods here */
43095     @end
43096
43097 In this example, the initialization of `Stdin', `Stdout' and `Stderr'
43098in `+initialize' occurs too late.  The programmer can send a message to
43099one of these objects before the variables are actually initialized,
43100thus sending messages to the `nil' object.  The `+initialize' method
43101which actually initializes the global variables is not invoked until
43102the first message is sent to the class object.  The solution would
43103require these variables to be initialized just before entering `main'.
43104
43105 The correct solution of the above problem is to use the `+load' method
43106instead of `+initialize':
43107
43108
43109     @implementation FileStream
43110
43111     + (void)load
43112     {
43113         Stdin = [[FileStream new] initWithFd:0];
43114         Stdout = [[FileStream new] initWithFd:1];
43115         Stderr = [[FileStream new] initWithFd:2];
43116     }
43117
43118     /* Other methods here */
43119     @end
43120
43121 The `+load' is a method that is not overridden by categories.  If a
43122class and a category of it both implement `+load', both methods are
43123invoked.  This allows some additional initializations to be performed in
43124a category.
43125
43126 This mechanism is not intended to be a replacement for `+initialize'.
43127You should be aware of its limitations when you decide to use it
43128instead of `+initialize'.
43129
43130* Menu:
43131
43132* What you can and what you cannot do in +load::
43133
43134
43135File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main
43136
431378.2.1 What You Can and Cannot Do in `+load'
43138-------------------------------------------
43139
43140`+load' is to be used only as a last resort.  Because it is executed
43141very early, most of the Objective-C runtime machinery will not be ready
43142when `+load' is executed; hence `+load' works best for executing C code
43143that is independent on the Objective-C runtime.
43144
43145 The `+load' implementation in the GNU runtime guarantees you the
43146following things:
43147
43148   * you can write whatever C code you like;
43149
43150   * you can allocate and send messages to objects whose class is
43151     implemented in the same file;
43152
43153   * the `+load' implementation of all super classes of a class are
43154     executed before the `+load' of that class is executed;
43155
43156   * the `+load' implementation of a class is executed before the
43157     `+load' implementation of any category.
43158
43159
43160 In particular, the following things, even if they can work in a
43161particular case, are not guaranteed:
43162
43163   * allocation of or sending messages to arbitrary objects;
43164
43165   * allocation of or sending messages to objects whose classes have a
43166     category implemented in the same file;
43167
43168   * sending messages to Objective-C constant strings (`@"this is a
43169     constant string"');
43170
43171
43172 You should make no assumptions about receiving `+load' in sibling
43173classes when you write `+load' of a class.  The order in which sibling
43174classes receive `+load' is not guaranteed.
43175
43176 The order in which `+load' and `+initialize' are called could be
43177problematic if this matters.  If you don't allocate objects inside
43178`+load', it is guaranteed that `+load' is called before `+initialize'.
43179If you create an object inside `+load' the `+initialize' method of
43180object's class is invoked even if `+load' was not invoked.  Note if you
43181explicitly call `+load' on a class, `+initialize' will be called first.
43182To avoid possible problems try to implement only one of these methods.
43183
43184 The `+load' method is also invoked when a bundle is dynamically loaded
43185into your running program.  This happens automatically without any
43186intervening operation from you.  When you write bundles and you need to
43187write `+load' you can safely create and send messages to objects whose
43188classes already exist in the running program.  The same restrictions as
43189above apply to classes defined in bundle.
43190
43191
43192File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
43193
431948.3 Type Encoding
43195=================
43196
43197This is an advanced section.  Type encodings are used extensively by
43198the compiler and by the runtime, but you generally do not need to know
43199about them to use Objective-C.
43200
43201 The Objective-C compiler generates type encodings for all the types.
43202These type encodings are used at runtime to find out information about
43203selectors and methods and about objects and classes.
43204
43205 The types are encoded in the following way:
43206
43207`_Bool'            `B'
43208`char'             `c'
43209`unsigned char'    `C'
43210`short'            `s'
43211`unsigned short'   `S'
43212`int'              `i'
43213`unsigned int'     `I'
43214`long'             `l'
43215`unsigned long'    `L'
43216`long long'        `q'
43217`unsigned long     `Q'
43218long'
43219`float'            `f'
43220`double'           `d'
43221`long double'      `D'
43222`void'             `v'
43223`id'               `@'
43224`Class'            `#'
43225`SEL'              `:'
43226`char*'            `*'
43227`enum'             an `enum' is encoded exactly as the integer type that
43228                   the compiler uses for it, which depends on the
43229                   enumeration values.  Often the compiler users
43230                   `unsigned int', which is then encoded as `I'.
43231unknown type       `?'
43232Complex types      `j' followed by the inner type.  For example
43233                   `_Complex double' is encoded as "jd".
43234bit-fields         `b' followed by the starting position of the
43235                   bit-field, the type of the bit-field and the size of
43236                   the bit-field (the bit-fields encoding was changed
43237                   from the NeXT's compiler encoding, see below)
43238
43239 The encoding of bit-fields has changed to allow bit-fields to be
43240properly handled by the runtime functions that compute sizes and
43241alignments of types that contain bit-fields.  The previous encoding
43242contained only the size of the bit-field.  Using only this information
43243it is not possible to reliably compute the size occupied by the
43244bit-field.  This is very important in the presence of the Boehm's
43245garbage collector because the objects are allocated using the typed
43246memory facility available in this collector.  The typed memory
43247allocation requires information about where the pointers are located
43248inside the object.
43249
43250 The position in the bit-field is the position, counting in bits, of the
43251bit closest to the beginning of the structure.
43252
43253 The non-atomic types are encoded as follows:
43254
43255pointers       `^' followed by the pointed type.
43256arrays         `[' followed by the number of elements in the array
43257               followed by the type of the elements followed by `]'
43258structures     `{' followed by the name of the structure (or `?' if the
43259               structure is unnamed), the `=' sign, the type of the
43260               members and by `}'
43261unions         `(' followed by the name of the structure (or `?' if the
43262               union is unnamed), the `=' sign, the type of the members
43263               followed by `)'
43264vectors        `![' followed by the vector_size (the number of bytes
43265               composing the vector) followed by a comma, followed by
43266               the alignment (in bytes) of the vector, followed by the
43267               type of the elements followed by `]'
43268
43269 Here are some types and their encodings, as they are generated by the
43270compiler on an i386 machine:
43271
43272
43273Objective-C type   Compiler encoding
43274     int a[10];    `[10i]'
43275     struct {      `{?=i[3f]b128i3b131i2c}'
43276       int i;
43277       float f[3];
43278       int a:3;
43279       int b:2;
43280       char c;
43281     }
43282     int a __attribute__ ((vector_size (16)));`![16,16i]' (alignment would depend on the machine)
43283
43284
43285 In addition to the types the compiler also encodes the type
43286specifiers.  The table below describes the encoding of the current
43287Objective-C type specifiers:
43288
43289
43290Specifier          Encoding
43291`const'            `r'
43292`in'               `n'
43293`inout'            `N'
43294`out'              `o'
43295`bycopy'           `O'
43296`byref'            `R'
43297`oneway'           `V'
43298
43299
43300 The type specifiers are encoded just before the type.  Unlike types
43301however, the type specifiers are only encoded when they appear in method
43302argument types.
43303
43304 Note how `const' interacts with pointers:
43305
43306
43307Objective-C type   Compiler encoding
43308     const int     `ri'
43309     const int*    `^ri'
43310     int *const    `r^i'
43311
43312
43313 `const int*' is a pointer to a `const int', and so is encoded as
43314`^ri'.  `int* const', instead, is a `const' pointer to an `int', and so
43315is encoded as `r^i'.
43316
43317 Finally, there is a complication when encoding `const char *' versus
43318`char * const'.  Because `char *' is encoded as `*' and not as `^c',
43319there is no way to express the fact that `r' applies to the pointer or
43320to the pointee.
43321
43322 Hence, it is assumed as a convention that `r*' means `const char *'
43323(since it is what is most often meant), and there is no way to encode
43324`char *const'.  `char *const' would simply be encoded as `*', and the
43325`const' is lost.
43326
43327* Menu:
43328
43329* Legacy type encoding::
43330* @encode::
43331* Method signatures::
43332
43333
43334File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding
43335
433368.3.1 Legacy Type Encoding
43337--------------------------
43338
43339Unfortunately, historically GCC used to have a number of bugs in its
43340encoding code.  The NeXT runtime expects GCC to emit type encodings in
43341this historical format (compatible with GCC-3.3), so when using the
43342NeXT runtime, GCC will introduce on purpose a number of incorrect
43343encodings:
43344
43345   * the read-only qualifier of the pointee gets emitted before the '^'.
43346     The read-only qualifier of the pointer itself gets ignored, unless
43347     it is a typedef.  Also, the 'r' is only emitted for the outermost
43348     type.
43349
43350   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
43351     typedefs, the compiler uses 'i' or 'I' instead if encoding a
43352     struct field or a pointer.
43353
43354   * `enum's are always encoded as 'i' (int) even if they are actually
43355     unsigned or long.
43356
43357
43358 In addition to that, the NeXT runtime uses a different encoding for
43359bitfields.  It encodes them as `b' followed by the size, without a bit
43360offset or the underlying field type.
43361
43362
43363File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding
43364
433658.3.2 `@encode'
43366---------------
43367
43368GNU Objective-C supports the `@encode' syntax that allows you to create
43369a type encoding from a C/Objective-C type.  For example, `@encode(int)'
43370is compiled by the compiler into `"i"'.
43371
43372 `@encode' does not support type qualifiers other than `const'.  For
43373example, `@encode(const char*)' is valid and is compiled into `"r*"',
43374while `@encode(bycopy char *)' is invalid and will cause a compilation
43375error.
43376
43377
43378File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding
43379
433808.3.3 Method Signatures
43381-----------------------
43382
43383This section documents the encoding of method types, which is rarely
43384needed to use Objective-C.  You should skip it at a first reading; the
43385runtime provides functions that will work on methods and can walk
43386through the list of parameters and interpret them for you.  These
43387functions are part of the public "API" and are the preferred way to
43388interact with method signatures from user code.
43389
43390 But if you need to debug a problem with method signatures and need to
43391know how they are implemented (i.e., the "ABI"), read on.
43392
43393 Methods have their "signature" encoded and made available to the
43394runtime.  The "signature" encodes all the information required to
43395dynamically build invocations of the method at runtime: return type and
43396arguments.
43397
43398 The "signature" is a null-terminated string, composed of the following:
43399
43400   * The return type, including type qualifiers.  For example, a method
43401     returning `int' would have `i' here.
43402
43403   * The total size (in bytes) required to pass all the parameters.
43404     This includes the two hidden parameters (the object `self' and the
43405     method selector `_cmd').
43406
43407   * Each argument, with the type encoding, followed by the offset (in
43408     bytes) of the argument in the list of parameters.
43409
43410
43411 For example, a method with no arguments and returning `int' would have
43412the signature `i8@0:4' if the size of a pointer is 4.  The signature is
43413interpreted as follows: the `i' is the return type (an `int'), the `8'
43414is the total size of the parameters in bytes (two pointers each of size
434154), the `@0' is the first parameter (an object at byte offset `0') and
43416`:4' is the second parameter (a `SEL' at byte offset `4').
43417
43418 You can easily find more examples by running the "strings" program on
43419an Objective-C object file compiled by GCC.  You'll see a lot of
43420strings that look very much like `i8@0:4'.  They are signatures of
43421Objective-C methods.
43422
43423
43424File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
43425
434268.4 Garbage Collection
43427======================
43428
43429This section is specific for the GNU Objective-C runtime.  If you are
43430using a different runtime, you can skip it.
43431
43432 Support for garbage collection with the GNU runtime has been added by
43433using a powerful conservative garbage collector, known as the
43434Boehm-Demers-Weiser conservative garbage collector.
43435
43436 To enable the support for it you have to configure the compiler using
43437an additional argument, `--enable-objc-gc'.  This will build the
43438boehm-gc library, and build an additional runtime library which has
43439several enhancements to support the garbage collector.  The new library
43440has a new name, `libobjc_gc.a' to not conflict with the
43441non-garbage-collected library.
43442
43443 When the garbage collector is used, the objects are allocated using the
43444so-called typed memory allocation mechanism available in the
43445Boehm-Demers-Weiser collector.  This mode requires precise information
43446on where pointers are located inside objects.  This information is
43447computed once per class, immediately after the class has been
43448initialized.
43449
43450 There is a new runtime function `class_ivar_set_gcinvisible()' which
43451can be used to declare a so-called "weak pointer" reference.  Such a
43452pointer is basically hidden for the garbage collector; this can be
43453useful in certain situations, especially when you want to keep track of
43454the allocated objects, yet allow them to be collected.  This kind of
43455pointers can only be members of objects, you cannot declare a global
43456pointer as a weak reference.  Every type which is a pointer type can be
43457declared a weak pointer, including `id', `Class' and `SEL'.
43458
43459 Here is an example of how to use this feature.  Suppose you want to
43460implement a class whose instances hold a weak pointer reference; the
43461following class does this:
43462
43463
43464     @interface WeakPointer : Object
43465     {
43466         const void* weakPointer;
43467     }
43468
43469     - initWithPointer:(const void*)p;
43470     - (const void*)weakPointer;
43471     @end
43472
43473
43474     @implementation WeakPointer
43475
43476     + (void)initialize
43477     {
43478       if (self == objc_lookUpClass ("WeakPointer"))
43479         class_ivar_set_gcinvisible (self, "weakPointer", YES);
43480     }
43481
43482     - initWithPointer:(const void*)p
43483     {
43484       weakPointer = p;
43485       return self;
43486     }
43487
43488     - (const void*)weakPointer
43489     {
43490       return weakPointer;
43491     }
43492
43493     @end
43494
43495 Weak pointers are supported through a new type character specifier
43496represented by the `!' character.  The `class_ivar_set_gcinvisible()'
43497function adds or removes this specifier to the string type description
43498of the instance variable named as argument.
43499
43500
43501File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
43502
435038.5 Constant String Objects
43504===========================
43505
43506GNU Objective-C provides constant string objects that are generated
43507directly by the compiler.  You declare a constant string object by
43508prefixing a C constant string with the character `@':
43509
43510       id myString = @"this is a constant string object";
43511
43512 The constant string objects are by default instances of the
43513`NXConstantString' class which is provided by the GNU Objective-C
43514runtime.  To get the definition of this class you must include the
43515`objc/NXConstStr.h' header file.
43516
43517 User defined libraries may want to implement their own constant string
43518class.  To be able to support them, the GNU Objective-C compiler
43519provides a new command line options
43520`-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
43521to a strict structure, the same as `NXConstantString''s structure:
43522
43523
43524     @interface MyConstantStringClass
43525     {
43526       Class isa;
43527       char *c_string;
43528       unsigned int len;
43529     }
43530     @end
43531
43532 `NXConstantString' inherits from `Object'; user class libraries may
43533choose to inherit the customized constant string class from a different
43534class than `Object'.  There is no requirement in the methods the
43535constant string class has to implement, but the final ivar layout of
43536the class must be the compatible with the given structure.
43537
43538 When the compiler creates the statically allocated constant string
43539object, the `c_string' field will be filled by the compiler with the
43540string; the `length' field will be filled by the compiler with the
43541string length; the `isa' pointer will be filled with `NULL' by the
43542compiler, and it will later be fixed up automatically at runtime by the
43543GNU Objective-C runtime library to point to the class which was set by
43544the `-fconstant-string-class' option when the object file is loaded (if
43545you wonder how it works behind the scenes, the name of the class to
43546use, and the list of static objects to fixup, are stored by the
43547compiler in the object file in a place where the GNU runtime library
43548will find them at runtime).
43549
43550 As a result, when a file is compiled with the
43551`-fconstant-string-class' option, all the constant string objects will
43552be instances of the class specified as argument to this option.  It is
43553possible to have multiple compilation units referring to different
43554constant string classes, neither the compiler nor the linker impose any
43555restrictions in doing this.
43556
43557
43558File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C
43559
435608.6 `compatibility_alias'
43561=========================
43562
43563The keyword `@compatibility_alias' allows you to define a class name as
43564equivalent to another class name.  For example:
43565
43566     @compatibility_alias WOApplication GSWApplication;
43567
43568 tells the compiler that each time it encounters `WOApplication' as a
43569class name, it should replace it with `GSWApplication' (that is,
43570`WOApplication' is just an alias for `GSWApplication').
43571
43572 There are some constraints on how this can be used--
43573
43574   * `WOApplication' (the alias) must not be an existing class;
43575
43576   * `GSWApplication' (the real class) must be an existing class.
43577
43578
43579
43580File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C
43581
435828.7 Exceptions
43583==============
43584
43585GNU Objective-C provides exception support built into the language, as
43586in the following example:
43587
43588       @try {
43589         ...
43590            @throw expr;
43591         ...
43592       }
43593       @catch (AnObjCClass *exc) {
43594         ...
43595           @throw expr;
43596         ...
43597           @throw;
43598         ...
43599       }
43600       @catch (AnotherClass *exc) {
43601         ...
43602       }
43603       @catch (id allOthers) {
43604         ...
43605       }
43606       @finally {
43607         ...
43608           @throw expr;
43609         ...
43610       }
43611
43612 The `@throw' statement may appear anywhere in an Objective-C or
43613Objective-C++ program; when used inside of a `@catch' block, the
43614`@throw' may appear without an argument (as shown above), in which case
43615the object caught by the `@catch' will be rethrown.
43616
43617 Note that only (pointers to) Objective-C objects may be thrown and
43618caught using this scheme.  When an object is thrown, it will be caught
43619by the nearest `@catch' clause capable of handling objects of that
43620type, analogously to how `catch' blocks work in C++ and Java.  A
43621`@catch(id ...)' clause (as shown above) may also be provided to catch
43622any and all Objective-C exceptions not caught by previous `@catch'
43623clauses (if any).
43624
43625 The `@finally' clause, if present, will be executed upon exit from the
43626immediately preceding `@try ... @catch' section.  This will happen
43627regardless of whether any exceptions are thrown, caught or rethrown
43628inside the `@try ... @catch' section, analogously to the behavior of
43629the `finally' clause in Java.
43630
43631 There are several caveats to using the new exception mechanism:
43632
43633   * The `-fobjc-exceptions' command line option must be used when
43634     compiling Objective-C files that use exceptions.
43635
43636   * With the GNU runtime, exceptions are always implemented as "native"
43637     exceptions and it is recommended that the `-fexceptions' and
43638     `-shared-libgcc' options are used when linking.
43639
43640   * With the NeXT runtime, although currently designed to be binary
43641     compatible with `NS_HANDLER'-style idioms provided by the
43642     `NSException' class, the new exceptions can only be used on Mac OS
43643     X 10.3 (Panther) and later systems, due to additional functionality
43644     needed in the NeXT Objective-C runtime.
43645
43646   * As mentioned above, the new exceptions do not support handling
43647     types other than Objective-C objects.   Furthermore, when used from
43648     Objective-C++, the Objective-C exception model does not
43649     interoperate with C++ exceptions at this time.  This means you
43650     cannot `@throw' an exception from Objective-C and `catch' it in
43651     C++, or vice versa (i.e., `throw ... @catch').
43652
43653
43654File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C
43655
436568.8 Synchronization
43657===================
43658
43659GNU Objective-C provides support for synchronized blocks:
43660
43661       @synchronized (ObjCClass *guard) {
43662         ...
43663       }
43664
43665 Upon entering the `@synchronized' block, a thread of execution shall
43666first check whether a lock has been placed on the corresponding `guard'
43667object by another thread.  If it has, the current thread shall wait
43668until the other thread relinquishes its lock.  Once `guard' becomes
43669available, the current thread will place its own lock on it, execute
43670the code contained in the `@synchronized' block, and finally relinquish
43671the lock (thereby making `guard' available to other threads).
43672
43673 Unlike Java, Objective-C does not allow for entire methods to be
43674marked `@synchronized'.  Note that throwing exceptions out of
43675`@synchronized' blocks is allowed, and will cause the guarding object
43676to be unlocked properly.
43677
43678 Because of the interactions between synchronization and exception
43679handling, you can only use `@synchronized' when compiling with
43680exceptions enabled, that is with the command line option
43681`-fobjc-exceptions'.
43682
43683
43684File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C
43685
436868.9 Fast Enumeration
43687====================
43688
43689* Menu:
43690
43691* Using fast enumeration::
43692* c99-like fast enumeration syntax::
43693* Fast enumeration details::
43694* Fast enumeration protocol::
43695
43696
43697File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration
43698
436998.9.1 Using Fast Enumeration
43700----------------------------
43701
43702GNU Objective-C provides support for the fast enumeration syntax:
43703
43704       id array = ...;
43705       id object;
43706
43707       for (object in array)
43708       {
43709         /* Do something with 'object' */
43710       }
43711
43712 `array' needs to be an Objective-C object (usually a collection
43713object, for example an array, a dictionary or a set) which implements
43714the "Fast Enumeration Protocol" (see below).  If you are using a
43715Foundation library such as GNUstep Base or Apple Cocoa Foundation, all
43716collection objects in the library implement this protocol and can be
43717used in this way.
43718
43719 The code above would iterate over all objects in `array'.  For each of
43720them, it assigns it to `object', then executes the `Do something with
43721'object'' statements.
43722
43723 Here is a fully worked-out example using a Foundation library (which
43724provides the implementation of `NSArray', `NSString' and `NSLog'):
43725
43726       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
43727       NSString *object;
43728
43729       for (object in array)
43730         NSLog (@"Iterating over %@", object);
43731
43732
43733File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration
43734
437358.9.2 C99-Like Fast Enumeration Syntax
43736--------------------------------------
43737
43738A c99-like declaration syntax is also allowed:
43739
43740       id array = ...;
43741
43742       for (id object in array)
43743       {
43744         /* Do something with 'object'  */
43745       }
43746
43747 this is completely equivalent to:
43748
43749       id array = ...;
43750
43751       {
43752         id object;
43753         for (object in array)
43754         {
43755           /* Do something with 'object'  */
43756         }
43757       }
43758
43759 but can save some typing.
43760
43761 Note that the option `-std=c99' is not required to allow this syntax
43762in Objective-C.
43763
43764
43765File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration
43766
437678.9.3 Fast Enumeration Details
43768------------------------------
43769
43770Here is a more technical description with the gory details.  Consider
43771the code
43772
43773       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
43774       {
43775         STATEMENTS
43776       }
43777
43778 here is what happens when you run it:
43779
43780   * `COLLECTION EXPRESSION' is evaluated exactly once and the result
43781     is used as the collection object to iterate over.  This means it
43782     is safe to write code such as `for (object in [NSDictionary
43783     keyEnumerator]) ...'.
43784
43785   * the iteration is implemented by the compiler by repeatedly getting
43786     batches of objects from the collection object using the fast
43787     enumeration protocol (see below), then iterating over all objects
43788     in the batch.  This is faster than a normal enumeration where
43789     objects are retrieved one by one (hence the name "fast
43790     enumeration").
43791
43792   * if there are no objects in the collection, then `OBJECT
43793     EXPRESSION' is set to `nil' and the loop immediately terminates.
43794
43795   * if there are objects in the collection, then for each object in the
43796     collection (in the order they are returned) `OBJECT EXPRESSION' is
43797     set to the object, then `STATEMENTS' are executed.
43798
43799   * `STATEMENTS' can contain `break' and `continue' commands, which
43800     will abort the iteration or skip to the next loop iteration as
43801     expected.
43802
43803   * when the iteration ends because there are no more objects to
43804     iterate over, `OBJECT EXPRESSION' is set to `nil'.  This allows
43805     you to determine whether the iteration finished because a `break'
43806     command was used (in which case `OBJECT EXPRESSION' will remain
43807     set to the last object that was iterated over) or because it
43808     iterated over all the objects (in which case `OBJECT EXPRESSION'
43809     will be set to `nil').
43810
43811   * `STATEMENTS' must not make any changes to the collection object;
43812     if they do, it is a hard error and the fast enumeration terminates
43813     by invoking `objc_enumerationMutation', a runtime function that
43814     normally aborts the program but which can be customized by
43815     Foundation libraries via `objc_set_mutation_handler' to do
43816     something different, such as raising an exception.
43817
43818
43819
43820File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration
43821
438228.9.4 Fast Enumeration Protocol
43823-------------------------------
43824
43825If you want your own collection object to be usable with fast
43826enumeration, you need to have it implement the method
43827
43828     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
43829                                           objects: (id *)objects
43830                                             count: (unsigned long)len;
43831
43832 where `NSFastEnumerationState' must be defined in your code as follows:
43833
43834     typedef struct
43835     {
43836       unsigned long state;
43837       id            *itemsPtr;
43838       unsigned long *mutationsPtr;
43839       unsigned long extra[5];
43840     } NSFastEnumerationState;
43841
43842 If no `NSFastEnumerationState' is defined in your code, the compiler
43843will automatically replace `NSFastEnumerationState *' with `struct
43844__objcFastEnumerationState *', where that type is silently defined by
43845the compiler in an identical way.  This can be confusing and we
43846recommend that you define `NSFastEnumerationState' (as shown above)
43847instead.
43848
43849 The method is called repeatedly during a fast enumeration to retrieve
43850batches of objects.  Each invocation of the method should retrieve the
43851next batch of objects.
43852
43853 The return value of the method is the number of objects in the current
43854batch; this should not exceed `len', which is the maximum size of a
43855batch as requested by the caller.  The batch itself is returned in the
43856`itemsPtr' field of the `NSFastEnumerationState' struct.
43857
43858 To help with returning the objects, the `objects' array is a C array
43859preallocated by the caller (on the stack) of size `len'.  In many cases
43860you can put the objects you want to return in that `objects' array,
43861then do `itemsPtr = objects'.  But you don't have to; if your
43862collection already has the objects to return in some form of C array,
43863it could return them from there instead.
43864
43865 The `state' and `extra' fields of the `NSFastEnumerationState'
43866structure allows your collection object to keep track of the state of
43867the enumeration.  In a simple array implementation, `state' may keep
43868track of the index of the last object that was returned, and `extra'
43869may be unused.
43870
43871 The `mutationsPtr' field of the `NSFastEnumerationState' is used to
43872keep track of mutations.  It should point to a number; before working
43873on each object, the fast enumeration loop will check that this number
43874has not changed.  If it has, a mutation has happened and the fast
43875enumeration will abort.  So, `mutationsPtr' could be set to point to
43876some sort of version number of your collection, which is increased by
43877one every time there is a change (for example when an object is added
43878or removed).  Or, if you are content with less strict mutation checks,
43879it could point to the number of objects in your collection or some
43880other value that can be checked to perform an approximate check that
43881the collection has not been mutated.
43882
43883 Finally, note how we declared the `len' argument and the return value
43884to be of type `unsigned long'.  They could also be declared to be of
43885type `unsigned int' and everything would still work.
43886
43887
43888File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C
43889
438908.10 Messaging with the GNU Objective-C Runtime
43891===============================================
43892
43893This section is specific for the GNU Objective-C runtime.  If you are
43894using a different runtime, you can skip it.
43895
43896 The implementation of messaging in the GNU Objective-C runtime is
43897designed to be portable, and so is based on standard C.
43898
43899 Sending a message in the GNU Objective-C runtime is composed of two
43900separate steps.  First, there is a call to the lookup function,
43901`objc_msg_lookup ()' (or, in the case of messages to super,
43902`objc_msg_lookup_super ()').  This runtime function takes as argument
43903the receiver and the selector of the method to be called; it returns
43904the `IMP', that is a pointer to the function implementing the method.
43905The second step of method invocation consists of casting this pointer
43906function to the appropriate function pointer type, and calling the
43907function pointed to it with the right arguments.
43908
43909 For example, when the compiler encounters a method invocation such as
43910`[object init]', it compiles it into a call to `objc_msg_lookup
43911(object, @selector(init))' followed by a cast of the returned value to
43912the appropriate function pointer type, and then it calls it.
43913
43914* Menu:
43915
43916* Dynamically registering methods::
43917* Forwarding hook::
43918
43919
43920File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime
43921
439228.10.1 Dynamically Registering Methods
43923--------------------------------------
43924
43925If `objc_msg_lookup()' does not find a suitable method implementation,
43926because the receiver does not implement the required method, it tries
43927to see if the class can dynamically register the method.
43928
43929 To do so, the runtime checks if the class of the receiver implements
43930the method
43931
43932     + (BOOL) resolveInstanceMethod: (SEL)selector;
43933
43934 in the case of an instance method, or
43935
43936     + (BOOL) resolveClassMethod: (SEL)selector;
43937
43938 in the case of a class method.  If the class implements it, the
43939runtime invokes it, passing as argument the selector of the original
43940method, and if it returns `YES', the runtime tries the lookup again,
43941which could now succeed if a matching method was added dynamically by
43942`+resolveInstanceMethod:' or `+resolveClassMethod:'.
43943
43944 This allows classes to dynamically register methods (by adding them to
43945the class using `class_addMethod') when they are first called.  To do
43946so, a class should implement `+resolveInstanceMethod:' (or, depending
43947on the case, `+resolveClassMethod:') and have it recognize the
43948selectors of methods that can be registered dynamically at runtime,
43949register them, and return `YES'.  It should return `NO' for methods
43950that it does not dynamically registered at runtime.
43951
43952 If `+resolveInstanceMethod:' (or `+resolveClassMethod:') is not
43953implemented or returns `NO', the runtime then tries the forwarding hook.
43954
43955 Support for `+resolveInstanceMethod:' and `resolveClassMethod:' was
43956added to the GNU Objective-C runtime in GCC version 4.6.
43957
43958
43959File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime
43960
439618.10.2 Forwarding Hook
43962----------------------
43963
43964The GNU Objective-C runtime provides a hook, called
43965`__objc_msg_forward2', which is called by `objc_msg_lookup()' when it
43966can't find a method implementation in the runtime tables and after
43967calling `+resolveInstanceMethod:' and `+resolveClassMethod:' has been
43968attempted and did not succeed in dynamically registering the method.
43969
43970 To configure the hook, you set the global variable
43971`__objc_msg_forward2' to a function with the same argument and return
43972types of `objc_msg_lookup()'.  When `objc_msg_lookup()' can not find a
43973method implementation, it invokes the hook function you provided to get
43974a method implementation to return.  So, in practice
43975`__objc_msg_forward2' allows you to extend `objc_msg_lookup()' by
43976adding some custom code that is called to do a further lookup when no
43977standard method implementation can be found using the normal lookup.
43978
43979 This hook is generally reserved for "Foundation" libraries such as
43980GNUstep Base, which use it to implement their high-level method
43981forwarding API, typically based around the `forwardInvocation:' method.
43982So, unless you are implementing your own "Foundation" library, you
43983should not set this hook.
43984
43985 In a typical forwarding implementation, the `__objc_msg_forward2' hook
43986function determines the argument and return type of the method that is
43987being looked up, and then creates a function that takes these arguments
43988and has that return type, and returns it to the caller.  Creating this
43989function is non-trivial and is typically performed using a dedicated
43990library such as `libffi'.
43991
43992 The forwarding method implementation thus created is returned by
43993`objc_msg_lookup()' and is executed as if it was a normal method
43994implementation.  When the forwarding method implementation is called,
43995it is usually expected to pack all arguments into some sort of object
43996(typically, an `NSInvocation' in a "Foundation" library), and hand it
43997over to the programmer (`forwardInvocation:') who is then allowed to
43998manipulate the method invocation using a high-level API provided by the
43999"Foundation" library.  For example, the programmer may want to examine
44000the method invocation arguments and name and potentially change them
44001before forwarding the method invocation to one or more local objects
44002(`performInvocation:') or even to remote objects (by using Distributed
44003Objects or some other mechanism).  When all this completes, the return
44004value is passed back and must be returned correctly to the original
44005caller.
44006
44007 Note that the GNU Objective-C runtime currently provides no support
44008for method forwarding or method invocations other than the
44009`__objc_msg_forward2' hook.
44010
44011 If the forwarding hook does not exist or returns `NULL', the runtime
44012currently attempts forwarding using an older, deprecated API, and if
44013that fails, it aborts the program.  In future versions of the GNU
44014Objective-C runtime, the runtime will immediately abort.
44015
44016
44017File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
44018
440199 Binary Compatibility
44020**********************
44021
44022Binary compatibility encompasses several related concepts:
44023
44024"application binary interface (ABI)"
44025     The set of runtime conventions followed by all of the tools that
44026     deal with binary representations of a program, including
44027     compilers, assemblers, linkers, and language runtime support.
44028     Some ABIs are formal with a written specification, possibly
44029     designed by multiple interested parties.  Others are simply the
44030     way things are actually done by a particular set of tools.
44031
44032"ABI conformance"
44033     A compiler conforms to an ABI if it generates code that follows
44034     all of the specifications enumerated by that ABI.  A library
44035     conforms to an ABI if it is implemented according to that ABI.  An
44036     application conforms to an ABI if it is built using tools that
44037     conform to that ABI and does not contain source code that
44038     specifically changes behavior specified by the ABI.
44039
44040"calling conventions"
44041     Calling conventions are a subset of an ABI that specify of how
44042     arguments are passed and function results are returned.
44043
44044"interoperability"
44045     Different sets of tools are interoperable if they generate files
44046     that can be used in the same program.  The set of tools includes
44047     compilers, assemblers, linkers, libraries, header files, startup
44048     files, and debuggers.  Binaries produced by different sets of
44049     tools are not interoperable unless they implement the same ABI.
44050     This applies to different versions of the same tools as well as
44051     tools from different vendors.
44052
44053"intercallability"
44054     Whether a function in a binary built by one set of tools can call a
44055     function in a binary built by a different set of tools is a subset
44056     of interoperability.
44057
44058"implementation-defined features"
44059     Language standards include lists of implementation-defined
44060     features whose behavior can vary from one implementation to
44061     another.  Some of these features are normally covered by a
44062     platform's ABI and others are not.  The features that are not
44063     covered by an ABI generally affect how a program behaves, but not
44064     intercallability.
44065
44066"compatibility"
44067     Conformance to the same ABI and the same behavior of
44068     implementation-defined features are both relevant for
44069     compatibility.
44070
44071 The application binary interface implemented by a C or C++ compiler
44072affects code generation and runtime support for:
44073
44074   * size and alignment of data types
44075
44076   * layout of structured types
44077
44078   * calling conventions
44079
44080   * register usage conventions
44081
44082   * interfaces for runtime arithmetic support
44083
44084   * object file formats
44085
44086 In addition, the application binary interface implemented by a C++
44087compiler affects code generation and runtime support for:
44088   * name mangling
44089
44090   * exception handling
44091
44092   * invoking constructors and destructors
44093
44094   * layout, alignment, and padding of classes
44095
44096   * layout and alignment of virtual tables
44097
44098 Some GCC compilation options cause the compiler to generate code that
44099does not conform to the platform's default ABI.  Other options cause
44100different program behavior for implementation-defined features that are
44101not covered by an ABI.  These options are provided for consistency with
44102other compilers that do not follow the platform's default ABI or the
44103usual behavior of implementation-defined features for the platform.  Be
44104very careful about using such options.
44105
44106 Most platforms have a well-defined ABI that covers C code, but ABIs
44107that cover C++ functionality are not yet common.
44108
44109 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
44110written, vendor-neutral C++ ABI that was designed to be specific to
4411164-bit Itanium but also includes generic specifications that apply to
44112any platform.  This C++ ABI is also implemented by other compiler
44113vendors on some platforms, notably GNU/Linux and BSD systems.  We have
44114tried hard to provide a stable ABI that will be compatible with future
44115GCC releases, but it is possible that we will encounter problems that
44116make this difficult.  Such problems could include different
44117interpretations of the C++ ABI by different vendors, bugs in the ABI, or
44118bugs in the implementation of the ABI in different compilers.  GCC's
44119`-Wabi' switch warns when G++ generates code that is probably not
44120compatible with the C++ ABI.
44121
44122 The C++ library used with a C++ compiler includes the Standard C++
44123Library, with functionality defined in the C++ Standard, plus language
44124runtime support.  The runtime support is included in a C++ ABI, but
44125there is no formal ABI for the Standard C++ Library.  Two
44126implementations of that library are interoperable if one follows the
44127de-facto ABI of the other and if they are both built with the same
44128compiler, or with compilers that conform to the same ABI for C++
44129compiler and runtime support.
44130
44131 When G++ and another C++ compiler conform to the same C++ ABI, but the
44132implementations of the Standard C++ Library that they normally use do
44133not follow the same ABI for the Standard C++ Library, object files
44134built with those compilers can be used in the same program only if they
44135use the same C++ library.  This requires specifying the location of the
44136C++ library header files when invoking the compiler whose usual library
44137is not being used.  The location of GCC's C++ header files depends on
44138how the GCC build was configured, but can be seen by using the G++ `-v'
44139option.  With default configuration options for G++ 3.3 the compile
44140line for a different C++ compiler needs to include
44141
44142         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
44143
44144 Similarly, compiling code with G++ that must use a C++ library other
44145than the GNU C++ library requires specifying the location of the header
44146files for that other library.
44147
44148 The most straightforward way to link a program to use a particular C++
44149library is to use a C++ driver that specifies that C++ library by
44150default.  The `g++' driver, for example, tells the linker where to find
44151GCC's C++ library (`libstdc++') plus the other libraries and startup
44152files it needs, in the proper order.
44153
44154 If a program must use a different C++ library and it's not possible to
44155do the final link using a C++ driver that uses that library by default,
44156it is necessary to tell `g++' the location and name of that library.
44157It might also be necessary to specify different startup files and other
44158runtime support libraries, and to suppress the use of GCC's support
44159libraries with one or more of the options `-nostdlib', `-nostartfiles',
44160and `-nodefaultlibs'.
44161
44162
44163File: gcc.info,  Node: Gcov,  Next: Gcov-tool,  Prev: Compatibility,  Up: Top
44164
4416510 `gcov'--a Test Coverage Program
44166**********************************
44167
44168`gcov' is a tool you can use in conjunction with GCC to test code
44169coverage in your programs.
44170
44171* Menu:
44172
44173* Gcov Intro::                  Introduction to gcov.
44174* Invoking Gcov::               How to use gcov.
44175* Gcov and Optimization::       Using gcov with GCC optimization.
44176* Gcov Data Files::             The files used by gcov.
44177* Cross-profiling::             Data file relocation.
44178
44179
44180File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
44181
4418210.1 Introduction to `gcov'
44183===========================
44184
44185`gcov' is a test coverage program.  Use it in concert with GCC to
44186analyze your programs to help create more efficient, faster running
44187code and to discover untested parts of your program.  You can use
44188`gcov' as a profiling tool to help discover where your optimization
44189efforts will best affect your code.  You can also use `gcov' along with
44190the other profiling tool, `gprof', to assess which parts of your code
44191use the greatest amount of computing time.
44192
44193 Profiling tools help you analyze your code's performance.  Using a
44194profiler such as `gcov' or `gprof', you can find out some basic
44195performance statistics, such as:
44196
44197   * how often each line of code executes
44198
44199   * what lines of code are actually executed
44200
44201   * how much computing time each section of code uses
44202
44203 Once you know these things about how your code works when compiled, you
44204can look at each module to see which modules should be optimized.
44205`gcov' helps you determine where to work on optimization.
44206
44207 Software developers also use coverage testing in concert with
44208testsuites, to make sure software is actually good enough for a release.
44209Testsuites can verify that a program works as expected; a coverage
44210program tests to see how much of the program is exercised by the
44211testsuite.  Developers can then determine what kinds of test cases need
44212to be added to the testsuites to create both better testing and a better
44213final product.
44214
44215 You should compile your code without optimization if you plan to use
44216`gcov' because the optimization, by combining some lines of code into
44217one function, may not give you as much information as you need to look
44218for `hot spots' where the code is using a great deal of computer time.
44219Likewise, because `gcov' accumulates statistics by line (at the lowest
44220resolution), it works best with a programming style that places only
44221one statement on each line.  If you use complicated macros that expand
44222to loops or to other control structures, the statistics are less
44223helpful--they only report on the line where the macro call appears.  If
44224your complex macros behave like functions, you can replace them with
44225inline functions to solve this problem.
44226
44227 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
44228many times each line of a source file `SOURCEFILE.c' has executed.  You
44229can use these logfiles along with `gprof' to aid in fine-tuning the
44230performance of your programs.  `gprof' gives timing information you can
44231use along with the information you get from `gcov'.
44232
44233 `gcov' works only on code compiled with GCC.  It is not compatible
44234with any other profiling or test coverage mechanism.
44235
44236
44237File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
44238
4423910.2 Invoking `gcov'
44240====================
44241
44242     gcov [OPTIONS] FILES
44243
44244 `gcov' accepts the following options:
44245
44246`-h'
44247`--help'
44248     Display help about using `gcov' (on the standard output), and exit
44249     without doing any further processing.
44250
44251`-v'
44252`--version'
44253     Display the `gcov' version number (on the standard output), and
44254     exit without doing any further processing.
44255
44256`-a'
44257`--all-blocks'
44258     Write individual execution counts for every basic block.  Normally
44259     gcov outputs execution counts only for the main blocks of a line.
44260     With this option you can determine if blocks within a single line
44261     are not being executed.
44262
44263`-b'
44264`--branch-probabilities'
44265     Write branch frequencies to the output file, and write branch
44266     summary info to the standard output.  This option allows you to
44267     see how often each branch in your program was taken.
44268     Unconditional branches will not be shown, unless the `-u' option
44269     is given.
44270
44271`-c'
44272`--branch-counts'
44273     Write branch frequencies as the number of branches taken, rather
44274     than the percentage of branches taken.
44275
44276`-n'
44277`--no-output'
44278     Do not create the `gcov' output file.
44279
44280`-l'
44281`--long-file-names'
44282     Create long file names for included source files.  For example, if
44283     the header file `x.h' contains code, and was included in the file
44284     `a.c', then running `gcov' on the file `a.c' will produce an
44285     output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
44286     can be useful if `x.h' is included in multiple source files and
44287     you want to see the individual contributions.  If you use the `-p'
44288     option, both the including and included file names will be
44289     complete path names.
44290
44291`-p'
44292`--preserve-paths'
44293     Preserve complete path information in the names of generated
44294     `.gcov' files.  Without this option, just the filename component is
44295     used.  With this option, all directories are used, with `/'
44296     characters translated to `#' characters, `.' directory components
44297     removed and unremoveable `..' components renamed to `^'.  This is
44298     useful if sourcefiles are in several different directories.
44299
44300`-r'
44301`--relative-only'
44302     Only output information about source files with a relative pathname
44303     (after source prefix elision).  Absolute paths are usually system
44304     header files and coverage of any inline functions therein is
44305     normally uninteresting.
44306
44307`-f'
44308`--function-summaries'
44309     Output summaries for each function in addition to the file level
44310     summary.
44311
44312`-o DIRECTORY|FILE'
44313`--object-directory DIRECTORY'
44314`--object-file FILE'
44315     Specify either the directory containing the gcov data files, or the
44316     object path name.  The `.gcno', and `.gcda' data files are
44317     searched for using this option.  If a directory is specified, the
44318     data files are in that directory and named after the input file
44319     name, without its extension.  If a file is specified here, the
44320     data files are named after that file, without its extension.
44321
44322`-s DIRECTORY'
44323`--source-prefix DIRECTORY'
44324     A prefix for source file names to remove when generating the output
44325     coverage files.  This option is useful when building in a separate
44326     directory, and the pathname to the source directory is not wanted
44327     when determining the output file names.  Note that this prefix
44328     detection is applied before determining whether the source file is
44329     absolute.
44330
44331`-u'
44332`--unconditional-branches'
44333     When branch probabilities are given, include those of
44334     unconditional branches.  Unconditional branches are normally not
44335     interesting.
44336
44337`-d'
44338`--display-progress'
44339     Display the progress on the standard output.
44340
44341`-i'
44342`--intermediate-format'
44343     Output gcov file in an easy-to-parse intermediate text format that
44344     can be used by `lcov' or other tools. The output is a single
44345     `.gcov' file per `.gcda' file. No source code is required.
44346
44347     The format of the intermediate `.gcov' file is plain text with one
44348     entry per line
44349
44350          file:SOURCE_FILE_NAME
44351          function:LINE_NUMBER,EXECUTION_COUNT,FUNCTION_NAME
44352          lcount:LINE NUMBER,EXECUTION_COUNT
44353          branch:LINE_NUMBER,BRANCH_COVERAGE_TYPE
44354
44355          Where the BRANCH_COVERAGE_TYPE is
44356             notexec (Branch not executed)
44357             taken (Branch executed and taken)
44358             nottaken (Branch executed, but not taken)
44359
44360          There can be multiple FILE entries in an intermediate gcov
44361          file. All entries following a FILE pertain to that source file
44362          until the next FILE entry.
44363
44364     Here is a sample when `-i' is used in conjunction with `-b' option:
44365
44366          file:array.cc
44367          function:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE
44368          function:22,1,main
44369          lcount:11,1
44370          lcount:12,1
44371          lcount:14,1
44372          branch:14,taken
44373          lcount:26,1
44374          branch:28,nottaken
44375
44376`-m'
44377`--demangled-names'
44378     Display demangled function names in output. The default is to show
44379     mangled function names.
44380
44381
44382 `gcov' should be run with the current directory the same as that when
44383you invoked the compiler.  Otherwise it will not be able to locate the
44384source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
44385current directory.  These contain the coverage information of the
44386source file they correspond to.  One `.gcov' file is produced for each
44387source (or header) file containing code, which was compiled to produce
44388the data files.  The MANGLEDNAME part of the output file name is
44389usually simply the source file name, but can be something more
44390complicated if the `-l' or `-p' options are given.  Refer to those
44391options for details.
44392
44393 If you invoke `gcov' with multiple input files, the contributions from
44394each input file are summed.  Typically you would invoke it with the
44395same list of files as the final link of your executable.
44396
44397 The `.gcov' files contain the `:' separated fields along with program
44398source code.  The format is
44399
44400     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
44401
44402 Additional block information may succeed each line, when requested by
44403command line option.  The EXECUTION_COUNT is `-' for lines containing
44404no code.  Unexecuted lines are marked `#####' or `====', depending on
44405whether they are reachable by non-exceptional paths or only exceptional
44406paths such as C++ exception handlers, respectively.
44407
44408 Some lines of information at the start have LINE_NUMBER of zero.
44409These preamble lines are of the form
44410
44411     -:0:TAG:VALUE
44412
44413 The ordering and number of these preamble lines will be augmented as
44414`gcov' development progresses -- do not rely on them remaining
44415unchanged.  Use TAG to locate a particular preamble line.
44416
44417 The additional block information is of the form
44418
44419     TAG INFORMATION
44420
44421 The INFORMATION is human readable, but designed to be simple enough
44422for machine parsing too.
44423
44424 When printing percentages, 0% and 100% are only printed when the values
44425are _exactly_ 0% and 100% respectively.  Other values which would
44426conventionally be rounded to 0% or 100% are instead printed as the
44427nearest non-boundary value.
44428
44429 When using `gcov', you must first compile your program with two
44430special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
44431compiler to generate additional information needed by gcov (basically a
44432flow graph of the program) and also includes additional code in the
44433object files for generating the extra profiling information needed by
44434gcov.  These additional files are placed in the directory where the
44435object file is located.
44436
44437 Running the program will cause profile output to be generated.  For
44438each source file compiled with `-fprofile-arcs', an accompanying
44439`.gcda' file will be placed in the object file directory.
44440
44441 Running `gcov' with your program's source file names as arguments will
44442now produce a listing of the code along with frequency of execution for
44443each line.  For example, if your program is called `tmp.c', this is
44444what you see when you use the basic `gcov' facility:
44445
44446     $ gcc -fprofile-arcs -ftest-coverage tmp.c
44447     $ a.out
44448     $ gcov tmp.c
44449     90.00% of 10 source lines executed in file tmp.c
44450     Creating tmp.c.gcov.
44451
44452 The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
44453
44454             -:    0:Source:tmp.c
44455             -:    0:Graph:tmp.gcno
44456             -:    0:Data:tmp.gcda
44457             -:    0:Runs:1
44458             -:    0:Programs:1
44459             -:    1:#include <stdio.h>
44460             -:    2:
44461             -:    3:int main (void)
44462             1:    4:{
44463             1:    5:  int i, total;
44464             -:    6:
44465             1:    7:  total = 0;
44466             -:    8:
44467            11:    9:  for (i = 0; i < 10; i++)
44468            10:   10:    total += i;
44469             -:   11:
44470             1:   12:  if (total != 45)
44471         #####:   13:    printf ("Failure\n");
44472             -:   14:  else
44473             1:   15:    printf ("Success\n");
44474             1:   16:  return 0;
44475             -:   17:}
44476
44477 When you use the `-a' option, you will get individual block counts,
44478and the output looks like this:
44479
44480             -:    0:Source:tmp.c
44481             -:    0:Graph:tmp.gcno
44482             -:    0:Data:tmp.gcda
44483             -:    0:Runs:1
44484             -:    0:Programs:1
44485             -:    1:#include <stdio.h>
44486             -:    2:
44487             -:    3:int main (void)
44488             1:    4:{
44489             1:    4-block  0
44490             1:    5:  int i, total;
44491             -:    6:
44492             1:    7:  total = 0;
44493             -:    8:
44494            11:    9:  for (i = 0; i < 10; i++)
44495            11:    9-block  0
44496            10:   10:    total += i;
44497            10:   10-block  0
44498             -:   11:
44499             1:   12:  if (total != 45)
44500             1:   12-block  0
44501         #####:   13:    printf ("Failure\n");
44502         $$$$$:   13-block  0
44503             -:   14:  else
44504             1:   15:    printf ("Success\n");
44505             1:   15-block  0
44506             1:   16:  return 0;
44507             1:   16-block  0
44508             -:   17:}
44509
44510 In this mode, each basic block is only shown on one line - the last
44511line of the block.  A multi-line block will only contribute to the
44512execution count of that last line, and other lines will not be shown to
44513contain code, unless previous blocks end on those lines.  The total
44514execution count of a line is shown and subsequent lines show the
44515execution counts for individual blocks that end on that line.  After
44516each block, the branch and call counts of the block will be shown, if
44517the `-b' option is given.
44518
44519 Because of the way GCC instruments calls, a call count can be shown
44520after a line with no individual blocks.  As you can see, line 13
44521contains a basic block that was not executed.
44522
44523 When you use the `-b' option, your output looks like this:
44524
44525     $ gcov -b tmp.c
44526     90.00% of 10 source lines executed in file tmp.c
44527     80.00% of 5 branches executed in file tmp.c
44528     80.00% of 5 branches taken at least once in file tmp.c
44529     50.00% of 2 calls executed in file tmp.c
44530     Creating tmp.c.gcov.
44531
44532 Here is a sample of a resulting `tmp.c.gcov' file:
44533
44534             -:    0:Source:tmp.c
44535             -:    0:Graph:tmp.gcno
44536             -:    0:Data:tmp.gcda
44537             -:    0:Runs:1
44538             -:    0:Programs:1
44539             -:    1:#include <stdio.h>
44540             -:    2:
44541             -:    3:int main (void)
44542     function main called 1 returned 1 blocks executed 75%
44543             1:    4:{
44544             1:    5:  int i, total;
44545             -:    6:
44546             1:    7:  total = 0;
44547             -:    8:
44548            11:    9:  for (i = 0; i < 10; i++)
44549     branch  0 taken 91% (fallthrough)
44550     branch  1 taken 9%
44551            10:   10:    total += i;
44552             -:   11:
44553             1:   12:  if (total != 45)
44554     branch  0 taken 0% (fallthrough)
44555     branch  1 taken 100%
44556         #####:   13:    printf ("Failure\n");
44557     call    0 never executed
44558             -:   14:  else
44559             1:   15:    printf ("Success\n");
44560     call    0 called 1 returned 100%
44561             1:   16:  return 0;
44562             -:   17:}
44563
44564 For each function, a line is printed showing how many times the
44565function is called, how many times it returns and what percentage of the
44566function's blocks were executed.
44567
44568 For each basic block, a line is printed after the last line of the
44569basic block describing the branch or call that ends the basic block.
44570There can be multiple branches and calls listed for a single source
44571line if there are multiple basic blocks that end on that line.  In this
44572case, the branches and calls are each given a number.  There is no
44573simple way to map these branches and calls back to source constructs.
44574In general, though, the lowest numbered branch or call will correspond
44575to the leftmost construct on the source line.
44576
44577 For a branch, if it was executed at least once, then a percentage
44578indicating the number of times the branch was taken divided by the
44579number of times the branch was executed will be printed.  Otherwise, the
44580message "never executed" is printed.
44581
44582 For a call, if it was executed at least once, then a percentage
44583indicating the number of times the call returned divided by the number
44584of times the call was executed will be printed.  This will usually be
44585100%, but may be less for functions that call `exit' or `longjmp', and
44586thus may not return every time they are called.
44587
44588 The execution counts are cumulative.  If the example program were
44589executed again without removing the `.gcda' file, the count for the
44590number of times each line in the source was executed would be added to
44591the results of the previous run(s).  This is potentially useful in
44592several ways.  For example, it could be used to accumulate data over a
44593number of program runs as part of a test verification suite, or to
44594provide more accurate long-term information over a large number of
44595program runs.
44596
44597 The data in the `.gcda' files is saved immediately before the program
44598exits.  For each source file compiled with `-fprofile-arcs', the
44599profiling code first attempts to read in an existing `.gcda' file; if
44600the file doesn't match the executable (differing number of basic block
44601counts) it will ignore the contents of the file.  It then adds in the
44602new execution counts and finally writes the data to the file.
44603
44604
44605File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
44606
4460710.3 Using `gcov' with GCC Optimization
44608=======================================
44609
44610If you plan to use `gcov' to help optimize your code, you must first
44611compile your program with two special GCC options: `-fprofile-arcs
44612-ftest-coverage'.  Aside from that, you can use any other GCC options;
44613but if you want to prove that every single line in your program was
44614executed, you should not compile with optimization at the same time.
44615On some machines the optimizer can eliminate some simple code lines by
44616combining them with other lines.  For example, code like this:
44617
44618     if (a != b)
44619       c = 1;
44620     else
44621       c = 0;
44622
44623can be compiled into one instruction on some machines.  In this case,
44624there is no way for `gcov' to calculate separate execution counts for
44625each line because there isn't separate code for each line.  Hence the
44626`gcov' output looks like this if you compiled the program with
44627optimization:
44628
44629           100:   12:if (a != b)
44630           100:   13:  c = 1;
44631           100:   14:else
44632           100:   15:  c = 0;
44633
44634 The output shows that this block of code, combined by optimization,
44635executed 100 times.  In one sense this result is correct, because there
44636was only one instruction representing all four of these lines.  However,
44637the output does not indicate how many times the result was 0 and how
44638many times the result was 1.
44639
44640 Inlineable functions can create unexpected line counts.  Line counts
44641are shown for the source code of the inlineable function, but what is
44642shown depends on where the function is inlined, or if it is not inlined
44643at all.
44644
44645 If the function is not inlined, the compiler must emit an out of line
44646copy of the function, in any object file that needs it.  If `fileA.o'
44647and `fileB.o' both contain out of line bodies of a particular
44648inlineable function, they will also both contain coverage counts for
44649that function.  When `fileA.o' and `fileB.o' are linked together, the
44650linker will, on many systems, select one of those out of line bodies
44651for all calls to that function, and remove or ignore the other.
44652Unfortunately, it will not remove the coverage counters for the unused
44653function body.  Hence when instrumented, all but one use of that
44654function will show zero counts.
44655
44656 If the function is inlined in several places, the block structure in
44657each location might not be the same.  For instance, a condition might
44658now be calculable at compile time in some instances.  Because the
44659coverage of all the uses of the inline function will be shown for the
44660same source lines, the line counts themselves might seem inconsistent.
44661
44662 Long-running applications can use the `_gcov_reset' and `_gcov_dump'
44663facilities to restrict profile collection to the program region of
44664interest. Calling `_gcov_reset(void)' will clear all profile counters
44665to zero, and calling `_gcov_dump(void)' will cause the profile
44666information collected at that point to be dumped to `.gcda' output
44667files.
44668
44669
44670File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
44671
4467210.4 Brief Description of `gcov' Data Files
44673===========================================
44674
44675`gcov' uses two files for profiling.  The names of these files are
44676derived from the original _object_ file by substituting the file suffix
44677with either `.gcno', or `.gcda'.  The files contain coverage and
44678profile data stored in a platform-independent format.  The `.gcno'
44679files are placed in the same directory as the object file.  By default,
44680the `.gcda' files are also stored in the same directory as the object
44681file, but the GCC `-fprofile-dir' option may be used to store the
44682`.gcda' files in a separate directory.
44683
44684 The `.gcno' notes file is generated when the source file is compiled
44685with the GCC `-ftest-coverage' option.  It contains information to
44686reconstruct the basic block graphs and assign source line numbers to
44687blocks.
44688
44689 The `.gcda' count data file is generated when a program containing
44690object files built with the GCC `-fprofile-arcs' option is executed.  A
44691separate `.gcda' file is created for each object file compiled with
44692this option.  It contains arc transition counts, value profile counts,
44693and some summary information.
44694
44695 The full details of the file format is specified in `gcov-io.h', and
44696functions provided in that header file should be used to access the
44697coverage files.
44698
44699
44700File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
44701
4470210.5 Data File Relocation to Support Cross-Profiling
44703====================================================
44704
44705Running the program will cause profile output to be generated.  For each
44706source file compiled with `-fprofile-arcs', an accompanying `.gcda'
44707file will be placed in the object file directory. That implicitly
44708requires running the program on the same system as it was built or
44709having the same absolute directory structure on the target system. The
44710program will try to create the needed directory structure, if it is not
44711already present.
44712
44713 To support cross-profiling, a program compiled with `-fprofile-arcs'
44714can relocate the data files based on two environment variables:
44715
44716   * GCOV_PREFIX contains the prefix to add to the absolute paths in
44717     the object file. Prefix can be absolute, or relative.  The default
44718     is no prefix.
44719
44720   * GCOV_PREFIX_STRIP indicates the how many initial directory names
44721     to strip off the hardwired absolute paths. Default value is 0.
44722
44723     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
44724     undefined,  then a relative path is made out of the hardwired
44725     absolute paths.
44726
44727 For example, if the object file `/user/build/foo.o' was built with
44728`-fprofile-arcs', the final executable will try to create the data file
44729`/user/build/foo.gcda' when running on the target system.  This will
44730fail if the corresponding directory does not exist and it is unable to
44731create it.  This can be overcome by, for example, setting the
44732environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
44733Such a setting will name the data file `/target/run/build/foo.gcda'.
44734
44735 You must move the data files to the expected directory tree in order to
44736use them for profile directed optimizations (`--use-profile'), or to
44737use the `gcov' tool.
44738
44739
44740File: gcc.info,  Node: Gcov-tool,  Next: Trouble,  Prev: Gcov,  Up: Top
44741
4474211 `gcov-tool'--an Offline Gcda Profile Processing Tool
44743*******************************************************
44744
44745`gcov-tool' is a tool you can use in conjunction with GCC to manipulate
44746or process gcda profile files offline.
44747
44748* Menu:
44749
44750* Gcov-tool Intro::             Introduction to gcov-tool.
44751* Invoking Gcov-tool::          How to use gcov-tool.
44752
44753
44754File: gcc.info,  Node: Gcov-tool Intro,  Next: Invoking Gcov-tool,  Up: Gcov-tool
44755
4475611.1 Introduction to `gcov-tool'
44757================================
44758
44759`gcov-tool' is an offline tool to process gcc's gcda profile files.
44760
44761 Current gcov-tool supports the following functionalities:
44762
44763   * merge two sets of profiles with weights.
44764
44765   * read one set of profile and rewrite profile contents. One can
44766     scale or normalize the count values.
44767
44768 Examples of the use cases for this tool are:
44769   * Collect the profiles for different set of inputs, and use this
44770     tool to merge them. One can specify the weight to factor in the
44771     relative importance of each input.
44772
44773   * Rewrite the profile after removing a subset of the gcda files,
44774     while maintaining the consistency of the summary and the histogram.
44775
44776   * It can also be used to debug or libgcov code as the tools shares
44777     the majority code as the runtime library.
44778
44779 Note that for the merging operation, this profile generated offline may
44780contain slight different values from the online merged profile. Here are
44781a list of typical differences:
44782
44783   * histogram difference: This offline tool recomputes the histogram
44784     after merging the counters. The resulting histogram, therefore, is
44785     precise. The online merging does not have this capability - the
44786     histogram is merged from two histograms and the result is an
44787     approximation.
44788
44789   * summary checksum difference: Summary checksum uses a CRC32
44790     operation. The value depends on the link list order of gcov-info
44791     objects. This order is different in gcov-tool from that in the
44792     online merge. It's expected to have different summary checksums.
44793     It does not really matter as the compiler does not use this
44794     checksum anywhere.
44795
44796   * value profile counter values difference: Some counter values for
44797     value profile are runtime dependent, like heap addresses. It's
44798     normal to see some difference in these kind of counters.
44799
44800
44801File: gcc.info,  Node: Invoking Gcov-tool,  Prev: Gcov-tool Intro,  Up: Gcov-tool
44802
4480311.2 Invoking `gcov-tool'
44804=========================
44805
44806     gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR
44807
44808 `gcov-tool' accepts the following options:
44809
44810`-h'
44811`--help'
44812     Display help about using `gcov-tool' (on the standard output), and
44813     exit without doing any further processing.
44814
44815`-v'
44816`--version'
44817     Display the `gcov-tool' version number (on the standard output),
44818     and exit without doing any further processing.
44819
44820`merge'
44821     Merge two profile directories.
44822
44823    `-v'
44824    `--verbose'
44825          Set the verbose mode.
44826
44827    `-o DIRECTORY'
44828    `--output DIRECTORY'
44829          Set the output profile directory. Default output directory
44830          name is MERGED_PROFILE.
44831
44832    `-w W1,W2'
44833    `--weight W1,W2'
44834          Set the merge weights of the DIRECTORY1 and DIRECTORY2,
44835          respectively. The default weights are 1 for both.
44836
44837`rewrite'
44838     Read the specified profile directory and rewrite to a new
44839     directory.
44840
44841    `-v'
44842    `--verbose'
44843          Set the verbose mode.
44844
44845    `-o DIRECTORY'
44846    `--output DIRECTORY'
44847          Set the output profile directory. Default output name is
44848          REWRITE_PROFILE.
44849
44850    `-s FLOAT_OR_SIMPLE-FRAC_VALUE'
44851    `--scale FLOAT_OR_SIMPLE-FRAC_VALUE'
44852          Scale the profile counters. The specified value can be in
44853          floating point value, or simple fraction value form, such 1,
44854          2, 2/3, and 5/3.
44855
44856    `-n LONG_LONG_VALUE'
44857    `--normalize <long_long_value>'
44858          Normalize the profile. The specified value is the max counter
44859          value in the new profile.
44860
44861`overlap'
44862     Computer the overlap score between the two specified profile
44863     directories.  The overlap score is computed based on the arc
44864     profiles. It is defined as the sum of min (p1_counter[i] /
44865     p1_sum_all, p2_counter[i] / p2_sum_all), for all arc counter i,
44866     where p1_counter[i] and p2_counter[i] are two matched counters and
44867     p1_sum_all and p2_sum_all are the sum of counter values in profile
44868     1 and profile 2, respectively.
44869
44870    `-v'
44871    `--verbose'
44872          Set the verbose mode.
44873
44874    `-h'
44875    `--hotonly'
44876          Only print info for hot objects/functions.
44877
44878    `-f'
44879    `--function'
44880          Print function level overlap score.
44881
44882    `-F'
44883    `--fullname'
44884          Print full gcda filename.
44885
44886    `-o'
44887    `--object'
44888          Print object level overlap score.
44889
44890    `-t FLOAT'
44891    `--hot_threshold <float>'
44892          Set the threshold for hot counter value.
44893
44894
44895
44896File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov-tool,  Up: Top
44897
4489812 Known Causes of Trouble with GCC
44899***********************************
44900
44901This section describes known problems that affect users of GCC.  Most
44902of these are not GCC bugs per se--if they were, we would fix them.  But
44903the result for a user may be like the result of a bug.
44904
44905 Some of these problems are due to bugs in other software, some are
44906missing features that are too much work to add, and some are places
44907where people's opinions differ as to what is best.
44908
44909* Menu:
44910
44911* Actual Bugs::         Bugs we will fix later.
44912* Interoperation::      Problems using GCC with other compilers,
44913                        and with certain linkers, assemblers and debuggers.
44914* Incompatibilities::   GCC is incompatible with traditional C.
44915* Fixed Headers::       GCC uses corrected versions of system header files.
44916                        This is necessary, but doesn't always work smoothly.
44917* Standard Libraries::  GCC uses the system C library, which might not be
44918                        compliant with the ISO C standard.
44919* Disappointments::     Regrettable things we can't change, but not quite bugs.
44920* C++ Misunderstandings:: Common misunderstandings with GNU C++.
44921* Non-bugs::            Things we think are right, but some others disagree.
44922* Warnings and Errors:: Which problems in your code get warnings,
44923                        and which get errors.
44924
44925
44926File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble
44927
4492812.1 Actual Bugs We Haven't Fixed Yet
44929=====================================
44930
44931   * The `fixincludes' script interacts badly with automounters; if the
44932     directory of system header files is automounted, it tends to be
44933     unmounted while `fixincludes' is running.  This would seem to be a
44934     bug in the automounter.  We don't know any good way to work around
44935     it.
44936
44937
44938File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble
44939
4494012.2 Interoperation
44941===================
44942
44943This section lists various difficulties encountered in using GCC
44944together with other compilers or with the assemblers, linkers,
44945libraries and debuggers on certain systems.
44946
44947   * On many platforms, GCC supports a different ABI for C++ than do
44948     other compilers, so the object files compiled by GCC cannot be
44949     used with object files generated by another C++ compiler.
44950
44951     An area where the difference is most apparent is name mangling.
44952     The use of different name mangling is intentional, to protect you
44953     from more subtle problems.  Compilers differ as to many internal
44954     details of C++ implementation, including: how class instances are
44955     laid out, how multiple inheritance is implemented, and how virtual
44956     function calls are handled.  If the name encoding were made the
44957     same, your programs would link against libraries provided from
44958     other compilers--but the programs would then crash when run.
44959     Incompatible libraries are then detected at link time, rather than
44960     at run time.
44961
44962   * On some BSD systems, including some versions of Ultrix, use of
44963     profiling causes static variable destructors (currently used only
44964     in C++) not to be run.
44965
44966   * On a SPARC, GCC aligns all values of type `double' on an 8-byte
44967     boundary, and it expects every `double' to be so aligned.  The Sun
44968     compiler usually gives `double' values 8-byte alignment, with one
44969     exception: function arguments of type `double' may not be aligned.
44970
44971     As a result, if a function compiled with Sun CC takes the address
44972     of an argument of type `double' and passes this pointer of type
44973     `double *' to a function compiled with GCC, dereferencing the
44974     pointer may cause a fatal signal.
44975
44976     One way to solve this problem is to compile your entire program
44977     with GCC.  Another solution is to modify the function that is
44978     compiled with Sun CC to copy the argument into a local variable;
44979     local variables are always properly aligned.  A third solution is
44980     to modify the function that uses the pointer to dereference it via
44981     the following function `access_double' instead of directly with
44982     `*':
44983
44984          inline double
44985          access_double (double *unaligned_ptr)
44986          {
44987            union d2i { double d; int i[2]; };
44988
44989            union d2i *p = (union d2i *) unaligned_ptr;
44990            union d2i u;
44991
44992            u.i[0] = p->i[0];
44993            u.i[1] = p->i[1];
44994
44995            return u.d;
44996          }
44997
44998     Storing into the pointer can be done likewise with the same union.
44999
45000   * On Solaris, the `malloc' function in the `libmalloc.a' library may
45001     allocate memory that is only 4 byte aligned.  Since GCC on the
45002     SPARC assumes that doubles are 8 byte aligned, this may result in a
45003     fatal signal if doubles are stored in memory allocated by the
45004     `libmalloc.a' library.
45005
45006     The solution is to not use the `libmalloc.a' library.  Use instead
45007     `malloc' and related functions from `libc.a'; they do not have
45008     this problem.
45009
45010   * On the HP PA machine, ADB sometimes fails to work on functions
45011     compiled with GCC.  Specifically, it fails to work on functions
45012     that use `alloca' or variable-size arrays.  This is because GCC
45013     doesn't generate HP-UX unwind descriptors for such functions.  It
45014     may even be impossible to generate them.
45015
45016   * Debugging (`-g') is not supported on the HP PA machine, unless you
45017     use the preliminary GNU tools.
45018
45019   * Taking the address of a label may generate errors from the HP-UX
45020     PA assembler.  GAS for the PA does not have this problem.
45021
45022   * Using floating point parameters for indirect calls to static
45023     functions will not work when using the HP assembler.  There simply
45024     is no way for GCC to specify what registers hold arguments for
45025     static functions when using the HP assembler.  GAS for the PA does
45026     not have this problem.
45027
45028   * In extremely rare cases involving some very large functions you may
45029     receive errors from the HP linker complaining about an out of
45030     bounds unconditional branch offset.  This used to occur more often
45031     in previous versions of GCC, but is now exceptionally rare.  If
45032     you should run into it, you can work around by making your
45033     function smaller.
45034
45035   * GCC compiled code sometimes emits warnings from the HP-UX
45036     assembler of the form:
45037
45038          (warning) Use of GR3 when
45039            frame >= 8192 may cause conflict.
45040
45041     These warnings are harmless and can be safely ignored.
45042
45043   * In extremely rare cases involving some very large functions you may
45044     receive errors from the AIX Assembler complaining about a
45045     displacement that is too large.  If you should run into it, you
45046     can work around by making your function smaller.
45047
45048   * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
45049     semantics which merges global symbols between libraries and
45050     applications, especially necessary for C++ streams functionality.
45051     This is not the default behavior of AIX shared libraries and
45052     dynamic linking.  `libstdc++.a' is built on AIX with
45053     "runtime-linking" enabled so that symbol merging can occur.  To
45054     utilize this feature, the application linked with `libstdc++.a'
45055     must include the `-Wl,-brtl' flag on the link line.  G++ cannot
45056     impose this because this option may interfere with the semantics
45057     of the user program and users may not always use `g++' to link his
45058     or her application.  Applications are not required to use the
45059     `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
45060     library which is not dependent on the symbol merging semantics
45061     will continue to function correctly.
45062
45063   * An application can interpose its own definition of functions for
45064     functions invoked by `libstdc++.a' with "runtime-linking" enabled
45065     on AIX.  To accomplish this the application must be linked with
45066     "runtime-linking" option and the functions explicitly must be
45067     exported by the application (`-Wl,-brtl,-bE:exportfile').
45068
45069   * AIX on the RS/6000 provides support (NLS) for environments outside
45070     of the United States.  Compilers and assemblers use NLS to support
45071     locale-specific representations of various objects including
45072     floating-point numbers (`.' vs `,' for separating decimal
45073     fractions).  There have been problems reported where the library
45074     linked with GCC does not produce the same floating-point formats
45075     that the assembler accepts.  If you have this problem, set the
45076     `LANG' environment variable to `C' or `En_US'.
45077
45078   * Even if you specify `-fdollars-in-identifiers', you cannot
45079     successfully use `$' in identifiers on the RS/6000 due to a
45080     restriction in the IBM assembler.  GAS supports these identifiers.
45081
45082
45083
45084File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
45085
4508612.3 Incompatibilities of GCC
45087=============================
45088
45089There are several noteworthy incompatibilities between GNU C and K&R
45090(non-ISO) versions of C.
45091
45092   * GCC normally makes string constants read-only.  If several
45093     identical-looking string constants are used, GCC stores only one
45094     copy of the string.
45095
45096     One consequence is that you cannot call `mktemp' with a string
45097     constant argument.  The function `mktemp' always alters the string
45098     its argument points to.
45099
45100     Another consequence is that `sscanf' does not work on some very
45101     old systems when passed a string constant as its format control
45102     string or input.  This is because `sscanf' incorrectly tries to
45103     write into the string constant.  Likewise `fscanf' and `scanf'.
45104
45105     The solution to these problems is to change the program to use
45106     `char'-array variables with initialization strings for these
45107     purposes instead of string constants.
45108
45109   * `-2147483648' is positive.
45110
45111     This is because 2147483648 cannot fit in the type `int', so
45112     (following the ISO C rules) its data type is `unsigned long int'.
45113     Negating this value yields 2147483648 again.
45114
45115   * GCC does not substitute macro arguments when they appear inside of
45116     string constants.  For example, the following macro in GCC
45117
45118          #define foo(a) "a"
45119
45120     will produce output `"a"' regardless of what the argument A is.
45121
45122   * When you use `setjmp' and `longjmp', the only automatic variables
45123     guaranteed to remain valid are those declared `volatile'.  This is
45124     a consequence of automatic register allocation.  Consider this
45125     function:
45126
45127          jmp_buf j;
45128
45129          foo ()
45130          {
45131            int a, b;
45132
45133            a = fun1 ();
45134            if (setjmp (j))
45135              return a;
45136
45137            a = fun2 ();
45138            /* `longjmp (j)' may occur in `fun3'. */
45139            return a + fun3 ();
45140          }
45141
45142     Here `a' may or may not be restored to its first value when the
45143     `longjmp' occurs.  If `a' is allocated in a register, then its
45144     first value is restored; otherwise, it keeps the last value stored
45145     in it.
45146
45147     If you use the `-W' option with the `-O' option, you will get a
45148     warning when GCC thinks such a problem might be possible.
45149
45150   * Programs that use preprocessing directives in the middle of macro
45151     arguments do not work with GCC.  For example, a program like this
45152     will not work:
45153
45154          foobar (
45155          #define luser
45156                  hack)
45157
45158     ISO C does not permit such a construct.
45159
45160   * K&R compilers allow comments to cross over an inclusion boundary
45161     (i.e. started in an include file and ended in the including file).
45162
45163   * Declarations of external variables and functions within a block
45164     apply only to the block containing the declaration.  In other
45165     words, they have the same scope as any other declaration in the
45166     same place.
45167
45168     In some other C compilers, an `extern' declaration affects all the
45169     rest of the file even if it happens within a block.
45170
45171   * In traditional C, you can combine `long', etc., with a typedef
45172     name, as shown here:
45173
45174          typedef int foo;
45175          typedef long foo bar;
45176
45177     In ISO C, this is not allowed: `long' and other type modifiers
45178     require an explicit `int'.
45179
45180   * PCC allows typedef names to be used as function parameters.
45181
45182   * Traditional C allows the following erroneous pair of declarations
45183     to appear together in a given scope:
45184
45185          typedef int foo;
45186          typedef foo foo;
45187
45188   * GCC treats all characters of identifiers as significant.
45189     According to K&R-1 (2.2), "No more than the first eight characters
45190     are significant, although more may be used.".  Also according to
45191     K&R-1 (2.2), "An identifier is a sequence of letters and digits;
45192     the first character must be a letter.  The underscore _ counts as
45193     a letter.", but GCC also allows dollar signs in identifiers.
45194
45195   * PCC allows whitespace in the middle of compound assignment
45196     operators such as `+='.  GCC, following the ISO standard, does not
45197     allow this.
45198
45199   * GCC complains about unterminated character constants inside of
45200     preprocessing conditionals that fail.  Some programs have English
45201     comments enclosed in conditionals that are guaranteed to fail; if
45202     these comments contain apostrophes, GCC will probably report an
45203     error.  For example, this code would produce an error:
45204
45205          #if 0
45206          You can't expect this to work.
45207          #endif
45208
45209     The best solution to such a problem is to put the text into an
45210     actual C comment delimited by `/*...*/'.
45211
45212   * Many user programs contain the declaration `long time ();'.  In the
45213     past, the system header files on many systems did not actually
45214     declare `time', so it did not matter what type your program
45215     declared it to return.  But in systems with ISO C headers, `time'
45216     is declared to return `time_t', and if that is not the same as
45217     `long', then `long time ();' is erroneous.
45218
45219     The solution is to change your program to use appropriate system
45220     headers (`<time.h>' on systems with ISO C headers) and not to
45221     declare `time' if the system header files declare it, or failing
45222     that to use `time_t' as the return type of `time'.
45223
45224   * When compiling functions that return `float', PCC converts it to a
45225     double.  GCC actually returns a `float'.  If you are concerned
45226     with PCC compatibility, you should declare your functions to return
45227     `double'; you might as well say what you mean.
45228
45229   * When compiling functions that return structures or unions, GCC
45230     output code normally uses a method different from that used on most
45231     versions of Unix.  As a result, code compiled with GCC cannot call
45232     a structure-returning function compiled with PCC, and vice versa.
45233
45234     The method used by GCC is as follows: a structure or union which is
45235     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
45236     union with any other size is stored into an address supplied by
45237     the caller (usually in a special, fixed register, but on some
45238     machines it is passed on the stack).  The target hook
45239     `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
45240
45241     By contrast, PCC on most target machines returns structures and
45242     unions of any size by copying the data into an area of static
45243     storage, and then returning the address of that storage as if it
45244     were a pointer value.  The caller must copy the data from that
45245     memory area to the place where the value is wanted.  GCC does not
45246     use this method because it is slower and nonreentrant.
45247
45248     On some newer machines, PCC uses a reentrant convention for all
45249     structure and union returning.  GCC on most of these machines uses
45250     a compatible convention when returning structures and unions in
45251     memory, but still returns small structures and unions in registers.
45252
45253     You can tell GCC to use a compatible convention for all structure
45254     and union returning with the option `-fpcc-struct-return'.
45255
45256   * GCC complains about program fragments such as `0x74ae-0x4000'
45257     which appear to be two hexadecimal constants separated by the minus
45258     operator.  Actually, this string is a single "preprocessing token".
45259     Each such token must correspond to one token in C.  Since this
45260     does not, GCC prints an error message.  Although it may appear
45261     obvious that what is meant is an operator and two values, the ISO
45262     C standard specifically requires that this be treated as erroneous.
45263
45264     A "preprocessing token" is a "preprocessing number" if it begins
45265     with a digit and is followed by letters, underscores, digits,
45266     periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
45267     character sequences.  (In strict C90 mode, the sequences `p+',
45268     `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
45269
45270     To make the above program fragment valid, place whitespace in
45271     front of the minus sign.  This whitespace will end the
45272     preprocessing number.
45273
45274
45275File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
45276
4527712.4 Fixed Header Files
45278=======================
45279
45280GCC needs to install corrected versions of some system header files.
45281This is because most target systems have some header files that won't
45282work with GCC unless they are changed.  Some have bugs, some are
45283incompatible with ISO C, and some depend on special features of other
45284compilers.
45285
45286 Installing GCC automatically creates and installs the fixed header
45287files, by running a program called `fixincludes'.  Normally, you don't
45288need to pay attention to this.  But there are cases where it doesn't do
45289the right thing automatically.
45290
45291   * If you update the system's header files, such as by installing a
45292     new system version, the fixed header files of GCC are not
45293     automatically updated.  They can be updated using the `mkheaders'
45294     script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
45295
45296   * On some systems, header file directories contain machine-specific
45297     symbolic links in certain places.  This makes it possible to share
45298     most of the header files among hosts running the same version of
45299     the system on different machine models.
45300
45301     The programs that fix the header files do not understand this
45302     special way of using symbolic links; therefore, the directory of
45303     fixed header files is good only for the machine model used to
45304     build it.
45305
45306     It is possible to make separate sets of fixed header files for the
45307     different machine models, and arrange a structure of symbolic
45308     links so as to use the proper set, but you'll have to do this by
45309     hand.
45310
45311
45312File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
45313
4531412.5 Standard Libraries
45315=======================
45316
45317GCC by itself attempts to be a conforming freestanding implementation.
45318*Note Language Standards Supported by GCC: Standards, for details of
45319what this means.  Beyond the library facilities required of such an
45320implementation, the rest of the C library is supplied by the vendor of
45321the operating system.  If that C library doesn't conform to the C
45322standards, then your programs might get warnings (especially when using
45323`-Wall') that you don't expect.
45324
45325 For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
45326while the C standard says that `sprintf' returns an `int'.  The
45327`fixincludes' program could make the prototype for this function match
45328the Standard, but that would be wrong, since the function will still
45329return `char *'.
45330
45331 If you need a Standard compliant library, then you need to find one, as
45332GCC does not provide one.  The GNU C library (called `glibc') provides
45333ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
45334HURD-based GNU systems; no recent version of it supports other systems,
45335though some very old versions did.  Version 2.2 of the GNU C library
45336includes nearly complete C99 support.  You could also ask your
45337operating system vendor if newer libraries are available.
45338
45339
45340File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
45341
4534212.6 Disappointments and Misunderstandings
45343==========================================
45344
45345These problems are perhaps regrettable, but we don't know any practical
45346way around them.
45347
45348   * Certain local variables aren't recognized by debuggers when you
45349     compile with optimization.
45350
45351     This occurs because sometimes GCC optimizes the variable out of
45352     existence.  There is no way to tell the debugger how to compute the
45353     value such a variable "would have had", and it is not clear that
45354     would be desirable anyway.  So GCC simply does not mention the
45355     eliminated variable when it writes debugging information.
45356
45357     You have to expect a certain amount of disagreement between the
45358     executable and your source code, when you use optimization.
45359
45360   * Users often think it is a bug when GCC reports an error for code
45361     like this:
45362
45363          int foo (struct mumble *);
45364
45365          struct mumble { ... };
45366
45367          int foo (struct mumble *x)
45368          { ... }
45369
45370     This code really is erroneous, because the scope of `struct
45371     mumble' in the prototype is limited to the argument list
45372     containing it.  It does not refer to the `struct mumble' defined
45373     with file scope immediately below--they are two unrelated types
45374     with similar names in different scopes.
45375
45376     But in the definition of `foo', the file-scope type is used
45377     because that is available to be inherited.  Thus, the definition
45378     and the prototype do not match, and you get an error.
45379
45380     This behavior may seem silly, but it's what the ISO standard
45381     specifies.  It is easy enough for you to make your code work by
45382     moving the definition of `struct mumble' above the prototype.
45383     It's not worth being incompatible with ISO C just to avoid an
45384     error for the example shown above.
45385
45386   * Accesses to bit-fields even in volatile objects works by accessing
45387     larger objects, such as a byte or a word.  You cannot rely on what
45388     size of object is accessed in order to read or write the
45389     bit-field; it may even vary for a given bit-field according to the
45390     precise usage.
45391
45392     If you care about controlling the amount of memory that is
45393     accessed, use volatile but do not use bit-fields.
45394
45395   * GCC comes with shell scripts to fix certain known problems in
45396     system header files.  They install corrected copies of various
45397     header files in a special directory where only GCC will normally
45398     look for them.  The scripts adapt to various systems by searching
45399     all the system header files for the problem cases that we know
45400     about.
45401
45402     If new system header files are installed, nothing automatically
45403     arranges to update the corrected header files.  They can be
45404     updated using the `mkheaders' script installed in
45405     `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
45406
45407   * On 68000 and x86 systems, for instance, you can get paradoxical
45408     results if you test the precise values of floating point numbers.
45409     For example, you can find that a floating point value which is not
45410     a NaN is not equal to itself.  This results from the fact that the
45411     floating point registers hold a few more bits of precision than
45412     fit in a `double' in memory.  Compiled code moves values between
45413     memory and floating point registers at its convenience, and moving
45414     them into memory truncates them.
45415
45416     You can partially avoid this problem by using the `-ffloat-store'
45417     option (*note Optimize Options::).
45418
45419   * On AIX and other platforms without weak symbol support, templates
45420     need to be instantiated explicitly and symbols for static members
45421     of templates will not be generated.
45422
45423   * On AIX, GCC scans object files and library archives for static
45424     constructors and destructors when linking an application before the
45425     linker prunes unreferenced symbols.  This is necessary to prevent
45426     the AIX linker from mistakenly assuming that static constructor or
45427     destructor are unused and removing them before the scanning can
45428     occur.  All static constructors and destructors found will be
45429     referenced even though the modules in which they occur may not be
45430     used by the program.  This may lead to both increased executable
45431     size and unexpected symbol references.
45432
45433
45434File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble
45435
4543612.7 Common Misunderstandings with GNU C++
45437==========================================
45438
45439C++ is a complex language and an evolving one, and its standard
45440definition (the ISO C++ standard) was only recently completed.  As a
45441result, your C++ compiler may occasionally surprise you, even when its
45442behavior is correct.  This section discusses some areas that frequently
45443give rise to questions of this sort.
45444
45445* Menu:
45446
45447* Static Definitions::  Static member declarations are not definitions
45448* Name lookup::         Name lookup, templates, and accessing members of base classes
45449* Temporaries::         Temporaries may vanish before you expect
45450* Copy Assignment::     Copy Assignment operators copy virtual bases twice
45451
45452
45453File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
45454
4545512.7.1 Declare _and_ Define Static Members
45456------------------------------------------
45457
45458When a class has static data members, it is not enough to _declare_ the
45459static member; you must also _define_ it.  For example:
45460
45461     class Foo
45462     {
45463       ...
45464       void method();
45465       static int bar;
45466     };
45467
45468 This declaration only establishes that the class `Foo' has an `int'
45469named `Foo::bar', and a member function named `Foo::method'.  But you
45470still need to define _both_ `method' and `bar' elsewhere.  According to
45471the ISO standard, you must supply an initializer in one (and only one)
45472source file, such as:
45473
45474     int Foo::bar = 0;
45475
45476 Other C++ compilers may not correctly implement the standard behavior.
45477As a result, when you switch to `g++' from one of these compilers, you
45478may discover that a program that appeared to work correctly in fact
45479does not conform to the standard: `g++' reports as undefined symbols
45480any static data members that lack definitions.
45481
45482
45483File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
45484
4548512.7.2 Name Lookup, Templates, and Accessing Members of Base Classes
45486--------------------------------------------------------------------
45487
45488The C++ standard prescribes that all names that are not dependent on
45489template parameters are bound to their present definitions when parsing
45490a template function or class.(1)  Only names that are dependent are
45491looked up at the point of instantiation.  For example, consider
45492
45493       void foo(double);
45494
45495       struct A {
45496         template <typename T>
45497         void f () {
45498           foo (1);        // 1
45499           int i = N;      // 2
45500           T t;
45501           t.bar();        // 3
45502           foo (t);        // 4
45503         }
45504
45505         static const int N;
45506       };
45507
45508 Here, the names `foo' and `N' appear in a context that does not depend
45509on the type of `T'.  The compiler will thus require that they are
45510defined in the context of use in the template, not only before the
45511point of instantiation, and will here use `::foo(double)' and `A::N',
45512respectively.  In particular, it will convert the integer value to a
45513`double' when passing it to `::foo(double)'.
45514
45515 Conversely, `bar' and the call to `foo' in the fourth marked line are
45516used in contexts that do depend on the type of `T', so they are only
45517looked up at the point of instantiation, and you can provide
45518declarations for them after declaring the template, but before
45519instantiating it.  In particular, if you instantiate `A::f<int>', the
45520last line will call an overloaded `::foo(int)' if one was provided,
45521even if after the declaration of `struct A'.
45522
45523 This distinction between lookup of dependent and non-dependent names is
45524called two-stage (or dependent) name lookup.  G++ implements it since
45525version 3.4.
45526
45527 Two-stage name lookup sometimes leads to situations with behavior
45528different from non-template codes.  The most common is probably this:
45529
45530       template <typename T> struct Base {
45531         int i;
45532       };
45533
45534       template <typename T> struct Derived : public Base<T> {
45535         int get_i() { return i; }
45536       };
45537
45538 In `get_i()', `i' is not used in a dependent context, so the compiler
45539will look for a name declared at the enclosing namespace scope (which
45540is the global scope here).  It will not look into the base class, since
45541that is dependent and you may declare specializations of `Base' even
45542after declaring `Derived', so the compiler can't really know what `i'
45543would refer to.  If there is no global variable `i', then you will get
45544an error message.
45545
45546 In order to make it clear that you want the member of the base class,
45547you need to defer lookup until instantiation time, at which the base
45548class is known.  For this, you need to access `i' in a dependent
45549context, by either using `this->i' (remember that `this' is of type
45550`Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
45551Alternatively, `Base<T>::i' might be brought into scope by a
45552`using'-declaration.
45553
45554 Another, similar example involves calling member functions of a base
45555class:
45556
45557       template <typename T> struct Base {
45558           int f();
45559       };
45560
45561       template <typename T> struct Derived : Base<T> {
45562           int g() { return f(); };
45563       };
45564
45565 Again, the call to `f()' is not dependent on template arguments (there
45566are no arguments that depend on the type `T', and it is also not
45567otherwise specified that the call should be in a dependent context).
45568Thus a global declaration of such a function must be available, since
45569the one in the base class is not visible until instantiation time.  The
45570compiler will consequently produce the following error message:
45571
45572       x.cc: In member function `int Derived<T>::g()':
45573       x.cc:6: error: there are no arguments to `f' that depend on a template
45574          parameter, so a declaration of `f' must be available
45575       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
45576          allowing the use of an undeclared name is deprecated)
45577
45578 To make the code valid either use `this->f()', or `Base<T>::f()'.
45579Using the `-fpermissive' flag will also let the compiler accept the
45580code, by marking all function calls for which no declaration is visible
45581at the time of definition of the template for later lookup at
45582instantiation time, as if it were a dependent call.  We do not
45583recommend using `-fpermissive' to work around invalid code, and it will
45584also only catch cases where functions in base classes are called, not
45585where variables in base classes are used (as in the example above).
45586
45587 Note that some compilers (including G++ versions prior to 3.4) get
45588these examples wrong and accept above code without an error.  Those
45589compilers do not implement two-stage name lookup correctly.
45590
45591 ---------- Footnotes ----------
45592
45593 (1) The C++ standard just uses the term "dependent" for names that
45594depend on the type or value of template parameters.  This shorter term
45595will also be used in the rest of this section.
45596
45597
45598File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
45599
4560012.7.3 Temporaries May Vanish Before You Expect
45601-----------------------------------------------
45602
45603It is dangerous to use pointers or references to _portions_ of a
45604temporary object.  The compiler may very well delete the object before
45605you expect it to, leaving a pointer to garbage.  The most common place
45606where this problem crops up is in classes like string classes,
45607especially ones that define a conversion function to type `char *' or
45608`const char *'--which is one reason why the standard `string' class
45609requires you to call the `c_str' member function.  However, any class
45610that returns a pointer to some internal structure is potentially
45611subject to this problem.
45612
45613 For example, a program may use a function `strfunc' that returns
45614`string' objects, and another function `charfunc' that operates on
45615pointers to `char':
45616
45617     string strfunc ();
45618     void charfunc (const char *);
45619
45620     void
45621     f ()
45622     {
45623       const char *p = strfunc().c_str();
45624       ...
45625       charfunc (p);
45626       ...
45627       charfunc (p);
45628     }
45629
45630In this situation, it may seem reasonable to save a pointer to the C
45631string returned by the `c_str' member function and use that rather than
45632call `c_str' repeatedly.  However, the temporary string created by the
45633call to `strfunc' is destroyed after `p' is initialized, at which point
45634`p' is left pointing to freed memory.
45635
45636 Code like this may run successfully under some other compilers,
45637particularly obsolete cfront-based compilers that delete temporaries
45638along with normal local variables.  However, the GNU C++ behavior is
45639standard-conforming, so if your program depends on late destruction of
45640temporaries it is not portable.
45641
45642 The safe way to write such code is to give the temporary a name, which
45643forces it to remain until the end of the scope of the name.  For
45644example:
45645
45646     const string& tmp = strfunc ();
45647     charfunc (tmp.c_str ());
45648
45649
45650File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
45651
4565212.7.4 Implicit Copy-Assignment for Virtual Bases
45653-------------------------------------------------
45654
45655When a base class is virtual, only one subobject of the base class
45656belongs to each full object.  Also, the constructors and destructors are
45657invoked only once, and called from the most-derived class.  However,
45658such objects behave unspecified when being assigned.  For example:
45659
45660     struct Base{
45661       char *name;
45662       Base(char *n) : name(strdup(n)){}
45663       Base& operator= (const Base& other){
45664        free (name);
45665        name = strdup (other.name);
45666       }
45667     };
45668
45669     struct A:virtual Base{
45670       int val;
45671       A():Base("A"){}
45672     };
45673
45674     struct B:virtual Base{
45675       int bval;
45676       B():Base("B"){}
45677     };
45678
45679     struct Derived:public A, public B{
45680       Derived():Base("Derived"){}
45681     };
45682
45683     void func(Derived &d1, Derived &d2)
45684     {
45685       d1 = d2;
45686     }
45687
45688 The C++ standard specifies that `Base::Base' is only called once when
45689constructing or copy-constructing a Derived object.  It is unspecified
45690whether `Base::operator=' is called more than once when the implicit
45691copy-assignment for Derived objects is invoked (as it is inside `func'
45692in the example).
45693
45694 G++ implements the "intuitive" algorithm for copy-assignment: assign
45695all direct bases, then assign all members.  In that algorithm, the
45696virtual base subobject can be encountered more than once.  In the
45697example, copying proceeds in the following order: `val', `name' (via
45698`strdup'), `bval', and `name' again.
45699
45700 If application code relies on copy-assignment, a user-defined
45701copy-assignment operator removes any uncertainties.  With such an
45702operator, the application can define whether and how the virtual base
45703subobject is assigned.
45704
45705
45706File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble
45707
4570812.8 Certain Changes We Don't Want to Make
45709==========================================
45710
45711This section lists changes that people frequently request, but which we
45712do not make because we think GCC is better without them.
45713
45714   * Checking the number and type of arguments to a function which has
45715     an old-fashioned definition and no prototype.
45716
45717     Such a feature would work only occasionally--only for calls that
45718     appear in the same file as the called function, following the
45719     definition.  The only way to check all calls reliably is to add a
45720     prototype for the function.  But adding a prototype eliminates the
45721     motivation for this feature.  So the feature is not worthwhile.
45722
45723   * Warning about using an expression whose type is signed as a shift
45724     count.
45725
45726     Shift count operands are probably signed more often than unsigned.
45727     Warning about this would cause far more annoyance than good.
45728
45729   * Warning about assigning a signed value to an unsigned variable.
45730
45731     Such assignments must be very common; warning about them would
45732     cause more annoyance than good.
45733
45734   * Warning when a non-void function value is ignored.
45735
45736     C contains many standard functions that return a value that most
45737     programs choose to ignore.  One obvious example is `printf'.
45738     Warning about this practice only leads the defensive programmer to
45739     clutter programs with dozens of casts to `void'.  Such casts are
45740     required so frequently that they become visual noise.  Writing
45741     those casts becomes so automatic that they no longer convey useful
45742     information about the intentions of the programmer.  For functions
45743     where the return value should never be ignored, use the
45744     `warn_unused_result' function attribute (*note Function
45745     Attributes::).
45746
45747   * Making `-fshort-enums' the default.
45748
45749     This would cause storage layout to be incompatible with most other
45750     C compilers.  And it doesn't seem very important, given that you
45751     can get the same result in other ways.  The case where it matters
45752     most is when the enumeration-valued object is inside a structure,
45753     and in that case you can specify a field width explicitly.
45754
45755   * Making bit-fields unsigned by default on particular machines where
45756     "the ABI standard" says to do so.
45757
45758     The ISO C standard leaves it up to the implementation whether a
45759     bit-field declared plain `int' is signed or not.  This in effect
45760     creates two alternative dialects of C.
45761
45762     The GNU C compiler supports both dialects; you can specify the
45763     signed dialect with `-fsigned-bitfields' and the unsigned dialect
45764     with `-funsigned-bitfields'.  However, this leaves open the
45765     question of which dialect to use by default.
45766
45767     Currently, the preferred dialect makes plain bit-fields signed,
45768     because this is simplest.  Since `int' is the same as `signed int'
45769     in every other context, it is cleanest for them to be the same in
45770     bit-fields as well.
45771
45772     Some computer manufacturers have published Application Binary
45773     Interface standards which specify that plain bit-fields should be
45774     unsigned.  It is a mistake, however, to say anything about this
45775     issue in an ABI.  This is because the handling of plain bit-fields
45776     distinguishes two dialects of C.  Both dialects are meaningful on
45777     every type of machine.  Whether a particular object file was
45778     compiled using signed bit-fields or unsigned is of no concern to
45779     other object files, even if they access the same bit-fields in the
45780     same data structures.
45781
45782     A given program is written in one or the other of these two
45783     dialects.  The program stands a chance to work on most any machine
45784     if it is compiled with the proper dialect.  It is unlikely to work
45785     at all if compiled with the wrong dialect.
45786
45787     Many users appreciate the GNU C compiler because it provides an
45788     environment that is uniform across machines.  These users would be
45789     inconvenienced if the compiler treated plain bit-fields
45790     differently on certain machines.
45791
45792     Occasionally users write programs intended only for a particular
45793     machine type.  On these occasions, the users would benefit if the
45794     GNU C compiler were to support by default the same dialect as the
45795     other compilers on that machine.  But such applications are rare.
45796     And users writing a program to run on more than one type of
45797     machine cannot possibly benefit from this kind of compatibility.
45798
45799     This is why GCC does and will treat plain bit-fields in the same
45800     fashion on all types of machines (by default).
45801
45802     There are some arguments for making bit-fields unsigned by default
45803     on all machines.  If, for example, this becomes a universal de
45804     facto standard, it would make sense for GCC to go along with it.
45805     This is something to be considered in the future.
45806
45807     (Of course, users strongly concerned about portability should
45808     indicate explicitly in each bit-field whether it is signed or not.
45809     In this way, they write programs which have the same meaning in
45810     both C dialects.)
45811
45812   * Undefining `__STDC__' when `-ansi' is not used.
45813
45814     Currently, GCC defines `__STDC__' unconditionally.  This provides
45815     good results in practice.
45816
45817     Programmers normally use conditionals on `__STDC__' to ask whether
45818     it is safe to use certain features of ISO C, such as function
45819     prototypes or ISO token concatenation.  Since plain `gcc' supports
45820     all the features of ISO C, the correct answer to these questions is
45821     "yes".
45822
45823     Some users try to use `__STDC__' to check for the availability of
45824     certain library facilities.  This is actually incorrect usage in
45825     an ISO C program, because the ISO C standard says that a conforming
45826     freestanding implementation should define `__STDC__' even though it
45827     does not have the library facilities.  `gcc -ansi -pedantic' is a
45828     conforming freestanding implementation, and it is therefore
45829     required to define `__STDC__', even though it does not come with
45830     an ISO C library.
45831
45832     Sometimes people say that defining `__STDC__' in a compiler that
45833     does not completely conform to the ISO C standard somehow violates
45834     the standard.  This is illogical.  The standard is a standard for
45835     compilers that claim to support ISO C, such as `gcc -ansi'--not
45836     for other compilers such as plain `gcc'.  Whatever the ISO C
45837     standard says is relevant to the design of plain `gcc' without
45838     `-ansi' only for pragmatic reasons, not as a requirement.
45839
45840     GCC normally defines `__STDC__' to be 1, and in addition defines
45841     `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
45842     option for strict conformance to some version of ISO C.  On some
45843     hosts, system include files use a different convention, where
45844     `__STDC__' is normally 0, but is 1 if the user specifies strict
45845     conformance to the C Standard.  GCC follows the host convention
45846     when processing system include files, but when processing user
45847     files it follows the usual GNU C convention.
45848
45849   * Undefining `__STDC__' in C++.
45850
45851     Programs written to compile with C++-to-C translators get the
45852     value of `__STDC__' that goes with the C compiler that is
45853     subsequently used.  These programs must test `__STDC__' to
45854     determine what kind of C preprocessor that compiler uses: whether
45855     they should concatenate tokens in the ISO C fashion or in the
45856     traditional fashion.
45857
45858     These programs work properly with GNU C++ if `__STDC__' is defined.
45859     They would not work otherwise.
45860
45861     In addition, many header files are written to provide prototypes
45862     in ISO C but not in traditional C.  Many of these header files can
45863     work without change in C++ provided `__STDC__' is defined.  If
45864     `__STDC__' is not defined, they will all fail, and will all need
45865     to be changed to test explicitly for C++ as well.
45866
45867   * Deleting "empty" loops.
45868
45869     Historically, GCC has not deleted "empty" loops under the
45870     assumption that the most likely reason you would put one in a
45871     program is to have a delay, so deleting them will not make real
45872     programs run any faster.
45873
45874     However, the rationale here is that optimization of a nonempty loop
45875     cannot produce an empty one. This held for carefully written C
45876     compiled with less powerful optimizers but is not always the case
45877     for carefully written C++ or with more powerful optimizers.  Thus
45878     GCC will remove operations from loops whenever it can determine
45879     those operations are not externally visible (apart from the time
45880     taken to execute them, of course).  In case the loop can be proved
45881     to be finite, GCC will also remove the loop itself.
45882
45883     Be aware of this when performing timing tests, for instance the
45884     following loop can be completely removed, provided
45885     `some_expression' can provably not change any global state.
45886
45887          {
45888             int sum = 0;
45889             int ix;
45890
45891             for (ix = 0; ix != 10000; ix++)
45892                sum += some_expression;
45893          }
45894
45895     Even though `sum' is accumulated in the loop, no use is made of
45896     that summation, so the accumulation can be removed.
45897
45898   * Making side effects happen in the same order as in some other
45899     compiler.
45900
45901     It is never safe to depend on the order of evaluation of side
45902     effects.  For example, a function call like this may very well
45903     behave differently from one compiler to another:
45904
45905          void func (int, int);
45906
45907          int i = 2;
45908          func (i++, i++);
45909
45910     There is no guarantee (in either the C or the C++ standard language
45911     definitions) that the increments will be evaluated in any
45912     particular order.  Either increment might happen first.  `func'
45913     might get the arguments `2, 3', or it might get `3, 2', or even
45914     `2, 2'.
45915
45916   * Making certain warnings into errors by default.
45917
45918     Some ISO C testsuites report failure when the compiler does not
45919     produce an error message for a certain program.
45920
45921     ISO C requires a "diagnostic" message for certain kinds of invalid
45922     programs, but a warning is defined by GCC to count as a
45923     diagnostic.  If GCC produces a warning but not an error, that is
45924     correct ISO C support.  If testsuites call this "failure", they
45925     should be run with the GCC option `-pedantic-errors', which will
45926     turn these warnings into errors.
45927
45928
45929
45930File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
45931
4593212.9 Warning Messages and Error Messages
45933========================================
45934
45935The GNU compiler can produce two kinds of diagnostics: errors and
45936warnings.  Each kind has a different purpose:
45937
45938     "Errors" report problems that make it impossible to compile your
45939     program.  GCC reports errors with the source file name and line
45940     number where the problem is apparent.
45941
45942     "Warnings" report other unusual conditions in your code that _may_
45943     indicate a problem, although compilation can (and does) proceed.
45944     Warning messages also report the source file name and line number,
45945     but include the text `warning:' to distinguish them from error
45946     messages.
45947
45948 Warnings may indicate danger points where you should check to make sure
45949that your program really does what you intend; or the use of obsolete
45950features; or the use of nonstandard features of GNU C or C++.  Many
45951warnings are issued only if you ask for them, with one of the `-W'
45952options (for instance, `-Wall' requests a variety of useful warnings).
45953
45954 GCC always tries to compile your program if possible; it never
45955gratuitously rejects a program whose meaning is clear merely because
45956(for instance) it fails to conform to a standard.  In some cases,
45957however, the C and C++ standards specify that certain extensions are
45958forbidden, and a diagnostic _must_ be issued by a conforming compiler.
45959The `-pedantic' option tells GCC to issue warnings in such cases;
45960`-pedantic-errors' says to make them errors instead.  This does not
45961mean that _all_ non-ISO constructs get warnings or errors.
45962
45963 *Note Options to Request or Suppress Warnings: Warning Options, for
45964more detail on these and related command-line options.
45965
45966
45967File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
45968
4596913 Reporting Bugs
45970*****************
45971
45972Your bug reports play an essential role in making GCC reliable.
45973
45974 When you encounter a problem, the first thing to do is to see if it is
45975already known.  *Note Trouble::.  If it isn't known, then you should
45976report the problem.
45977
45978* Menu:
45979
45980* Criteria:  Bug Criteria.   Have you really found a bug?
45981* Reporting: Bug Reporting.  How to report a bug effectively.
45982
45983
45984File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
45985
4598613.1 Have You Found a Bug?
45987==========================
45988
45989If you are not sure whether you have found a bug, here are some
45990guidelines:
45991
45992   * If the compiler gets a fatal signal, for any input whatever, that
45993     is a compiler bug.  Reliable compilers never crash.
45994
45995   * If the compiler produces invalid assembly code, for any input
45996     whatever (except an `asm' statement), that is a compiler bug,
45997     unless the compiler reports errors (not just warnings) which would
45998     ordinarily prevent the assembler from being run.
45999
46000   * If the compiler produces valid assembly code that does not
46001     correctly execute the input source code, that is a compiler bug.
46002
46003     However, you must double-check to make sure, because you may have a
46004     program whose behavior is undefined, which happened by chance to
46005     give the desired results with another C or C++ compiler.
46006
46007     For example, in many nonoptimizing compilers, you can write `x;'
46008     at the end of a function instead of `return x;', with the same
46009     results.  But the value of the function is undefined if `return'
46010     is omitted; it is not a bug when GCC produces different results.
46011
46012     Problems often result from expressions with two increment
46013     operators, as in `f (*p++, *p++)'.  Your previous compiler might
46014     have interpreted that expression the way you intended; GCC might
46015     interpret it another way.  Neither compiler is wrong.  The bug is
46016     in your code.
46017
46018     After you have localized the error to a single source line, it
46019     should be easy to check for these things.  If your program is
46020     correct and well defined, you have found a compiler bug.
46021
46022   * If the compiler produces an error message for valid input, that is
46023     a compiler bug.
46024
46025   * If the compiler does not produce an error message for invalid
46026     input, that is a compiler bug.  However, you should note that your
46027     idea of "invalid input" might be someone else's idea of "an
46028     extension" or "support for traditional practice".
46029
46030   * If you are an experienced user of one of the languages GCC
46031     supports, your suggestions for improvement of GCC are welcome in
46032     any case.
46033
46034
46035File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
46036
4603713.2 How and Where to Report Bugs
46038=================================
46039
46040Bugs should be reported to the bug database at
46041`http://www.NetBSD.org/Misc/send-pr.html'.
46042
46043
46044File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
46045
4604614 How To Get Help with GCC
46047***************************
46048
46049If you need help installing, using or changing GCC, there are two ways
46050to find it:
46051
46052   * Send a message to a suitable network mailing list.  First try
46053     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
46054     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
46055     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
46056     GCC, please report it following the instructions at *note Bug
46057     Reporting::.
46058
46059   * Look in the service directory for someone who might help you for a
46060     fee.  The service directory is found at
46061     `http://www.fsf.org/resources/service'.
46062
46063 For further information, see `http://gcc.gnu.org/faq.html#support'.
46064
46065
46066File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
46067
4606815 Contributing to GCC Development
46069**********************************
46070
46071If you would like to help pretest GCC releases to assure they work well,
46072current development sources are available by SVN (see
46073`http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
46074available for FTP; see `http://gcc.gnu.org/snapshots.html'.
46075
46076 If you would like to work on improvements to GCC, please read the
46077advice at these URLs:
46078
46079     `http://gcc.gnu.org/contribute.html'
46080     `http://gcc.gnu.org/contributewhy.html'
46081
46082for information on how to make useful contributions and avoid
46083duplication of effort.  Suggested projects are listed at
46084`http://gcc.gnu.org/projects/'.
46085
46086
46087File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
46088
46089Funding Free Software
46090*********************
46091
46092If you want to have more free software a few years from now, it makes
46093sense for you to help encourage people to contribute funds for its
46094development.  The most effective approach known is to encourage
46095commercial redistributors to donate.
46096
46097 Users of free software systems can boost the pace of development by
46098encouraging for-a-fee distributors to donate part of their selling price
46099to free software developers--the Free Software Foundation, and others.
46100
46101 The way to convince distributors to do this is to demand it and expect
46102it from them.  So when you compare distributors, judge them partly by
46103how much they give to free software development.  Show distributors
46104they must compete to be the one who gives the most.
46105
46106 To make this approach work, you must insist on numbers that you can
46107compare, such as, "We will donate ten dollars to the Frobnitz project
46108for each disk sold."  Don't be satisfied with a vague promise, such as
46109"A portion of the profits are donated," since it doesn't give a basis
46110for comparison.
46111
46112 Even a precise fraction "of the profits from this disk" is not very
46113meaningful, since creative accounting and unrelated business decisions
46114can greatly alter what fraction of the sales price counts as profit.
46115If the price you pay is $50, ten percent of the profit is probably less
46116than a dollar; it might be a few cents, or nothing at all.
46117
46118 Some redistributors do development work themselves.  This is useful
46119too; but to keep everyone honest, you need to inquire how much they do,
46120and what kind.  Some kinds of development make much more long-term
46121difference than others.  For example, maintaining a separate version of
46122a program contributes very little; maintaining the standard version of a
46123program for the whole community contributes much.  Easy new ports
46124contribute little, since someone else would surely do them; difficult
46125ports such as adding a new CPU to the GNU Compiler Collection
46126contribute more; major new features or packages contribute the most.
46127
46128 By establishing the idea that supporting further development is "the
46129proper thing to do" when distributing free software for a fee, we can
46130assure a steady flow of resources into making more free software.
46131
46132     Copyright (C) 1994 Free Software Foundation, Inc.
46133     Verbatim copying and redistribution of this section is permitted
46134     without royalty; alteration is not permitted.
46135
46136
46137File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
46138
46139The GNU Project and GNU/Linux
46140*****************************
46141
46142The GNU Project was launched in 1984 to develop a complete Unix-like
46143operating system which is free software: the GNU system.  (GNU is a
46144recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
46145Variants of the GNU operating system, which use the kernel Linux, are
46146now widely used; though these systems are often referred to as "Linux",
46147they are more accurately called GNU/Linux systems.
46148
46149 For more information, see:
46150     `http://www.gnu.org/'
46151     `http://www.gnu.org/gnu/linux-and-gnu.html'
46152
46153
46154File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
46155
46156GNU General Public License
46157**************************
46158
46159                        Version 3, 29 June 2007
46160
46161     Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
46162
46163     Everyone is permitted to copy and distribute verbatim copies of this
46164     license document, but changing it is not allowed.
46165
46166Preamble
46167========
46168
46169The GNU General Public License is a free, copyleft license for software
46170and other kinds of works.
46171
46172 The licenses for most software and other practical works are designed
46173to take away your freedom to share and change the works.  By contrast,
46174the GNU General Public License is intended to guarantee your freedom to
46175share and change all versions of a program-to make sure it remains free
46176software for all its users.  We, the Free Software Foundation, use the
46177GNU General Public License for most of our software; it applies also to
46178any other work released this way by its authors.  You can apply it to
46179your programs, too.
46180
46181 When we speak of free software, we are referring to freedom, not
46182price.  Our General Public Licenses are designed to make sure that you
46183have the freedom to distribute copies of free software (and charge for
46184them if you wish), that you receive source code or can get it if you
46185want it, that you can change the software or use pieces of it in new
46186free programs, and that you know you can do these things.
46187
46188 To protect your rights, we need to prevent others from denying you
46189these rights or asking you to surrender the rights.  Therefore, you
46190have certain responsibilities if you distribute copies of the software,
46191or if you modify it: responsibilities to respect the freedom of others.
46192
46193 For example, if you distribute copies of such a program, whether
46194gratis or for a fee, you must pass on to the recipients the same
46195freedoms that you received.  You must make sure that they, too, receive
46196or can get the source code.  And you must show them these terms so they
46197know their rights.
46198
46199 Developers that use the GNU GPL protect your rights with two steps:
46200(1) assert copyright on the software, and (2) offer you this License
46201giving you legal permission to copy, distribute and/or modify it.
46202
46203 For the developers' and authors' protection, the GPL clearly explains
46204that there is no warranty for this free software.  For both users' and
46205authors' sake, the GPL requires that modified versions be marked as
46206changed, so that their problems will not be attributed erroneously to
46207authors of previous versions.
46208
46209 Some devices are designed to deny users access to install or run
46210modified versions of the software inside them, although the
46211manufacturer can do so.  This is fundamentally incompatible with the
46212aim of protecting users' freedom to change the software.  The
46213systematic pattern of such abuse occurs in the area of products for
46214individuals to use, which is precisely where it is most unacceptable.
46215Therefore, we have designed this version of the GPL to prohibit the
46216practice for those products.  If such problems arise substantially in
46217other domains, we stand ready to extend this provision to those domains
46218in future versions of the GPL, as needed to protect the freedom of
46219users.
46220
46221 Finally, every program is threatened constantly by software patents.
46222States should not allow patents to restrict development and use of
46223software on general-purpose computers, but in those that do, we wish to
46224avoid the special danger that patents applied to a free program could
46225make it effectively proprietary.  To prevent this, the GPL assures that
46226patents cannot be used to render the program non-free.
46227
46228 The precise terms and conditions for copying, distribution and
46229modification follow.
46230
46231TERMS AND CONDITIONS
46232====================
46233
46234  0. Definitions.
46235
46236     "This License" refers to version 3 of the GNU General Public
46237     License.
46238
46239     "Copyright" also means copyright-like laws that apply to other
46240     kinds of works, such as semiconductor masks.
46241
46242     "The Program" refers to any copyrightable work licensed under this
46243     License.  Each licensee is addressed as "you".  "Licensees" and
46244     "recipients" may be individuals or organizations.
46245
46246     To "modify" a work means to copy from or adapt all or part of the
46247     work in a fashion requiring copyright permission, other than the
46248     making of an exact copy.  The resulting work is called a "modified
46249     version" of the earlier work or a work "based on" the earlier work.
46250
46251     A "covered work" means either the unmodified Program or a work
46252     based on the Program.
46253
46254     To "propagate" a work means to do anything with it that, without
46255     permission, would make you directly or secondarily liable for
46256     infringement under applicable copyright law, except executing it
46257     on a computer or modifying a private copy.  Propagation includes
46258     copying, distribution (with or without modification), making
46259     available to the public, and in some countries other activities as
46260     well.
46261
46262     To "convey" a work means any kind of propagation that enables other
46263     parties to make or receive copies.  Mere interaction with a user
46264     through a computer network, with no transfer of a copy, is not
46265     conveying.
46266
46267     An interactive user interface displays "Appropriate Legal Notices"
46268     to the extent that it includes a convenient and prominently visible
46269     feature that (1) displays an appropriate copyright notice, and (2)
46270     tells the user that there is no warranty for the work (except to
46271     the extent that warranties are provided), that licensees may
46272     convey the work under this License, and how to view a copy of this
46273     License.  If the interface presents a list of user commands or
46274     options, such as a menu, a prominent item in the list meets this
46275     criterion.
46276
46277  1. Source Code.
46278
46279     The "source code" for a work means the preferred form of the work
46280     for making modifications to it.  "Object code" means any
46281     non-source form of a work.
46282
46283     A "Standard Interface" means an interface that either is an
46284     official standard defined by a recognized standards body, or, in
46285     the case of interfaces specified for a particular programming
46286     language, one that is widely used among developers working in that
46287     language.
46288
46289     The "System Libraries" of an executable work include anything,
46290     other than the work as a whole, that (a) is included in the normal
46291     form of packaging a Major Component, but which is not part of that
46292     Major Component, and (b) serves only to enable use of the work
46293     with that Major Component, or to implement a Standard Interface
46294     for which an implementation is available to the public in source
46295     code form.  A "Major Component", in this context, means a major
46296     essential component (kernel, window system, and so on) of the
46297     specific operating system (if any) on which the executable work
46298     runs, or a compiler used to produce the work, or an object code
46299     interpreter used to run it.
46300
46301     The "Corresponding Source" for a work in object code form means all
46302     the source code needed to generate, install, and (for an executable
46303     work) run the object code and to modify the work, including
46304     scripts to control those activities.  However, it does not include
46305     the work's System Libraries, or general-purpose tools or generally
46306     available free programs which are used unmodified in performing
46307     those activities but which are not part of the work.  For example,
46308     Corresponding Source includes interface definition files
46309     associated with source files for the work, and the source code for
46310     shared libraries and dynamically linked subprograms that the work
46311     is specifically designed to require, such as by intimate data
46312     communication or control flow between those subprograms and other
46313     parts of the work.
46314
46315     The Corresponding Source need not include anything that users can
46316     regenerate automatically from other parts of the Corresponding
46317     Source.
46318
46319     The Corresponding Source for a work in source code form is that
46320     same work.
46321
46322  2. Basic Permissions.
46323
46324     All rights granted under this License are granted for the term of
46325     copyright on the Program, and are irrevocable provided the stated
46326     conditions are met.  This License explicitly affirms your unlimited
46327     permission to run the unmodified Program.  The output from running
46328     a covered work is covered by this License only if the output,
46329     given its content, constitutes a covered work.  This License
46330     acknowledges your rights of fair use or other equivalent, as
46331     provided by copyright law.
46332
46333     You may make, run and propagate covered works that you do not
46334     convey, without conditions so long as your license otherwise
46335     remains in force.  You may convey covered works to others for the
46336     sole purpose of having them make modifications exclusively for
46337     you, or provide you with facilities for running those works,
46338     provided that you comply with the terms of this License in
46339     conveying all material for which you do not control copyright.
46340     Those thus making or running the covered works for you must do so
46341     exclusively on your behalf, under your direction and control, on
46342     terms that prohibit them from making any copies of your
46343     copyrighted material outside their relationship with you.
46344
46345     Conveying under any other circumstances is permitted solely under
46346     the conditions stated below.  Sublicensing is not allowed; section
46347     10 makes it unnecessary.
46348
46349  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
46350
46351     No covered work shall be deemed part of an effective technological
46352     measure under any applicable law fulfilling obligations under
46353     article 11 of the WIPO copyright treaty adopted on 20 December
46354     1996, or similar laws prohibiting or restricting circumvention of
46355     such measures.
46356
46357     When you convey a covered work, you waive any legal power to forbid
46358     circumvention of technological measures to the extent such
46359     circumvention is effected by exercising rights under this License
46360     with respect to the covered work, and you disclaim any intention
46361     to limit operation or modification of the work as a means of
46362     enforcing, against the work's users, your or third parties' legal
46363     rights to forbid circumvention of technological measures.
46364
46365  4. Conveying Verbatim Copies.
46366
46367     You may convey verbatim copies of the Program's source code as you
46368     receive it, in any medium, provided that you conspicuously and
46369     appropriately publish on each copy an appropriate copyright notice;
46370     keep intact all notices stating that this License and any
46371     non-permissive terms added in accord with section 7 apply to the
46372     code; keep intact all notices of the absence of any warranty; and
46373     give all recipients a copy of this License along with the Program.
46374
46375     You may charge any price or no price for each copy that you convey,
46376     and you may offer support or warranty protection for a fee.
46377
46378  5. Conveying Modified Source Versions.
46379
46380     You may convey a work based on the Program, or the modifications to
46381     produce it from the Program, in the form of source code under the
46382     terms of section 4, provided that you also meet all of these
46383     conditions:
46384
46385       a. The work must carry prominent notices stating that you
46386          modified it, and giving a relevant date.
46387
46388       b. The work must carry prominent notices stating that it is
46389          released under this License and any conditions added under
46390          section 7.  This requirement modifies the requirement in
46391          section 4 to "keep intact all notices".
46392
46393       c. You must license the entire work, as a whole, under this
46394          License to anyone who comes into possession of a copy.  This
46395          License will therefore apply, along with any applicable
46396          section 7 additional terms, to the whole of the work, and all
46397          its parts, regardless of how they are packaged.  This License
46398          gives no permission to license the work in any other way, but
46399          it does not invalidate such permission if you have separately
46400          received it.
46401
46402       d. If the work has interactive user interfaces, each must display
46403          Appropriate Legal Notices; however, if the Program has
46404          interactive interfaces that do not display Appropriate Legal
46405          Notices, your work need not make them do so.
46406
46407     A compilation of a covered work with other separate and independent
46408     works, which are not by their nature extensions of the covered
46409     work, and which are not combined with it such as to form a larger
46410     program, in or on a volume of a storage or distribution medium, is
46411     called an "aggregate" if the compilation and its resulting
46412     copyright are not used to limit the access or legal rights of the
46413     compilation's users beyond what the individual works permit.
46414     Inclusion of a covered work in an aggregate does not cause this
46415     License to apply to the other parts of the aggregate.
46416
46417  6. Conveying Non-Source Forms.
46418
46419     You may convey a covered work in object code form under the terms
46420     of sections 4 and 5, provided that you also convey the
46421     machine-readable Corresponding Source under the terms of this
46422     License, in one of these ways:
46423
46424       a. Convey the object code in, or embodied in, a physical product
46425          (including a physical distribution medium), accompanied by the
46426          Corresponding Source fixed on a durable physical medium
46427          customarily used for software interchange.
46428
46429       b. Convey the object code in, or embodied in, a physical product
46430          (including a physical distribution medium), accompanied by a
46431          written offer, valid for at least three years and valid for
46432          as long as you offer spare parts or customer support for that
46433          product model, to give anyone who possesses the object code
46434          either (1) a copy of the Corresponding Source for all the
46435          software in the product that is covered by this License, on a
46436          durable physical medium customarily used for software
46437          interchange, for a price no more than your reasonable cost of
46438          physically performing this conveying of source, or (2) access
46439          to copy the Corresponding Source from a network server at no
46440          charge.
46441
46442       c. Convey individual copies of the object code with a copy of
46443          the written offer to provide the Corresponding Source.  This
46444          alternative is allowed only occasionally and noncommercially,
46445          and only if you received the object code with such an offer,
46446          in accord with subsection 6b.
46447
46448       d. Convey the object code by offering access from a designated
46449          place (gratis or for a charge), and offer equivalent access
46450          to the Corresponding Source in the same way through the same
46451          place at no further charge.  You need not require recipients
46452          to copy the Corresponding Source along with the object code.
46453          If the place to copy the object code is a network server, the
46454          Corresponding Source may be on a different server (operated
46455          by you or a third party) that supports equivalent copying
46456          facilities, provided you maintain clear directions next to
46457          the object code saying where to find the Corresponding Source.
46458          Regardless of what server hosts the Corresponding Source, you
46459          remain obligated to ensure that it is available for as long
46460          as needed to satisfy these requirements.
46461
46462       e. Convey the object code using peer-to-peer transmission,
46463          provided you inform other peers where the object code and
46464          Corresponding Source of the work are being offered to the
46465          general public at no charge under subsection 6d.
46466
46467
46468     A separable portion of the object code, whose source code is
46469     excluded from the Corresponding Source as a System Library, need
46470     not be included in conveying the object code work.
46471
46472     A "User Product" is either (1) a "consumer product", which means
46473     any tangible personal property which is normally used for personal,
46474     family, or household purposes, or (2) anything designed or sold for
46475     incorporation into a dwelling.  In determining whether a product
46476     is a consumer product, doubtful cases shall be resolved in favor of
46477     coverage.  For a particular product received by a particular user,
46478     "normally used" refers to a typical or common use of that class of
46479     product, regardless of the status of the particular user or of the
46480     way in which the particular user actually uses, or expects or is
46481     expected to use, the product.  A product is a consumer product
46482     regardless of whether the product has substantial commercial,
46483     industrial or non-consumer uses, unless such uses represent the
46484     only significant mode of use of the product.
46485
46486     "Installation Information" for a User Product means any methods,
46487     procedures, authorization keys, or other information required to
46488     install and execute modified versions of a covered work in that
46489     User Product from a modified version of its Corresponding Source.
46490     The information must suffice to ensure that the continued
46491     functioning of the modified object code is in no case prevented or
46492     interfered with solely because modification has been made.
46493
46494     If you convey an object code work under this section in, or with,
46495     or specifically for use in, a User Product, and the conveying
46496     occurs as part of a transaction in which the right of possession
46497     and use of the User Product is transferred to the recipient in
46498     perpetuity or for a fixed term (regardless of how the transaction
46499     is characterized), the Corresponding Source conveyed under this
46500     section must be accompanied by the Installation Information.  But
46501     this requirement does not apply if neither you nor any third party
46502     retains the ability to install modified object code on the User
46503     Product (for example, the work has been installed in ROM).
46504
46505     The requirement to provide Installation Information does not
46506     include a requirement to continue to provide support service,
46507     warranty, or updates for a work that has been modified or
46508     installed by the recipient, or for the User Product in which it
46509     has been modified or installed.  Access to a network may be denied
46510     when the modification itself materially and adversely affects the
46511     operation of the network or violates the rules and protocols for
46512     communication across the network.
46513
46514     Corresponding Source conveyed, and Installation Information
46515     provided, in accord with this section must be in a format that is
46516     publicly documented (and with an implementation available to the
46517     public in source code form), and must require no special password
46518     or key for unpacking, reading or copying.
46519
46520  7. Additional Terms.
46521
46522     "Additional permissions" are terms that supplement the terms of
46523     this License by making exceptions from one or more of its
46524     conditions.  Additional permissions that are applicable to the
46525     entire Program shall be treated as though they were included in
46526     this License, to the extent that they are valid under applicable
46527     law.  If additional permissions apply only to part of the Program,
46528     that part may be used separately under those permissions, but the
46529     entire Program remains governed by this License without regard to
46530     the additional permissions.
46531
46532     When you convey a copy of a covered work, you may at your option
46533     remove any additional permissions from that copy, or from any part
46534     of it.  (Additional permissions may be written to require their own
46535     removal in certain cases when you modify the work.)  You may place
46536     additional permissions on material, added by you to a covered work,
46537     for which you have or can give appropriate copyright permission.
46538
46539     Notwithstanding any other provision of this License, for material
46540     you add to a covered work, you may (if authorized by the copyright
46541     holders of that material) supplement the terms of this License
46542     with terms:
46543
46544       a. Disclaiming warranty or limiting liability differently from
46545          the terms of sections 15 and 16 of this License; or
46546
46547       b. Requiring preservation of specified reasonable legal notices
46548          or author attributions in that material or in the Appropriate
46549          Legal Notices displayed by works containing it; or
46550
46551       c. Prohibiting misrepresentation of the origin of that material,
46552          or requiring that modified versions of such material be
46553          marked in reasonable ways as different from the original
46554          version; or
46555
46556       d. Limiting the use for publicity purposes of names of licensors
46557          or authors of the material; or
46558
46559       e. Declining to grant rights under trademark law for use of some
46560          trade names, trademarks, or service marks; or
46561
46562       f. Requiring indemnification of licensors and authors of that
46563          material by anyone who conveys the material (or modified
46564          versions of it) with contractual assumptions of liability to
46565          the recipient, for any liability that these contractual
46566          assumptions directly impose on those licensors and authors.
46567
46568     All other non-permissive additional terms are considered "further
46569     restrictions" within the meaning of section 10.  If the Program as
46570     you received it, or any part of it, contains a notice stating that
46571     it is governed by this License along with a term that is a further
46572     restriction, you may remove that term.  If a license document
46573     contains a further restriction but permits relicensing or
46574     conveying under this License, you may add to a covered work
46575     material governed by the terms of that license document, provided
46576     that the further restriction does not survive such relicensing or
46577     conveying.
46578
46579     If you add terms to a covered work in accord with this section, you
46580     must place, in the relevant source files, a statement of the
46581     additional terms that apply to those files, or a notice indicating
46582     where to find the applicable terms.
46583
46584     Additional terms, permissive or non-permissive, may be stated in
46585     the form of a separately written license, or stated as exceptions;
46586     the above requirements apply either way.
46587
46588  8. Termination.
46589
46590     You may not propagate or modify a covered work except as expressly
46591     provided under this License.  Any attempt otherwise to propagate or
46592     modify it is void, and will automatically terminate your rights
46593     under this License (including any patent licenses granted under
46594     the third paragraph of section 11).
46595
46596     However, if you cease all violation of this License, then your
46597     license from a particular copyright holder is reinstated (a)
46598     provisionally, unless and until the copyright holder explicitly
46599     and finally terminates your license, and (b) permanently, if the
46600     copyright holder fails to notify you of the violation by some
46601     reasonable means prior to 60 days after the cessation.
46602
46603     Moreover, your license from a particular copyright holder is
46604     reinstated permanently if the copyright holder notifies you of the
46605     violation by some reasonable means, this is the first time you have
46606     received notice of violation of this License (for any work) from
46607     that copyright holder, and you cure the violation prior to 30 days
46608     after your receipt of the notice.
46609
46610     Termination of your rights under this section does not terminate
46611     the licenses of parties who have received copies or rights from
46612     you under this License.  If your rights have been terminated and
46613     not permanently reinstated, you do not qualify to receive new
46614     licenses for the same material under section 10.
46615
46616  9. Acceptance Not Required for Having Copies.
46617
46618     You are not required to accept this License in order to receive or
46619     run a copy of the Program.  Ancillary propagation of a covered work
46620     occurring solely as a consequence of using peer-to-peer
46621     transmission to receive a copy likewise does not require
46622     acceptance.  However, nothing other than this License grants you
46623     permission to propagate or modify any covered work.  These actions
46624     infringe copyright if you do not accept this License.  Therefore,
46625     by modifying or propagating a covered work, you indicate your
46626     acceptance of this License to do so.
46627
46628 10. Automatic Licensing of Downstream Recipients.
46629
46630     Each time you convey a covered work, the recipient automatically
46631     receives a license from the original licensors, to run, modify and
46632     propagate that work, subject to this License.  You are not
46633     responsible for enforcing compliance by third parties with this
46634     License.
46635
46636     An "entity transaction" is a transaction transferring control of an
46637     organization, or substantially all assets of one, or subdividing an
46638     organization, or merging organizations.  If propagation of a
46639     covered work results from an entity transaction, each party to that
46640     transaction who receives a copy of the work also receives whatever
46641     licenses to the work the party's predecessor in interest had or
46642     could give under the previous paragraph, plus a right to
46643     possession of the Corresponding Source of the work from the
46644     predecessor in interest, if the predecessor has it or can get it
46645     with reasonable efforts.
46646
46647     You may not impose any further restrictions on the exercise of the
46648     rights granted or affirmed under this License.  For example, you
46649     may not impose a license fee, royalty, or other charge for
46650     exercise of rights granted under this License, and you may not
46651     initiate litigation (including a cross-claim or counterclaim in a
46652     lawsuit) alleging that any patent claim is infringed by making,
46653     using, selling, offering for sale, or importing the Program or any
46654     portion of it.
46655
46656 11. Patents.
46657
46658     A "contributor" is a copyright holder who authorizes use under this
46659     License of the Program or a work on which the Program is based.
46660     The work thus licensed is called the contributor's "contributor
46661     version".
46662
46663     A contributor's "essential patent claims" are all patent claims
46664     owned or controlled by the contributor, whether already acquired or
46665     hereafter acquired, that would be infringed by some manner,
46666     permitted by this License, of making, using, or selling its
46667     contributor version, but do not include claims that would be
46668     infringed only as a consequence of further modification of the
46669     contributor version.  For purposes of this definition, "control"
46670     includes the right to grant patent sublicenses in a manner
46671     consistent with the requirements of this License.
46672
46673     Each contributor grants you a non-exclusive, worldwide,
46674     royalty-free patent license under the contributor's essential
46675     patent claims, to make, use, sell, offer for sale, import and
46676     otherwise run, modify and propagate the contents of its
46677     contributor version.
46678
46679     In the following three paragraphs, a "patent license" is any
46680     express agreement or commitment, however denominated, not to
46681     enforce a patent (such as an express permission to practice a
46682     patent or covenant not to sue for patent infringement).  To
46683     "grant" such a patent license to a party means to make such an
46684     agreement or commitment not to enforce a patent against the party.
46685
46686     If you convey a covered work, knowingly relying on a patent
46687     license, and the Corresponding Source of the work is not available
46688     for anyone to copy, free of charge and under the terms of this
46689     License, through a publicly available network server or other
46690     readily accessible means, then you must either (1) cause the
46691     Corresponding Source to be so available, or (2) arrange to deprive
46692     yourself of the benefit of the patent license for this particular
46693     work, or (3) arrange, in a manner consistent with the requirements
46694     of this License, to extend the patent license to downstream
46695     recipients.  "Knowingly relying" means you have actual knowledge
46696     that, but for the patent license, your conveying the covered work
46697     in a country, or your recipient's use of the covered work in a
46698     country, would infringe one or more identifiable patents in that
46699     country that you have reason to believe are valid.
46700
46701     If, pursuant to or in connection with a single transaction or
46702     arrangement, you convey, or propagate by procuring conveyance of, a
46703     covered work, and grant a patent license to some of the parties
46704     receiving the covered work authorizing them to use, propagate,
46705     modify or convey a specific copy of the covered work, then the
46706     patent license you grant is automatically extended to all
46707     recipients of the covered work and works based on it.
46708
46709     A patent license is "discriminatory" if it does not include within
46710     the scope of its coverage, prohibits the exercise of, or is
46711     conditioned on the non-exercise of one or more of the rights that
46712     are specifically granted under this License.  You may not convey a
46713     covered work if you are a party to an arrangement with a third
46714     party that is in the business of distributing software, under
46715     which you make payment to the third party based on the extent of
46716     your activity of conveying the work, and under which the third
46717     party grants, to any of the parties who would receive the covered
46718     work from you, a discriminatory patent license (a) in connection
46719     with copies of the covered work conveyed by you (or copies made
46720     from those copies), or (b) primarily for and in connection with
46721     specific products or compilations that contain the covered work,
46722     unless you entered into that arrangement, or that patent license
46723     was granted, prior to 28 March 2007.
46724
46725     Nothing in this License shall be construed as excluding or limiting
46726     any implied license or other defenses to infringement that may
46727     otherwise be available to you under applicable patent law.
46728
46729 12. No Surrender of Others' Freedom.
46730
46731     If conditions are imposed on you (whether by court order,
46732     agreement or otherwise) that contradict the conditions of this
46733     License, they do not excuse you from the conditions of this
46734     License.  If you cannot convey a covered work so as to satisfy
46735     simultaneously your obligations under this License and any other
46736     pertinent obligations, then as a consequence you may not convey it
46737     at all.  For example, if you agree to terms that obligate you to
46738     collect a royalty for further conveying from those to whom you
46739     convey the Program, the only way you could satisfy both those
46740     terms and this License would be to refrain entirely from conveying
46741     the Program.
46742
46743 13. Use with the GNU Affero General Public License.
46744
46745     Notwithstanding any other provision of this License, you have
46746     permission to link or combine any covered work with a work licensed
46747     under version 3 of the GNU Affero General Public License into a
46748     single combined work, and to convey the resulting work.  The terms
46749     of this License will continue to apply to the part which is the
46750     covered work, but the special requirements of the GNU Affero
46751     General Public License, section 13, concerning interaction through
46752     a network will apply to the combination as such.
46753
46754 14. Revised Versions of this License.
46755
46756     The Free Software Foundation may publish revised and/or new
46757     versions of the GNU General Public License from time to time.
46758     Such new versions will be similar in spirit to the present
46759     version, but may differ in detail to address new problems or
46760     concerns.
46761
46762     Each version is given a distinguishing version number.  If the
46763     Program specifies that a certain numbered version of the GNU
46764     General Public License "or any later version" applies to it, you
46765     have the option of following the terms and conditions either of
46766     that numbered version or of any later version published by the
46767     Free Software Foundation.  If the Program does not specify a
46768     version number of the GNU General Public License, you may choose
46769     any version ever published by the Free Software Foundation.
46770
46771     If the Program specifies that a proxy can decide which future
46772     versions of the GNU General Public License can be used, that
46773     proxy's public statement of acceptance of a version permanently
46774     authorizes you to choose that version for the Program.
46775
46776     Later license versions may give you additional or different
46777     permissions.  However, no additional obligations are imposed on any
46778     author or copyright holder as a result of your choosing to follow a
46779     later version.
46780
46781 15. Disclaimer of Warranty.
46782
46783     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
46784     APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
46785     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
46786     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
46787     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
46788     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
46789     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
46790     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
46791     NECESSARY SERVICING, REPAIR OR CORRECTION.
46792
46793 16. Limitation of Liability.
46794
46795     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
46796     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
46797     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
46798     FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
46799     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
46800     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
46801     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
46802     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
46803     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
46804     THE POSSIBILITY OF SUCH DAMAGES.
46805
46806 17. Interpretation of Sections 15 and 16.
46807
46808     If the disclaimer of warranty and limitation of liability provided
46809     above cannot be given local legal effect according to their terms,
46810     reviewing courts shall apply local law that most closely
46811     approximates an absolute waiver of all civil liability in
46812     connection with the Program, unless a warranty or assumption of
46813     liability accompanies a copy of the Program in return for a fee.
46814
46815
46816END OF TERMS AND CONDITIONS
46817===========================
46818
46819How to Apply These Terms to Your New Programs
46820=============================================
46821
46822If you develop a new program, and you want it to be of the greatest
46823possible use to the public, the best way to achieve this is to make it
46824free software which everyone can redistribute and change under these
46825terms.
46826
46827 To do so, attach the following notices to the program.  It is safest
46828to attach them to the start of each source file to most effectively
46829state the exclusion of warranty; and each file should have at least the
46830"copyright" line and a pointer to where the full notice is found.
46831
46832     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
46833     Copyright (C) YEAR NAME OF AUTHOR
46834
46835     This program is free software: you can redistribute it and/or modify
46836     it under the terms of the GNU General Public License as published by
46837     the Free Software Foundation, either version 3 of the License, or (at
46838     your option) any later version.
46839
46840     This program is distributed in the hope that it will be useful, but
46841     WITHOUT ANY WARRANTY; without even the implied warranty of
46842     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
46843     General Public License for more details.
46844
46845     You should have received a copy of the GNU General Public License
46846     along with this program.  If not, see `http://www.gnu.org/licenses/'.
46847
46848 Also add information on how to contact you by electronic and paper
46849mail.
46850
46851 If the program does terminal interaction, make it output a short
46852notice like this when it starts in an interactive mode:
46853
46854     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
46855     This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
46856     This is free software, and you are welcome to redistribute it
46857     under certain conditions; type `show c' for details.
46858
46859 The hypothetical commands `show w' and `show c' should show the
46860appropriate parts of the General Public License.  Of course, your
46861program's commands might be different; for a GUI interface, you would
46862use an "about box".
46863
46864 You should also get your employer (if you work as a programmer) or
46865school, if any, to sign a "copyright disclaimer" for the program, if
46866necessary.  For more information on this, and how to apply and follow
46867the GNU GPL, see `http://www.gnu.org/licenses/'.
46868
46869 The GNU General Public License does not permit incorporating your
46870program into proprietary programs.  If your program is a subroutine
46871library, you may consider it more useful to permit linking proprietary
46872applications with the library.  If this is what you want to do, use the
46873GNU Lesser General Public License instead of this License.  But first,
46874please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
46875
46876
46877File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
46878
46879GNU Free Documentation License
46880******************************
46881
46882                     Version 1.3, 3 November 2008
46883
46884     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
46885     `http://fsf.org/'
46886
46887     Everyone is permitted to copy and distribute verbatim copies
46888     of this license document, but changing it is not allowed.
46889
46890  0. PREAMBLE
46891
46892     The purpose of this License is to make a manual, textbook, or other
46893     functional and useful document "free" in the sense of freedom: to
46894     assure everyone the effective freedom to copy and redistribute it,
46895     with or without modifying it, either commercially or
46896     noncommercially.  Secondarily, this License preserves for the
46897     author and publisher a way to get credit for their work, while not
46898     being considered responsible for modifications made by others.
46899
46900     This License is a kind of "copyleft", which means that derivative
46901     works of the document must themselves be free in the same sense.
46902     It complements the GNU General Public License, which is a copyleft
46903     license designed for free software.
46904
46905     We have designed this License in order to use it for manuals for
46906     free software, because free software needs free documentation: a
46907     free program should come with manuals providing the same freedoms
46908     that the software does.  But this License is not limited to
46909     software manuals; it can be used for any textual work, regardless
46910     of subject matter or whether it is published as a printed book.
46911     We recommend this License principally for works whose purpose is
46912     instruction or reference.
46913
46914  1. APPLICABILITY AND DEFINITIONS
46915
46916     This License applies to any manual or other work, in any medium,
46917     that contains a notice placed by the copyright holder saying it
46918     can be distributed under the terms of this License.  Such a notice
46919     grants a world-wide, royalty-free license, unlimited in duration,
46920     to use that work under the conditions stated herein.  The
46921     "Document", below, refers to any such manual or work.  Any member
46922     of the public is a licensee, and is addressed as "you".  You
46923     accept the license if you copy, modify or distribute the work in a
46924     way requiring permission under copyright law.
46925
46926     A "Modified Version" of the Document means any work containing the
46927     Document or a portion of it, either copied verbatim, or with
46928     modifications and/or translated into another language.
46929
46930     A "Secondary Section" is a named appendix or a front-matter section
46931     of the Document that deals exclusively with the relationship of the
46932     publishers or authors of the Document to the Document's overall
46933     subject (or to related matters) and contains nothing that could
46934     fall directly within that overall subject.  (Thus, if the Document
46935     is in part a textbook of mathematics, a Secondary Section may not
46936     explain any mathematics.)  The relationship could be a matter of
46937     historical connection with the subject or with related matters, or
46938     of legal, commercial, philosophical, ethical or political position
46939     regarding them.
46940
46941     The "Invariant Sections" are certain Secondary Sections whose
46942     titles are designated, as being those of Invariant Sections, in
46943     the notice that says that the Document is released under this
46944     License.  If a section does not fit the above definition of
46945     Secondary then it is not allowed to be designated as Invariant.
46946     The Document may contain zero Invariant Sections.  If the Document
46947     does not identify any Invariant Sections then there are none.
46948
46949     The "Cover Texts" are certain short passages of text that are
46950     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
46951     that says that the Document is released under this License.  A
46952     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
46953     be at most 25 words.
46954
46955     A "Transparent" copy of the Document means a machine-readable copy,
46956     represented in a format whose specification is available to the
46957     general public, that is suitable for revising the document
46958     straightforwardly with generic text editors or (for images
46959     composed of pixels) generic paint programs or (for drawings) some
46960     widely available drawing editor, and that is suitable for input to
46961     text formatters or for automatic translation to a variety of
46962     formats suitable for input to text formatters.  A copy made in an
46963     otherwise Transparent file format whose markup, or absence of
46964     markup, has been arranged to thwart or discourage subsequent
46965     modification by readers is not Transparent.  An image format is
46966     not Transparent if used for any substantial amount of text.  A
46967     copy that is not "Transparent" is called "Opaque".
46968
46969     Examples of suitable formats for Transparent copies include plain
46970     ASCII without markup, Texinfo input format, LaTeX input format,
46971     SGML or XML using a publicly available DTD, and
46972     standard-conforming simple HTML, PostScript or PDF designed for
46973     human modification.  Examples of transparent image formats include
46974     PNG, XCF and JPG.  Opaque formats include proprietary formats that
46975     can be read and edited only by proprietary word processors, SGML or
46976     XML for which the DTD and/or processing tools are not generally
46977     available, and the machine-generated HTML, PostScript or PDF
46978     produced by some word processors for output purposes only.
46979
46980     The "Title Page" means, for a printed book, the title page itself,
46981     plus such following pages as are needed to hold, legibly, the
46982     material this License requires to appear in the title page.  For
46983     works in formats which do not have any title page as such, "Title
46984     Page" means the text near the most prominent appearance of the
46985     work's title, preceding the beginning of the body of the text.
46986
46987     The "publisher" means any person or entity that distributes copies
46988     of the Document to the public.
46989
46990     A section "Entitled XYZ" means a named subunit of the Document
46991     whose title either is precisely XYZ or contains XYZ in parentheses
46992     following text that translates XYZ in another language.  (Here XYZ
46993     stands for a specific section name mentioned below, such as
46994     "Acknowledgements", "Dedications", "Endorsements", or "History".)
46995     To "Preserve the Title" of such a section when you modify the
46996     Document means that it remains a section "Entitled XYZ" according
46997     to this definition.
46998
46999     The Document may include Warranty Disclaimers next to the notice
47000     which states that this License applies to the Document.  These
47001     Warranty Disclaimers are considered to be included by reference in
47002     this License, but only as regards disclaiming warranties: any other
47003     implication that these Warranty Disclaimers may have is void and
47004     has no effect on the meaning of this License.
47005
47006  2. VERBATIM COPYING
47007
47008     You may copy and distribute the Document in any medium, either
47009     commercially or noncommercially, provided that this License, the
47010     copyright notices, and the license notice saying this License
47011     applies to the Document are reproduced in all copies, and that you
47012     add no other conditions whatsoever to those of this License.  You
47013     may not use technical measures to obstruct or control the reading
47014     or further copying of the copies you make or distribute.  However,
47015     you may accept compensation in exchange for copies.  If you
47016     distribute a large enough number of copies you must also follow
47017     the conditions in section 3.
47018
47019     You may also lend copies, under the same conditions stated above,
47020     and you may publicly display copies.
47021
47022  3. COPYING IN QUANTITY
47023
47024     If you publish printed copies (or copies in media that commonly
47025     have printed covers) of the Document, numbering more than 100, and
47026     the Document's license notice requires Cover Texts, you must
47027     enclose the copies in covers that carry, clearly and legibly, all
47028     these Cover Texts: Front-Cover Texts on the front cover, and
47029     Back-Cover Texts on the back cover.  Both covers must also clearly
47030     and legibly identify you as the publisher of these copies.  The
47031     front cover must present the full title with all words of the
47032     title equally prominent and visible.  You may add other material
47033     on the covers in addition.  Copying with changes limited to the
47034     covers, as long as they preserve the title of the Document and
47035     satisfy these conditions, can be treated as verbatim copying in
47036     other respects.
47037
47038     If the required texts for either cover are too voluminous to fit
47039     legibly, you should put the first ones listed (as many as fit
47040     reasonably) on the actual cover, and continue the rest onto
47041     adjacent pages.
47042
47043     If you publish or distribute Opaque copies of the Document
47044     numbering more than 100, you must either include a
47045     machine-readable Transparent copy along with each Opaque copy, or
47046     state in or with each Opaque copy a computer-network location from
47047     which the general network-using public has access to download
47048     using public-standard network protocols a complete Transparent
47049     copy of the Document, free of added material.  If you use the
47050     latter option, you must take reasonably prudent steps, when you
47051     begin distribution of Opaque copies in quantity, to ensure that
47052     this Transparent copy will remain thus accessible at the stated
47053     location until at least one year after the last time you
47054     distribute an Opaque copy (directly or through your agents or
47055     retailers) of that edition to the public.
47056
47057     It is requested, but not required, that you contact the authors of
47058     the Document well before redistributing any large number of
47059     copies, to give them a chance to provide you with an updated
47060     version of the Document.
47061
47062  4. MODIFICATIONS
47063
47064     You may copy and distribute a Modified Version of the Document
47065     under the conditions of sections 2 and 3 above, provided that you
47066     release the Modified Version under precisely this License, with
47067     the Modified Version filling the role of the Document, thus
47068     licensing distribution and modification of the Modified Version to
47069     whoever possesses a copy of it.  In addition, you must do these
47070     things in the Modified Version:
47071
47072       A. Use in the Title Page (and on the covers, if any) a title
47073          distinct from that of the Document, and from those of
47074          previous versions (which should, if there were any, be listed
47075          in the History section of the Document).  You may use the
47076          same title as a previous version if the original publisher of
47077          that version gives permission.
47078
47079       B. List on the Title Page, as authors, one or more persons or
47080          entities responsible for authorship of the modifications in
47081          the Modified Version, together with at least five of the
47082          principal authors of the Document (all of its principal
47083          authors, if it has fewer than five), unless they release you
47084          from this requirement.
47085
47086       C. State on the Title page the name of the publisher of the
47087          Modified Version, as the publisher.
47088
47089       D. Preserve all the copyright notices of the Document.
47090
47091       E. Add an appropriate copyright notice for your modifications
47092          adjacent to the other copyright notices.
47093
47094       F. Include, immediately after the copyright notices, a license
47095          notice giving the public permission to use the Modified
47096          Version under the terms of this License, in the form shown in
47097          the Addendum below.
47098
47099       G. Preserve in that license notice the full lists of Invariant
47100          Sections and required Cover Texts given in the Document's
47101          license notice.
47102
47103       H. Include an unaltered copy of this License.
47104
47105       I. Preserve the section Entitled "History", Preserve its Title,
47106          and add to it an item stating at least the title, year, new
47107          authors, and publisher of the Modified Version as given on
47108          the Title Page.  If there is no section Entitled "History" in
47109          the Document, create one stating the title, year, authors,
47110          and publisher of the Document as given on its Title Page,
47111          then add an item describing the Modified Version as stated in
47112          the previous sentence.
47113
47114       J. Preserve the network location, if any, given in the Document
47115          for public access to a Transparent copy of the Document, and
47116          likewise the network locations given in the Document for
47117          previous versions it was based on.  These may be placed in
47118          the "History" section.  You may omit a network location for a
47119          work that was published at least four years before the
47120          Document itself, or if the original publisher of the version
47121          it refers to gives permission.
47122
47123       K. For any section Entitled "Acknowledgements" or "Dedications",
47124          Preserve the Title of the section, and preserve in the
47125          section all the substance and tone of each of the contributor
47126          acknowledgements and/or dedications given therein.
47127
47128       L. Preserve all the Invariant Sections of the Document,
47129          unaltered in their text and in their titles.  Section numbers
47130          or the equivalent are not considered part of the section
47131          titles.
47132
47133       M. Delete any section Entitled "Endorsements".  Such a section
47134          may not be included in the Modified Version.
47135
47136       N. Do not retitle any existing section to be Entitled
47137          "Endorsements" or to conflict in title with any Invariant
47138          Section.
47139
47140       O. Preserve any Warranty Disclaimers.
47141
47142     If the Modified Version includes new front-matter sections or
47143     appendices that qualify as Secondary Sections and contain no
47144     material copied from the Document, you may at your option
47145     designate some or all of these sections as invariant.  To do this,
47146     add their titles to the list of Invariant Sections in the Modified
47147     Version's license notice.  These titles must be distinct from any
47148     other section titles.
47149
47150     You may add a section Entitled "Endorsements", provided it contains
47151     nothing but endorsements of your Modified Version by various
47152     parties--for example, statements of peer review or that the text
47153     has been approved by an organization as the authoritative
47154     definition of a standard.
47155
47156     You may add a passage of up to five words as a Front-Cover Text,
47157     and a passage of up to 25 words as a Back-Cover Text, to the end
47158     of the list of Cover Texts in the Modified Version.  Only one
47159     passage of Front-Cover Text and one of Back-Cover Text may be
47160     added by (or through arrangements made by) any one entity.  If the
47161     Document already includes a cover text for the same cover,
47162     previously added by you or by arrangement made by the same entity
47163     you are acting on behalf of, you may not add another; but you may
47164     replace the old one, on explicit permission from the previous
47165     publisher that added the old one.
47166
47167     The author(s) and publisher(s) of the Document do not by this
47168     License give permission to use their names for publicity for or to
47169     assert or imply endorsement of any Modified Version.
47170
47171  5. COMBINING DOCUMENTS
47172
47173     You may combine the Document with other documents released under
47174     this License, under the terms defined in section 4 above for
47175     modified versions, provided that you include in the combination
47176     all of the Invariant Sections of all of the original documents,
47177     unmodified, and list them all as Invariant Sections of your
47178     combined work in its license notice, and that you preserve all
47179     their Warranty Disclaimers.
47180
47181     The combined work need only contain one copy of this License, and
47182     multiple identical Invariant Sections may be replaced with a single
47183     copy.  If there are multiple Invariant Sections with the same name
47184     but different contents, make the title of each such section unique
47185     by adding at the end of it, in parentheses, the name of the
47186     original author or publisher of that section if known, or else a
47187     unique number.  Make the same adjustment to the section titles in
47188     the list of Invariant Sections in the license notice of the
47189     combined work.
47190
47191     In the combination, you must combine any sections Entitled
47192     "History" in the various original documents, forming one section
47193     Entitled "History"; likewise combine any sections Entitled
47194     "Acknowledgements", and any sections Entitled "Dedications".  You
47195     must delete all sections Entitled "Endorsements."
47196
47197  6. COLLECTIONS OF DOCUMENTS
47198
47199     You may make a collection consisting of the Document and other
47200     documents released under this License, and replace the individual
47201     copies of this License in the various documents with a single copy
47202     that is included in the collection, provided that you follow the
47203     rules of this License for verbatim copying of each of the
47204     documents in all other respects.
47205
47206     You may extract a single document from such a collection, and
47207     distribute it individually under this License, provided you insert
47208     a copy of this License into the extracted document, and follow
47209     this License in all other respects regarding verbatim copying of
47210     that document.
47211
47212  7. AGGREGATION WITH INDEPENDENT WORKS
47213
47214     A compilation of the Document or its derivatives with other
47215     separate and independent documents or works, in or on a volume of
47216     a storage or distribution medium, is called an "aggregate" if the
47217     copyright resulting from the compilation is not used to limit the
47218     legal rights of the compilation's users beyond what the individual
47219     works permit.  When the Document is included in an aggregate, this
47220     License does not apply to the other works in the aggregate which
47221     are not themselves derivative works of the Document.
47222
47223     If the Cover Text requirement of section 3 is applicable to these
47224     copies of the Document, then if the Document is less than one half
47225     of the entire aggregate, the Document's Cover Texts may be placed
47226     on covers that bracket the Document within the aggregate, or the
47227     electronic equivalent of covers if the Document is in electronic
47228     form.  Otherwise they must appear on printed covers that bracket
47229     the whole aggregate.
47230
47231  8. TRANSLATION
47232
47233     Translation is considered a kind of modification, so you may
47234     distribute translations of the Document under the terms of section
47235     4.  Replacing Invariant Sections with translations requires special
47236     permission from their copyright holders, but you may include
47237     translations of some or all Invariant Sections in addition to the
47238     original versions of these Invariant Sections.  You may include a
47239     translation of this License, and all the license notices in the
47240     Document, and any Warranty Disclaimers, provided that you also
47241     include the original English version of this License and the
47242     original versions of those notices and disclaimers.  In case of a
47243     disagreement between the translation and the original version of
47244     this License or a notice or disclaimer, the original version will
47245     prevail.
47246
47247     If a section in the Document is Entitled "Acknowledgements",
47248     "Dedications", or "History", the requirement (section 4) to
47249     Preserve its Title (section 1) will typically require changing the
47250     actual title.
47251
47252  9. TERMINATION
47253
47254     You may not copy, modify, sublicense, or distribute the Document
47255     except as expressly provided under this License.  Any attempt
47256     otherwise to copy, modify, sublicense, or distribute it is void,
47257     and will automatically terminate your rights under this License.
47258
47259     However, if you cease all violation of this License, then your
47260     license from a particular copyright holder is reinstated (a)
47261     provisionally, unless and until the copyright holder explicitly
47262     and finally terminates your license, and (b) permanently, if the
47263     copyright holder fails to notify you of the violation by some
47264     reasonable means prior to 60 days after the cessation.
47265
47266     Moreover, your license from a particular copyright holder is
47267     reinstated permanently if the copyright holder notifies you of the
47268     violation by some reasonable means, this is the first time you have
47269     received notice of violation of this License (for any work) from
47270     that copyright holder, and you cure the violation prior to 30 days
47271     after your receipt of the notice.
47272
47273     Termination of your rights under this section does not terminate
47274     the licenses of parties who have received copies or rights from
47275     you under this License.  If your rights have been terminated and
47276     not permanently reinstated, receipt of a copy of some or all of
47277     the same material does not give you any rights to use it.
47278
47279 10. FUTURE REVISIONS OF THIS LICENSE
47280
47281     The Free Software Foundation may publish new, revised versions of
47282     the GNU Free Documentation License from time to time.  Such new
47283     versions will be similar in spirit to the present version, but may
47284     differ in detail to address new problems or concerns.  See
47285     `http://www.gnu.org/copyleft/'.
47286
47287     Each version of the License is given a distinguishing version
47288     number.  If the Document specifies that a particular numbered
47289     version of this License "or any later version" applies to it, you
47290     have the option of following the terms and conditions either of
47291     that specified version or of any later version that has been
47292     published (not as a draft) by the Free Software Foundation.  If
47293     the Document does not specify a version number of this License,
47294     you may choose any version ever published (not as a draft) by the
47295     Free Software Foundation.  If the Document specifies that a proxy
47296     can decide which future versions of this License can be used, that
47297     proxy's public statement of acceptance of a version permanently
47298     authorizes you to choose that version for the Document.
47299
47300 11. RELICENSING
47301
47302     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
47303     World Wide Web server that publishes copyrightable works and also
47304     provides prominent facilities for anybody to edit those works.  A
47305     public wiki that anybody can edit is an example of such a server.
47306     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
47307     site means any set of copyrightable works thus published on the MMC
47308     site.
47309
47310     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
47311     license published by Creative Commons Corporation, a not-for-profit
47312     corporation with a principal place of business in San Francisco,
47313     California, as well as future copyleft versions of that license
47314     published by that same organization.
47315
47316     "Incorporate" means to publish or republish a Document, in whole or
47317     in part, as part of another Document.
47318
47319     An MMC is "eligible for relicensing" if it is licensed under this
47320     License, and if all works that were first published under this
47321     License somewhere other than this MMC, and subsequently
47322     incorporated in whole or in part into the MMC, (1) had no cover
47323     texts or invariant sections, and (2) were thus incorporated prior
47324     to November 1, 2008.
47325
47326     The operator of an MMC Site may republish an MMC contained in the
47327     site under CC-BY-SA on the same site at any time before August 1,
47328     2009, provided the MMC is eligible for relicensing.
47329
47330
47331ADDENDUM: How to use this License for your documents
47332====================================================
47333
47334To use this License in a document you have written, include a copy of
47335the License in the document and put the following copyright and license
47336notices just after the title page:
47337
47338       Copyright (C)  YEAR  YOUR NAME.
47339       Permission is granted to copy, distribute and/or modify this document
47340       under the terms of the GNU Free Documentation License, Version 1.3
47341       or any later version published by the Free Software Foundation;
47342       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
47343       Texts.  A copy of the license is included in the section entitled ``GNU
47344       Free Documentation License''.
47345
47346 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
47347replace the "with...Texts." line with this:
47348
47349         with the Invariant Sections being LIST THEIR TITLES, with
47350         the Front-Cover Texts being LIST, and with the Back-Cover Texts
47351         being LIST.
47352
47353 If you have Invariant Sections without Cover Texts, or some other
47354combination of the three, merge those two alternatives to suit the
47355situation.
47356
47357 If your document contains nontrivial examples of program code, we
47358recommend releasing these examples in parallel under your choice of
47359free software license, such as the GNU General Public License, to
47360permit their use in free software.
47361
47362
47363File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
47364
47365Contributors to GCC
47366*******************
47367
47368The GCC project would like to thank its many contributors.  Without
47369them the project would not have been nearly as successful as it has
47370been.  Any omissions in this list are accidental.  Feel free to contact
47371<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
47372some of your contributions are not listed.  Please keep this list in
47373alphabetical order.
47374
47375   * Analog Devices helped implement the support for complex data types
47376     and iterators.
47377
47378   * John David Anglin for threading-related fixes and improvements to
47379     libstdc++-v3, and the HP-UX port.
47380
47381   * James van Artsdalen wrote the code that makes efficient use of the
47382     Intel 80387 register stack.
47383
47384   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
47385     Series port.
47386
47387   * Alasdair Baird for various bug fixes.
47388
47389   * Giovanni Bajo for analyzing lots of complicated C++ problem
47390     reports.
47391
47392   * Peter Barada for his work to improve code generation for new
47393     ColdFire cores.
47394
47395   * Gerald Baumgartner added the signature extension to the C++ front
47396     end.
47397
47398   * Godmar Back for his Java improvements and encouragement.
47399
47400   * Scott Bambrough for help porting the Java compiler.
47401
47402   * Wolfgang Bangerth for processing tons of bug reports.
47403
47404   * Jon Beniston for his Microsoft Windows port of Java and port to
47405     Lattice Mico32.
47406
47407   * Daniel Berlin for better DWARF2 support, faster/better
47408     optimizations, improved alias analysis, plus migrating GCC to
47409     Bugzilla.
47410
47411   * Geoff Berry for his Java object serialization work and various
47412     patches.
47413
47414   * David Binderman tests weekly snapshots of GCC trunk against Fedora
47415     Rawhide for several architectures.
47416
47417   * Laurynas Biveinis for memory management work and DJGPP port fixes.
47418
47419   * Uros Bizjak for the implementation of x87 math built-in functions
47420     and for various middle end and i386 back end improvements and bug
47421     fixes.
47422
47423   * Eric Blake for helping to make GCJ and libgcj conform to the
47424     specifications.
47425
47426   * Janne Blomqvist for contributions to GNU Fortran.
47427
47428   * Segher Boessenkool for various fixes.
47429
47430   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
47431     other Java work.
47432
47433   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
47434     miscellaneous clean-ups.
47435
47436   * Steven Bosscher for integrating the GNU Fortran front end into GCC
47437     and for contributing to the tree-ssa branch.
47438
47439   * Eric Botcazou for fixing middle- and backend bugs left and right.
47440
47441   * Per Bothner for his direction via the steering committee and
47442     various improvements to the infrastructure for supporting new
47443     languages.  Chill front end implementation.  Initial
47444     implementations of cpplib, fix-header, config.guess, libio, and
47445     past C++ library (libg++) maintainer.  Dreaming up, designing and
47446     implementing much of GCJ.
47447
47448   * Devon Bowen helped port GCC to the Tahoe.
47449
47450   * Don Bowman for mips-vxworks contributions.
47451
47452   * Dave Brolley for work on cpplib and Chill.
47453
47454   * Paul Brook for work on the ARM architecture and maintaining GNU
47455     Fortran.
47456
47457   * Robert Brown implemented the support for Encore 32000 systems.
47458
47459   * Christian Bruel for improvements to local store elimination.
47460
47461   * Herman A.J. ten Brugge for various fixes.
47462
47463   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
47464     FAQ.
47465
47466   * Joe Buck for his direction via the steering committee from its
47467     creation to 2013.
47468
47469   * Craig Burley for leadership of the G77 Fortran effort.
47470
47471   * Stephan Buys for contributing Doxygen notes for libstdc++.
47472
47473   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
47474     to the C++ strings, streambufs and formatted I/O, hard detective
47475     work on the frustrating localization issues, and keeping up with
47476     the problem reports.
47477
47478   * John Carr for his alias work, SPARC hacking, infrastructure
47479     improvements, previous contributions to the steering committee,
47480     loop optimizations, etc.
47481
47482   * Stephane Carrez for 68HC11 and 68HC12 ports.
47483
47484   * Steve Chamberlain for support for the Renesas SH and H8 processors
47485     and the PicoJava processor, and for GCJ config fixes.
47486
47487   * Glenn Chambers for help with the GCJ FAQ.
47488
47489   * John-Marc Chandonia for various libgcj patches.
47490
47491   * Denis Chertykov for contributing and maintaining the AVR port, the
47492     first GCC port for an 8-bit architecture.
47493
47494   * Scott Christley for his Objective-C contributions.
47495
47496   * Eric Christopher for his Java porting help and clean-ups.
47497
47498   * Branko Cibej for more warning contributions.
47499
47500   * The GNU Classpath project for all of their merged runtime code.
47501
47502   * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
47503     `--help', and other random hacking.
47504
47505   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
47506
47507   * R. Kelley Cook for making GCC buildable from a read-only directory
47508     as well as other miscellaneous build process and documentation
47509     clean-ups.
47510
47511   * Ralf Corsepius for SH testing and minor bug fixing.
47512
47513   * Stan Cox for care and feeding of the x86 port and lots of behind
47514     the scenes hacking.
47515
47516   * Alex Crain provided changes for the 3b1.
47517
47518   * Ian Dall for major improvements to the NS32k port.
47519
47520   * Paul Dale for his work to add uClinux platform support to the m68k
47521     backend.
47522
47523   * Dario Dariol contributed the four varieties of sample programs
47524     that print a copy of their source.
47525
47526   * Russell Davidson for fstream and stringstream fixes in libstdc++.
47527
47528   * Bud Davis for work on the G77 and GNU Fortran compilers.
47529
47530   * Mo DeJong for GCJ and libgcj bug fixes.
47531
47532   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
47533     various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.
47534
47535   * Arnaud Desitter for helping to debug GNU Fortran.
47536
47537   * Gabriel Dos Reis for contributions to G++, contributions and
47538     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
47539     including `valarray<>', `complex<>', maintaining the numerics
47540     library (including that pesky `<limits>' :-) and keeping
47541     up-to-date anything to do with numbers.
47542
47543   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
47544     ISO C99 support, CFG dumping support, etc., plus support of the
47545     C++ runtime libraries including for all kinds of C interface
47546     issues, contributing and maintaining `complex<>', sanity checking
47547     and disbursement, configuration architecture, libio maintenance,
47548     and early math work.
47549
47550   * Franc,ois Dumont for his work on libstdc++-v3, especially
47551     maintaining and improving `debug-mode' and associative and
47552     unordered containers.
47553
47554   * Zdenek Dvorak for a new loop unroller and various fixes.
47555
47556   * Michael Eager for his work on the Xilinx MicroBlaze port.
47557
47558   * Richard Earnshaw for his ongoing work with the ARM.
47559
47560   * David Edelsohn for his direction via the steering committee,
47561     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
47562     loop changes, doing the entire AIX port of libstdc++ with his bare
47563     hands, and for ensuring GCC properly keeps working on AIX.
47564
47565   * Kevin Ediger for the floating point formatting of num_put::do_put
47566     in libstdc++.
47567
47568   * Phil Edwards for libstdc++ work including configuration hackery,
47569     documentation maintainer, chief breaker of the web pages, the
47570     occasional iostream bug fix, and work on shared library symbol
47571     versioning.
47572
47573   * Paul Eggert for random hacking all over GCC.
47574
47575   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
47576     configuration support for locales and fstream-related fixes.
47577
47578   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
47579     iostreams.
47580
47581   * Christian Ehrhardt for dealing with bug reports.
47582
47583   * Ben Elliston for his work to move the Objective-C runtime into its
47584     own subdirectory and for his work on autoconf.
47585
47586   * Revital Eres for work on the PowerPC 750CL port.
47587
47588   * Marc Espie for OpenBSD support.
47589
47590   * Doug Evans for much of the global optimization framework, arc,
47591     m32r, and SPARC work.
47592
47593   * Christopher Faylor for his work on the Cygwin port and for caring
47594     and feeding the gcc.gnu.org box and saving its users tons of spam.
47595
47596   * Fred Fish for BeOS support and Ada fixes.
47597
47598   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
47599
47600   * Peter Gerwinski for various bug fixes and the Pascal front end.
47601
47602   * Kaveh R. Ghazi for his direction via the steering committee,
47603     amazing work to make `-W -Wall -W* -Werror' useful, and testing
47604     GCC on a plethora of platforms.  Kaveh extends his gratitude to
47605     the CAIP Center at Rutgers University for providing him with
47606     computing resources to work on Free Software from the late 1980s
47607     to 2010.
47608
47609   * John Gilmore for a donation to the FSF earmarked improving GNU
47610     Java.
47611
47612   * Judy Goldberg for c++ contributions.
47613
47614   * Torbjorn Granlund for various fixes and the c-torture testsuite,
47615     multiply- and divide-by-constant optimization, improved long long
47616     support, improved leaf function register allocation, and his
47617     direction via the steering committee.
47618
47619   * Jonny Grant for improvements to `collect2's' `--help'
47620     documentation.
47621
47622   * Anthony Green for his `-Os' contributions, the moxie port, and
47623     Java front end work.
47624
47625   * Stu Grossman for gdb hacking, allowing GCJ developers to debug
47626     Java code.
47627
47628   * Michael K. Gschwind contributed the port to the PDP-11.
47629
47630   * Richard Biener for his ongoing middle-end contributions and bug
47631     fixes and for release management.
47632
47633   * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
47634     the support for Dwarf symbolic debugging information, and much of
47635     the support for System V Release 4.  He has also worked heavily on
47636     the Intel 386 and 860 support.
47637
47638   * Sumanth Gundapaneni for contributing the CR16 port.
47639
47640   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
47641     GCSE.
47642
47643   * Bruno Haible for improvements in the runtime overhead for EH, new
47644     warnings and assorted bug fixes.
47645
47646   * Andrew Haley for his amazing Java compiler and library efforts.
47647
47648   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
47649     series 300.
47650
47651   * Michael Hayes for various thankless work he's done trying to get
47652     the c30/c40 ports functional.  Lots of loop and unroll
47653     improvements and fixes.
47654
47655   * Dara Hazeghi for wading through myriads of target-specific bug
47656     reports.
47657
47658   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
47659
47660   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
47661     work, loop opts, and generally fixing lots of old problems we've
47662     ignored for years, flow rewrite and lots of further stuff,
47663     including reviewing tons of patches.
47664
47665   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
47666     various fixes.
47667
47668   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
47669     contributed the support for the Sony NEWS machine.
47670
47671   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
47672     various fixes.
47673
47674   * Katherine Holcomb for work on GNU Fortran.
47675
47676   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
47677     of testing and bug fixing, particularly of GCC configury code.
47678
47679   * Steve Holmgren for MachTen patches.
47680
47681   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.
47682
47683   * Jan Hubicka for his x86 port improvements.
47684
47685   * Falk Hueffner for working on C and optimization bug reports.
47686
47687   * Bernardo Innocenti for his m68k work, including merging of
47688     ColdFire improvements and uClinux support.
47689
47690   * Christian Iseli for various bug fixes.
47691
47692   * Kamil Iskra for general m68k hacking.
47693
47694   * Lee Iverson for random fixes and MIPS testing.
47695
47696   * Balaji V. Iyer for Cilk+ development and merging.
47697
47698   * Andreas Jaeger for testing and benchmarking of GCC and various bug
47699     fixes.
47700
47701   * Martin Jambor for his work on inter-procedural optimizations, the
47702     switch conversion pass, and scalar replacement of aggregates.
47703
47704   * Jakub Jelinek for his SPARC work and sibling call optimizations as
47705     well as lots of bug fixes and test cases, and for improving the
47706     Java build system.
47707
47708   * Janis Johnson for ia64 testing and fixes, her quality improvement
47709     sidetracks, and web page maintenance.
47710
47711   * Kean Johnston for SCO OpenServer support and various fixes.
47712
47713   * Tim Josling for the sample language treelang based originally on
47714     Richard Kenner's "toy" language.
47715
47716   * Nicolai Josuttis for additional libstdc++ documentation.
47717
47718   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
47719     target.
47720
47721   * Steven G. Kargl for work on GNU Fortran.
47722
47723   * David Kashtan of SRI adapted GCC to VMS.
47724
47725   * Ryszard Kabatek for many, many libstdc++ bug fixes and
47726     optimizations of strings, especially member functions, and for
47727     auto_ptr fixes.
47728
47729   * Geoffrey Keating for his ongoing work to make the PPC work for
47730     GNU/Linux and his automatic regression tester.
47731
47732   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
47733     work in just about every part of libstdc++.
47734
47735   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
47736     MIL-STD-1750A.
47737
47738   * Richard Kenner of the New York University Ultracomputer Research
47739     Laboratory wrote the machine descriptions for the AMD 29000, the
47740     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
47741     support for instruction attributes.  He also made changes to
47742     better support RISC processors including changes to common
47743     subexpression elimination, strength reduction, function calling
47744     sequence handling, and condition code support, in addition to
47745     generalizing the code for frame pointer elimination and delay slot
47746     scheduling.  Richard Kenner was also the head maintainer of GCC
47747     for several years.
47748
47749   * Mumit Khan for various contributions to the Cygwin and Mingw32
47750     ports and maintaining binary releases for Microsoft Windows hosts,
47751     and for massive libstdc++ porting work to Cygwin/Mingw32.
47752
47753   * Robin Kirkham for cpu32 support.
47754
47755   * Mark Klein for PA improvements.
47756
47757   * Thomas Koenig for various bug fixes.
47758
47759   * Bruce Korb for the new and improved fixincludes code.
47760
47761   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
47762     effort.
47763
47764   * Maxim Kuvyrkov for contributions to the instruction scheduler, the
47765     Android and m68k/Coldfire ports, and optimizations.
47766
47767   * Charles LaBrec contributed the support for the Integrated Solutions
47768     68020 system.
47769
47770   * Asher Langton and Mike Kumbera for contributing Cray pointer
47771     support to GNU Fortran, and for other GNU Fortran improvements.
47772
47773   * Jeff Law for his direction via the steering committee,
47774     coordinating the entire egcs project and GCC 2.95, rolling out
47775     snapshots and releases, handling merges from GCC2, reviewing tons
47776     of patches that might have fallen through the cracks else, and
47777     random but extensive hacking.
47778
47779   * Walter Lee for work on the TILE-Gx and TILEPro ports.
47780
47781   * Marc Lehmann for his direction via the steering committee and
47782     helping with analysis and improvements of x86 performance.
47783
47784   * Victor Leikehman for work on GNU Fortran.
47785
47786   * Ted Lemon wrote parts of the RTL reader and printer.
47787
47788   * Kriang Lerdsuwanakij for C++ improvements including template as
47789     template parameter support, and many C++ fixes.
47790
47791   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
47792     and random work on the Java front end.
47793
47794   * Alain Lichnewsky ported GCC to the MIPS CPU.
47795
47796   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
47797     and patches.
47798
47799   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
47800
47801   * Chen Liqin for various S+core related fixes/improvement, and for
47802     maintaining the S+core port.
47803
47804   * Weiwen Liu for testing and various bug fixes.
47805
47806   * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other
47807     diagnostics fixes and improvements.
47808
47809   * Dave Love for his ongoing work with the Fortran front end and
47810     runtime libraries.
47811
47812   * Martin von Lo"wis for internal consistency checking infrastructure,
47813     various C++ improvements including namespace support, and tons of
47814     assistance with libstdc++/compiler merges.
47815
47816   * H.J. Lu for his previous contributions to the steering committee,
47817     many x86 bug reports, prototype patches, and keeping the GNU/Linux
47818     ports working.
47819
47820   * Greg McGary for random fixes and (someday) bounded pointers.
47821
47822   * Andrew MacLeod for his ongoing work in building a real EH system,
47823     various code generation improvements, work on the global
47824     optimizer, etc.
47825
47826   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
47827     hacking improvements to compile-time performance, overall
47828     knowledge and direction in the area of instruction scheduling, and
47829     design and implementation of the automaton based instruction
47830     scheduler.
47831
47832   * Bob Manson for his behind the scenes work on dejagnu.
47833
47834   * John Marino for contributing the DragonFly BSD port.
47835
47836   * Philip Martin for lots of libstdc++ string and vector iterator
47837     fixes and improvements, and string clean up and testsuites.
47838
47839   * Michael Matz for his work on dominance tree discovery, the x86-64
47840     port, link-time optimization framework and general optimization
47841     improvements.
47842
47843   * All of the Mauve project contributors, for Java test code.
47844
47845   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
47846
47847   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
47848
47849   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
47850     powerpc, haifa, ECOFF debug support, and other assorted hacking.
47851
47852   * Jason Merrill for his direction via the steering committee and
47853     leading the G++ effort.
47854
47855   * Martin Michlmayr for testing GCC on several architectures using the
47856     entire Debian archive.
47857
47858   * David Miller for his direction via the steering committee, lots of
47859     SPARC work, improvements in jump.c and interfacing with the Linux
47860     kernel developers.
47861
47862   * Gary Miller ported GCC to Charles River Data Systems machines.
47863
47864   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
47865     the entire libstdc++ testsuite namespace-compatible.
47866
47867   * Mark Mitchell for his direction via the steering committee,
47868     mountains of C++ work, load/store hoisting out of loops, alias
47869     analysis improvements, ISO C `restrict' support, and serving as
47870     release manager from 2000 to 2011.
47871
47872   * Alan Modra for various GNU/Linux bits and testing.
47873
47874   * Toon Moene for his direction via the steering committee, Fortran
47875     maintenance, and his ongoing work to make us make Fortran run fast.
47876
47877   * Jason Molenda for major help in the care and feeding of all the
47878     services on the gcc.gnu.org (formerly egcs.cygnus.com)
47879     machine--mail, web services, ftp services, etc etc.  Doing all
47880     this work on scrap paper and the backs of envelopes would have
47881     been... difficult.
47882
47883   * Catherine Moore for fixing various ugly problems we have sent her
47884     way, including the haifa bug which was killing the Alpha & PowerPC
47885     Linux kernels.
47886
47887   * Mike Moreton for his various Java patches.
47888
47889   * David Mosberger-Tang for various Alpha improvements, and for the
47890     initial IA-64 port.
47891
47892   * Stephen Moshier contributed the floating point emulator that
47893     assists in cross-compilation and permits support for floating
47894     point numbers wider than 64 bits and for ISO C99 support.
47895
47896   * Bill Moyer for his behind the scenes work on various issues.
47897
47898   * Philippe De Muyter for his work on the m68k port.
47899
47900   * Joseph S. Myers for his work on the PDP-11 port, format checking
47901     and ISO C99 support, and continuous emphasis on (and contributions
47902     to) documentation.
47903
47904   * Nathan Myers for his work on libstdc++-v3: architecture and
47905     authorship through the first three snapshots, including
47906     implementation of locale infrastructure, string, shadow C headers,
47907     and the initial project documentation (DESIGN, CHECKLIST, and so
47908     forth).  Later, more work on MT-safe string and shadow headers.
47909
47910   * Felix Natter for documentation on porting libstdc++.
47911
47912   * Nathanael Nerode for cleaning up the configuration/build process.
47913
47914   * NeXT, Inc. donated the front end that supports the Objective-C
47915     language.
47916
47917   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
47918     the search engine setup, various documentation fixes and other
47919     small fixes.
47920
47921   * Geoff Noer for his work on getting cygwin native builds working.
47922
47923   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
47924     tracking web pages, GIMPLE tuples, and assorted fixes.
47925
47926   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
47927     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
47928     related infrastructure improvements.
47929
47930   * Alexandre Oliva for various build infrastructure improvements,
47931     scripts and amazing testing work, including keeping libtool issues
47932     sane and happy.
47933
47934   * Stefan Olsson for work on mt_alloc.
47935
47936   * Melissa O'Neill for various NeXT fixes.
47937
47938   * Rainer Orth for random MIPS work, including improvements to GCC's
47939     o32 ABI support, improvements to dejagnu's MIPS support, Java
47940     configuration clean-ups and porting work, and maintaining the
47941     IRIX, Solaris 2, and Tru64 UNIX ports.
47942
47943   * Hartmut Penner for work on the s390 port.
47944
47945   * Paul Petersen wrote the machine description for the Alliant FX/8.
47946
47947   * Alexandre Petit-Bianco for implementing much of the Java compiler
47948     and continued Java maintainership.
47949
47950   * Matthias Pfaller for major improvements to the NS32k port.
47951
47952   * Gerald Pfeifer for his direction via the steering committee,
47953     pointing out lots of problems we need to solve, maintenance of the
47954     web pages, and taking care of documentation maintenance in general.
47955
47956   * Andrew Pinski for processing bug reports by the dozen.
47957
47958   * Ovidiu Predescu for his work on the Objective-C front end and
47959     runtime libraries.
47960
47961   * Jerry Quinn for major performance improvements in C++ formatted
47962     I/O.
47963
47964   * Ken Raeburn for various improvements to checker, MIPS ports and
47965     various cleanups in the compiler.
47966
47967   * Rolf W. Rasmussen for hacking on AWT.
47968
47969   * David Reese of Sun Microsystems contributed to the Solaris on
47970     PowerPC port.
47971
47972   * Volker Reichelt for keeping up with the problem reports.
47973
47974   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
47975     hacking and developing and maintaining the Epiphany port.
47976
47977   * Loren J. Rittle for improvements to libstdc++-v3 including the
47978     FreeBSD port, threading fixes, thread-related configury changes,
47979     critical threading documentation, and solutions to really tricky
47980     I/O problems, as well as keeping GCC properly working on FreeBSD
47981     and continuous testing.
47982
47983   * Craig Rodrigues for processing tons of bug reports.
47984
47985   * Ola Ro"nnerup for work on mt_alloc.
47986
47987   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
47988
47989   * David Ronis inspired and encouraged Craig to rewrite the G77
47990     documentation in texinfo format by contributing a first pass at a
47991     translation of the old `g77-0.5.16/f/DOC' file.
47992
47993   * Ken Rose for fixes to GCC's delay slot filling code.
47994
47995   * Ira Rosen for her contributions to the auto-vectorizer.
47996
47997   * Paul Rubin wrote most of the preprocessor.
47998
47999   * Pe'tur Runo'lfsson for major performance improvements in C++
48000     formatted I/O and large file support in C++ filebuf.
48001
48002   * Chip Salzenberg for libstdc++ patches and improvements to locales,
48003     traits, Makefiles, libio, libtool hackery, and "long long" support.
48004
48005   * Juha Sarlin for improvements to the H8 code generator.
48006
48007   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
48008     300.
48009
48010   * Roger Sayle for improvements to constant folding and GCC's RTL
48011     optimizers as well as for fixing numerous bugs.
48012
48013   * Bradley Schatz for his work on the GCJ FAQ.
48014
48015   * Peter Schauer wrote the code to allow debugging to work on the
48016     Alpha.
48017
48018   * William Schelter did most of the work on the Intel 80386 support.
48019
48020   * Tobias Schlu"ter for work on GNU Fortran.
48021
48022   * Bernd Schmidt for various code generation improvements and major
48023     work in the reload pass, serving as release manager for GCC
48024     2.95.3, and work on the Blackfin and C6X ports.
48025
48026   * Peter Schmid for constant testing of libstdc++--especially
48027     application testing, going above and beyond what was requested for
48028     the release criteria--and libstdc++ header file tweaks.
48029
48030   * Jason Schroeder for jcf-dump patches.
48031
48032   * Andreas Schwab for his work on the m68k port.
48033
48034   * Lars Segerlund for work on GNU Fortran.
48035
48036   * Dodji Seketeli for numerous C++ bug fixes and debug info
48037     improvements.
48038
48039   * Tim Shen for major work on `<regex>'.
48040
48041   * Joel Sherrill for his direction via the steering committee, RTEMS
48042     contributions and RTEMS testing.
48043
48044   * Nathan Sidwell for many C++ fixes/improvements.
48045
48046   * Jeffrey Siegal for helping RMS with the original design of GCC,
48047     some code which handles the parse tree and RTL data structures,
48048     constant folding and help with the original VAX & m68k ports.
48049
48050   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
48051     from the LWG (thereby keeping GCC in line with updates from the
48052     ISO).
48053
48054   * Franz Sirl for his ongoing work with making the PPC port stable
48055     for GNU/Linux.
48056
48057   * Andrey Slepuhin for assorted AIX hacking.
48058
48059   * Trevor Smigiel for contributing the SPU port.
48060
48061   * Christopher Smith did the port for Convex machines.
48062
48063   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
48064     Retired from GCC maintainership August 2010, having mentored two
48065     new maintainers into the role.
48066
48067   * Randy Smith finished the Sun FPA support.
48068
48069   * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
48070     functions, `<random>', and various improvements to C++11 features.
48071
48072   * Scott Snyder for queue, iterator, istream, and string fixes and
48073     libstdc++ testsuite entries.  Also for providing the patch to G77
48074     to add rudimentary support for `INTEGER*1', `INTEGER*2', and
48075     `LOGICAL*1'.
48076
48077   * Zdenek Sojka for running automated regression testing of GCC and
48078     reporting numerous bugs.
48079
48080   * Jayant Sonar for contributing the CR16 port.
48081
48082   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
48083
48084   * Richard Stallman, for writing the original GCC and launching the
48085     GNU project.
48086
48087   * Jan Stein of the Chalmers Computer Society provided support for
48088     Genix, as well as part of the 32000 machine description.
48089
48090   * Nigel Stephens for various mips16 related fixes/improvements.
48091
48092   * Jonathan Stone wrote the machine description for the Pyramid
48093     computer.
48094
48095   * Graham Stott for various infrastructure improvements.
48096
48097   * John Stracke for his Java HTTP protocol fixes.
48098
48099   * Mike Stump for his Elxsi port, G++ contributions over the years
48100     and more recently his vxworks contributions
48101
48102   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
48103
48104   * Shigeya Suzuki for this fixes for the bsdi platforms.
48105
48106   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
48107     support, general configury hacking, fixincludes, etc.
48108
48109   * Holger Teutsch provided the support for the Clipper CPU.
48110
48111   * Gary Thomas for his ongoing work to make the PPC work for
48112     GNU/Linux.
48113
48114   * Philipp Thomas for random bug fixes throughout the compiler
48115
48116   * Jason Thorpe for thread support in libstdc++ on NetBSD.
48117
48118   * Kresten Krab Thorup wrote the run time support for the Objective-C
48119     language and the fantastic Java bytecode interpreter.
48120
48121   * Michael Tiemann for random bug fixes, the first instruction
48122     scheduler, initial C++ support, function integration, NS32k, SPARC
48123     and M88k machine description work, delay slot scheduling.
48124
48125   * Andreas Tobler for his work porting libgcj to Darwin.
48126
48127   * Teemu Torma for thread safe exception handling support.
48128
48129   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
48130     definitions, and of the VAX machine description.
48131
48132   * Daniel Towner and Hariharan Sandanagobalane contributed and
48133     maintain the picoChip port.
48134
48135   * Tom Tromey for internationalization support and for his many Java
48136     contributions and libgcj maintainership.
48137
48138   * Lassi Tuura for improvements to config.guess to determine HP
48139     processor types.
48140
48141   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
48142
48143   * Andy Vaught for the design and initial implementation of the GNU
48144     Fortran front end.
48145
48146   * Brent Verner for work with the libstdc++ cshadow files and their
48147     associated configure steps.
48148
48149   * Todd Vierling for contributions for NetBSD ports.
48150
48151   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
48152     guidance.
48153
48154   * Dean Wakerley for converting the install documentation from HTML
48155     to texinfo in time for GCC 3.0.
48156
48157   * Krister Walfridsson for random bug fixes.
48158
48159   * Feng Wang for contributions to GNU Fortran.
48160
48161   * Stephen M. Webb for time and effort on making libstdc++ shadow
48162     files work with the tricky Solaris 8+ headers, and for pushing the
48163     build-time header tree. Also, for starting and driving the
48164     `<regex>' effort.
48165
48166   * John Wehle for various improvements for the x86 code generator,
48167     related infrastructure improvements to help x86 code generation,
48168     value range propagation and other work, WE32k port.
48169
48170   * Ulrich Weigand for work on the s390 port.
48171
48172   * Zack Weinberg for major work on cpplib and various other bug fixes.
48173
48174   * Matt Welsh for help with Linux Threads support in GCJ.
48175
48176   * Urban Widmark for help fixing java.io.
48177
48178   * Mark Wielaard for new Java library code and his work integrating
48179     with Classpath.
48180
48181   * Dale Wiles helped port GCC to the Tahoe.
48182
48183   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
48184
48185   * Jim Wilson for his direction via the steering committee, tackling
48186     hard problems in various places that nobody else wanted to work
48187     on, strength reduction and other loop optimizations.
48188
48189   * Paul Woegerer and Tal Agmon for the CRX port.
48190
48191   * Carlo Wood for various fixes.
48192
48193   * Tom Wood for work on the m88k port.
48194
48195   * Chung-Ju Wu for his work on the Andes NDS32 port.
48196
48197   * Canqun Yang for work on GNU Fortran.
48198
48199   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
48200     description for the Tron architecture (specifically, the Gmicro).
48201
48202   * Kevin Zachmann helped port GCC to the Tahoe.
48203
48204   * Ayal Zaks for Swing Modulo Scheduling (SMS).
48205
48206   * Xiaoqiang Zhang for work on GNU Fortran.
48207
48208   * Gilles Zunino for help porting Java to Irix.
48209
48210
48211 The following people are recognized for their contributions to GNAT,
48212the Ada front end of GCC:
48213   * Bernard Banner
48214
48215   * Romain Berrendonner
48216
48217   * Geert Bosch
48218
48219   * Emmanuel Briot
48220
48221   * Joel Brobecker
48222
48223   * Ben Brosgol
48224
48225   * Vincent Celier
48226
48227   * Arnaud Charlet
48228
48229   * Chien Chieng
48230
48231   * Cyrille Comar
48232
48233   * Cyrille Crozes
48234
48235   * Robert Dewar
48236
48237   * Gary Dismukes
48238
48239   * Robert Duff
48240
48241   * Ed Falis
48242
48243   * Ramon Fernandez
48244
48245   * Sam Figueroa
48246
48247   * Vasiliy Fofanov
48248
48249   * Michael Friess
48250
48251   * Franco Gasperoni
48252
48253   * Ted Giering
48254
48255   * Matthew Gingell
48256
48257   * Laurent Guerby
48258
48259   * Jerome Guitton
48260
48261   * Olivier Hainque
48262
48263   * Jerome Hugues
48264
48265   * Hristian Kirtchev
48266
48267   * Jerome Lambourg
48268
48269   * Bruno Leclerc
48270
48271   * Albert Lee
48272
48273   * Sean McNeil
48274
48275   * Javier Miranda
48276
48277   * Laurent Nana
48278
48279   * Pascal Obry
48280
48281   * Dong-Ik Oh
48282
48283   * Laurent Pautet
48284
48285   * Brett Porter
48286
48287   * Thomas Quinot
48288
48289   * Nicolas Roche
48290
48291   * Pat Rogers
48292
48293   * Jose Ruiz
48294
48295   * Douglas Rupp
48296
48297   * Sergey Rybin
48298
48299   * Gail Schenker
48300
48301   * Ed Schonberg
48302
48303   * Nicolas Setton
48304
48305   * Samuel Tardieu
48306
48307
48308 The following people are recognized for their contributions of new
48309features, bug reports, testing and integration of classpath/libgcj for
48310GCC version 4.1:
48311   * Lillian Angel for `JTree' implementation and lots Free Swing
48312     additions and bug fixes.
48313
48314   * Wolfgang Baer for `GapContent' bug fixes.
48315
48316   * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
48317     event fixes, lots of Free Swing work including `JTable' editing.
48318
48319   * Stuart Ballard for RMI constant fixes.
48320
48321   * Goffredo Baroncelli for `HTTPURLConnection' fixes.
48322
48323   * Gary Benson for `MessageFormat' fixes.
48324
48325   * Daniel Bonniot for `Serialization' fixes.
48326
48327   * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
48328     and `DOM xml:id' support.
48329
48330   * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
48331
48332   * Archie Cobbs for build fixes, VM interface updates,
48333     `URLClassLoader' updates.
48334
48335   * Kelley Cook for build fixes.
48336
48337   * Martin Cordova for Suggestions for better `SocketTimeoutException'.
48338
48339   * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite
48340     and improvements.
48341
48342   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
48343     2D support. Lots of imageio framework additions, lots of AWT and
48344     Free Swing bug fixes.
48345
48346   * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
48347     fixes, better `Proxy' support, bug fixes and IKVM integration.
48348
48349   * Santiago Gala for `AccessControlContext' fixes.
48350
48351   * Nicolas Geoffray for `VMClassLoader' and `AccessController'
48352     improvements.
48353
48354   * David Gilbert for `basic' and `metal' icon and plaf support and
48355     lots of documenting, Lots of Free Swing and metal theme additions.
48356     `MetalIconFactory' implementation.
48357
48358   * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
48359
48360   * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
48361     build speedups.
48362
48363   * Kim Ho for `JFileChooser' implementation.
48364
48365   * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
48366     updates, `Serialization' fixes, `Properties' XML support and
48367     generic branch work, VMIntegration guide update.
48368
48369   * Bastiaan Huisman for `TimeZone' bug fixing.
48370
48371   * Andreas Jaeger for mprec updates.
48372
48373   * Paul Jenner for better `-Werror' support.
48374
48375   * Ito Kazumitsu for `NetworkInterface' implementation and updates.
48376
48377   * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
48378     bug fixes all over. Lots of Free Swing work including styled text.
48379
48380   * Simon Kitching for `String' cleanups and optimization suggestions.
48381
48382   * Michael Koch for configuration fixes, `Locale' updates, bug and
48383     build fixes.
48384
48385   * Guilhem Lavaux for configuration, thread and channel fixes and
48386     Kaffe integration. JCL native `Pointer' updates. Logger bug fixes.
48387
48388   * David Lichteblau for JCL support library global/local reference
48389     cleanups.
48390
48391   * Aaron Luchko for JDWP updates and documentation fixes.
48392
48393   * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
48394     features.
48395
48396   * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
48397     fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
48398     and implementing the Qt4 peers.
48399
48400   * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
48401     `SystemLogger' and `FileHandler' rotate implementations, NIO
48402     `FileChannel.map' support, security and policy updates.
48403
48404   * Bryce McKinlay for RMI work.
48405
48406   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
48407     testing and documenting.
48408
48409   * Kalle Olavi Niemitalo for build fixes.
48410
48411   * Rainer Orth for build fixes.
48412
48413   * Andrew Overholt for `File' locking fixes.
48414
48415   * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
48416
48417   * Olga Rodimina for `MenuSelectionManager' implementation.
48418
48419   * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
48420
48421   * Julian Scheid for documentation updates and gjdoc support.
48422
48423   * Christian Schlichtherle for zip fixes and cleanups.
48424
48425   * Robert Schuster for documentation updates and beans fixes,
48426     `TreeNode' enumerations and `ActionCommand' and various fixes, XML
48427     and URL, AWT and Free Swing bug fixes.
48428
48429   * Keith Seitz for lots of JDWP work.
48430
48431   * Christian Thalinger for 64-bit cleanups, Configuration and VM
48432     interface fixes and `CACAO' integration, `fdlibm' updates.
48433
48434   * Gael Thomas for `VMClassLoader' boot packages support suggestions.
48435
48436   * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
48437     support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
48438
48439   * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
48440     integration. `Qt4' build infrastructure, `SHA1PRNG' and
48441     `GdkPixbugDecoder' updates.
48442
48443   * Tom Tromey for Eclipse integration, generics work, lots of bug
48444     fixes and gcj integration including coordinating The Big Merge.
48445
48446   * Mark Wielaard for bug fixes, packaging and release management,
48447     `Clipboard' implementation, system call interrupts and network
48448     timeouts and `GdkPixpufDecoder' fixes.
48449
48450
48451 In addition to the above, all of which also contributed time and
48452energy in testing GCC, we would like to thank the following for their
48453contributions to testing:
48454
48455   * Michael Abd-El-Malek
48456
48457   * Thomas Arend
48458
48459   * Bonzo Armstrong
48460
48461   * Steven Ashe
48462
48463   * Chris Baldwin
48464
48465   * David Billinghurst
48466
48467   * Jim Blandy
48468
48469   * Stephane Bortzmeyer
48470
48471   * Horst von Brand
48472
48473   * Frank Braun
48474
48475   * Rodney Brown
48476
48477   * Sidney Cadot
48478
48479   * Bradford Castalia
48480
48481   * Robert Clark
48482
48483   * Jonathan Corbet
48484
48485   * Ralph Doncaster
48486
48487   * Richard Emberson
48488
48489   * Levente Farkas
48490
48491   * Graham Fawcett
48492
48493   * Mark Fernyhough
48494
48495   * Robert A. French
48496
48497   * Jo"rgen Freyh
48498
48499   * Mark K. Gardner
48500
48501   * Charles-Antoine Gauthier
48502
48503   * Yung Shing Gene
48504
48505   * David Gilbert
48506
48507   * Simon Gornall
48508
48509   * Fred Gray
48510
48511   * John Griffin
48512
48513   * Patrik Hagglund
48514
48515   * Phil Hargett
48516
48517   * Amancio Hasty
48518
48519   * Takafumi Hayashi
48520
48521   * Bryan W. Headley
48522
48523   * Kevin B. Hendricks
48524
48525   * Joep Jansen
48526
48527   * Christian Joensson
48528
48529   * Michel Kern
48530
48531   * David Kidd
48532
48533   * Tobias Kuipers
48534
48535   * Anand Krishnaswamy
48536
48537   * A. O. V. Le Blanc
48538
48539   * llewelly
48540
48541   * Damon Love
48542
48543   * Brad Lucier
48544
48545   * Matthias Klose
48546
48547   * Martin Knoblauch
48548
48549   * Rick Lutowski
48550
48551   * Jesse Macnish
48552
48553   * Stefan Morrell
48554
48555   * Anon A. Mous
48556
48557   * Matthias Mueller
48558
48559   * Pekka Nikander
48560
48561   * Rick Niles
48562
48563   * Jon Olson
48564
48565   * Magnus Persson
48566
48567   * Chris Pollard
48568
48569   * Richard Polton
48570
48571   * Derk Reefman
48572
48573   * David Rees
48574
48575   * Paul Reilly
48576
48577   * Tom Reilly
48578
48579   * Torsten Rueger
48580
48581   * Danny Sadinoff
48582
48583   * Marc Schifer
48584
48585   * Erik Schnetter
48586
48587   * Wayne K. Schroll
48588
48589   * David Schuler
48590
48591   * Vin Shelton
48592
48593   * Tim Souder
48594
48595   * Adam Sulmicki
48596
48597   * Bill Thorson
48598
48599   * George Talbot
48600
48601   * Pedro A. M. Vazquez
48602
48603   * Gregory Warnes
48604
48605   * Ian Watson
48606
48607   * David E. Young
48608
48609   * And many others
48610
48611 And finally we'd like to thank everyone who uses the compiler, provides
48612feedback and generally reminds us why we're doing this work in the first
48613place.
48614
48615
48616File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
48617
48618Option Index
48619************
48620
48621GCC's command line options are indexed here without any initial `-' or
48622`--'.  Where an option has both positive and negative forms (such as
48623`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
48624indexed under the most appropriate form; it may sometimes be useful to
48625look up both forms.
48626
48627�[index�]
48628* Menu:
48629
48630* ###:                                   Overall Options.    (line  209)
48631* -fipa-cp-alignment:                    Optimize Options.   (line  991)
48632* -Wabi-tag:                             C++ Dialect Options.
48633                                                             (line  531)
48634* A:                                     Preprocessor Options.
48635                                                             (line  607)
48636* all_load:                              Darwin Options.     (line  110)
48637* allowable_client:                      Darwin Options.     (line  196)
48638* ansi <1>:                              C Dialect Options.  (line   11)
48639* ansi <2>:                              Non-bugs.           (line  107)
48640* ansi <3>:                              Standards.          (line   16)
48641* ansi <4>:                              Preprocessor Options.
48642                                                             (line  338)
48643* ansi:                                  Other Builtins.     (line   22)
48644* arch_errors_fatal:                     Darwin Options.     (line  114)
48645* aux-info:                              C Dialect Options.  (line  176)
48646* B:                                     Directory Options.  (line   51)
48647* Bdynamic:                              VxWorks Options.    (line   22)
48648* bind_at_load:                          Darwin Options.     (line  118)
48649* Bstatic:                               VxWorks Options.    (line   22)
48650* bundle:                                Darwin Options.     (line  123)
48651* bundle_loader:                         Darwin Options.     (line  127)
48652* C:                                     Preprocessor Options.
48653                                                             (line  665)
48654* c <1>:                                 Link Options.       (line   20)
48655* c:                                     Overall Options.    (line  164)
48656* client_name:                           Darwin Options.     (line  196)
48657* compatibility_version:                 Darwin Options.     (line  196)
48658* coverage:                              Debugging Options.  (line  724)
48659* current_version:                       Darwin Options.     (line  196)
48660* cxxisystem:                            Preprocessor Options.
48661                                                             (line  466)
48662* d:                                     Debugging Options.  (line  856)
48663* D:                                     Preprocessor Options.
48664                                                             (line   46)
48665* da:                                    Debugging Options.  (line 1058)
48666* dA:                                    Debugging Options.  (line 1061)
48667* dD <1>:                                Preprocessor Options.
48668                                                             (line  639)
48669* dD:                                    Debugging Options.  (line 1065)
48670* dead_strip:                            Darwin Options.     (line  196)
48671* dependency-file:                       Darwin Options.     (line  196)
48672* dH:                                    Debugging Options.  (line 1069)
48673* dI:                                    Preprocessor Options.
48674                                                             (line  648)
48675* dM:                                    Preprocessor Options.
48676                                                             (line  623)
48677* dN:                                    Preprocessor Options.
48678                                                             (line  645)
48679* dP:                                    Debugging Options.  (line 1077)
48680* dp:                                    Debugging Options.  (line 1072)
48681* dU:                                    Preprocessor Options.
48682                                                             (line  652)
48683* dumpmachine:                           Debugging Options.  (line 1679)
48684* dumpspecs:                             Debugging Options.  (line 1687)
48685* dumpversion:                           Debugging Options.  (line 1683)
48686* dx:                                    Debugging Options.  (line 1081)
48687* dylib_file:                            Darwin Options.     (line  196)
48688* dylinker_install_name:                 Darwin Options.     (line  196)
48689* dynamic:                               Darwin Options.     (line  196)
48690* dynamiclib:                            Darwin Options.     (line  131)
48691* E <1>:                                 Overall Options.    (line  185)
48692* E:                                     Link Options.       (line   20)
48693* EB <1>:                                ARC Options.        (line  350)
48694* EB:                                    MIPS Options.       (line    7)
48695* EL <1>:                                MIPS Options.       (line   10)
48696* EL:                                    ARC Options.        (line  357)
48697* exported_symbols_list:                 Darwin Options.     (line  196)
48698* F:                                     Darwin Options.     (line   31)
48699* fabi-compat-version:                   C++ Dialect Options.
48700                                                             (line   62)
48701* fabi-version:                          C++ Dialect Options.
48702                                                             (line   20)
48703* fada-spec-parent:                      Overall Options.    (line  369)
48704* faggressive-loop-optimizations:        Optimize Options.   (line  506)
48705* falign-functions:                      Optimize Options.   (line 1566)
48706* falign-jumps:                          Optimize Options.   (line 1615)
48707* falign-labels:                         Optimize Options.   (line 1584)
48708* falign-loops:                          Optimize Options.   (line 1602)
48709* fallow-parameterless-variadic-functions: C Dialect Options.
48710                                                             (line  192)
48711* fasan-shadow-offset:                   Debugging Options.  (line  349)
48712* fassociative-math:                     Optimize Options.   (line 2125)
48713* fasynchronous-unwind-tables:           Code Gen Options.   (line  146)
48714* fauto-inc-dec:                         Optimize Options.   (line  530)
48715* fauto-profile:                         Optimize Options.   (line 2006)
48716* fbounds-check:                         Code Gen Options.   (line   15)
48717* fbranch-probabilities:                 Optimize Options.   (line 2252)
48718* fbranch-target-load-optimize:          Optimize Options.   (line 2375)
48719* fbranch-target-load-optimize2:         Optimize Options.   (line 2381)
48720* fbtr-bb-exclusive:                     Optimize Options.   (line 2385)
48721* fcall-saved:                           Code Gen Options.   (line  358)
48722* fcall-used:                            Code Gen Options.   (line  344)
48723* fcaller-saves:                         Optimize Options.   (line  880)
48724* fcheck-data-deps:                      Optimize Options.   (line 1201)
48725* fcheck-new:                            C++ Dialect Options.
48726                                                             (line   77)
48727* fcheck-pointer-bounds:                 Debugging Options.  (line  388)
48728* fchkp-check-incomplete-type:           Debugging Options.  (line  428)
48729* fchkp-check-read:                      Debugging Options.  (line  478)
48730* fchkp-check-write:                     Debugging Options.  (line  482)
48731* fchkp-first-field-has-own-bounds:      Debugging Options.  (line  439)
48732* fchkp-instrument-calls:                Debugging Options.  (line  490)
48733* fchkp-instrument-marked-only:          Debugging Options.  (line  494)
48734* fchkp-narrow-bounds:                   Debugging Options.  (line  432)
48735* fchkp-narrow-to-innermost-array:       Debugging Options.  (line  445)
48736* fchkp-optimize:                        Debugging Options.  (line  450)
48737* fchkp-store-bounds:                    Debugging Options.  (line  486)
48738* fchkp-treat-zero-dynamic-size-as-infinite: Debugging Options.
48739                                                             (line  471)
48740* fchkp-use-fast-string-functions:       Debugging Options.  (line  454)
48741* fchkp-use-nochk-string-functions:      Debugging Options.  (line  458)
48742* fchkp-use-static-bounds:               Debugging Options.  (line  462)
48743* fchkp-use-static-const-bounds:         Debugging Options.  (line  466)
48744* fchkp-use-wrappers:                    Debugging Options.  (line  499)
48745* fcilkplus:                             C Dialect Options.  (line  288)
48746* fcombine-stack-adjustments:            Optimize Options.   (line  892)
48747* fcommon:                               Variable Attributes.
48748                                                             (line  106)
48749* fcompare-debug:                        Debugging Options.  (line  512)
48750* fcompare-debug-second:                 Debugging Options.  (line  538)
48751* fcompare-elim:                         Optimize Options.   (line 1941)
48752* fcond-mismatch:                        C Dialect Options.  (line  352)
48753* fconserve-stack:                       Optimize Options.   (line  907)
48754* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
48755                                                             (line   30)
48756* fconstexpr-depth:                      C++ Dialect Options.
48757                                                             (line   87)
48758* fcprop-registers:                      Optimize Options.   (line 1953)
48759* fcrossjumping:                         Optimize Options.   (line  523)
48760* fcse-follow-jumps:                     Optimize Options.   (line  442)
48761* fcse-skip-blocks:                      Optimize Options.   (line  451)
48762* fcx-fortran-rules:                     Optimize Options.   (line 2238)
48763* fcx-limited-range:                     Optimize Options.   (line 2226)
48764* fdata-sections:                        Optimize Options.   (line 2356)
48765* fdbg-cnt:                              Debugging Options.  (line  777)
48766* fdbg-cnt-list:                         Debugging Options.  (line  774)
48767* fdce:                                  Optimize Options.   (line  536)
48768* fdebug-cpp:                            Preprocessor Options.
48769                                                             (line  536)
48770* fdebug-prefix-map:                     Debugging Options.  (line  632)
48771* fdebug-types-section:                  Debugging Options.  (line   79)
48772* fdeclone-ctor-dtor:                    Optimize Options.   (line  559)
48773* fdeduce-init-list:                     C++ Dialect Options.
48774                                                             (line   93)
48775* fdelayed-branch:                       Optimize Options.   (line  710)
48776* fdelete-dead-exceptions:               Code Gen Options.   (line  131)
48777* fdelete-null-pointer-checks:           Optimize Options.   (line  570)
48778* fdevirtualize:                         Optimize Options.   (line  588)
48779* fdevirtualize-at-ltrans:               Optimize Options.   (line  605)
48780* fdevirtualize-speculatively:           Optimize Options.   (line  595)
48781* fdiagnostics-color:                    Language Independent Options.
48782                                                             (line   35)
48783* fdiagnostics-show-caret:               Language Independent Options.
48784                                                             (line   94)
48785* fdiagnostics-show-location:            Language Independent Options.
48786                                                             (line   20)
48787* fdiagnostics-show-option:              Language Independent Options.
48788                                                             (line   88)
48789* fdirectives-only:                      Preprocessor Options.
48790                                                             (line  479)
48791* fdisable-:                             Debugging Options.  (line  787)
48792* fdollars-in-identifiers <1>:           Interoperation.     (line  141)
48793* fdollars-in-identifiers:               Preprocessor Options.
48794                                                             (line  506)
48795* fdse:                                  Optimize Options.   (line  540)
48796* fdump-ada-spec:                        Overall Options.    (line  363)
48797* fdump-class-hierarchy:                 Debugging Options.  (line 1116)
48798* fdump-final-insns:                     Debugging Options.  (line  506)
48799* fdump-go-spec:                         Overall Options.    (line  373)
48800* fdump-ipa:                             Debugging Options.  (line 1124)
48801* fdump-noaddr:                          Debugging Options.  (line 1085)
48802* fdump-passes:                          Debugging Options.  (line 1142)
48803* fdump-rtl-alignments:                  Debugging Options.  (line  877)
48804* fdump-rtl-all:                         Debugging Options.  (line 1058)
48805* fdump-rtl-asmcons:                     Debugging Options.  (line  880)
48806* fdump-rtl-auto_inc_dec:                Debugging Options.  (line  884)
48807* fdump-rtl-barriers:                    Debugging Options.  (line  888)
48808* fdump-rtl-bbpart:                      Debugging Options.  (line  891)
48809* fdump-rtl-bbro:                        Debugging Options.  (line  894)
48810* fdump-rtl-btl2:                        Debugging Options.  (line  898)
48811* fdump-rtl-bypass:                      Debugging Options.  (line  902)
48812* fdump-rtl-ce1:                         Debugging Options.  (line  913)
48813* fdump-rtl-ce2:                         Debugging Options.  (line  913)
48814* fdump-rtl-ce3:                         Debugging Options.  (line  913)
48815* fdump-rtl-combine:                     Debugging Options.  (line  905)
48816* fdump-rtl-compgotos:                   Debugging Options.  (line  908)
48817* fdump-rtl-cprop_hardreg:               Debugging Options.  (line  917)
48818* fdump-rtl-csa:                         Debugging Options.  (line  920)
48819* fdump-rtl-cse1:                        Debugging Options.  (line  924)
48820* fdump-rtl-cse2:                        Debugging Options.  (line  924)
48821* fdump-rtl-dbr:                         Debugging Options.  (line  931)
48822* fdump-rtl-dce:                         Debugging Options.  (line  928)
48823* fdump-rtl-dce1:                        Debugging Options.  (line  935)
48824* fdump-rtl-dce2:                        Debugging Options.  (line  935)
48825* fdump-rtl-dfinish:                     Debugging Options.  (line 1054)
48826* fdump-rtl-dfinit:                      Debugging Options.  (line 1054)
48827* fdump-rtl-eh:                          Debugging Options.  (line  939)
48828* fdump-rtl-eh_ranges:                   Debugging Options.  (line  942)
48829* fdump-rtl-expand:                      Debugging Options.  (line  945)
48830* fdump-rtl-fwprop1:                     Debugging Options.  (line  949)
48831* fdump-rtl-fwprop2:                     Debugging Options.  (line  949)
48832* fdump-rtl-gcse1:                       Debugging Options.  (line  954)
48833* fdump-rtl-gcse2:                       Debugging Options.  (line  954)
48834* fdump-rtl-init-regs:                   Debugging Options.  (line  958)
48835* fdump-rtl-initvals:                    Debugging Options.  (line  961)
48836* fdump-rtl-into_cfglayout:              Debugging Options.  (line  964)
48837* fdump-rtl-ira:                         Debugging Options.  (line  967)
48838* fdump-rtl-jump:                        Debugging Options.  (line  970)
48839* fdump-rtl-loop2:                       Debugging Options.  (line  973)
48840* fdump-rtl-mach:                        Debugging Options.  (line  977)
48841* fdump-rtl-mode_sw:                     Debugging Options.  (line  981)
48842* fdump-rtl-outof_cfglayout:             Debugging Options.  (line  987)
48843* fdump-rtl-PASS:                        Debugging Options.  (line  856)
48844* fdump-rtl-peephole2:                   Debugging Options.  (line  990)
48845* fdump-rtl-postreload:                  Debugging Options.  (line  993)
48846* fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  996)
48847* fdump-rtl-ree:                         Debugging Options.  (line 1004)
48848* fdump-rtl-regclass:                    Debugging Options.  (line 1054)
48849* fdump-rtl-rnreg:                       Debugging Options.  (line  984)
48850* fdump-rtl-sched1:                      Debugging Options.  (line 1000)
48851* fdump-rtl-sched2:                      Debugging Options.  (line 1000)
48852* fdump-rtl-seqabstr:                    Debugging Options.  (line 1007)
48853* fdump-rtl-shorten:                     Debugging Options.  (line 1010)
48854* fdump-rtl-sibling:                     Debugging Options.  (line 1013)
48855* fdump-rtl-sms:                         Debugging Options.  (line 1024)
48856* fdump-rtl-split1:                      Debugging Options.  (line 1020)
48857* fdump-rtl-split2:                      Debugging Options.  (line 1020)
48858* fdump-rtl-split3:                      Debugging Options.  (line 1020)
48859* fdump-rtl-split4:                      Debugging Options.  (line 1020)
48860* fdump-rtl-split5:                      Debugging Options.  (line 1020)
48861* fdump-rtl-stack:                       Debugging Options.  (line 1028)
48862* fdump-rtl-subreg1:                     Debugging Options.  (line 1034)
48863* fdump-rtl-subreg2:                     Debugging Options.  (line 1034)
48864* fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line 1054)
48865* fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line 1054)
48866* fdump-rtl-unshare:                     Debugging Options.  (line 1038)
48867* fdump-rtl-vartrack:                    Debugging Options.  (line 1041)
48868* fdump-rtl-vregs:                       Debugging Options.  (line 1044)
48869* fdump-rtl-web:                         Debugging Options.  (line 1047)
48870* fdump-statistics:                      Debugging Options.  (line 1146)
48871* fdump-translation-unit:                Debugging Options.  (line 1107)
48872* fdump-tree:                            Debugging Options.  (line 1158)
48873* fdump-tree-alias:                      Debugging Options.  (line 1297)
48874* fdump-tree-all:                        Debugging Options.  (line 1382)
48875* fdump-tree-ccp:                        Debugging Options.  (line 1301)
48876* fdump-tree-cfg:                        Debugging Options.  (line 1285)
48877* fdump-tree-ch:                         Debugging Options.  (line 1289)
48878* fdump-tree-copyprop:                   Debugging Options.  (line 1317)
48879* fdump-tree-copyrename:                 Debugging Options.  (line 1358)
48880* fdump-tree-dce:                        Debugging Options.  (line 1325)
48881* fdump-tree-dom:                        Debugging Options.  (line 1338)
48882* fdump-tree-dse:                        Debugging Options.  (line 1343)
48883* fdump-tree-forwprop:                   Debugging Options.  (line 1353)
48884* fdump-tree-fre:                        Debugging Options.  (line 1313)
48885* fdump-tree-gimple:                     Debugging Options.  (line 1280)
48886* fdump-tree-nrv:                        Debugging Options.  (line 1363)
48887* fdump-tree-optimized:                  Debugging Options.  (line 1277)
48888* fdump-tree-original:                   Debugging Options.  (line 1274)
48889* fdump-tree-phiopt:                     Debugging Options.  (line 1348)
48890* fdump-tree-pre:                        Debugging Options.  (line 1309)
48891* fdump-tree-sink:                       Debugging Options.  (line 1334)
48892* fdump-tree-slp:                        Debugging Options.  (line 1373)
48893* fdump-tree-sra:                        Debugging Options.  (line 1329)
48894* fdump-tree-ssa:                        Debugging Options.  (line 1293)
48895* fdump-tree-store_copyprop:             Debugging Options.  (line 1321)
48896* fdump-tree-storeccp:                   Debugging Options.  (line 1305)
48897* fdump-tree-vect:                       Debugging Options.  (line 1368)
48898* fdump-tree-vrp:                        Debugging Options.  (line 1378)
48899* fdump-unnumbered:                      Debugging Options.  (line 1095)
48900* fdump-unnumbered-links:                Debugging Options.  (line 1101)
48901* fdwarf2-cfi-asm:                       Debugging Options.  (line  636)
48902* fearly-inlining:                       Optimize Options.   (line  292)
48903* feliminate-dwarf2-dups:                Debugging Options.  (line  551)
48904* feliminate-unused-debug-symbols:       Debugging Options.  (line   67)
48905* feliminate-unused-debug-types:         Debugging Options.  (line 1691)
48906* femit-class-debug-always:              Debugging Options.  (line   71)
48907* femit-struct-debug-baseonly:           Debugging Options.  (line  556)
48908* femit-struct-debug-detailed:           Debugging Options.  (line  583)
48909* femit-struct-debug-reduced:            Debugging Options.  (line  569)
48910* fenable-:                              Debugging Options.  (line  787)
48911* fexceptions:                           Code Gen Options.   (line  108)
48912* fexcess-precision:                     Optimize Options.   (line 2053)
48913* fexec-charset:                         Preprocessor Options.
48914                                                             (line  564)
48915* fexpensive-optimizations:              Optimize Options.   (line  612)
48916* fext-numeric-literals:                 C++ Dialect Options.
48917                                                             (line  612)
48918* fextended-identifiers:                 Preprocessor Options.
48919                                                             (line  509)
48920* fextern-tls-init:                      C++ Dialect Options.
48921                                                             (line  143)
48922* ffast-math:                            Optimize Options.   (line 2076)
48923* ffat-lto-objects:                      Optimize Options.   (line 1922)
48924* ffinite-math-only:                     Optimize Options.   (line 2150)
48925* ffix-and-continue:                     Darwin Options.     (line  104)
48926* ffixed:                                Code Gen Options.   (line  332)
48927* ffloat-store <1>:                      Optimize Options.   (line 2039)
48928* ffloat-store:                          Disappointments.    (line   77)
48929* ffor-scope:                            C++ Dialect Options.
48930                                                             (line  164)
48931* fforward-propagate:                    Optimize Options.   (line  195)
48932* ffp-contract:                          Optimize Options.   (line  204)
48933* ffreestanding <1>:                     Warning Options.    (line  270)
48934* ffreestanding <2>:                     Function Attributes.
48935                                                             (line  465)
48936* ffreestanding <3>:                     Standards.          (line   92)
48937* ffreestanding:                         C Dialect Options.  (line  254)
48938* ffriend-injection:                     C++ Dialect Options.
48939                                                             (line  114)
48940* ffunction-sections:                    Optimize Options.   (line 2356)
48941* fgcse:                                 Optimize Options.   (line  465)
48942* fgcse-after-reload:                    Optimize Options.   (line  501)
48943* fgcse-las:                             Optimize Options.   (line  494)
48944* fgcse-lm:                              Optimize Options.   (line  476)
48945* fgcse-sm:                              Optimize Options.   (line  485)
48946* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
48947                                                             (line   39)
48948* fgnu-tm:                               C Dialect Options.  (line  298)
48949* fgnu89-inline:                         C Dialect Options.  (line  159)
48950* fgraphite-identity:                    Optimize Options.   (line 1174)
48951* fhoist-adjacent-loads:                 Optimize Options.   (line  940)
48952* fhosted:                               C Dialect Options.  (line  247)
48953* fif-conversion:                        Optimize Options.   (line  544)
48954* fif-conversion2:                       Optimize Options.   (line  553)
48955* filelist:                              Darwin Options.     (line  196)
48956* findirect-data:                        Darwin Options.     (line  104)
48957* findirect-inlining:                    Optimize Options.   (line  265)
48958* finhibit-size-directive:               Code Gen Options.   (line  252)
48959* finline-functions:                     Optimize Options.   (line  273)
48960* finline-functions-called-once:         Optimize Options.   (line  284)
48961* finline-limit:                         Optimize Options.   (line  309)
48962* finline-small-functions:               Optimize Options.   (line  256)
48963* finput-charset:                        Preprocessor Options.
48964                                                             (line  577)
48965* finstrument-functions <1>:             Code Gen Options.   (line  388)
48966* finstrument-functions:                 Function Attributes.
48967                                                             (line 1074)
48968* finstrument-functions-exclude-file-list: Code Gen Options. (line  424)
48969* finstrument-functions-exclude-function-list: Code Gen Options.
48970                                                             (line  444)
48971* fipa-cp:                               Optimize Options.   (line  973)
48972* fipa-cp-clone:                         Optimize Options.   (line  981)
48973* fipa-icf:                              Optimize Options.   (line  998)
48974* fipa-profile:                          Optimize Options.   (line  965)
48975* fipa-pta:                              Optimize Options.   (line  959)
48976* fipa-pure-const:                       Optimize Options.   (line  951)
48977* fipa-ra:                               Optimize Options.   (line  898)
48978* fipa-reference:                        Optimize Options.   (line  955)
48979* fipa-sra:                              Optimize Options.   (line  302)
48980* fira-algorithm:                        Optimize Options.   (line  640)
48981* fira-hoist-pressure:                   Optimize Options.   (line  670)
48982* fira-loop-pressure:                    Optimize Options.   (line  677)
48983* fira-region:                           Optimize Options.   (line  648)
48984* fira-verbose:                          Optimize Options.   (line  697)
48985* fisolate-erroneous-paths-attribute:    Optimize Options.   (line 1019)
48986* fisolate-erroneous-paths-dereference:  Optimize Options.   (line 1012)
48987* fivar-visibility:                      Objective-C and Objective-C++ Dialect Options.
48988                                                             (line  162)
48989* fivopts:                               Optimize Options.   (line 1277)
48990* fkeep-inline-functions <1>:            Optimize Options.   (line  341)
48991* fkeep-inline-functions:                Inline.             (line   51)
48992* fkeep-static-consts:                   Optimize Options.   (line  348)
48993* flat_namespace:                        Darwin Options.     (line  196)
48994* flax-vector-conversions:               C Dialect Options.  (line  357)
48995* fleading-underscore:                   Code Gen Options.   (line  527)
48996* flive-range-shrinkage:                 Optimize Options.   (line  635)
48997* flocal-ivars:                          Objective-C and Objective-C++ Dialect Options.
48998                                                             (line  153)
48999* floop-block:                           Optimize Options.   (line 1145)
49000* floop-interchange:                     Optimize Options.   (line 1100)
49001* floop-nest-optimize:                   Optimize Options.   (line 1182)
49002* floop-parallelize-all:                 Optimize Options.   (line 1195)
49003* floop-strip-mine:                      Optimize Options.   (line 1124)
49004* floop-unroll-and-jam:                  Optimize Options.   (line 1188)
49005* flra-remat:                            Optimize Options.   (line  703)
49006* flto:                                  Optimize Options.   (line 1669)
49007* flto-compression-level:                Optimize Options.   (line 1884)
49008* flto-odr-type-merging:                 Optimize Options.   (line 1879)
49009* flto-partition:                        Optimize Options.   (line 1865)
49010* flto-report:                           Optimize Options.   (line 1892)
49011* flto-report-wpa:                       Optimize Options.   (line 1900)
49012* fmax-errors:                           Warning Options.    (line   18)
49013* fmem-report:                           Debugging Options.  (line  660)
49014* fmem-report-wpa:                       Debugging Options.  (line  664)
49015* fmerge-all-constants:                  Optimize Options.   (line  367)
49016* fmerge-constants:                      Optimize Options.   (line  357)
49017* fmerge-debug-strings:                  Debugging Options.  (line  625)
49018* fmessage-length:                       Language Independent Options.
49019                                                             (line   14)
49020* fmodulo-sched:                         Optimize Options.   (line  378)
49021* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  383)
49022* fmove-loop-invariants:                 Optimize Options.   (line 2346)
49023* fms-extensions <1>:                    C++ Dialect Options.
49024                                                             (line  198)
49025* fms-extensions <2>:                    Unnamed Fields.     (line   36)
49026* fms-extensions:                        C Dialect Options.  (line  313)
49027* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
49028                                                             (line   43)
49029* fno-access-control:                    C++ Dialect Options.
49030                                                             (line   73)
49031* fno-asm:                               C Dialect Options.  (line  199)
49032* fno-branch-count-reg:                  Optimize Options.   (line  390)
49033* fno-builtin <1>:                       Function Attributes.
49034                                                             (line  465)
49035* fno-builtin <2>:                       C Dialect Options.  (line  213)
49036* fno-builtin <3>:                       Other Builtins.     (line   14)
49037* fno-builtin:                           Warning Options.    (line  270)
49038* fno-canonical-system-headers:          Preprocessor Options.
49039                                                             (line  513)
49040* fno-check-pointer-bounds:              Debugging Options.  (line  388)
49041* fno-chkp-check-incomplete-type:        Debugging Options.  (line  428)
49042* fno-chkp-check-read:                   Debugging Options.  (line  478)
49043* fno-chkp-check-write:                  Debugging Options.  (line  482)
49044* fno-chkp-first-field-has-own-bounds:   Debugging Options.  (line  439)
49045* fno-chkp-instrument-calls:             Debugging Options.  (line  490)
49046* fno-chkp-instrument-marked-only:       Debugging Options.  (line  494)
49047* fno-chkp-narrow-bounds:                Debugging Options.  (line  432)
49048* fno-chkp-narrow-to-innermost-array:    Debugging Options.  (line  445)
49049* fno-chkp-optimize:                     Debugging Options.  (line  450)
49050* fno-chkp-store-bounds:                 Debugging Options.  (line  486)
49051* fno-chkp-treat-zero-dynamic-size-as-infinite: Debugging Options.
49052                                                             (line  471)
49053* fno-chkp-use-fast-string-functions:    Debugging Options.  (line  454)
49054* fno-chkp-use-nochk-string-functions:   Debugging Options.  (line  458)
49055* fno-chkp-use-static-bounds:            Debugging Options.  (line  462)
49056* fno-chkp-use-static-const-bounds:      Debugging Options.  (line  466)
49057* fno-chkp-use-wrappers:                 Debugging Options.  (line  499)
49058* fno-common <1>:                        Variable Attributes.
49059                                                             (line  106)
49060* fno-common:                            Code Gen Options.   (line  229)
49061* fno-compare-debug:                     Debugging Options.  (line  512)
49062* fno-debug-types-section:               Debugging Options.  (line   79)
49063* fno-default-inline:                    Inline.             (line   71)
49064* fno-defer-pop:                         Optimize Options.   (line  187)
49065* fno-diagnostics-show-caret:            Language Independent Options.
49066                                                             (line   94)
49067* fno-diagnostics-show-option:           Language Independent Options.
49068                                                             (line   88)
49069* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  636)
49070* fno-elide-constructors:                C++ Dialect Options.
49071                                                             (line  126)
49072* fno-eliminate-unused-debug-types:      Debugging Options.  (line 1691)
49073* fno-enforce-eh-specs:                  C++ Dialect Options.
49074                                                             (line  132)
49075* fno-ext-numeric-literals:              C++ Dialect Options.
49076                                                             (line  612)
49077* fno-extern-tls-init:                   C++ Dialect Options.
49078                                                             (line  143)
49079* fno-for-scope:                         C++ Dialect Options.
49080                                                             (line  164)
49081* fno-function-cse:                      Optimize Options.   (line  402)
49082* fno-gnu-keywords:                      C++ Dialect Options.
49083                                                             (line  176)
49084* fno-gnu-unique:                        Code Gen Options.   (line  152)
49085* fno-guess-branch-probability:          Optimize Options.   (line 1436)
49086* fno-ident:                             Code Gen Options.   (line  249)
49087* fno-implement-inlines <1>:             C++ Interface.      (line   66)
49088* fno-implement-inlines:                 C++ Dialect Options.
49089                                                             (line  193)
49090* fno-implicit-inline-templates:         C++ Dialect Options.
49091                                                             (line  187)
49092* fno-implicit-templates <1>:            C++ Dialect Options.
49093                                                             (line  181)
49094* fno-implicit-templates:                Template Instantiation.
49095                                                             (line   78)
49096* fno-inline:                            Optimize Options.   (line  248)
49097* fno-ira-share-save-slots:              Optimize Options.   (line  685)
49098* fno-ira-share-spill-slots:             Optimize Options.   (line  691)
49099* fno-jump-tables:                       Code Gen Options.   (line  324)
49100* fno-keep-inline-dllexport:             Optimize Options.   (line  335)
49101* fno-lifetime-dse:                      Optimize Options.   (line  626)
49102* fno-local-ivars:                       Objective-C and Objective-C++ Dialect Options.
49103                                                             (line  153)
49104* fno-math-errno:                        Optimize Options.   (line 2090)
49105* fno-merge-debug-strings:               Debugging Options.  (line  625)
49106* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
49107                                                             (line   49)
49108* fno-nonansi-builtins:                  C++ Dialect Options.
49109                                                             (line  203)
49110* fno-operator-names:                    C++ Dialect Options.
49111                                                             (line  219)
49112* fno-optional-diags:                    C++ Dialect Options.
49113                                                             (line  223)
49114* fno-peephole:                          Optimize Options.   (line 1427)
49115* fno-peephole2:                         Optimize Options.   (line 1427)
49116* fno-pretty-templates:                  C++ Dialect Options.
49117                                                             (line  233)
49118* fno-rtti:                              C++ Dialect Options.
49119                                                             (line  250)
49120* fno-sanitize-recover:                  Debugging Options.  (line  354)
49121* fno-sanitize=all:                      Debugging Options.  (line  344)
49122* fno-sched-interblock:                  Optimize Options.   (line  736)
49123* fno-sched-spec:                        Optimize Options.   (line  741)
49124* fno-set-stack-executable:              x86 Windows Options.
49125                                                             (line   46)
49126* fno-show-column:                       Preprocessor Options.
49127                                                             (line  602)
49128* fno-signed-bitfields:                  C Dialect Options.  (line  390)
49129* fno-signed-zeros:                      Optimize Options.   (line 2162)
49130* fno-stack-limit:                       Code Gen Options.   (line  495)
49131* fno-threadsafe-statics:                C++ Dialect Options.
49132                                                             (line  297)
49133* fno-toplevel-reorder:                  Optimize Options.   (line 1635)
49134* fno-trapping-math:                     Optimize Options.   (line 2172)
49135* fno-unsigned-bitfields:                C Dialect Options.  (line  390)
49136* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
49137                                                             (line  310)
49138* fno-var-tracking-assignments:          Debugging Options.  (line 1597)
49139* fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1608)
49140* fno-weak:                              C++ Dialect Options.
49141                                                             (line  424)
49142* fno-working-directory:                 Preprocessor Options.
49143                                                             (line  587)
49144* fno-writable-relocated-rdata:          x86 Windows Options.
49145                                                             (line   53)
49146* fno-zero-initialized-in-bss:           Optimize Options.   (line  413)
49147* fnon-call-exceptions:                  Code Gen Options.   (line  122)
49148* fnothrow-opt:                          C++ Dialect Options.
49149                                                             (line  208)
49150* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
49151                                                             (line   56)
49152* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
49153                                                             (line   67)
49154* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
49155                                                             (line   92)
49156* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
49157                                                             (line   96)
49158* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
49159                                                             (line  105)
49160* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
49161                                                             (line  111)
49162* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
49163                                                             (line  120)
49164* fomit-frame-pointer:                   Optimize Options.   (line  215)
49165* fopenacc:                              C Dialect Options.  (line  264)
49166* fopenmp:                               C Dialect Options.  (line  276)
49167* fopenmp-simd:                          C Dialect Options.  (line  284)
49168* fopt-info:                             Debugging Options.  (line 1388)
49169* foptimize-sibling-calls:               Optimize Options.   (line  236)
49170* foptimize-strlen:                      Optimize Options.   (line  241)
49171* force_cpusubtype_ALL:                  Darwin Options.     (line  135)
49172* force_flat_namespace:                  Darwin Options.     (line  196)
49173* fpack-struct:                          Code Gen Options.   (line  375)
49174* fpartial-inlining:                     Optimize Options.   (line 1402)
49175* fpcc-struct-return <1>:                Code Gen Options.   (line  165)
49176* fpcc-struct-return:                    Incompatibilities.  (line  170)
49177* fpch-deps:                             Preprocessor Options.
49178                                                             (line  294)
49179* fpch-preprocess:                       Preprocessor Options.
49180                                                             (line  302)
49181* fpeel-loops:                           Optimize Options.   (line 2338)
49182* fpermissive:                           C++ Dialect Options.
49183                                                             (line  228)
49184* fPIC:                                  Code Gen Options.   (line  301)
49185* fpic:                                  Code Gen Options.   (line  280)
49186* fpie:                                  Code Gen Options.   (line  314)
49187* fPIE:                                  Code Gen Options.   (line  314)
49188* fplan9-extensions <1>:                 C Dialect Options.  (line  331)
49189* fplan9-extensions:                     Unnamed Fields.     (line   44)
49190* fplugin:                               Overall Options.    (line  351)
49191* fplugin-arg:                           Overall Options.    (line  359)
49192* fpost-ipa-mem-report:                  Debugging Options.  (line  670)
49193* fpre-ipa-mem-report:                   Debugging Options.  (line  668)
49194* fpredictive-commoning:                 Optimize Options.   (line 1409)
49195* fprefetch-loop-arrays:                 Optimize Options.   (line 1416)
49196* fpreprocessed:                         Preprocessor Options.
49197                                                             (line  517)
49198* fprofile-arcs <1>:                     Debugging Options.  (line  709)
49199* fprofile-arcs:                         Other Builtins.     (line  264)
49200* fprofile-correction:                   Optimize Options.   (line 1960)
49201* fprofile-dir:                          Optimize Options.   (line 1967)
49202* fprofile-generate:                     Optimize Options.   (line 1977)
49203* fprofile-reorder-functions:            Optimize Options.   (line 2280)
49204* fprofile-report:                       Debugging Options.  (line  674)
49205* fprofile-use:                          Optimize Options.   (line 1990)
49206* fprofile-values:                       Optimize Options.   (line 2271)
49207* fpu:                                   RX Options.         (line   17)
49208* frandom-seed:                          Debugging Options.  (line 1487)
49209* freciprocal-math:                      Optimize Options.   (line 2141)
49210* frecord-gcc-switches:                  Code Gen Options.   (line  268)
49211* free:                                  Optimize Options.   (line  618)
49212* freg-struct-return:                    Code Gen Options.   (line  183)
49213* frename-registers:                     Optimize Options.   (line 2297)
49214* freorder-blocks:                       Optimize Options.   (line 1453)
49215* freorder-blocks-and-partition:         Optimize Options.   (line 1459)
49216* freorder-functions:                    Optimize Options.   (line 1472)
49217* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
49218                                                             (line  131)
49219* frepo <1>:                             C++ Dialect Options.
49220                                                             (line  245)
49221* frepo:                                 Template Instantiation.
49222                                                             (line   54)
49223* freport-bug:                           Debugging Options.  (line 1091)
49224* frerun-cse-after-loop:                 Optimize Options.   (line  459)
49225* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  835)
49226* frounding-math:                        Optimize Options.   (line 2187)
49227* fsanitize-recover:                     Debugging Options.  (line  354)
49228* fsanitize-undefined-trap-on-error:     Debugging Options.  (line  381)
49229* fsanitize=address:                     Debugging Options.  (line  199)
49230* fsanitize=alignment:                   Debugging Options.  (line  288)
49231* fsanitize=bool:                        Debugging Options.  (line  324)
49232* fsanitize=bounds:                      Debugging Options.  (line  282)
49233* fsanitize=enum:                        Debugging Options.  (line  328)
49234* fsanitize=float-cast-overflow:         Debugging Options.  (line  305)
49235* fsanitize=float-divide-by-zero:        Debugging Options.  (line  299)
49236* fsanitize=integer-divide-by-zero:      Debugging Options.  (line  245)
49237* fsanitize=kernel-address:              Debugging Options.  (line  211)
49238* fsanitize=leak:                        Debugging Options.  (line  224)
49239* fsanitize=nonnull-attribute:           Debugging Options.  (line  313)
49240* fsanitize=null:                        Debugging Options.  (line  259)
49241* fsanitize=object-size:                 Debugging Options.  (line  294)
49242* fsanitize=return:                      Debugging Options.  (line  267)
49243* fsanitize=returns-nonnull-attribute:   Debugging Options.  (line  319)
49244* fsanitize=shift:                       Debugging Options.  (line  239)
49245* fsanitize=signed-integer-overflow:     Debugging Options.  (line  273)
49246* fsanitize=thread:                      Debugging Options.  (line  215)
49247* fsanitize=undefined:                   Debugging Options.  (line  234)
49248* fsanitize=unreachable:                 Debugging Options.  (line  249)
49249* fsanitize=vla-bound:                   Debugging Options.  (line  255)
49250* fsanitize=vptr:                        Debugging Options.  (line  333)
49251* fsched-critical-path-heuristic:        Optimize Options.   (line  801)
49252* fsched-dep-count-heuristic:            Optimize Options.   (line  828)
49253* fsched-group-heuristic:                Optimize Options.   (line  795)
49254* fsched-last-insn-heuristic:            Optimize Options.   (line  821)
49255* fsched-pressure:                       Optimize Options.   (line  746)
49256* fsched-rank-heuristic:                 Optimize Options.   (line  814)
49257* fsched-spec-insn-heuristic:            Optimize Options.   (line  807)
49258* fsched-spec-load:                      Optimize Options.   (line  755)
49259* fsched-spec-load-dangerous:            Optimize Options.   (line  760)
49260* fsched-stalled-insns:                  Optimize Options.   (line  766)
49261* fsched-stalled-insns-dep:              Optimize Options.   (line  776)
49262* fsched-verbose:                        Debugging Options.  (line 1501)
49263* fsched2-use-superblocks:               Optimize Options.   (line  785)
49264* fschedule-fusion:                      Optimize Options.   (line 2307)
49265* fschedule-insns:                       Optimize Options.   (line  717)
49266* fschedule-insns2:                      Optimize Options.   (line  727)
49267* fsection-anchors:                      Optimize Options.   (line 2414)
49268* fsel-sched-pipelining:                 Optimize Options.   (line  848)
49269* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  853)
49270* fselective-scheduling:                 Optimize Options.   (line  840)
49271* fselective-scheduling2:                Optimize Options.   (line  844)
49272* fsemantic-interposition:               Optimize Options.   (line  858)
49273* fshort-double:                         Code Gen Options.   (line  211)
49274* fshort-enums <1>:                      Code Gen Options.   (line  201)
49275* fshort-enums <2>:                      Type Attributes.    (line  114)
49276* fshort-enums <3>:                      Non-bugs.           (line   42)
49277* fshort-enums:                          Structures unions enumerations and bit-fields implementation.
49278                                                             (line   48)
49279* fshort-wchar:                          Code Gen Options.   (line  219)
49280* fshrink-wrap:                          Optimize Options.   (line  875)
49281* fsignaling-nans:                       Optimize Options.   (line 2207)
49282* fsigned-bitfields <1>:                 C Dialect Options.  (line  390)
49283* fsigned-bitfields:                     Non-bugs.           (line   57)
49284* fsigned-char <1>:                      C Dialect Options.  (line  380)
49285* fsigned-char:                          Characters implementation.
49286                                                             (line   31)
49287* fsimd-cost-model:                      Optimize Options.   (line 1367)
49288* fsingle-precision-constant:            Optimize Options.   (line 2222)
49289* fsized-deallocation:                   C++ Dialect Options.
49290                                                             (line  260)
49291* fsplit-ivs-in-unroller:                Optimize Options.   (line 1383)
49292* fsplit-stack <1>:                      Code Gen Options.   (line  509)
49293* fsplit-stack:                          Function Attributes.
49294                                                             (line 1079)
49295* fsplit-wide-types:                     Optimize Options.   (line  434)
49296* fssa-phiopt:                           Optimize Options.   (line 1042)
49297* fstack-check:                          Code Gen Options.   (line  456)
49298* fstack-limit-register:                 Code Gen Options.   (line  495)
49299* fstack-limit-symbol:                   Code Gen Options.   (line  495)
49300* fstack-protector:                      Optimize Options.   (line 2389)
49301* fstack-protector-all:                  Optimize Options.   (line 2398)
49302* fstack-protector-explicit:             Optimize Options.   (line 2406)
49303* fstack-protector-strong:               Optimize Options.   (line 2401)
49304* fstack-usage:                          Debugging Options.  (line  678)
49305* fstack_reuse:                          Code Gen Options.   (line   21)
49306* fstats:                                C++ Dialect Options.
49307                                                             (line  270)
49308* fstdarg-opt:                           Optimize Options.   (line 2410)
49309* fstrict-aliasing:                      Optimize Options.   (line 1485)
49310* fstrict-enums:                         C++ Dialect Options.
49311                                                             (line  275)
49312* fstrict-overflow:                      Optimize Options.   (line 1531)
49313* fstrict-volatile-bitfields:            Code Gen Options.   (line  614)
49314* fsync-libcalls:                        Code Gen Options.   (line  647)
49315* fsyntax-only:                          Warning Options.    (line   14)
49316* ftabstop:                              Preprocessor Options.
49317                                                             (line  530)
49318* ftemplate-backtrace-limit:             C++ Dialect Options.
49319                                                             (line  284)
49320* ftemplate-depth:                       C++ Dialect Options.
49321                                                             (line  288)
49322* ftest-coverage:                        Debugging Options.  (line  765)
49323* fthread-jumps:                         Optimize Options.   (line  425)
49324* ftime-report:                          Debugging Options.  (line  656)
49325* ftls-model:                            Code Gen Options.   (line  538)
49326* ftracer:                               Optimize Options.   (line 2315)
49327* ftrack-macro-expansion:                Preprocessor Options.
49328                                                             (line  546)
49329* ftrapv:                                Code Gen Options.   (line   96)
49330* ftree-bit-ccp:                         Optimize Options.   (line 1031)
49331* ftree-builtin-call-dce:                Optimize Options.   (line 1063)
49332* ftree-ccp:                             Optimize Options.   (line 1037)
49333* ftree-ch:                              Optimize Options.   (line 1083)
49334* ftree-coalesce-inlined-vars:           Optimize Options.   (line 1308)
49335* ftree-coalesce-vars:                   Optimize Options.   (line 1317)
49336* ftree-copy-prop:                       Optimize Options.   (line  946)
49337* ftree-copyrename:                      Optimize Options.   (line 1301)
49338* ftree-dce:                             Optimize Options.   (line 1059)
49339* ftree-dominator-opts:                  Optimize Options.   (line 1069)
49340* ftree-dse:                             Optimize Options.   (line 1076)
49341* ftree-forwprop:                        Optimize Options.   (line  925)
49342* ftree-fre:                             Optimize Options.   (line  929)
49343* ftree-loop-distribute-patterns:        Optimize Options.   (line 1242)
49344* ftree-loop-distribution:               Optimize Options.   (line 1225)
49345* ftree-loop-if-convert:                 Optimize Options.   (line 1205)
49346* ftree-loop-if-convert-stores:          Optimize Options.   (line 1212)
49347* ftree-loop-im:                         Optimize Options.   (line 1262)
49348* ftree-loop-ivcanon:                    Optimize Options.   (line 1271)
49349* ftree-loop-linear:                     Optimize Options.   (line 1094)
49350* ftree-loop-optimize:                   Optimize Options.   (line 1090)
49351* ftree-loop-vectorize:                  Optimize Options.   (line 1345)
49352* ftree-parallelize-loops:               Optimize Options.   (line 1282)
49353* ftree-partial-pre:                     Optimize Options.   (line  921)
49354* ftree-phiprop:                         Optimize Options.   (line  936)
49355* ftree-pre:                             Optimize Options.   (line  917)
49356* ftree-pta:                             Optimize Options.   (line 1291)
49357* ftree-reassoc:                         Optimize Options.   (line  913)
49358* ftree-sink:                            Optimize Options.   (line 1027)
49359* ftree-slp-vectorize:                   Optimize Options.   (line 1349)
49360* ftree-slsr:                            Optimize Options.   (line 1334)
49361* ftree-sra:                             Optimize Options.   (line 1295)
49362* ftree-switch-conversion:               Optimize Options.   (line 1046)
49363* ftree-tail-merge:                      Optimize Options.   (line 1051)
49364* ftree-ter:                             Optimize Options.   (line 1326)
49365* ftree-vectorize:                       Optimize Options.   (line 1340)
49366* ftree-vrp:                             Optimize Options.   (line 1374)
49367* funit-at-a-time:                       Optimize Options.   (line 1628)
49368* funroll-all-loops:                     Optimize Options.   (line 2332)
49369* funroll-loops:                         Optimize Options.   (line 2322)
49370* funsafe-loop-optimizations:            Optimize Options.   (line  515)
49371* funsafe-math-optimizations:            Optimize Options.   (line 2108)
49372* funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
49373                                                             (line   17)
49374* funsigned-bitfields <2>:               Non-bugs.           (line   57)
49375* funsigned-bitfields:                   C Dialect Options.  (line  390)
49376* funsigned-char <1>:                    Characters implementation.
49377                                                             (line   31)
49378* funsigned-char:                        C Dialect Options.  (line  362)
49379* funswitch-loops:                       Optimize Options.   (line 2350)
49380* funwind-tables:                        Code Gen Options.   (line  139)
49381* fuse-cxa-atexit:                       C++ Dialect Options.
49382                                                             (line  303)
49383* fuse-ld=bfd:                           Link Options.       (line   25)
49384* fuse-ld=gold:                          Link Options.       (line   28)
49385* fuse-linker-plugin:                    Optimize Options.   (line 1904)
49386* fvar-tracking:                         Debugging Options.  (line 1587)
49387* fvar-tracking-assignments:             Debugging Options.  (line 1597)
49388* fvar-tracking-assignments-toggle:      Debugging Options.  (line 1608)
49389* fvariable-expansion-in-unroller:       Optimize Options.   (line 1397)
49390* fvect-cost-model:                      Optimize Options.   (line 1353)
49391* fverbose-asm:                          Code Gen Options.   (line  259)
49392* fvisibility:                           Code Gen Options.   (line  549)
49393* fvisibility-inlines-hidden:            C++ Dialect Options.
49394                                                             (line  315)
49395* fvisibility-ms-compat:                 C++ Dialect Options.
49396                                                             (line  343)
49397* fvpt:                                  Optimize Options.   (line 2287)
49398* fvtable-verify:                        C++ Dialect Options.
49399                                                             (line  372)
49400* fvtv-counts:                           C++ Dialect Options.
49401                                                             (line  407)
49402* fvtv-debug:                            C++ Dialect Options.
49403                                                             (line  394)
49404* fweb:                                  Optimize Options.   (line 1647)
49405* fwhole-program:                        Optimize Options.   (line 1658)
49406* fwide-exec-charset:                    Preprocessor Options.
49407                                                             (line  569)
49408* fworking-directory:                    Preprocessor Options.
49409                                                             (line  587)
49410* fwrapv:                                Code Gen Options.   (line  100)
49411* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
49412                                                             (line  141)
49413* G <1>:                                 Nios II Options.    (line    9)
49414* G <2>:                                 M32R/D Options.     (line   57)
49415* G <3>:                                 System V Options.   (line   10)
49416* G:                                     MIPS Options.       (line  440)
49417* g:                                     Debugging Options.  (line   10)
49418* G:                                     RS/6000 and PowerPC Options.
49419                                                             (line  770)
49420* gcoff:                                 Debugging Options.  (line   94)
49421* gdwarf-VERSION:                        Debugging Options.  (line  112)
49422* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
49423                                                             (line  167)
49424* gfull:                                 Darwin Options.     (line   69)
49425* ggdb:                                  Debugging Options.  (line   45)
49426* ggnu-pubnames:                         Debugging Options.  (line   54)
49427* gno-record-gcc-switches:               Debugging Options.  (line  133)
49428* gno-strict-dwarf:                      Debugging Options.  (line  143)
49429* gpubnames:                             Debugging Options.  (line   51)
49430* grecord-gcc-switches:                  Debugging Options.  (line  124)
49431* gsplit-dwarf:                          Debugging Options.  (line   38)
49432* gstabs:                                Debugging Options.  (line   59)
49433* gstabs+:                               Debugging Options.  (line   88)
49434* gstrict-dwarf:                         Debugging Options.  (line  137)
49435* gtoggle:                               Debugging Options.  (line  191)
49436* gused:                                 Darwin Options.     (line   64)
49437* gvms:                                  Debugging Options.  (line  158)
49438* gxcoff:                                Debugging Options.  (line   99)
49439* gxcoff+:                               Debugging Options.  (line  104)
49440* gz:                                    Debugging Options.  (line  147)
49441* H:                                     Preprocessor Options.
49442                                                             (line  720)
49443* headerpad_max_install_names:           Darwin Options.     (line  196)
49444* help <1>:                              Preprocessor Options.
49445                                                             (line  712)
49446* help:                                  Overall Options.    (line  221)
49447* I <1>:                                 Directory Options.  (line   10)
49448* I:                                     Preprocessor Options.
49449                                                             (line   77)
49450* I- <1>:                                Directory Options.  (line  123)
49451* I-:                                    Preprocessor Options.
49452                                                             (line  387)
49453* idirafter:                             Preprocessor Options.
49454                                                             (line  429)
49455* iframework:                            Darwin Options.     (line   57)
49456* imacros:                               Preprocessor Options.
49457                                                             (line  420)
49458* image_base:                            Darwin Options.     (line  196)
49459* imultilib:                             Preprocessor Options.
49460                                                             (line  454)
49461* include:                               Preprocessor Options.
49462                                                             (line  409)
49463* init:                                  Darwin Options.     (line  196)
49464* install_name:                          Darwin Options.     (line  196)
49465* iplugindir=:                           Directory Options.  (line   31)
49466* iprefix:                               Preprocessor Options.
49467                                                             (line  436)
49468* iquote <1>:                            Directory Options.  (line   36)
49469* iquote:                                Preprocessor Options.
49470                                                             (line  472)
49471* iremap <1>:                            Directory Options.  (line   42)
49472* iremap:                                Preprocessor Options.
49473                                                             (line  501)
49474* isysroot:                              Preprocessor Options.
49475                                                             (line  448)
49476* isystem:                               Preprocessor Options.
49477                                                             (line  458)
49478* iwithprefix:                           Preprocessor Options.
49479                                                             (line  442)
49480* iwithprefixbefore:                     Preprocessor Options.
49481                                                             (line  442)
49482* keep_private_externs:                  Darwin Options.     (line  196)
49483* l:                                     Link Options.       (line   32)
49484* L:                                     Directory Options.  (line   47)
49485* lobjc:                                 Link Options.       (line   59)
49486* M:                                     Preprocessor Options.
49487                                                             (line  185)
49488* m:                                     RS/6000 and PowerPC Options.
49489                                                             (line  611)
49490* m1:                                    SH Options.         (line    9)
49491* m10:                                   PDP-11 Options.     (line   29)
49492* m128bit-long-double:                   x86 Options.        (line  396)
49493* m16:                                   x86 Options.        (line  965)
49494* m16-bit <1>:                           NDS32 Options.      (line   39)
49495* m16-bit:                               CRIS Options.       (line   64)
49496* m1reg-:                                Adapteva Epiphany Options.
49497                                                             (line  132)
49498* m2:                                    SH Options.         (line   12)
49499* m210:                                  MCore Options.      (line   43)
49500* m2a:                                   SH Options.         (line   30)
49501* m2a-nofpu:                             SH Options.         (line   18)
49502* m2a-single:                            SH Options.         (line   26)
49503* m2a-single-only:                       SH Options.         (line   22)
49504* m3:                                    SH Options.         (line   34)
49505* m31:                                   S/390 and zSeries Options.
49506                                                             (line   87)
49507* m32 <1>:                               TILE-Gx Options.    (line   23)
49508* m32 <2>:                               RS/6000 and PowerPC Options.
49509                                                             (line  303)
49510* m32 <3>:                               x86 Options.        (line  965)
49511* m32 <4>:                               TILEPro Options.    (line   13)
49512* m32 <5>:                               Nvidia PTX Options. (line   10)
49513* m32:                                   SPARC Options.      (line  257)
49514* m32-bit:                               CRIS Options.       (line   64)
49515* m32bit-doubles <1>:                    RL78 Options.       (line   22)
49516* m32bit-doubles:                        RX Options.         (line   10)
49517* m32r:                                  M32R/D Options.     (line   15)
49518* m32r2:                                 M32R/D Options.     (line    9)
49519* m32rx:                                 M32R/D Options.     (line   12)
49520* m340:                                  MCore Options.      (line   43)
49521* m3dnow:                                x86 Options.        (line  609)
49522* m3e:                                   SH Options.         (line   37)
49523* m4:                                    SH Options.         (line   51)
49524* m4-100:                                SH Options.         (line   54)
49525* m4-100-nofpu:                          SH Options.         (line   57)
49526* m4-100-single:                         SH Options.         (line   61)
49527* m4-100-single-only:                    SH Options.         (line   65)
49528* m4-200:                                SH Options.         (line   69)
49529* m4-200-nofpu:                          SH Options.         (line   72)
49530* m4-200-single:                         SH Options.         (line   76)
49531* m4-200-single-only:                    SH Options.         (line   80)
49532* m4-300:                                SH Options.         (line   84)
49533* m4-300-nofpu:                          SH Options.         (line   87)
49534* m4-300-single:                         SH Options.         (line   91)
49535* m4-300-single-only:                    SH Options.         (line   95)
49536* m4-340:                                SH Options.         (line   99)
49537* m4-500:                                SH Options.         (line  102)
49538* m4-nofpu:                              SH Options.         (line   40)
49539* m4-single:                             SH Options.         (line   47)
49540* m4-single-only:                        SH Options.         (line   43)
49541* m40:                                   PDP-11 Options.     (line   23)
49542* m45:                                   PDP-11 Options.     (line   26)
49543* m4a:                                   SH Options.         (line  118)
49544* m4a-nofpu:                             SH Options.         (line  106)
49545* m4a-single:                            SH Options.         (line  114)
49546* m4a-single-only:                       SH Options.         (line  110)
49547* m4al:                                  SH Options.         (line  121)
49548* m4byte-functions:                      MCore Options.      (line   27)
49549* m5-32media:                            SH Options.         (line  126)
49550* m5-32media-nofpu:                      SH Options.         (line  129)
49551* m5-64media:                            SH Options.         (line  133)
49552* m5-64media-nofpu:                      SH Options.         (line  136)
49553* m5-compact:                            SH Options.         (line  140)
49554* m5-compact-nofpu:                      SH Options.         (line  143)
49555* m5200:                                 M680x0 Options.     (line  147)
49556* m5206e:                                M680x0 Options.     (line  156)
49557* m528x:                                 M680x0 Options.     (line  160)
49558* m5307:                                 M680x0 Options.     (line  164)
49559* m5407:                                 M680x0 Options.     (line  168)
49560* m64 <1>:                               TILE-Gx Options.    (line   23)
49561* m64 <2>:                               S/390 and zSeries Options.
49562                                                             (line   87)
49563* m64 <3>:                               SPARC Options.      (line  257)
49564* m64 <4>:                               Nvidia PTX Options. (line   10)
49565* m64 <5>:                               x86 Options.        (line  965)
49566* m64:                                   RS/6000 and PowerPC Options.
49567                                                             (line  303)
49568* m64bit-doubles <1>:                    RL78 Options.       (line   22)
49569* m64bit-doubles:                        RX Options.         (line   10)
49570* m68000:                                M680x0 Options.     (line   95)
49571* m68010:                                M680x0 Options.     (line  103)
49572* m68020:                                M680x0 Options.     (line  109)
49573* m68020-40:                             M680x0 Options.     (line  178)
49574* m68020-60:                             M680x0 Options.     (line  187)
49575* m68030:                                M680x0 Options.     (line  114)
49576* m68040:                                M680x0 Options.     (line  119)
49577* m68060:                                M680x0 Options.     (line  128)
49578* m68881:                                M680x0 Options.     (line  197)
49579* m8-bit:                                CRIS Options.       (line   64)
49580* m8bit-idiv:                            x86 Options.        (line  940)
49581* m8byte-align:                          V850 Options.       (line  170)
49582* m96bit-long-double:                    x86 Options.        (line  396)
49583* mA6:                                   ARC Options.        (line   19)
49584* mA7:                                   ARC Options.        (line   26)
49585* mabi <1>:                              x86 Options.        (line  795)
49586* mabi <2>:                              ARM Options.        (line    9)
49587* mabi <3>:                              RS/6000 and PowerPC Options.
49588                                                             (line  638)
49589* mabi:                                  AArch64 Options.    (line    9)
49590* mabi=32:                               MIPS Options.       (line  157)
49591* mabi=64:                               MIPS Options.       (line  157)
49592* mabi=eabi:                             MIPS Options.       (line  157)
49593* mabi=elfv1:                            RS/6000 and PowerPC Options.
49594                                                             (line  659)
49595* mabi=elfv2:                            RS/6000 and PowerPC Options.
49596                                                             (line  665)
49597* mabi=gnu:                              MMIX Options.       (line   20)
49598* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
49599                                                             (line  651)
49600* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
49601                                                             (line  655)
49602* mabi=mmixware:                         MMIX Options.       (line   20)
49603* mabi=n32:                              MIPS Options.       (line  157)
49604* mabi=no-spe:                           RS/6000 and PowerPC Options.
49605                                                             (line  648)
49606* mabi=o64:                              MIPS Options.       (line  157)
49607* mabi=spe:                              RS/6000 and PowerPC Options.
49608                                                             (line  643)
49609* mabicalls:                             MIPS Options.       (line  194)
49610* mabm:                                  x86 Options.        (line  611)
49611* mabort-on-noreturn:                    ARM Options.        (line  191)
49612* mabs=2008:                             MIPS Options.       (line  302)
49613* mabs=legacy:                           MIPS Options.       (line  302)
49614* mabsdiff:                              MeP Options.        (line    7)
49615* mabshi:                                PDP-11 Options.     (line   55)
49616* mac0:                                  PDP-11 Options.     (line   16)
49617* macc-4:                                FRV Options.        (line  113)
49618* macc-8:                                FRV Options.        (line  116)
49619* maccumulate-args:                      AVR Options.        (line  147)
49620* maccumulate-outgoing-args <1>:         SH Options.         (line  400)
49621* maccumulate-outgoing-args:             x86 Options.        (line  818)
49622* maddress-mode=long:                    x86 Options.        (line 1012)
49623* maddress-mode=short:                   x86 Options.        (line 1017)
49624* maddress-space-conversion:             SPU Options.        (line   63)
49625* mads:                                  RS/6000 and PowerPC Options.
49626                                                             (line  693)
49627* maes:                                  x86 Options.        (line  597)
49628* maix-struct-return:                    RS/6000 and PowerPC Options.
49629                                                             (line  631)
49630* maix32:                                RS/6000 and PowerPC Options.
49631                                                             (line  341)
49632* maix64:                                RS/6000 and PowerPC Options.
49633                                                             (line  341)
49634* malign-300:                            H8/300 Options.     (line   41)
49635* malign-call:                           ARC Options.        (line  194)
49636* malign-data:                           x86 Options.        (line  435)
49637* malign-double:                         x86 Options.        (line  380)
49638* malign-int:                            M680x0 Options.     (line  267)
49639* malign-labels:                         FRV Options.        (line  104)
49640* malign-loops:                          M32R/D Options.     (line   73)
49641* malign-natural:                        RS/6000 and PowerPC Options.
49642                                                             (line  380)
49643* malign-power:                          RS/6000 and PowerPC Options.
49644                                                             (line  380)
49645* mall-opts:                             MeP Options.        (line   11)
49646* malloc-cc:                             FRV Options.        (line   25)
49647* maltivec:                              RS/6000 and PowerPC Options.
49648                                                             (line  136)
49649* maltivec=be:                           RS/6000 and PowerPC Options.
49650                                                             (line  152)
49651* maltivec=le:                           RS/6000 and PowerPC Options.
49652                                                             (line  162)
49653* mam33:                                 MN10300 Options.    (line   17)
49654* mam33-2:                               MN10300 Options.    (line   24)
49655* mam34:                                 MN10300 Options.    (line   27)
49656* mandroid:                              GNU/Linux Options.  (line   21)
49657* mannotate-align:                       ARC Options.        (line  135)
49658* mapcs:                                 ARM Options.        (line   21)
49659* mapcs-frame:                           ARM Options.        (line   13)
49660* mapp-regs <1>:                         V850 Options.       (line  181)
49661* mapp-regs:                             SPARC Options.      (line   10)
49662* mARC600:                               ARC Options.        (line   19)
49663* mARC601:                               ARC Options.        (line   23)
49664* mARC700:                               ARC Options.        (line   26)
49665* march <1>:                             HPPA Options.       (line  155)
49666* march <2>:                             MIPS Options.       (line   14)
49667* march <3>:                             NDS32 Options.      (line   52)
49668* march <4>:                             HPPA Options.       (line    9)
49669* march <5>:                             M680x0 Options.     (line   12)
49670* march <6>:                             S/390 and zSeries Options.
49671                                                             (line  116)
49672* march <7>:                             C6X Options.        (line    7)
49673* march <8>:                             AArch64 Options.    (line   79)
49674* march <9>:                             x86 Options.        (line    9)
49675* march <10>:                            CRIS Options.       (line   10)
49676* march:                                 ARM Options.        (line   65)
49677* marclinux:                             ARC Options.        (line  142)
49678* marclinux_prof:                        ARC Options.        (line  148)
49679* margonaut:                             ARC Options.        (line  346)
49680* marm:                                  ARM Options.        (line  261)
49681* mas100-syntax:                         RX Options.         (line   76)
49682* masm-hex:                              MSP430 Options.     (line    9)
49683* masm-syntax-unified:                   ARM Options.        (line  350)
49684* masm=DIALECT:                          x86 Options.        (line  334)
49685* matomic-model=MODEL:                   SH Options.         (line  214)
49686* matomic-updates:                       SPU Options.        (line   78)
49687* mauto-modify-reg:                      ARC Options.        (line  197)
49688* mauto-pic:                             IA-64 Options.      (line   50)
49689* maverage:                              MeP Options.        (line   16)
49690* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
49691                                                             (line  450)
49692* mavx:                                  x86 Options.        (line  590)
49693* mavx256-split-unaligned-load:          x86 Options.        (line  948)
49694* mavx256-split-unaligned-store:         x86 Options.        (line  948)
49695* max-vect-align:                        Adapteva Epiphany Options.
49696                                                             (line  120)
49697* mb:                                    SH Options.         (line  147)
49698* mbackchain:                            S/390 and zSeries Options.
49699                                                             (line   35)
49700* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
49701* mbarrel-shifter:                       ARC Options.        (line   10)
49702* mbarrel_shifter:                       ARC Options.        (line  363)
49703* mbase-addresses:                       MMIX Options.       (line   54)
49704* mbased=:                               MeP Options.        (line   20)
49705* mbbit-peephole:                        ARC Options.        (line  200)
49706* mbcopy:                                PDP-11 Options.     (line   36)
49707* mbcopy-builtin:                        PDP-11 Options.     (line   32)
49708* mbig:                                  RS/6000 and PowerPC Options.
49709                                                             (line  530)
49710* mbig-endian <1>:                       ARM Options.        (line   61)
49711* mbig-endian <2>:                       NDS32 Options.      (line    9)
49712* mbig-endian <3>:                       RS/6000 and PowerPC Options.
49713                                                             (line  530)
49714* mbig-endian <4>:                       C6X Options.        (line   13)
49715* mbig-endian <5>:                       ARC Options.        (line  349)
49716* mbig-endian <6>:                       IA-64 Options.      (line    9)
49717* mbig-endian <7>:                       AArch64 Options.    (line   20)
49718* mbig-endian <8>:                       TILE-Gx Options.    (line   29)
49719* mbig-endian <9>:                       MicroBlaze Options. (line   57)
49720* mbig-endian:                           MCore Options.      (line   39)
49721* mbig-endian-data:                      RX Options.         (line   42)
49722* mbig-switch:                           V850 Options.       (line  176)
49723* mbigtable:                             SH Options.         (line  162)
49724* mbionic:                               GNU/Linux Options.  (line   17)
49725* mbit-align:                            RS/6000 and PowerPC Options.
49726                                                             (line  482)
49727* mbit-ops:                              CR16 Options.       (line   25)
49728* mbitfield:                             M680x0 Options.     (line  235)
49729* mbitops <1>:                           MeP Options.        (line   26)
49730* mbitops:                               SH Options.         (line  166)
49731* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
49732                                                             (line  764)
49733* mbmi:                                  x86 Options.        (line  612)
49734* mbranch-cheap:                         PDP-11 Options.     (line   65)
49735* mbranch-cost <1>:                      Adapteva Epiphany Options.
49736                                                             (line   18)
49737* mbranch-cost <2>:                      AVR Options.        (line  162)
49738* mbranch-cost:                          MIPS Options.       (line  757)
49739* mbranch-cost=NUM:                      SH Options.         (line  466)
49740* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
49741* mbranch-expensive:                     PDP-11 Options.     (line   61)
49742* mbranch-hints:                         SPU Options.        (line   27)
49743* mbranch-likely:                        MIPS Options.       (line  764)
49744* mbranch-predict:                       MMIX Options.       (line   49)
49745* mbss-plt:                              RS/6000 and PowerPC Options.
49746                                                             (line  189)
49747* mbuild-constants:                      DEC Alpha Options.  (line  141)
49748* mbwx:                                  DEC Alpha Options.  (line  163)
49749* mbypass-cache:                         Nios II Options.    (line   72)
49750* mc68000:                               M680x0 Options.     (line   95)
49751* mc68020:                               M680x0 Options.     (line  109)
49752* mc=:                                   MeP Options.        (line   31)
49753* mcache-block-size:                     NDS32 Options.      (line   48)
49754* mcache-size:                           SPU Options.        (line   70)
49755* mcache-volatile:                       Nios II Options.    (line   78)
49756* mcall-eabi:                            RS/6000 and PowerPC Options.
49757                                                             (line  605)
49758* mcall-freebsd:                         RS/6000 and PowerPC Options.
49759                                                             (line  619)
49760* mcall-linux:                           RS/6000 and PowerPC Options.
49761                                                             (line  615)
49762* mcall-netbsd:                          RS/6000 and PowerPC Options.
49763                                                             (line  627)
49764* mcall-prologues:                       AVR Options.        (line  167)
49765* mcall-sysv:                            RS/6000 and PowerPC Options.
49766                                                             (line  597)
49767* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
49768                                                             (line  605)
49769* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
49770                                                             (line  608)
49771* mcallee-super-interworking:            ARM Options.        (line  279)
49772* mcaller-super-interworking:            ARM Options.        (line  286)
49773* mcallgraph-data:                       MCore Options.      (line   31)
49774* mcase-vector-pcrel:                    ARC Options.        (line  208)
49775* mcbcond:                               SPARC Options.      (line  224)
49776* mcbranch-force-delay-slot:             SH Options.         (line  481)
49777* mcc-init:                              CRIS Options.       (line   41)
49778* mcfv4e:                                M680x0 Options.     (line  172)
49779* mcheck-zero-division:                  MIPS Options.       (line  551)
49780* mcix:                                  DEC Alpha Options.  (line  163)
49781* mcld:                                  x86 Options.        (line  668)
49782* mclear-hwcap:                          Solaris 2 Options.  (line    9)
49783* mclfushopt:                            x86 Options.        (line  599)
49784* mclip:                                 MeP Options.        (line   35)
49785* mcmodel <1>:                           NDS32 Options.      (line   55)
49786* mcmodel:                               SPARC Options.      (line  262)
49787* mcmodel=kernel:                        x86 Options.        (line  996)
49788* mcmodel=large <1>:                     x86 Options.        (line 1008)
49789* mcmodel=large <2>:                     TILE-Gx Options.    (line   14)
49790* mcmodel=large <3>:                     AArch64 Options.    (line   44)
49791* mcmodel=large:                         RS/6000 and PowerPC Options.
49792                                                             (line  130)
49793* mcmodel=medium <1>:                    x86 Options.        (line 1001)
49794* mcmodel=medium:                        RS/6000 and PowerPC Options.
49795                                                             (line  126)
49796* mcmodel=small <1>:                     TILE-Gx Options.    (line    9)
49797* mcmodel=small <2>:                     x86 Options.        (line  990)
49798* mcmodel=small <3>:                     AArch64 Options.    (line   38)
49799* mcmodel=small:                         RS/6000 and PowerPC Options.
49800                                                             (line  122)
49801* mcmodel=tiny:                          AArch64 Options.    (line   31)
49802* mcmov:                                 NDS32 Options.      (line   21)
49803* mcmove:                                Adapteva Epiphany Options.
49804                                                             (line   23)
49805* mcmpb:                                 RS/6000 and PowerPC Options.
49806                                                             (line   27)
49807* mcode-readable:                        MIPS Options.       (line  511)
49808* mcompact-casesi:                       ARC Options.        (line  212)
49809* mcompat-align-parm:                    RS/6000 and PowerPC Options.
49810                                                             (line  944)
49811* mcond-exec:                            FRV Options.        (line  152)
49812* mcond-move:                            FRV Options.        (line  128)
49813* mconfig=:                              MeP Options.        (line   39)
49814* mconsole:                              x86 Windows Options.
49815                                                             (line    9)
49816* mconst-align:                          CRIS Options.       (line   55)
49817* mconst16:                              Xtensa Options.     (line   10)
49818* mconstant-gp:                          IA-64 Options.      (line   46)
49819* mcop:                                  MeP Options.        (line   48)
49820* mcop32:                                MeP Options.        (line   53)
49821* mcop64:                                MeP Options.        (line   56)
49822* mcorea:                                Blackfin Options.   (line  157)
49823* mcoreb:                                Blackfin Options.   (line  164)
49824* mcpu <1>:                              ARC Options.        (line   14)
49825* mcpu <2>:                              RX Options.         (line   30)
49826* mcpu <3>:                              x86 Options.        (line  282)
49827* mcpu <4>:                              RS/6000 and PowerPC Options.
49828                                                             (line   69)
49829* mcpu <5>:                              ARM Options.        (line  130)
49830* mcpu <6>:                              AArch64 Options.    (line  112)
49831* mcpu <7>:                              DEC Alpha Options.  (line  215)
49832* mcpu <8>:                              M680x0 Options.     (line   28)
49833* mcpu <9>:                              SPARC Options.      (line  102)
49834* mcpu <10>:                             TILEPro Options.    (line    9)
49835* mcpu <11>:                             Visium Options.     (line   33)
49836* mcpu <12>:                             FRV Options.        (line  212)
49837* mcpu <13>:                             picoChip Options.   (line    9)
49838* mcpu <14>:                             TILE-Gx Options.    (line   18)
49839* mcpu:                                  CRIS Options.       (line   10)
49840* mcpu32:                                M680x0 Options.     (line  138)
49841* mcpu= <1>:                             M32C Options.       (line    7)
49842* mcpu= <2>:                             MicroBlaze Options. (line   20)
49843* mcpu= <3>:                             Blackfin Options.   (line    7)
49844* mcpu=:                                 MSP430 Options.     (line   34)
49845* mcr16c:                                CR16 Options.       (line   14)
49846* mcr16cplus:                            CR16 Options.       (line   14)
49847* mcrc32:                                x86 Options.        (line  715)
49848* mcrypto:                               RS/6000 and PowerPC Options.
49849                                                             (line  224)
49850* mcsync-anomaly:                        Blackfin Options.   (line   60)
49851* mctor-dtor:                            NDS32 Options.      (line   71)
49852* mcustom-fpu-cfg:                       Nios II Options.    (line  220)
49853* mcustom-INSN:                          Nios II Options.    (line   99)
49854* mcx16:                                 x86 Options.        (line  692)
49855* MD:                                    Preprocessor Options.
49856                                                             (line  274)
49857* mdalign:                               SH Options.         (line  153)
49858* mdata-align:                           CRIS Options.       (line   55)
49859* mdata-model:                           CR16 Options.       (line   28)
49860* mdc:                                   MeP Options.        (line   62)
49861* mdebug <1>:                            S/390 and zSeries Options.
49862                                                             (line  112)
49863* mdebug <2>:                            Visium Options.     (line    7)
49864* mdebug:                                M32R/D Options.     (line   69)
49865* mdebug-main=PREFIX:                    VMS Options.        (line   13)
49866* mdec-asm:                              PDP-11 Options.     (line   72)
49867* mdirect-move:                          RS/6000 and PowerPC Options.
49868                                                             (line  230)
49869* mdisable-callt:                        V850 Options.       (line   92)
49870* mdisable-fpregs:                       HPPA Options.       (line   27)
49871* mdisable-indexing:                     HPPA Options.       (line   33)
49872* mdiv <1>:                              M680x0 Options.     (line  209)
49873* mdiv <2>:                              MCore Options.      (line   15)
49874* mdiv:                                  MeP Options.        (line   65)
49875* mdiv=STRATEGY:                         SH Options.         (line  308)
49876* mdivide-breaks:                        MIPS Options.       (line  557)
49877* mdivide-enabled:                       LM32 Options.       (line   12)
49878* mdivide-traps:                         MIPS Options.       (line  557)
49879* mdivsi3_libfunc=NAME:                  SH Options.         (line  406)
49880* mdll:                                  x86 Windows Options.
49881                                                             (line   16)
49882* mdlmzb:                                RS/6000 and PowerPC Options.
49883                                                             (line  475)
49884* mdmx:                                  MIPS Options.       (line  378)
49885* mdouble:                               FRV Options.        (line   38)
49886* mdouble-float <1>:                     MIPS Options.       (line  290)
49887* mdouble-float:                         RS/6000 and PowerPC Options.
49888                                                             (line  398)
49889* mdpfp:                                 ARC Options.        (line   30)
49890* mdpfp-compact:                         ARC Options.        (line   31)
49891* mdpfp-fast:                            ARC Options.        (line   35)
49892* mdpfp_compact:                         ARC Options.        (line  366)
49893* mdpfp_fast:                            ARC Options.        (line  369)
49894* mdsp:                                  MIPS Options.       (line  355)
49895* mdsp-packa:                            ARC Options.        (line   89)
49896* mdsp_packa:                            ARC Options.        (line  372)
49897* mdspr2:                                MIPS Options.       (line  361)
49898* mdual-nops:                            SPU Options.        (line   90)
49899* mdump-tune-features:                   x86 Options.        (line  649)
49900* mdvbf:                                 ARC Options.        (line   93)
49901* mdwarf2-asm:                           IA-64 Options.      (line   94)
49902* mdword:                                FRV Options.        (line   32)
49903* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
49904                                                             (line  535)
49905* mEA:                                   ARC Options.        (line  375)
49906* mea:                                   ARC Options.        (line   43)
49907* mea32:                                 SPU Options.        (line   55)
49908* mea64:                                 SPU Options.        (line   55)
49909* meabi:                                 RS/6000 and PowerPC Options.
49910                                                             (line  712)
49911* mearly-cbranchsi:                      ARC Options.        (line  231)
49912* mearly-stop-bits:                      IA-64 Options.      (line  100)
49913* meb <1>:                               Nios II Options.    (line   67)
49914* meb <2>:                               MeP Options.        (line   68)
49915* meb <3>:                               Moxie Options.      (line    7)
49916* meb:                                   Score Options.      (line    9)
49917* mel <1>:                               Score Options.      (line   12)
49918* mel <2>:                               Moxie Options.      (line   11)
49919* mel <3>:                               Nios II Options.    (line   67)
49920* mel:                                   MeP Options.        (line   71)
49921* melf <1>:                              MMIX Options.       (line   44)
49922* melf:                                  CRIS Options.       (line   87)
49923* memb:                                  RS/6000 and PowerPC Options.
49924                                                             (line  707)
49925* membedded-data:                        MIPS Options.       (line  498)
49926* memregs=:                              M32C Options.       (line   21)
49927* mep:                                   V850 Options.       (line   16)
49928* mepilogue-cfi:                         ARC Options.        (line  157)
49929* mepsilon:                              MMIX Options.       (line   15)
49930* merror-reloc:                          SPU Options.        (line   10)
49931* mesa:                                  S/390 and zSeries Options.
49932                                                             (line   95)
49933* metrax100:                             CRIS Options.       (line   26)
49934* metrax4:                               CRIS Options.       (line   26)
49935* meva:                                  MIPS Options.       (line  405)
49936* mexpand-adddi:                         ARC Options.        (line  234)
49937* mexplicit-relocs <1>:                  DEC Alpha Options.  (line  176)
49938* mexplicit-relocs:                      MIPS Options.       (line  542)
49939* mexr:                                  H8/300 Options.     (line   28)
49940* mextern-sdata:                         MIPS Options.       (line  460)
49941* MF:                                    Preprocessor Options.
49942                                                             (line  220)
49943* mf16c:                                 x86 Options.        (line  602)
49944* mfast-fp:                              Blackfin Options.   (line  133)
49945* mfast-indirect-calls:                  HPPA Options.       (line   45)
49946* mfast-sw-div:                          Nios II Options.    (line   84)
49947* mfaster-structs:                       SPARC Options.      (line   92)
49948* mfdpic:                                FRV Options.        (line   56)
49949* mfentry:                               x86 Options.        (line  907)
49950* mfix:                                  DEC Alpha Options.  (line  163)
49951* mfix-24k:                              MIPS Options.       (line  617)
49952* mfix-and-continue:                     Darwin Options.     (line  104)
49953* mfix-at697f:                           SPARC Options.      (line  244)
49954* mfix-cortex-a53-835769:                AArch64 Options.    (line   67)
49955* mfix-cortex-a53-843419:                AArch64 Options.    (line   74)
49956* mfix-cortex-m3-ldrd:                   ARM Options.        (line  319)
49957* mfix-r10000:                           MIPS Options.       (line  644)
49958* mfix-r4000:                            MIPS Options.       (line  623)
49959* mfix-r4400:                            MIPS Options.       (line  637)
49960* mfix-rm7000:                           MIPS Options.       (line  655)
49961* mfix-sb1:                              MIPS Options.       (line  681)
49962* mfix-ut699:                            SPARC Options.      (line  249)
49963* mfix-vr4120:                           MIPS Options.       (line  660)
49964* mfix-vr4130:                           MIPS Options.       (line  674)
49965* mfixed-cc:                             FRV Options.        (line   28)
49966* mfixed-range <1>:                      SH Options.         (line  413)
49967* mfixed-range <2>:                      IA-64 Options.      (line  105)
49968* mfixed-range <3>:                      SPU Options.        (line   47)
49969* mfixed-range:                          HPPA Options.       (line   52)
49970* mflat:                                 SPARC Options.      (line   22)
49971* mflip-mips16:                          MIPS Options.       (line  128)
49972* mfloat-abi:                            ARM Options.        (line   41)
49973* mfloat-gprs:                           RS/6000 and PowerPC Options.
49974                                                             (line  286)
49975* mfloat-ieee:                           DEC Alpha Options.  (line  171)
49976* mfloat-vax:                            DEC Alpha Options.  (line  171)
49977* mfloat32:                              PDP-11 Options.     (line   52)
49978* mfloat64:                              PDP-11 Options.     (line   48)
49979* mflush-func:                           MIPS Options.       (line  748)
49980* mflush-func=NAME:                      M32R/D Options.     (line   93)
49981* mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
49982* mfma:                                  x86 Options.        (line  603)
49983* mfmaf:                                 SPARC Options.      (line  238)
49984* mfmovd:                                SH Options.         (line  169)
49985* mforce-no-pic:                         Xtensa Options.     (line   41)
49986* mfp-exceptions:                        MIPS Options.       (line  775)
49987* mfp-mode:                              Adapteva Epiphany Options.
49988                                                             (line   72)
49989* mfp-reg:                               DEC Alpha Options.  (line   25)
49990* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
49991* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
49992* mfp16-format:                          ARM Options.        (line  171)
49993* mfp32:                                 MIPS Options.       (line  260)
49994* mfp64:                                 MIPS Options.       (line  263)
49995* mfpmath <1>:                           Optimize Options.   (line 2068)
49996* mfpmath:                               x86 Options.        (line  285)
49997* mfpr-32:                               FRV Options.        (line   13)
49998* mfpr-64:                               FRV Options.        (line   16)
49999* mfprnd:                                RS/6000 and PowerPC Options.
50000                                                             (line   27)
50001* mfpu <1>:                              ARM Options.        (line  150)
50002* mfpu <2>:                              PDP-11 Options.     (line    9)
50003* mfpu <3>:                              RS/6000 and PowerPC Options.
50004                                                             (line  406)
50005* mfpu <4>:                              Visium Options.     (line   19)
50006* mfpu:                                  SPARC Options.      (line   35)
50007* mfpxx:                                 MIPS Options.       (line  266)
50008* mfriz:                                 RS/6000 and PowerPC Options.
50009                                                             (line  915)
50010* mfsca:                                 SH Options.         (line  497)
50011* mfsgsbase:                             x86 Options.        (line  600)
50012* mfsrra:                                SH Options.         (line  506)
50013* mfull-regs:                            NDS32 Options.      (line   18)
50014* mfull-toc:                             RS/6000 and PowerPC Options.
50015                                                             (line  314)
50016* mfused-madd <1>:                       RS/6000 and PowerPC Options.
50017                                                             (line  459)
50018* mfused-madd <2>:                       S/390 and zSeries Options.
50019                                                             (line  137)
50020* mfused-madd <3>:                       Xtensa Options.     (line   19)
50021* mfused-madd <4>:                       SH Options.         (line  488)
50022* mfused-madd <5>:                       MIPS Options.       (line  599)
50023* mfused-madd:                           IA-64 Options.      (line   88)
50024* mfxsr:                                 x86 Options.        (line  615)
50025* mg:                                    VAX Options.        (line   17)
50026* MG:                                    Preprocessor Options.
50027                                                             (line  229)
50028* mgas:                                  HPPA Options.       (line   68)
50029* mgcc-abi:                              V850 Options.       (line  148)
50030* mgen-cell-microcode:                   RS/6000 and PowerPC Options.
50031                                                             (line  177)
50032* mgeneral-regs-only:                    AArch64 Options.    (line   24)
50033* mgettrcost=NUMBER:                     SH Options.         (line  430)
50034* mghs:                                  V850 Options.       (line  127)
50035* mglibc:                                GNU/Linux Options.  (line    9)
50036* mgnu:                                  VAX Options.        (line   13)
50037* mgnu-as:                               IA-64 Options.      (line   18)
50038* mgnu-ld <1>:                           IA-64 Options.      (line   23)
50039* mgnu-ld:                               HPPA Options.       (line  104)
50040* mgotplt:                               CRIS Options.       (line   81)
50041* mgp32:                                 MIPS Options.       (line  254)
50042* mgp64:                                 MIPS Options.       (line  257)
50043* mgpopt <1>:                            Nios II Options.    (line   17)
50044* mgpopt:                                MIPS Options.       (line  483)
50045* mgpr-32:                               FRV Options.        (line    7)
50046* mgpr-64:                               FRV Options.        (line   10)
50047* mgprel-ro:                             FRV Options.        (line   79)
50048* mh:                                    H8/300 Options.     (line   14)
50049* mhal:                                  Nios II Options.    (line  266)
50050* mhalf-reg-file:                        Adapteva Epiphany Options.
50051                                                             (line    9)
50052* mhard-dfp <1>:                         RS/6000 and PowerPC Options.
50053                                                             (line   27)
50054* mhard-dfp:                             S/390 and zSeries Options.
50055                                                             (line   20)
50056* mhard-float <1>:                       SPARC Options.      (line   35)
50057* mhard-float <2>:                       MicroBlaze Options. (line   10)
50058* mhard-float <3>:                       RS/6000 and PowerPC Options.
50059                                                             (line  392)
50060* mhard-float <4>:                       S/390 and zSeries Options.
50061                                                             (line   11)
50062* mhard-float <5>:                       FRV Options.        (line   19)
50063* mhard-float <6>:                       Visium Options.     (line   19)
50064* mhard-float <7>:                       M680x0 Options.     (line  197)
50065* mhard-float <8>:                       MIPS Options.       (line  269)
50066* mhard-float:                           V850 Options.       (line  113)
50067* mhard-quad-float:                      SPARC Options.      (line   56)
50068* mhardlit:                              MCore Options.      (line   10)
50069* mhint-max-distance:                    SPU Options.        (line  102)
50070* mhint-max-nops:                        SPU Options.        (line   96)
50071* mhotpatch:                             S/390 and zSeries Options.
50072                                                             (line  173)
50073* mhp-ld:                                HPPA Options.       (line  116)
50074* mhw-div:                               Nios II Options.    (line   93)
50075* mhw-mul:                               Nios II Options.    (line   93)
50076* mhw-mulx:                              Nios II Options.    (line   93)
50077* mhwmult=:                              MSP430 Options.     (line   55)
50078* micplb:                                Blackfin Options.   (line  178)
50079* mid-shared-library:                    Blackfin Options.   (line   81)
50080* mieee <1>:                             SH Options.         (line  186)
50081* mieee:                                 DEC Alpha Options.  (line   39)
50082* mieee-conformant:                      DEC Alpha Options.  (line  134)
50083* mieee-fp:                              x86 Options.        (line  342)
50084* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
50085* milp32:                                IA-64 Options.      (line  121)
50086* mimadd:                                MIPS Options.       (line  592)
50087* mimpure-text:                          Solaris 2 Options.  (line   16)
50088* mincoming-stack-boundary:              x86 Options.        (line  556)
50089* mindexed-addressing:                   SH Options.         (line  420)
50090* mindexed-loads:                        ARC Options.        (line  238)
50091* minline-all-stringops:                 x86 Options.        (line  839)
50092* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
50093* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
50094* minline-ic_invalidate:                 SH Options.         (line  195)
50095* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
50096* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
50097* minline-plt <1>:                       Blackfin Options.   (line  138)
50098* minline-plt:                           FRV Options.        (line   64)
50099* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
50100* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
50101* minline-stringops-dynamically:         x86 Options.        (line  846)
50102* minrt:                                 MSP430 Options.     (line   77)
50103* minsert-sched-nops:                    RS/6000 and PowerPC Options.
50104                                                             (line  575)
50105* mint-register:                         RX Options.         (line  100)
50106* mint16:                                PDP-11 Options.     (line   40)
50107* mint32 <1>:                            H8/300 Options.     (line   38)
50108* mint32 <2>:                            PDP-11 Options.     (line   44)
50109* mint32:                                CR16 Options.       (line   22)
50110* mint8:                                 AVR Options.        (line  171)
50111* minterlink-compressed:                 MIPS Options.       (line  136)
50112* minterlink-mips16:                     MIPS Options.       (line  148)
50113* minvalid-symbols:                      SH Options.         (line  456)
50114* mio-volatile:                          MeP Options.        (line   74)
50115* mips1:                                 MIPS Options.       (line   80)
50116* mips16:                                MIPS Options.       (line  120)
50117* mips2:                                 MIPS Options.       (line   83)
50118* mips3:                                 MIPS Options.       (line   86)
50119* mips32:                                MIPS Options.       (line   92)
50120* mips32r3:                              MIPS Options.       (line   95)
50121* mips32r5:                              MIPS Options.       (line   98)
50122* mips32r6:                              MIPS Options.       (line  101)
50123* mips3d:                                MIPS Options.       (line  384)
50124* mips4:                                 MIPS Options.       (line   89)
50125* mips64:                                MIPS Options.       (line  104)
50126* mips64r2:                              MIPS Options.       (line  107)
50127* mips64r3:                              MIPS Options.       (line  110)
50128* mips64r5:                              MIPS Options.       (line  113)
50129* mips64r6:                              MIPS Options.       (line  116)
50130* misel:                                 RS/6000 and PowerPC Options.
50131                                                             (line  195)
50132* misize <1>:                            SH Options.         (line  207)
50133* misize:                                ARC Options.        (line  132)
50134* misr-vector-size:                      NDS32 Options.      (line   45)
50135* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
50136* mivc2:                                 MeP Options.        (line   59)
50137* mjump-in-delay:                        HPPA Options.       (line   23)
50138* mkernel:                               Darwin Options.     (line   82)
50139* mknuthdiv:                             MMIX Options.       (line   33)
50140* ml <1>:                                MeP Options.        (line   78)
50141* ml:                                    SH Options.         (line  150)
50142* mlarge:                                MSP430 Options.     (line   44)
50143* mlarge-data:                           DEC Alpha Options.  (line  187)
50144* mlarge-data-threshold:                 x86 Options.        (line  442)
50145* mlarge-mem:                            SPU Options.        (line   35)
50146* mlarge-text:                           DEC Alpha Options.  (line  205)
50147* mleadz:                                MeP Options.        (line   81)
50148* mleaf-id-shared-library:               Blackfin Options.   (line   92)
50149* mlibfuncs:                             MMIX Options.       (line   10)
50150* mlibrary-pic:                          FRV Options.        (line  110)
50151* mlinked-fp:                            FRV Options.        (line   94)
50152* mlinker-opt:                           HPPA Options.       (line   78)
50153* mlinux:                                CRIS Options.       (line   91)
50154* mlittle:                               RS/6000 and PowerPC Options.
50155                                                             (line  524)
50156* mlittle-endian <1>:                    NDS32 Options.      (line   12)
50157* mlittle-endian <2>:                    MicroBlaze Options. (line   60)
50158* mlittle-endian <3>:                    C6X Options.        (line   16)
50159* mlittle-endian <4>:                    AArch64 Options.    (line   27)
50160* mlittle-endian <5>:                    MCore Options.      (line   39)
50161* mlittle-endian <6>:                    IA-64 Options.      (line   13)
50162* mlittle-endian <7>:                    ARM Options.        (line   57)
50163* mlittle-endian <8>:                    RS/6000 and PowerPC Options.
50164                                                             (line  524)
50165* mlittle-endian <9>:                    ARC Options.        (line  356)
50166* mlittle-endian:                        TILE-Gx Options.    (line   29)
50167* mlittle-endian-data:                   RX Options.         (line   42)
50168* mliw:                                  MN10300 Options.    (line   54)
50169* mllsc:                                 MIPS Options.       (line  341)
50170* mlocal-sdata:                          MIPS Options.       (line  448)
50171* mlock:                                 ARC Options.        (line   97)
50172* mlong-calls <1>:                       MIPS Options.       (line  578)
50173* mlong-calls <2>:                       ARC Options.        (line  163)
50174* mlong-calls <3>:                       Blackfin Options.   (line  121)
50175* mlong-calls <4>:                       FRV Options.        (line   99)
50176* mlong-calls <5>:                       V850 Options.       (line   10)
50177* mlong-calls <6>:                       Adapteva Epiphany Options.
50178                                                             (line   55)
50179* mlong-calls:                           ARM Options.        (line  196)
50180* mlong-double-128 <1>:                  S/390 and zSeries Options.
50181                                                             (line   29)
50182* mlong-double-128:                      x86 Options.        (line  422)
50183* mlong-double-64 <1>:                   S/390 and zSeries Options.
50184                                                             (line   29)
50185* mlong-double-64:                       x86 Options.        (line  422)
50186* mlong-double-80:                       x86 Options.        (line  422)
50187* mlong-jumps:                           V850 Options.       (line  108)
50188* mlong-load-store:                      HPPA Options.       (line   59)
50189* mlong32:                               MIPS Options.       (line  423)
50190* mlong64:                               MIPS Options.       (line  418)
50191* mlongcall:                             RS/6000 and PowerPC Options.
50192                                                             (line  784)
50193* mlongcalls:                            Xtensa Options.     (line   72)
50194* mloop:                                 V850 Options.       (line  121)
50195* mlow-64k:                              Blackfin Options.   (line   70)
50196* mlp64:                                 IA-64 Options.      (line  121)
50197* mlra:                                  ARC Options.        (line  243)
50198* mlra-priority-compact:                 ARC Options.        (line  251)
50199* mlra-priority-noncompact:              ARC Options.        (line  254)
50200* mlra-priority-none:                    ARC Options.        (line  248)
50201* mlwp:                                  x86 Options.        (line  608)
50202* mlzcnt:                                x86 Options.        (line  614)
50203* mm:                                    MeP Options.        (line   84)
50204* MM:                                    Preprocessor Options.
50205                                                             (line  210)
50206* mmac <1>:                              CR16 Options.       (line    9)
50207* mmac:                                  Score Options.      (line   21)
50208* mmac-24:                               ARC Options.        (line  106)
50209* mmac-d16:                              ARC Options.        (line  102)
50210* mmac_24:                               ARC Options.        (line  378)
50211* mmac_d16:                              ARC Options.        (line  381)
50212* mmad:                                  MIPS Options.       (line  587)
50213* mmainkernel:                           Nvidia PTX Options. (line   13)
50214* mmalloc64:                             VMS Options.        (line   17)
50215* mmax:                                  DEC Alpha Options.  (line  163)
50216* mmax-constant-size:                    RX Options.         (line   82)
50217* mmax-stack-frame:                      CRIS Options.       (line   22)
50218* mmcount-ra-address:                    MIPS Options.       (line  823)
50219* mmcu <1>:                              AVR Options.        (line    9)
50220* mmcu:                                  MIPS Options.       (line  401)
50221* mmcu=:                                 MSP430 Options.     (line   14)
50222* MMD:                                   Preprocessor Options.
50223                                                             (line  290)
50224* mmedia:                                FRV Options.        (line   44)
50225* mmedium-calls:                         ARC Options.        (line  167)
50226* mmemcpy <1>:                           MicroBlaze Options. (line   13)
50227* mmemcpy:                               MIPS Options.       (line  572)
50228* mmemcpy-strategy=STRATEGY:             x86 Options.        (line  868)
50229* mmemory-latency:                       DEC Alpha Options.  (line  268)
50230* mmemory-model:                         SPARC Options.      (line  290)
50231* mmemset-strategy=STRATEGY:             x86 Options.        (line  880)
50232* mmfcrf:                                RS/6000 and PowerPC Options.
50233                                                             (line   27)
50234* mmfpgpr:                               RS/6000 and PowerPC Options.
50235                                                             (line   27)
50236* mmicromips:                            MIPS Options.       (line  389)
50237* mminimal-toc:                          RS/6000 and PowerPC Options.
50238                                                             (line  314)
50239* mminmax:                               MeP Options.        (line   87)
50240* mmixed-code:                           ARC Options.        (line  266)
50241* mmmx:                                  x86 Options.        (line  581)
50242* mmodel=large:                          M32R/D Options.     (line   33)
50243* mmodel=medium:                         M32R/D Options.     (line   27)
50244* mmodel=small:                          M32R/D Options.     (line   18)
50245* mmovbe:                                x86 Options.        (line  711)
50246* mmpx:                                  x86 Options.        (line  622)
50247* mmt:                                   MIPS Options.       (line  397)
50248* mmul:                                  RL78 Options.       (line   13)
50249* mmul-bug-workaround:                   CRIS Options.       (line   31)
50250* mmul.x:                                Moxie Options.      (line   14)
50251* mmul32x16:                             ARC Options.        (line   51)
50252* mmul64:                                ARC Options.        (line   54)
50253* mmuladd:                               FRV Options.        (line   50)
50254* mmulhw:                                RS/6000 and PowerPC Options.
50255                                                             (line  468)
50256* mmult:                                 MeP Options.        (line   90)
50257* mmult-bug:                             MN10300 Options.    (line    9)
50258* mmultcost:                             ARC Options.        (line  330)
50259* mmulti-cond-exec:                      FRV Options.        (line  176)
50260* mmulticore:                            Blackfin Options.   (line  142)
50261* mmultiple:                             RS/6000 and PowerPC Options.
50262                                                             (line  418)
50263* mmvcle:                                S/390 and zSeries Options.
50264                                                             (line  105)
50265* mmvme:                                 RS/6000 and PowerPC Options.
50266                                                             (line  688)
50267* mmwaitx:                               x86 Options.        (line  623)
50268* mn:                                    H8/300 Options.     (line   20)
50269* mn-flash:                              AVR Options.        (line  177)
50270* mnan=2008:                             MIPS Options.       (line  322)
50271* mnan=legacy:                           MIPS Options.       (line  322)
50272* mneon-for-64bits:                      ARM Options.        (line  339)
50273* mnested-cond-exec:                     FRV Options.        (line  189)
50274* mnhwloop:                              Score Options.      (line   15)
50275* mno-16-bit:                            NDS32 Options.      (line   42)
50276* mno-4byte-functions:                   MCore Options.      (line   27)
50277* mno-8byte-align:                       V850 Options.       (line  170)
50278* mno-abicalls:                          MIPS Options.       (line  194)
50279* mno-abshi:                             PDP-11 Options.     (line   58)
50280* mno-ac0:                               PDP-11 Options.     (line   20)
50281* mno-address-space-conversion:          SPU Options.        (line   63)
50282* mno-align-double:                      x86 Options.        (line  380)
50283* mno-align-int:                         M680x0 Options.     (line  267)
50284* mno-align-loops:                       M32R/D Options.     (line   76)
50285* mno-align-stringops:                   x86 Options.        (line  834)
50286* mno-altivec:                           RS/6000 and PowerPC Options.
50287                                                             (line  136)
50288* mno-am33:                              MN10300 Options.    (line   20)
50289* mno-app-regs <1>:                      V850 Options.       (line  185)
50290* mno-app-regs:                          SPARC Options.      (line   10)
50291* mno-as100-syntax:                      RX Options.         (line   76)
50292* mno-atomic-updates:                    SPU Options.        (line   78)
50293* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
50294                                                             (line  450)
50295* mno-backchain:                         S/390 and zSeries Options.
50296                                                             (line   35)
50297* mno-base-addresses:                    MMIX Options.       (line   54)
50298* mno-bit-align:                         RS/6000 and PowerPC Options.
50299                                                             (line  482)
50300* mno-bitfield:                          M680x0 Options.     (line  231)
50301* mno-branch-likely:                     MIPS Options.       (line  764)
50302* mno-branch-predict:                    MMIX Options.       (line   49)
50303* mno-brcc:                              ARC Options.        (line  203)
50304* mno-bwx:                               DEC Alpha Options.  (line  163)
50305* mno-bypass-cache:                      Nios II Options.    (line   72)
50306* mno-cache-volatile:                    Nios II Options.    (line   78)
50307* mno-callgraph-data:                    MCore Options.      (line   31)
50308* mno-cbcond:                            SPARC Options.      (line  224)
50309* mno-check-zero-division:               MIPS Options.       (line  551)
50310* mno-cix:                               DEC Alpha Options.  (line  163)
50311* mno-clearbss:                          MicroBlaze Options. (line   16)
50312* mno-cmov:                              NDS32 Options.      (line   24)
50313* mno-cmpb:                              RS/6000 and PowerPC Options.
50314                                                             (line   27)
50315* mno-cond-exec <1>:                     ARC Options.        (line  215)
50316* mno-cond-exec:                         FRV Options.        (line  158)
50317* mno-cond-move:                         FRV Options.        (line  134)
50318* mno-const-align:                       CRIS Options.       (line   55)
50319* mno-const16:                           Xtensa Options.     (line   10)
50320* mno-crt0 <1>:                          MN10300 Options.    (line   43)
50321* mno-crt0:                              Moxie Options.      (line   18)
50322* mno-crypto:                            RS/6000 and PowerPC Options.
50323                                                             (line  224)
50324* mno-csync-anomaly:                     Blackfin Options.   (line   66)
50325* mno-custom-INSN:                       Nios II Options.    (line   99)
50326* mno-data-align:                        CRIS Options.       (line   55)
50327* mno-debug:                             S/390 and zSeries Options.
50328                                                             (line  112)
50329* mno-default:                           x86 Options.        (line  664)
50330* mno-direct-move:                       RS/6000 and PowerPC Options.
50331                                                             (line  230)
50332* mno-disable-callt:                     V850 Options.       (line   92)
50333* mno-div <1>:                           M680x0 Options.     (line  209)
50334* mno-div:                               MCore Options.      (line   15)
50335* mno-dlmzb:                             RS/6000 and PowerPC Options.
50336                                                             (line  475)
50337* mno-double:                            FRV Options.        (line   41)
50338* mno-dpfp-lrsr:                         ARC Options.        (line   39)
50339* mno-dsp:                               MIPS Options.       (line  355)
50340* mno-dspr2:                             MIPS Options.       (line  361)
50341* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
50342* mno-dword:                             FRV Options.        (line   35)
50343* mno-eabi:                              RS/6000 and PowerPC Options.
50344                                                             (line  712)
50345* mno-early-stop-bits:                   IA-64 Options.      (line  100)
50346* mno-eflags:                            FRV Options.        (line  125)
50347* mno-embedded-data:                     MIPS Options.       (line  498)
50348* mno-ep:                                V850 Options.       (line   16)
50349* mno-epilogue-cfi:                      ARC Options.        (line  160)
50350* mno-epsilon:                           MMIX Options.       (line   15)
50351* mno-eva:                               MIPS Options.       (line  405)
50352* mno-explicit-relocs <1>:               DEC Alpha Options.  (line  176)
50353* mno-explicit-relocs:                   MIPS Options.       (line  542)
50354* mno-exr:                               H8/300 Options.     (line   33)
50355* mno-extern-sdata:                      MIPS Options.       (line  460)
50356* mno-fancy-math-387:                    x86 Options.        (line  370)
50357* mno-fast-sw-div:                       Nios II Options.    (line   84)
50358* mno-faster-structs:                    SPARC Options.      (line   92)
50359* mno-fix:                               DEC Alpha Options.  (line  163)
50360* mno-fix-24k:                           MIPS Options.       (line  617)
50361* mno-fix-cortex-a53-835769:             AArch64 Options.    (line   67)
50362* mno-fix-cortex-a53-843419:             AArch64 Options.    (line   74)
50363* mno-fix-r10000:                        MIPS Options.       (line  644)
50364* mno-fix-r4000:                         MIPS Options.       (line  623)
50365* mno-fix-r4400:                         MIPS Options.       (line  637)
50366* mno-flat:                              SPARC Options.      (line   22)
50367* mno-float:                             MIPS Options.       (line  276)
50368* mno-float32:                           PDP-11 Options.     (line   48)
50369* mno-float64:                           PDP-11 Options.     (line   52)
50370* mno-flush-func:                        M32R/D Options.     (line   98)
50371* mno-flush-trap:                        M32R/D Options.     (line   90)
50372* mno-fmaf:                              SPARC Options.      (line  238)
50373* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
50374                                                             (line  314)
50375* mno-fp-regs:                           DEC Alpha Options.  (line   25)
50376* mno-fp-ret-in-387:                     x86 Options.        (line  360)
50377* mno-fprnd:                             RS/6000 and PowerPC Options.
50378                                                             (line   27)
50379* mno-fpu <1>:                           Visium Options.     (line   24)
50380* mno-fpu:                               SPARC Options.      (line   40)
50381* mno-fsca:                              SH Options.         (line  497)
50382* mno-fsrra:                             SH Options.         (line  506)
50383* mno-fused-madd <1>:                    Xtensa Options.     (line   19)
50384* mno-fused-madd <2>:                    S/390 and zSeries Options.
50385                                                             (line  137)
50386* mno-fused-madd <3>:                    IA-64 Options.      (line   88)
50387* mno-fused-madd <4>:                    SH Options.         (line  488)
50388* mno-fused-madd <5>:                    RS/6000 and PowerPC Options.
50389                                                             (line  459)
50390* mno-fused-madd:                        MIPS Options.       (line  599)
50391* mno-gnu-as:                            IA-64 Options.      (line   18)
50392* mno-gnu-ld:                            IA-64 Options.      (line   23)
50393* mno-gotplt:                            CRIS Options.       (line   81)
50394* mno-gpopt <1>:                         Nios II Options.    (line   17)
50395* mno-gpopt:                             MIPS Options.       (line  483)
50396* mno-hard-dfp <1>:                      S/390 and zSeries Options.
50397                                                             (line   20)
50398* mno-hard-dfp:                          RS/6000 and PowerPC Options.
50399                                                             (line   27)
50400* mno-hardlit:                           MCore Options.      (line   10)
50401* mno-hw-div:                            Nios II Options.    (line   93)
50402* mno-hw-mul:                            Nios II Options.    (line   93)
50403* mno-hw-mulx:                           Nios II Options.    (line   93)
50404* mno-id-shared-library:                 Blackfin Options.   (line   88)
50405* mno-ieee:                              SH Options.         (line  186)
50406* mno-ieee-fp:                           x86 Options.        (line  342)
50407* mno-imadd:                             MIPS Options.       (line  592)
50408* mno-inline-float-divide:               IA-64 Options.      (line   62)
50409* mno-inline-int-divide:                 IA-64 Options.      (line   73)
50410* mno-inline-sqrt:                       IA-64 Options.      (line   84)
50411* mno-int16:                             PDP-11 Options.     (line   44)
50412* mno-int32:                             PDP-11 Options.     (line   40)
50413* mno-interlink-compressed:              MIPS Options.       (line  136)
50414* mno-interlink-mips16:                  MIPS Options.       (line  148)
50415* mno-interrupts:                        AVR Options.        (line  180)
50416* mno-isel:                              RS/6000 and PowerPC Options.
50417                                                             (line  195)
50418* mno-knuthdiv:                          MMIX Options.       (line   33)
50419* mno-leaf-id-shared-library:            Blackfin Options.   (line   98)
50420* mno-libfuncs:                          MMIX Options.       (line   10)
50421* mno-llsc:                              MIPS Options.       (line  341)
50422* mno-local-sdata:                       MIPS Options.       (line  448)
50423* mno-long-calls <1>:                    ARM Options.        (line  196)
50424* mno-long-calls <2>:                    HPPA Options.       (line  129)
50425* mno-long-calls <3>:                    Blackfin Options.   (line  121)
50426* mno-long-calls <4>:                    V850 Options.       (line   10)
50427* mno-long-calls:                        MIPS Options.       (line  578)
50428* mno-long-jumps:                        V850 Options.       (line  108)
50429* mno-longcall:                          RS/6000 and PowerPC Options.
50430                                                             (line  784)
50431* mno-longcalls:                         Xtensa Options.     (line   72)
50432* mno-low-64k:                           Blackfin Options.   (line   74)
50433* mno-lsim <1>:                          MCore Options.      (line   46)
50434* mno-lsim:                              FR30 Options.       (line   14)
50435* mno-mad:                               MIPS Options.       (line  587)
50436* mno-max:                               DEC Alpha Options.  (line  163)
50437* mno-mcount-ra-address:                 MIPS Options.       (line  823)
50438* mno-mcu:                               MIPS Options.       (line  401)
50439* mno-mdmx:                              MIPS Options.       (line  378)
50440* mno-media:                             FRV Options.        (line   47)
50441* mno-memcpy:                            MIPS Options.       (line  572)
50442* mno-mfcrf:                             RS/6000 and PowerPC Options.
50443                                                             (line   27)
50444* mno-mfpgpr:                            RS/6000 and PowerPC Options.
50445                                                             (line   27)
50446* mno-millicode:                         ARC Options.        (line  257)
50447* mno-mips16:                            MIPS Options.       (line  120)
50448* mno-mips3d:                            MIPS Options.       (line  384)
50449* mno-mmicromips:                        MIPS Options.       (line  389)
50450* mno-mpy:                               ARC Options.        (line   48)
50451* mno-mt:                                MIPS Options.       (line  397)
50452* mno-mul-bug-workaround:                CRIS Options.       (line   31)
50453* mno-muladd:                            FRV Options.        (line   53)
50454* mno-mulhw:                             RS/6000 and PowerPC Options.
50455                                                             (line  468)
50456* mno-mult-bug:                          MN10300 Options.    (line   13)
50457* mno-multi-cond-exec:                   FRV Options.        (line  183)
50458* mno-multiple:                          RS/6000 and PowerPC Options.
50459                                                             (line  418)
50460* mno-mvcle:                             S/390 and zSeries Options.
50461                                                             (line  105)
50462* mno-nested-cond-exec:                  FRV Options.        (line  195)
50463* mno-odd-spreg:                         MIPS Options.       (line  295)
50464* mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   54)
50465* mno-optimize-membar:                   FRV Options.        (line  205)
50466* mno-opts:                              MeP Options.        (line   93)
50467* mno-pack:                              FRV Options.        (line  122)
50468* mno-packed-stack:                      S/390 and zSeries Options.
50469                                                             (line   54)
50470* mno-paired:                            RS/6000 and PowerPC Options.
50471                                                             (line  209)
50472* mno-paired-single:                     MIPS Options.       (line  372)
50473* mno-perf-ext:                          NDS32 Options.      (line   30)
50474* mno-pic:                               IA-64 Options.      (line   26)
50475* mno-pid:                               RX Options.         (line  117)
50476* mno-plt:                               MIPS Options.       (line  221)
50477* mno-popc:                              SPARC Options.      (line  231)
50478* mno-popcntb:                           RS/6000 and PowerPC Options.
50479                                                             (line   27)
50480* mno-popcntd:                           RS/6000 and PowerPC Options.
50481                                                             (line   27)
50482* mno-postinc:                           Adapteva Epiphany Options.
50483                                                             (line  110)
50484* mno-postmodify:                        Adapteva Epiphany Options.
50485                                                             (line  110)
50486* mno-power8-fusion:                     RS/6000 and PowerPC Options.
50487                                                             (line  236)
50488* mno-power8-vector:                     RS/6000 and PowerPC Options.
50489                                                             (line  242)
50490* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
50491                                                             (line   27)
50492* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
50493                                                             (line   27)
50494* mno-powerpc64:                         RS/6000 and PowerPC Options.
50495                                                             (line   27)
50496* mno-prolog-function:                   V850 Options.       (line   23)
50497* mno-prologue-epilogue:                 CRIS Options.       (line   71)
50498* mno-prototype:                         RS/6000 and PowerPC Options.
50499                                                             (line  672)
50500* mno-push-args:                         x86 Options.        (line  811)
50501* mno-quad-memory:                       RS/6000 and PowerPC Options.
50502                                                             (line  249)
50503* mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
50504                                                             (line  255)
50505* mno-red-zone:                          x86 Options.        (line  982)
50506* mno-register-names:                    IA-64 Options.      (line   37)
50507* mno-regnames:                          RS/6000 and PowerPC Options.
50508                                                             (line  778)
50509* mno-relax:                             V850 Options.       (line  103)
50510* mno-relax-immediate:                   MCore Options.      (line   19)
50511* mno-relocatable:                       RS/6000 and PowerPC Options.
50512                                                             (line  498)
50513* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
50514                                                             (line  509)
50515* mno-renesas:                           SH Options.         (line  176)
50516* mno-round-nearest:                     Adapteva Epiphany Options.
50517                                                             (line   51)
50518* mno-rtd:                               M680x0 Options.     (line  262)
50519* mno-scc:                               FRV Options.        (line  146)
50520* mno-sched-ar-data-spec:                IA-64 Options.      (line  134)
50521* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  155)
50522* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
50523* mno-sched-br-in-data-spec:             IA-64 Options.      (line  148)
50524* mno-sched-control-spec:                IA-64 Options.      (line  140)
50525* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  182)
50526* mno-sched-in-control-spec:             IA-64 Options.      (line  162)
50527* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  175)
50528* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  168)
50529* mno-sched-prolog:                      ARM Options.        (line   32)
50530* mno-sdata <1>:                         ARC Options.        (line  175)
50531* mno-sdata <2>:                         IA-64 Options.      (line   42)
50532* mno-sdata:                             RS/6000 and PowerPC Options.
50533                                                             (line  759)
50534* mno-sep-data:                          Blackfin Options.   (line  116)
50535* mno-serialize-volatile:                Xtensa Options.     (line   35)
50536* mno-short:                             M680x0 Options.     (line  226)
50537* mno-side-effects:                      CRIS Options.       (line   46)
50538* mno-sim:                               RX Options.         (line   71)
50539* mno-single-exit:                       MMIX Options.       (line   66)
50540* mno-slow-bytes:                        MCore Options.      (line   35)
50541* mno-small-exec:                        S/390 and zSeries Options.
50542                                                             (line   80)
50543* mno-smartmips:                         MIPS Options.       (line  368)
50544* mno-soft-cmpsf:                        Adapteva Epiphany Options.
50545                                                             (line   29)
50546* mno-soft-float:                        DEC Alpha Options.  (line   10)
50547* mno-space-regs:                        HPPA Options.       (line   38)
50548* mno-spe:                               RS/6000 and PowerPC Options.
50549                                                             (line  204)
50550* mno-specld-anomaly:                    Blackfin Options.   (line   56)
50551* mno-split-addresses:                   MIPS Options.       (line  536)
50552* mno-stack-align:                       CRIS Options.       (line   55)
50553* mno-stack-bias:                        SPARC Options.      (line  314)
50554* mno-strict-align <1>:                  RS/6000 and PowerPC Options.
50555                                                             (line  493)
50556* mno-strict-align:                      M680x0 Options.     (line  287)
50557* mno-string:                            RS/6000 and PowerPC Options.
50558                                                             (line  429)
50559* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
50560                                                             (line  314)
50561* mno-sym32:                             MIPS Options.       (line  433)
50562* mno-target-align:                      Xtensa Options.     (line   59)
50563* mno-text-section-literals:             Xtensa Options.     (line   47)
50564* mno-tls-markers:                       RS/6000 and PowerPC Options.
50565                                                             (line  817)
50566* mno-toc:                               RS/6000 and PowerPC Options.
50567                                                             (line  518)
50568* mno-toplevel-symbols:                  MMIX Options.       (line   40)
50569* mno-tpf-trace:                         S/390 and zSeries Options.
50570                                                             (line  131)
50571* mno-unaligned-access:                  ARM Options.        (line  326)
50572* mno-unaligned-doubles:                 SPARC Options.      (line   74)
50573* mno-uninit-const-in-rodata:            MIPS Options.       (line  506)
50574* mno-update:                            RS/6000 and PowerPC Options.
50575                                                             (line  440)
50576* mno-upper-regs:                        RS/6000 and PowerPC Options.
50577                                                             (line  277)
50578* mno-upper-regs-df:                     RS/6000 and PowerPC Options.
50579                                                             (line  261)
50580* mno-upper-regs-sf:                     RS/6000 and PowerPC Options.
50581                                                             (line  269)
50582* mno-user-mode:                         SPARC Options.      (line   86)
50583* mno-usermode:                          SH Options.         (line  297)
50584* mno-v3push:                            NDS32 Options.      (line   36)
50585* mno-v8plus:                            SPARC Options.      (line  195)
50586* mno-vect-double:                       Adapteva Epiphany Options.
50587                                                             (line  116)
50588* mno-virt:                              MIPS Options.       (line  409)
50589* mno-vis:                               SPARC Options.      (line  202)
50590* mno-vis2:                              SPARC Options.      (line  208)
50591* mno-vis3:                              SPARC Options.      (line  216)
50592* mno-vliw-branch:                       FRV Options.        (line  170)
50593* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
50594* mno-volatile-cache:                    ARC Options.        (line  189)
50595* mno-vrsave:                            RS/6000 and PowerPC Options.
50596                                                             (line  174)
50597* mno-vsx:                               RS/6000 and PowerPC Options.
50598                                                             (line  218)
50599* mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
50600* mno-wide-bitfields:                    MCore Options.      (line   23)
50601* mno-xgot <1>:                          MIPS Options.       (line  231)
50602* mno-xgot:                              M680x0 Options.     (line  319)
50603* mno-xl-compat:                         RS/6000 and PowerPC Options.
50604                                                             (line  349)
50605* mno-xpa:                               MIPS Options.       (line  414)
50606* mno-zdcbranch:                         SH Options.         (line  473)
50607* mno-zero-extend:                       MMIX Options.       (line   27)
50608* mnobitfield:                           M680x0 Options.     (line  231)
50609* mnoliw:                                MN10300 Options.    (line   59)
50610* mnomacsave:                            SH Options.         (line  181)
50611* mnop-fun-dllimport:                    x86 Windows Options.
50612                                                             (line   22)
50613* mnop-mcount:                           x86 Options.        (line  920)
50614* mnops:                                 Adapteva Epiphany Options.
50615                                                             (line   26)
50616* mnorm:                                 ARC Options.        (line   58)
50617* mnosetlb:                              MN10300 Options.    (line   69)
50618* mnosplit-lohi:                         Adapteva Epiphany Options.
50619                                                             (line  110)
50620* modd-spreg:                            MIPS Options.       (line  295)
50621* momit-leaf-frame-pointer <1>:          AArch64 Options.    (line   54)
50622* momit-leaf-frame-pointer <2>:          Blackfin Options.   (line   44)
50623* momit-leaf-frame-pointer:              x86 Options.        (line  884)
50624* mone-byte-bool:                        Darwin Options.     (line   90)
50625* moptimize-membar:                      FRV Options.        (line  201)
50626* MP:                                    Preprocessor Options.
50627                                                             (line  239)
50628* mpa-risc-1-0:                          HPPA Options.       (line   19)
50629* mpa-risc-1-1:                          HPPA Options.       (line   19)
50630* mpa-risc-2-0:                          HPPA Options.       (line   19)
50631* mpack:                                 FRV Options.        (line  119)
50632* mpacked-stack:                         S/390 and zSeries Options.
50633                                                             (line   54)
50634* mpadstruct:                            SH Options.         (line  210)
50635* mpaired:                               RS/6000 and PowerPC Options.
50636                                                             (line  209)
50637* mpaired-single:                        MIPS Options.       (line  372)
50638* mpc32:                                 x86 Options.        (line  505)
50639* mpc64:                                 x86 Options.        (line  505)
50640* mpc80:                                 x86 Options.        (line  505)
50641* mpclmul:                               x86 Options.        (line  598)
50642* mpcrel:                                M680x0 Options.     (line  279)
50643* mpdebug:                               CRIS Options.       (line   35)
50644* mpe:                                   RS/6000 and PowerPC Options.
50645                                                             (line  369)
50646* mpe-aligned-commons:                   x86 Windows Options.
50647                                                             (line   59)
50648* mperf-ext:                             NDS32 Options.      (line   27)
50649* mpic-data-is-text-relative:            ARM Options.        (line  233)
50650* mpic-register:                         ARM Options.        (line  226)
50651* mpid:                                  RX Options.         (line  117)
50652* mplt:                                  MIPS Options.       (line  221)
50653* mpointer-size=SIZE:                    VMS Options.        (line   20)
50654* mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
50655                                                             (line  923)
50656* mpoke-function-name:                   ARM Options.        (line  239)
50657* mpopc:                                 SPARC Options.      (line  231)
50658* mpopcnt:                               x86 Options.        (line  610)
50659* mpopcntb:                              RS/6000 and PowerPC Options.
50660                                                             (line   27)
50661* mpopcntd:                              RS/6000 and PowerPC Options.
50662                                                             (line   27)
50663* mportable-runtime:                     HPPA Options.       (line   64)
50664* mpower8-fusion:                        RS/6000 and PowerPC Options.
50665                                                             (line  236)
50666* mpower8-vector:                        RS/6000 and PowerPC Options.
50667                                                             (line  242)
50668* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
50669                                                             (line   27)
50670* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
50671                                                             (line   27)
50672* mpowerpc64:                            RS/6000 and PowerPC Options.
50673                                                             (line   27)
50674* mprefer-avx128:                        x86 Options.        (line  688)
50675* mprefer-short-insn-regs:               Adapteva Epiphany Options.
50676                                                             (line   13)
50677* mprefergot:                            SH Options.         (line  291)
50678* mpreferred-stack-boundary:             x86 Options.        (line  535)
50679* mprefetchwt1:                          x86 Options.        (line  606)
50680* mpretend-cmove:                        SH Options.         (line  515)
50681* mprint-tune-info:                      ARM Options.        (line  363)
50682* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
50683                                                             (line  547)
50684* mprolog-function:                      V850 Options.       (line   23)
50685* mprologue-epilogue:                    CRIS Options.       (line   71)
50686* mprototype:                            RS/6000 and PowerPC Options.
50687                                                             (line  672)
50688* mpt-fixed:                             SH Options.         (line  434)
50689* mpush-args:                            x86 Options.        (line  811)
50690* MQ:                                    Preprocessor Options.
50691                                                             (line  265)
50692* mq-class:                              ARC Options.        (line  271)
50693* mquad-memory:                          RS/6000 and PowerPC Options.
50694                                                             (line  249)
50695* mquad-memory-atomic:                   RS/6000 and PowerPC Options.
50696                                                             (line  255)
50697* mr10k-cache-barrier:                   MIPS Options.       (line  686)
50698* mRcq:                                  ARC Options.        (line  275)
50699* mRcw:                                  ARC Options.        (line  279)
50700* mrdrnd:                                x86 Options.        (line  601)
50701* mrecip <1>:                            x86 Options.        (line  721)
50702* mrecip:                                RS/6000 and PowerPC Options.
50703                                                             (line  829)
50704* mrecip-precision:                      RS/6000 and PowerPC Options.
50705                                                             (line  887)
50706* mrecip=opt <1>:                        x86 Options.        (line  743)
50707* mrecip=opt:                            RS/6000 and PowerPC Options.
50708                                                             (line  842)
50709* mrecord-mcount:                        x86 Options.        (line  914)
50710* mreduced-regs:                         NDS32 Options.      (line   15)
50711* mregister-names:                       IA-64 Options.      (line   37)
50712* mregnames:                             RS/6000 and PowerPC Options.
50713                                                             (line  778)
50714* mregparm:                              x86 Options.        (line  472)
50715* mrelax <1>:                            MN10300 Options.    (line   46)
50716* mrelax <2>:                            H8/300 Options.     (line    9)
50717* mrelax <3>:                            NDS32 Options.      (line   74)
50718* mrelax <4>:                            SH Options.         (line  158)
50719* mrelax <5>:                            V850 Options.       (line  103)
50720* mrelax <6>:                            MSP430 Options.     (line   50)
50721* mrelax <7>:                            RX Options.         (line   95)
50722* mrelax:                                AVR Options.        (line  184)
50723* mrelax-immediate:                      MCore Options.      (line   19)
50724* mrelax-pic-calls:                      MIPS Options.       (line  810)
50725* mrelocatable:                          RS/6000 and PowerPC Options.
50726                                                             (line  498)
50727* mrelocatable-lib:                      RS/6000 and PowerPC Options.
50728                                                             (line  509)
50729* mrenesas:                              SH Options.         (line  173)
50730* mrepeat:                               MeP Options.        (line   96)
50731* mrestrict-it:                          ARM Options.        (line  357)
50732* mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
50733* mrh850-abi:                            V850 Options.       (line  127)
50734* mrmw:                                  AVR Options.        (line  198)
50735* mrtd <1>:                              x86 Options.        (line  448)
50736* mrtd <2>:                              Function Attributes.
50737                                                             (line  217)
50738* mrtd:                                  M680x0 Options.     (line  240)
50739* mrtm:                                  x86 Options.        (line  620)
50740* mrtp:                                  VxWorks Options.    (line   11)
50741* mrtsc:                                 ARC Options.        (line  110)
50742* ms <1>:                                MeP Options.        (line  100)
50743* ms:                                    H8/300 Options.     (line   17)
50744* ms2600:                                H8/300 Options.     (line   24)
50745* msafe-dma:                             SPU Options.        (line   17)
50746* msafe-hints:                           SPU Options.        (line  107)
50747* msahf:                                 x86 Options.        (line  701)
50748* msatur:                                MeP Options.        (line  105)
50749* msave-acc-in-interrupts:               RX Options.         (line  109)
50750* msave-toc-indirect:                    RS/6000 and PowerPC Options.
50751                                                             (line  935)
50752* mscc:                                  FRV Options.        (line  140)
50753* msched-ar-data-spec:                   IA-64 Options.      (line  134)
50754* msched-ar-in-data-spec:                IA-64 Options.      (line  155)
50755* msched-br-data-spec:                   IA-64 Options.      (line  128)
50756* msched-br-in-data-spec:                IA-64 Options.      (line  148)
50757* msched-control-spec:                   IA-64 Options.      (line  140)
50758* msched-costly-dep:                     RS/6000 and PowerPC Options.
50759                                                             (line  554)
50760* msched-count-spec-in-critical-path:    IA-64 Options.      (line  182)
50761* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  198)
50762* msched-in-control-spec:                IA-64 Options.      (line  162)
50763* msched-max-memory-insns:               IA-64 Options.      (line  207)
50764* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  213)
50765* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  175)
50766* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  168)
50767* msched-spec-ldc:                       IA-64 Options.      (line  190)
50768* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  194)
50769* mschedule:                             HPPA Options.       (line   71)
50770* mscore5:                               Score Options.      (line   25)
50771* mscore5u:                              Score Options.      (line   28)
50772* mscore7:                               Score Options.      (line   31)
50773* mscore7d:                              Score Options.      (line   34)
50774* msda:                                  V850 Options.       (line   40)
50775* msdata <1>:                            RS/6000 and PowerPC Options.
50776                                                             (line  746)
50777* msdata:                                IA-64 Options.      (line   42)
50778* msdata=all:                            C6X Options.        (line   30)
50779* msdata=data:                           RS/6000 and PowerPC Options.
50780                                                             (line  751)
50781* msdata=default <1>:                    RS/6000 and PowerPC Options.
50782                                                             (line  746)
50783* msdata=default:                        C6X Options.        (line   22)
50784* msdata=eabi:                           RS/6000 and PowerPC Options.
50785                                                             (line  726)
50786* msdata=none <1>:                       M32R/D Options.     (line   40)
50787* msdata=none <2>:                       C6X Options.        (line   35)
50788* msdata=none:                           RS/6000 and PowerPC Options.
50789                                                             (line  759)
50790* msdata=sdata:                          M32R/D Options.     (line   49)
50791* msdata=sysv:                           RS/6000 and PowerPC Options.
50792                                                             (line  737)
50793* msdata=use:                            M32R/D Options.     (line   53)
50794* msdram <1>:                            Blackfin Options.   (line  172)
50795* msdram:                                MeP Options.        (line  110)
50796* msecure-plt:                           RS/6000 and PowerPC Options.
50797                                                             (line  184)
50798* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  203)
50799* msep-data:                             Blackfin Options.   (line  110)
50800* mserialize-volatile:                   Xtensa Options.     (line   35)
50801* msetlb:                                MN10300 Options.    (line   64)
50802* msha:                                  x86 Options.        (line  596)
50803* mshared-library-id:                    Blackfin Options.   (line  103)
50804* mshort:                                M680x0 Options.     (line  220)
50805* msign-extend-enabled:                  LM32 Options.       (line   18)
50806* msim <1>:                              MSP430 Options.     (line   39)
50807* msim <2>:                              RL78 Options.       (line    7)
50808* msim <3>:                              Visium Options.     (line   13)
50809* msim <4>:                              MeP Options.        (line  114)
50810* msim <5>:                              C6X Options.        (line   19)
50811* msim <6>:                              Blackfin Options.   (line   37)
50812* msim <7>:                              Xstormy16 Options.  (line    9)
50813* msim <8>:                              CR16 Options.       (line   18)
50814* msim <9>:                              M32C Options.       (line   13)
50815* msim <10>:                             RX Options.         (line   71)
50816* msim:                                  RS/6000 and PowerPC Options.
50817                                                             (line  682)
50818* msimd:                                 ARC Options.        (line   71)
50819* msimnovec:                             MeP Options.        (line  117)
50820* msimple-fpu:                           RS/6000 and PowerPC Options.
50821                                                             (line  402)
50822* msingle-exit:                          MMIX Options.       (line   66)
50823* msingle-float <1>:                     MIPS Options.       (line  286)
50824* msingle-float:                         RS/6000 and PowerPC Options.
50825                                                             (line  398)
50826* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
50827                                                             (line  541)
50828* msingle-pic-base:                      ARM Options.        (line  220)
50829* msio:                                  HPPA Options.       (line   98)
50830* msize-level:                           ARC Options.        (line  283)
50831* mskip-rax-setup:                       x86 Options.        (line  927)
50832* mslow-bytes:                           MCore Options.      (line   35)
50833* mslow-flash-data:                      ARM Options.        (line  344)
50834* msmall:                                MSP430 Options.     (line   47)
50835* msmall-data:                           DEC Alpha Options.  (line  187)
50836* msmall-data-limit:                     RX Options.         (line   47)
50837* msmall-divides:                        MicroBlaze Options. (line   39)
50838* msmall-exec:                           S/390 and zSeries Options.
50839                                                             (line   80)
50840* msmall-mem:                            SPU Options.        (line   35)
50841* msmall-model:                          FR30 Options.       (line    9)
50842* msmall-text:                           DEC Alpha Options.  (line  205)
50843* msmall16:                              Adapteva Epiphany Options.
50844                                                             (line   67)
50845* msmallc:                               Nios II Options.    (line  272)
50846* msmartmips:                            MIPS Options.       (line  368)
50847* msoft-float <1>:                       HPPA Options.       (line   84)
50848* msoft-float <2>:                       ARC Options.        (line   75)
50849* msoft-float <3>:                       x86 Options.        (line  347)
50850* msoft-float <4>:                       DEC Alpha Options.  (line   10)
50851* msoft-float <5>:                       FRV Options.        (line   22)
50852* msoft-float <6>:                       M680x0 Options.     (line  203)
50853* msoft-float <7>:                       MicroBlaze Options. (line    7)
50854* msoft-float <8>:                       MIPS Options.       (line  272)
50855* msoft-float <9>:                       Visium Options.     (line   24)
50856* msoft-float <10>:                      PDP-11 Options.     (line   13)
50857* msoft-float <11>:                      RS/6000 and PowerPC Options.
50858                                                             (line  392)
50859* msoft-float <12>:                      S/390 and zSeries Options.
50860                                                             (line   11)
50861* msoft-float <13>:                      SPARC Options.      (line   40)
50862* msoft-float:                           V850 Options.       (line  113)
50863* msoft-quad-float:                      SPARC Options.      (line   60)
50864* msp8:                                  AVR Options.        (line  202)
50865* mspace:                                V850 Options.       (line   30)
50866* mspe:                                  RS/6000 and PowerPC Options.
50867                                                             (line  204)
50868* mspecld-anomaly:                       Blackfin Options.   (line   51)
50869* mspfp:                                 ARC Options.        (line   62)
50870* mspfp-compact:                         ARC Options.        (line   63)
50871* mspfp-fast:                            ARC Options.        (line   67)
50872* mspfp_compact:                         ARC Options.        (line  384)
50873* mspfp_fast:                            ARC Options.        (line  387)
50874* msplit-addresses:                      MIPS Options.       (line  536)
50875* msplit-vecmove-early:                  Adapteva Epiphany Options.
50876                                                             (line  127)
50877* msse:                                  x86 Options.        (line  582)
50878* msse2avx:                              x86 Options.        (line  902)
50879* msseregparm:                           x86 Options.        (line  483)
50880* mstack-align:                          CRIS Options.       (line   55)
50881* mstack-bias:                           SPARC Options.      (line  314)
50882* mstack-check-l1:                       Blackfin Options.   (line   77)
50883* mstack-guard:                          S/390 and zSeries Options.
50884                                                             (line  156)
50885* mstack-increment:                      MCore Options.      (line   50)
50886* mstack-offset:                         Adapteva Epiphany Options.
50887                                                             (line   37)
50888* mstack-protector-guard=GUARD:          x86 Options.        (line  951)
50889* mstack-size:                           S/390 and zSeries Options.
50890                                                             (line  156)
50891* mstackrealign:                         x86 Options.        (line  526)
50892* mstdmain:                              SPU Options.        (line   40)
50893* mstrict-align <1>:                     RS/6000 and PowerPC Options.
50894                                                             (line  493)
50895* mstrict-align <2>:                     M680x0 Options.     (line  287)
50896* mstrict-align:                         AArch64 Options.    (line   49)
50897* mstrict-X:                             AVR Options.        (line  215)
50898* mstring:                               RS/6000 and PowerPC Options.
50899                                                             (line  429)
50900* mstringop-strategy=ALG:                x86 Options.        (line  850)
50901* mstructure-size-boundary:              ARM Options.        (line  177)
50902* msv-mode:                              Visium Options.     (line   52)
50903* msvr4-struct-return:                   RS/6000 and PowerPC Options.
50904                                                             (line  634)
50905* mswap:                                 ARC Options.        (line   82)
50906* mswape:                                ARC Options.        (line  115)
50907* msym32:                                MIPS Options.       (line  433)
50908* msynci:                                MIPS Options.       (line  796)
50909* msys-crt0:                             Nios II Options.    (line  276)
50910* msys-lib:                              Nios II Options.    (line  280)
50911* MT:                                    Preprocessor Options.
50912                                                             (line  251)
50913* mtarget-align:                         Xtensa Options.     (line   59)
50914* mtas:                                  SH Options.         (line  282)
50915* mtbm:                                  x86 Options.        (line  621)
50916* mtda:                                  V850 Options.       (line   34)
50917* mtelephony:                            ARC Options.        (line  120)
50918* mtext-section-literals:                Xtensa Options.     (line   47)
50919* mtf:                                   MeP Options.        (line  121)
50920* mthread:                               x86 Windows Options.
50921                                                             (line   26)
50922* mthreads:                              x86 Options.        (line  826)
50923* mthumb:                                ARM Options.        (line  261)
50924* mthumb-interwork:                      ARM Options.        (line   24)
50925* mtiny-stack:                           AVR Options.        (line  229)
50926* mtiny=:                                MeP Options.        (line  125)
50927* mTLS:                                  FRV Options.        (line   72)
50928* mtls:                                  FRV Options.        (line   75)
50929* mtls-dialect <1>:                      x86 Options.        (line  804)
50930* mtls-dialect:                          ARM Options.        (line  302)
50931* mtls-dialect=desc:                     AArch64 Options.    (line   58)
50932* mtls-dialect=traditional:              AArch64 Options.    (line   62)
50933* mtls-direct-seg-refs:                  x86 Options.        (line  892)
50934* mtls-markers:                          RS/6000 and PowerPC Options.
50935                                                             (line  817)
50936* mtls-size:                             IA-64 Options.      (line  112)
50937* mtoc:                                  RS/6000 and PowerPC Options.
50938                                                             (line  518)
50939* mtomcat-stats:                         FRV Options.        (line  209)
50940* mtoplevel-symbols:                     MMIX Options.       (line   40)
50941* mtp:                                   ARM Options.        (line  294)
50942* mtpcs-frame:                           ARM Options.        (line  267)
50943* mtpcs-leaf-frame:                      ARM Options.        (line  273)
50944* mtpf-trace:                            S/390 and zSeries Options.
50945                                                             (line  131)
50946* mtrap-precision:                       DEC Alpha Options.  (line  109)
50947* mtune <1>:                             Visium Options.     (line   47)
50948* mtune <2>:                             M680x0 Options.     (line   70)
50949* mtune <3>:                             AArch64 Options.    (line   96)
50950* mtune <4>:                             RS/6000 and PowerPC Options.
50951                                                             (line  114)
50952* mtune <5>:                             SPARC Options.      (line  181)
50953* mtune <6>:                             DEC Alpha Options.  (line  259)
50954* mtune <7>:                             x86 Options.        (line  227)
50955* mtune <8>:                             S/390 and zSeries Options.
50956                                                             (line  124)
50957* mtune <9>:                             CRIS Options.       (line   16)
50958* mtune <10>:                            MIPS Options.       (line   65)
50959* mtune <11>:                            ARM Options.        (line   87)
50960* mtune <12>:                            ARC Options.        (line  305)
50961* mtune <13>:                            MN10300 Options.    (line   30)
50962* mtune:                                 IA-64 Options.      (line  116)
50963* mtune-ctrl=FEATURE-LIST:               x86 Options.        (line  654)
50964* mucb-mcount:                           ARC Options.        (line  180)
50965* muclibc:                               GNU/Linux Options.  (line   13)
50966* muls:                                  Score Options.      (line   18)
50967* multcost:                              ARC Options.        (line  395)
50968* multcost=NUMBER:                       SH Options.         (line  305)
50969* multi_module:                          Darwin Options.     (line  196)
50970* multilib-library-pic:                  FRV Options.        (line   89)
50971* multiply-enabled:                      LM32 Options.       (line   15)
50972* multiply_defined:                      Darwin Options.     (line  196)
50973* multiply_defined_unused:               Darwin Options.     (line  196)
50974* munalign-prob-threshold:               ARC Options.        (line  334)
50975* munaligned-access:                     ARM Options.        (line  326)
50976* munaligned-doubles:                    SPARC Options.      (line   74)
50977* municode:                              x86 Windows Options.
50978                                                             (line   30)
50979* muninit-const-in-rodata:               MIPS Options.       (line  506)
50980* munix:                                 VAX Options.        (line    9)
50981* munix-asm:                             PDP-11 Options.     (line   68)
50982* munsafe-dma:                           SPU Options.        (line   17)
50983* mupdate:                               RS/6000 and PowerPC Options.
50984                                                             (line  440)
50985* mupper-regs:                           RS/6000 and PowerPC Options.
50986                                                             (line  277)
50987* mupper-regs-df:                        RS/6000 and PowerPC Options.
50988                                                             (line  261)
50989* mupper-regs-sf:                        RS/6000 and PowerPC Options.
50990                                                             (line  269)
50991* muser-enabled:                         LM32 Options.       (line   21)
50992* muser-mode <1>:                        SPARC Options.      (line   86)
50993* muser-mode:                            Visium Options.     (line   57)
50994* musermode:                             SH Options.         (line  297)
50995* mv3push:                               NDS32 Options.      (line   33)
50996* mv850:                                 V850 Options.       (line   49)
50997* mv850e:                                V850 Options.       (line   79)
50998* mv850e1:                               V850 Options.       (line   70)
50999* mv850e2:                               V850 Options.       (line   66)
51000* mv850e2v3:                             V850 Options.       (line   61)
51001* mv850e2v4:                             V850 Options.       (line   57)
51002* mv850e3v5:                             V850 Options.       (line   52)
51003* mv850es:                               V850 Options.       (line   75)
51004* mv8plus:                               SPARC Options.      (line  195)
51005* mveclibabi <1>:                        x86 Options.        (line  772)
51006* mveclibabi:                            RS/6000 and PowerPC Options.
51007                                                             (line  896)
51008* mvect8-ret-in-mem:                     x86 Options.        (line  493)
51009* mvirt:                                 MIPS Options.       (line  409)
51010* mvis:                                  SPARC Options.      (line  202)
51011* mvis2:                                 SPARC Options.      (line  208)
51012* mvis3:                                 SPARC Options.      (line  216)
51013* mvliw-branch:                          FRV Options.        (line  164)
51014* mvms-return-codes:                     VMS Options.        (line    9)
51015* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
51016* mvolatile-cache:                       ARC Options.        (line  185)
51017* mvr4130-align:                         MIPS Options.       (line  785)
51018* mvrsave:                               RS/6000 and PowerPC Options.
51019                                                             (line  174)
51020* mvsx:                                  RS/6000 and PowerPC Options.
51021                                                             (line  218)
51022* mvxworks:                              RS/6000 and PowerPC Options.
51023                                                             (line  703)
51024* mvzeroupper:                           x86 Options.        (line  682)
51025* mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
51026                                                             (line  180)
51027* mwarn-dynamicstack:                    S/390 and zSeries Options.
51028                                                             (line  150)
51029* mwarn-framesize:                       S/390 and zSeries Options.
51030                                                             (line  142)
51031* mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
51032* mwarn-reloc:                           SPU Options.        (line   10)
51033* mwide-bitfields:                       MCore Options.      (line   23)
51034* mwin32:                                x86 Windows Options.
51035                                                             (line   35)
51036* mwindows:                              x86 Windows Options.
51037                                                             (line   41)
51038* mword-relocations:                     ARM Options.        (line  313)
51039* mx32:                                  x86 Options.        (line  965)
51040* mxgot <1>:                             M680x0 Options.     (line  319)
51041* mxgot:                                 MIPS Options.       (line  231)
51042* mxilinx-fpu:                           RS/6000 and PowerPC Options.
51043                                                             (line  413)
51044* mxl-barrel-shift:                      MicroBlaze Options. (line   33)
51045* mxl-compat:                            RS/6000 and PowerPC Options.
51046                                                             (line  349)
51047* mxl-float-convert:                     MicroBlaze Options. (line   51)
51048* mxl-float-sqrt:                        MicroBlaze Options. (line   54)
51049* mxl-gp-opt:                            MicroBlaze Options. (line   45)
51050* mxl-multiply-high:                     MicroBlaze Options. (line   48)
51051* mxl-pattern-compare:                   MicroBlaze Options. (line   36)
51052* mxl-reorder:                           MicroBlaze Options. (line   63)
51053* mxl-soft-div:                          MicroBlaze Options. (line   30)
51054* mxl-soft-mul:                          MicroBlaze Options. (line   27)
51055* mxl-stack-check:                       MicroBlaze Options. (line   42)
51056* mxop:                                  x86 Options.        (line  607)
51057* mxpa:                                  MIPS Options.       (line  414)
51058* mxsave:                                x86 Options.        (line  616)
51059* mxsavec:                               x86 Options.        (line  618)
51060* mxsaveopt:                             x86 Options.        (line  617)
51061* mxsaves:                               x86 Options.        (line  619)
51062* mxy:                                   ARC Options.        (line  125)
51063* myellowknife:                          RS/6000 and PowerPC Options.
51064                                                             (line  698)
51065* mzarch:                                S/390 and zSeries Options.
51066                                                             (line   95)
51067* mzda:                                  V850 Options.       (line   45)
51068* mzdcbranch:                            SH Options.         (line  473)
51069* mzero-extend:                          MMIX Options.       (line   27)
51070* no-canonical-prefixes:                 Overall Options.    (line  334)
51071* no-integrated-cpp:                     Preprocessor Options.
51072                                                             (line   34)
51073* no-sysroot-suffix:                     Directory Options.  (line  116)
51074* no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
51075* noall_load:                            Darwin Options.     (line  196)
51076* nocpp:                                 MIPS Options.       (line  611)
51077* nodefaultlibs:                         Link Options.       (line   68)
51078* nodevicelib:                           AVR Options.        (line  232)
51079* nofixprebinding:                       Darwin Options.     (line  196)
51080* nofpu:                                 RX Options.         (line   17)
51081* nolibdld:                              HPPA Options.       (line  181)
51082* nomultidefs:                           Darwin Options.     (line  196)
51083* non-static:                            VxWorks Options.    (line   16)
51084* noprebind:                             Darwin Options.     (line  196)
51085* noseglinkedit:                         Darwin Options.     (line  196)
51086* nostartfiles:                          Link Options.       (line   63)
51087* nostdinc:                              Preprocessor Options.
51088                                                             (line  399)
51089* nostdinc++ <1>:                        C++ Dialect Options.
51090                                                             (line  431)
51091* nostdinc++:                            Preprocessor Options.
51092                                                             (line  404)
51093* nostdlib:                              Link Options.       (line   80)
51094* O:                                     Optimize Options.   (line   39)
51095* o <1>:                                 Preprocessor Options.
51096                                                             (line   87)
51097* o:                                     Overall Options.    (line  192)
51098* O0:                                    Optimize Options.   (line  145)
51099* O1:                                    Optimize Options.   (line   39)
51100* O2:                                    Optimize Options.   (line   91)
51101* O3:                                    Optimize Options.   (line  136)
51102* Ofast:                                 Optimize Options.   (line  159)
51103* Og:                                    Optimize Options.   (line  166)
51104* Os:                                    Optimize Options.   (line  149)
51105* p:                                     Debugging Options.  (line  640)
51106* P:                                     Preprocessor Options.
51107                                                             (line  659)
51108* pagezero_size:                         Darwin Options.     (line  196)
51109* param:                                 Optimize Options.   (line 2438)
51110* pass-exit-codes:                       Overall Options.    (line  150)
51111* pedantic <1>:                          Preprocessor Options.
51112                                                             (line  175)
51113* pedantic <2>:                          Warnings and Errors.
51114                                                             (line   25)
51115* pedantic <3>:                          Warning Options.    (line   82)
51116* pedantic <4>:                          Standards.          (line   16)
51117* pedantic <5>:                          Alternate Keywords. (line   30)
51118* pedantic:                              C Extensions.       (line    6)
51119* pedantic-errors <1>:                   Preprocessor Options.
51120                                                             (line  180)
51121* pedantic-errors <2>:                   Standards.          (line   16)
51122* pedantic-errors <3>:                   Non-bugs.           (line  216)
51123* pedantic-errors <4>:                   Warning Options.    (line  124)
51124* pedantic-errors:                       Warnings and Errors.
51125                                                             (line   25)
51126* pg:                                    Debugging Options.  (line  646)
51127* pie:                                   Link Options.       (line  105)
51128* pipe:                                  Overall Options.    (line  215)
51129* prebind:                               Darwin Options.     (line  196)
51130* prebind_all_twolevel_modules:          Darwin Options.     (line  196)
51131* print-file-name:                       Debugging Options.  (line 1612)
51132* print-libgcc-file-name:                Debugging Options.  (line 1646)
51133* print-multi-directory:                 Debugging Options.  (line 1618)
51134* print-multi-lib:                       Debugging Options.  (line 1623)
51135* print-multi-os-directory:              Debugging Options.  (line 1630)
51136* print-multiarch:                       Debugging Options.  (line 1639)
51137* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
51138                                                             (line  217)
51139* print-prog-name:                       Debugging Options.  (line 1643)
51140* print-search-dirs:                     Debugging Options.  (line 1654)
51141* print-sysroot:                         Debugging Options.  (line 1667)
51142* print-sysroot-headers-suffix:          Debugging Options.  (line 1674)
51143* private_bundle:                        Darwin Options.     (line  196)
51144* pthread <1>:                           RS/6000 and PowerPC Options.
51145                                                             (line  824)
51146* pthread:                               Solaris 2 Options.  (line   38)
51147* pthreads:                              Solaris 2 Options.  (line   32)
51148* Q:                                     Debugging Options.  (line  652)
51149* Qn:                                    System V Options.   (line   18)
51150* Qy:                                    System V Options.   (line   14)
51151* rdynamic:                              Link Options.       (line  111)
51152* read_only_relocs:                      Darwin Options.     (line  196)
51153* remap:                                 Preprocessor Options.
51154                                                             (line  707)
51155* s:                                     Link Options.       (line  118)
51156* S <1>:                                 Overall Options.    (line  175)
51157* S:                                     Link Options.       (line   20)
51158* save-temps:                            Debugging Options.  (line 1519)
51159* save-temps=obj:                        Debugging Options.  (line 1545)
51160* sectalign:                             Darwin Options.     (line  196)
51161* sectcreate:                            Darwin Options.     (line  196)
51162* sectobjectsymbols:                     Darwin Options.     (line  196)
51163* sectorder:                             Darwin Options.     (line  196)
51164* seg1addr:                              Darwin Options.     (line  196)
51165* seg_addr_table:                        Darwin Options.     (line  196)
51166* seg_addr_table_filename:               Darwin Options.     (line  196)
51167* segaddr:                               Darwin Options.     (line  196)
51168* seglinkedit:                           Darwin Options.     (line  196)
51169* segprot:                               Darwin Options.     (line  196)
51170* segs_read_only_addr:                   Darwin Options.     (line  196)
51171* segs_read_write_addr:                  Darwin Options.     (line  196)
51172* shared:                                Link Options.       (line  127)
51173* shared-libgcc:                         Link Options.       (line  135)
51174* short-calls:                           Adapteva Epiphany Options.
51175                                                             (line   61)
51176* sim:                                   CRIS Options.       (line   95)
51177* sim2:                                  CRIS Options.       (line  101)
51178* single_module:                         Darwin Options.     (line  196)
51179* specs:                                 Directory Options.  (line   93)
51180* static <1>:                            Link Options.       (line  122)
51181* static <2>:                            Darwin Options.     (line  196)
51182* static:                                HPPA Options.       (line  185)
51183* static-libasan:                        Link Options.       (line  170)
51184* static-libgcc:                         Link Options.       (line  135)
51185* static-liblsan:                        Link Options.       (line  188)
51186* static-libmpx:                         Link Options.       (line  206)
51187* static-libmpxwrappers:                 Link Options.       (line  215)
51188* static-libstdc++:                      Link Options.       (line  225)
51189* static-libtsan:                        Link Options.       (line  179)
51190* static-libubsan:                       Link Options.       (line  197)
51191* std <1>:                               Other Builtins.     (line   22)
51192* std <2>:                               C Dialect Options.  (line   47)
51193* std <3>:                               Standards.          (line   16)
51194* std:                                   Non-bugs.           (line  107)
51195* std=:                                  Preprocessor Options.
51196                                                             (line  338)
51197* sub_library:                           Darwin Options.     (line  196)
51198* sub_umbrella:                          Darwin Options.     (line  196)
51199* symbolic:                              Link Options.       (line  236)
51200* sysroot:                               Directory Options.  (line  101)
51201* T:                                     Link Options.       (line  242)
51202* target-help <1>:                       Overall Options.    (line  230)
51203* target-help:                           Preprocessor Options.
51204                                                             (line  712)
51205* threads:                               HPPA Options.       (line  198)
51206* time:                                  Debugging Options.  (line 1560)
51207* tno-android-cc:                        GNU/Linux Options.  (line   31)
51208* tno-android-ld:                        GNU/Linux Options.  (line   35)
51209* traditional <1>:                       C Dialect Options.  (line  346)
51210* traditional:                           Incompatibilities.  (line    6)
51211* traditional-cpp <1>:                   C Dialect Options.  (line  346)
51212* traditional-cpp:                       Preprocessor Options.
51213                                                             (line  690)
51214* trigraphs <1>:                         C Dialect Options.  (line  341)
51215* trigraphs:                             Preprocessor Options.
51216                                                             (line  694)
51217* twolevel_namespace:                    Darwin Options.     (line  196)
51218* U:                                     Preprocessor Options.
51219                                                             (line   69)
51220* u:                                     Link Options.       (line  274)
51221* umbrella:                              Darwin Options.     (line  196)
51222* undef:                                 Preprocessor Options.
51223                                                             (line   73)
51224* undefined:                             Darwin Options.     (line  196)
51225* unexported_symbols_list:               Darwin Options.     (line  196)
51226* v <1>:                                 Overall Options.    (line  203)
51227* v:                                     Preprocessor Options.
51228                                                             (line  716)
51229* version <1>:                           Overall Options.    (line  338)
51230* version:                               Preprocessor Options.
51231                                                             (line  729)
51232* w <1>:                                 Warning Options.    (line   25)
51233* w:                                     Preprocessor Options.
51234                                                             (line  171)
51235* W <1>:                                 Incompatibilities.  (line   64)
51236* W:                                     Warning Options.    (line 1451)
51237* Wa:                                    Assembler Options.  (line    9)
51238* Wabi:                                  C++ Dialect Options.
51239                                                             (line  439)
51240* Wabi-tag:                              C++ Dialect Options.
51241                                                             (line  531)
51242* Waddr-space-convert:                   AVR Options.        (line  235)
51243* Waddress:                              Warning Options.    (line 1353)
51244* Waggregate-return:                     Warning Options.    (line 1386)
51245* Waggressive-loop-optimizations:        Warning Options.    (line 1391)
51246* Wall <1>:                              Standard Libraries. (line    6)
51247* Wall <2>:                              Preprocessor Options.
51248                                                             (line   93)
51249* Wall:                                  Warning Options.    (line  133)
51250* Warray-bounds:                         Warning Options.    (line  895)
51251* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
51252                                                             (line  171)
51253* Wattributes:                           Warning Options.    (line 1396)
51254* Wbad-function-cast:                    Warning Options.    (line 1160)
51255* Wbool-compare:                         Warning Options.    (line  911)
51256* Wbuiltin-macro-redefined:              Warning Options.    (line 1402)
51257* Wc++-compat:                           Warning Options.    (line 1182)
51258* Wc++11-compat:                         Warning Options.    (line 1187)
51259* Wc++14-compat:                         Warning Options.    (line 1193)
51260* Wc90-c99-compat:                       Warning Options.    (line 1165)
51261* Wc99-c11-compat:                       Warning Options.    (line 1173)
51262* Wcast-align:                           Warning Options.    (line 1213)
51263* Wcast-qual:                            Warning Options.    (line 1197)
51264* Wchar-subscripts:                      Warning Options.    (line  222)
51265* Wclobbered:                            Warning Options.    (line 1233)
51266* Wcomment <1>:                          Warning Options.    (line  227)
51267* Wcomment:                              Preprocessor Options.
51268                                                             (line  101)
51269* Wcomments:                             Preprocessor Options.
51270                                                             (line  101)
51271* Wconditionally-supported:              Warning Options.    (line 1237)
51272* Wconversion:                           Warning Options.    (line 1240)
51273* Wconversion-null:                      Warning Options.    (line 1258)
51274* Wctor-dtor-privacy:                    C++ Dialect Options.
51275                                                             (line  536)
51276* Wdate-time:                            Warning Options.    (line 1266)
51277* Wdeclaration-after-statement:          Warning Options.    (line 1071)
51278* Wdelete-incomplete:                    Warning Options.    (line 1271)
51279* Wdelete-non-virtual-dtor:              C++ Dialect Options.
51280                                                             (line  543)
51281* Wdeprecated:                           Warning Options.    (line 1525)
51282* Wdeprecated-declarations:              Warning Options.    (line 1529)
51283* Wdisabled-optimization:                Warning Options.    (line 1693)
51284* Wdiscarded-array-qualifiers:           Warning Options.    (line  926)
51285* Wdiscarded-qualifiers:                 Warning Options.    (line  920)
51286* Wdiv-by-zero:                          Warning Options.    (line  944)
51287* Wdouble-promotion:                     Warning Options.    (line  251)
51288* weak_reference_mismatches:             Darwin Options.     (line  196)
51289* Weffc++:                               C++ Dialect Options.
51290                                                             (line  623)
51291* Wempty-body:                           Warning Options.    (line 1278)
51292* Wendif-labels <1>:                     Preprocessor Options.
51293                                                             (line  148)
51294* Wendif-labels:                         Warning Options.    (line 1080)
51295* Wenum-compare:                         Warning Options.    (line 1282)
51296* Werror <1>:                            Preprocessor Options.
51297                                                             (line  161)
51298* Werror:                                Warning Options.    (line   28)
51299* Werror=:                               Warning Options.    (line   31)
51300* Wextra:                                Warning Options.    (line  183)
51301* Wfatal-errors:                         Warning Options.    (line   48)
51302* Wfloat-conversion:                     Warning Options.    (line 1312)
51303* Wfloat-equal:                          Warning Options.    (line  970)
51304* Wformat <1>:                           Function Attributes.
51305                                                             (line  425)
51306* Wformat:                               Warning Options.    (line  297)
51307* Wformat-contains-nul:                  Warning Options.    (line  307)
51308* Wformat-extra-args:                    Warning Options.    (line  311)
51309* Wformat-nonliteral <1>:                Function Attributes.
51310                                                             (line  491)
51311* Wformat-nonliteral:                    Warning Options.    (line  335)
51312* Wformat-security:                      Warning Options.    (line  340)
51313* Wformat-signedness:                    Warning Options.    (line  352)
51314* Wformat-y2k:                           Warning Options.    (line  357)
51315* Wformat-zero-length:                   Warning Options.    (line  325)
51316* Wformat=:                              Warning Options.    (line  270)
51317* Wformat=1:                             Warning Options.    (line  297)
51318* Wformat=2:                             Warning Options.    (line  330)
51319* Wframe-larger-than:                    Warning Options.    (line 1099)
51320* Wfree-nonheap-object:                  Warning Options.    (line 1108)
51321* whatsloaded:                           Darwin Options.     (line  196)
51322* whyload:                               Darwin Options.     (line  196)
51323* Wignored-qualifiers:                   Warning Options.    (line  397)
51324* Wimplicit:                             Warning Options.    (line  393)
51325* Wimplicit-function-declaration:        Warning Options.    (line  387)
51326* Wimplicit-int:                         Warning Options.    (line  383)
51327* Wincompatible-pointer-types:           Warning Options.    (line  932)
51328* Winherited-variadic-ctor:              Warning Options.    (line 1605)
51329* Winit-self:                            Warning Options.    (line  368)
51330* Winline <1>:                           Warning Options.    (line 1610)
51331* Winline:                               Inline.             (line   63)
51332* Wint-conversion:                       Warning Options.    (line  938)
51333* Wint-to-pointer-cast:                  Warning Options.    (line 1635)
51334* Winvalid-offsetof:                     Warning Options.    (line 1623)
51335* Winvalid-pch:                          Warning Options.    (line 1644)
51336* Wjump-misses-init:                     Warning Options.    (line 1288)
51337* Wl:                                    Link Options.       (line  266)
51338* Wlarger-than-LEN:                      Warning Options.    (line 1096)
51339* Wlarger-than=LEN:                      Warning Options.    (line 1096)
51340* Wliteral-suffix:                       C++ Dialect Options.
51341                                                             (line  550)
51342* Wlogical-not-parentheses:              Warning Options.    (line 1371)
51343* Wlogical-op:                           Warning Options.    (line 1366)
51344* Wlong-long:                            Warning Options.    (line 1648)
51345* Wmain:                                 Warning Options.    (line  408)
51346* Wmaybe-uninitialized:                  Warning Options.    (line  686)
51347* Wmemset-transposed-args:               Warning Options.    (line 1342)
51348* Wmissing-braces:                       Warning Options.    (line  415)
51349* Wmissing-declarations:                 Warning Options.    (line 1441)
51350* Wmissing-field-initializers:           Warning Options.    (line 1451)
51351* Wmissing-format-attribute:             Warning Options.    (line  850)
51352* Wmissing-include-dirs:                 Warning Options.    (line  426)
51353* Wmissing-parameter-type:               Warning Options.    (line 1423)
51354* Wmissing-prototypes:                   Warning Options.    (line 1431)
51355* Wmultichar:                            Warning Options.    (line 1475)
51356* Wnarrowing:                            C++ Dialect Options.
51357                                                             (line  571)
51358* Wnested-externs:                       Warning Options.    (line 1602)
51359* Wno-abi:                               C++ Dialect Options.
51360                                                             (line  439)
51361* Wno-address:                           Warning Options.    (line 1353)
51362* Wno-aggregate-return:                  Warning Options.    (line 1386)
51363* Wno-aggressive-loop-optimizations:     Warning Options.    (line 1391)
51364* Wno-all:                               Warning Options.    (line  133)
51365* Wno-array-bounds:                      Warning Options.    (line  895)
51366* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
51367                                                             (line  171)
51368* Wno-attributes:                        Warning Options.    (line 1396)
51369* Wno-bad-function-cast:                 Warning Options.    (line 1160)
51370* Wno-bool-compare:                      Warning Options.    (line  911)
51371* Wno-builtin-macro-redefined:           Warning Options.    (line 1402)
51372* Wno-c90-c99-compat:                    Warning Options.    (line 1165)
51373* Wno-c99-c11-compat:                    Warning Options.    (line 1173)
51374* Wno-cast-align:                        Warning Options.    (line 1213)
51375* Wno-cast-qual:                         Warning Options.    (line 1197)
51376* Wno-char-subscripts:                   Warning Options.    (line  222)
51377* Wno-clobbered:                         Warning Options.    (line 1233)
51378* Wno-comment:                           Warning Options.    (line  227)
51379* Wno-conditionally-supported:           Warning Options.    (line 1237)
51380* Wno-conversion:                        Warning Options.    (line 1240)
51381* Wno-conversion-null:                   Warning Options.    (line 1258)
51382* Wno-coverage-mismatch:                 Warning Options.    (line  232)
51383* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
51384                                                             (line  536)
51385* Wno-date-time:                         Warning Options.    (line 1266)
51386* Wno-declaration-after-statement:       Warning Options.    (line 1071)
51387* Wno-delete-incomplete:                 Warning Options.    (line 1271)
51388* Wno-delete-non-virtual-dtor:           C++ Dialect Options.
51389                                                             (line  543)
51390* Wno-deprecated:                        Warning Options.    (line 1525)
51391* Wno-deprecated-declarations:           Warning Options.    (line 1529)
51392* Wno-disabled-optimization:             Warning Options.    (line 1693)
51393* Wno-discarded-array-qualifiers:        Warning Options.    (line  926)
51394* Wno-discarded-qualifiers:              Warning Options.    (line  920)
51395* Wno-div-by-zero:                       Warning Options.    (line  944)
51396* Wno-double-promotion:                  Warning Options.    (line  251)
51397* Wno-effc++:                            C++ Dialect Options.
51398                                                             (line  623)
51399* Wno-empty-body:                        Warning Options.    (line 1278)
51400* Wno-endif-labels:                      Warning Options.    (line 1080)
51401* Wno-enum-compare:                      Warning Options.    (line 1282)
51402* Wno-error:                             Warning Options.    (line   28)
51403* Wno-error=:                            Warning Options.    (line   31)
51404* Wno-extra:                             Warning Options.    (line 1548)
51405* Wno-fatal-errors:                      Warning Options.    (line   48)
51406* Wno-float-conversion:                  Warning Options.    (line 1312)
51407* Wno-float-equal:                       Warning Options.    (line  970)
51408* Wno-format:                            Warning Options.    (line  850)
51409* Wno-format-contains-nul:               Warning Options.    (line  307)
51410* Wno-format-extra-args:                 Warning Options.    (line  311)
51411* Wno-format-nonliteral:                 Warning Options.    (line  335)
51412* Wno-format-security:                   Warning Options.    (line  340)
51413* Wno-format-signedness:                 Warning Options.    (line  352)
51414* Wno-format-y2k:                        Warning Options.    (line  357)
51415* Wno-format-zero-length:                Warning Options.    (line  325)
51416* Wno-free-nonheap-object:               Warning Options.    (line 1108)
51417* Wno-ignored-qualifiers:                Warning Options.    (line  397)
51418* Wno-implicit:                          Warning Options.    (line  393)
51419* Wno-implicit-function-declaration:     Warning Options.    (line  387)
51420* Wno-implicit-int:                      Warning Options.    (line  383)
51421* Wno-incompatible-pointer-types:        Warning Options.    (line  932)
51422* Wno-inherited-variadic-ctor:           Warning Options.    (line 1605)
51423* Wno-init-self:                         Warning Options.    (line  368)
51424* Wno-inline:                            Warning Options.    (line 1610)
51425* Wno-int-conversion:                    Warning Options.    (line  938)
51426* Wno-int-to-pointer-cast:               Warning Options.    (line 1635)
51427* Wno-invalid-offsetof:                  Warning Options.    (line 1623)
51428* Wno-invalid-pch:                       Warning Options.    (line 1644)
51429* Wno-jump-misses-init:                  Warning Options.    (line 1288)
51430* Wno-literal-suffix:                    C++ Dialect Options.
51431                                                             (line  550)
51432* Wno-logical-not-parentheses:           Warning Options.    (line 1371)
51433* Wno-logical-op:                        Warning Options.    (line 1366)
51434* Wno-long-long:                         Warning Options.    (line 1648)
51435* Wno-main:                              Warning Options.    (line  408)
51436* Wno-maybe-uninitialized:               Warning Options.    (line  686)
51437* Wno-memset-transposed-args:            Warning Options.    (line 1342)
51438* Wno-missing-braces:                    Warning Options.    (line  415)
51439* Wno-missing-declarations:              Warning Options.    (line 1441)
51440* Wno-missing-field-initializers:        Warning Options.    (line 1451)
51441* Wno-missing-format-attribute:          Warning Options.    (line  850)
51442* Wno-missing-include-dirs:              Warning Options.    (line  426)
51443* Wno-missing-parameter-type:            Warning Options.    (line 1423)
51444* Wno-missing-prototypes:                Warning Options.    (line 1431)
51445* Wno-multichar:                         Warning Options.    (line 1475)
51446* Wno-narrowing:                         C++ Dialect Options.
51447                                                             (line  571)
51448* Wno-nested-externs:                    Warning Options.    (line 1602)
51449* Wno-noexcept:                          C++ Dialect Options.
51450                                                             (line  584)
51451* Wno-non-template-friend:               C++ Dialect Options.
51452                                                             (line  660)
51453* Wno-non-virtual-dtor:                  C++ Dialect Options.
51454                                                             (line  590)
51455* Wno-nonnull:                           Warning Options.    (line  361)
51456* Wno-normalized:                        Warning Options.    (line 1481)
51457* Wno-odr:                               Warning Options.    (line 1538)
51458* Wno-old-style-cast:                    C++ Dialect Options.
51459                                                             (line  676)
51460* Wno-old-style-declaration:             Warning Options.    (line 1413)
51461* Wno-old-style-definition:              Warning Options.    (line 1419)
51462* Wno-overflow:                          Warning Options.    (line 1535)
51463* Wno-overlength-strings:                Warning Options.    (line 1713)
51464* Wno-overloaded-virtual:                C++ Dialect Options.
51465                                                             (line  682)
51466* Wno-override-init:                     Warning Options.    (line 1548)
51467* Wno-packed:                            Warning Options.    (line 1556)
51468* Wno-packed-bitfield-compat:            Warning Options.    (line 1573)
51469* Wno-padded:                            Warning Options.    (line 1590)
51470* Wno-parentheses:                       Warning Options.    (line  429)
51471* Wno-pedantic-ms-format:                Warning Options.    (line 1140)
51472* Wno-pmf-conversions <1>:               Bound member functions.
51473                                                             (line   35)
51474* Wno-pmf-conversions:                   C++ Dialect Options.
51475                                                             (line  701)
51476* Wno-pointer-arith:                     Warning Options.    (line 1146)
51477* Wno-pointer-sign:                      Warning Options.    (line 1702)
51478* Wno-pointer-to-int-cast:               Warning Options.    (line 1640)
51479* Wno-pragmas:                           Warning Options.    (line  736)
51480* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
51481                                                             (line  175)
51482* Wno-redundant-decls:                   Warning Options.    (line 1597)
51483* Wno-reorder:                           C++ Dialect Options.
51484                                                             (line  598)
51485* Wno-return-local-addr:                 Warning Options.    (line  524)
51486* Wno-return-type:                       Warning Options.    (line  528)
51487* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
51488                                                             (line  185)
51489* Wno-sequence-point:                    Warning Options.    (line  478)
51490* Wno-shadow:                            Warning Options.    (line 1084)
51491* Wno-shadow-ivar:                       Warning Options.    (line 1092)
51492* Wno-shift-count-negative:              Warning Options.    (line  543)
51493* Wno-shift-count-overflow:              Warning Options.    (line  547)
51494* Wno-sign-compare:                      Warning Options.    (line 1299)
51495* Wno-sign-conversion:                   Warning Options.    (line 1306)
51496* Wno-sign-promo:                        C++ Dialect Options.
51497                                                             (line  705)
51498* Wno-sized-deallocation:                Warning Options.    (line 1318)
51499* Wno-sizeof-array-argument:             Warning Options.    (line 1337)
51500* Wno-sizeof-pointer-memaccess:          Warning Options.    (line 1329)
51501* Wno-stack-protector:                   Warning Options.    (line 1708)
51502* Wno-strict-aliasing:                   Warning Options.    (line  741)
51503* Wno-strict-null-sentinel:              C++ Dialect Options.
51504                                                             (line  652)
51505* Wno-strict-overflow:                   Warning Options.    (line  781)
51506* Wno-strict-prototypes:                 Warning Options.    (line 1407)
51507* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
51508                                                             (line  197)
51509* Wno-suggest-attribute=:                Warning Options.    (line  831)
51510* Wno-suggest-attribute=const:           Warning Options.    (line  837)
51511* Wno-suggest-attribute=format:          Warning Options.    (line  850)
51512* Wno-suggest-attribute=noreturn:        Warning Options.    (line  837)
51513* Wno-suggest-attribute=pure:            Warning Options.    (line  837)
51514* Wno-suggest-final-methods:             Warning Options.    (line  880)
51515* Wno-suggest-final-types:               Warning Options.    (line  871)
51516* Wno-switch:                            Warning Options.    (line  551)
51517* Wno-switch-bool:                       Warning Options.    (line  571)
51518* Wno-switch-default:                    Warning Options.    (line  559)
51519* Wno-switch-enum:                       Warning Options.    (line  562)
51520* Wno-sync-nand:                         Warning Options.    (line  581)
51521* Wno-system-headers:                    Warning Options.    (line  949)
51522* Wno-traditional:                       Warning Options.    (line  985)
51523* Wno-traditional-conversion:            Warning Options.    (line 1063)
51524* Wno-trampolines:                       Warning Options.    (line  960)
51525* Wno-trigraphs:                         Warning Options.    (line  586)
51526* Wno-type-limits:                       Warning Options.    (line 1153)
51527* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
51528                                                             (line  205)
51529* Wno-undef:                             Warning Options.    (line 1077)
51530* Wno-uninitialized:                     Warning Options.    (line  663)
51531* Wno-unknown-pragmas:                   Warning Options.    (line  729)
51532* Wno-unsafe-loop-optimizations:         Warning Options.    (line 1134)
51533* Wno-unused:                            Warning Options.    (line  656)
51534* Wno-unused-but-set-parameter:          Warning Options.    (line  591)
51535* Wno-unused-but-set-variable:           Warning Options.    (line  600)
51536* Wno-unused-function:                   Warning Options.    (line  610)
51537* Wno-unused-label:                      Warning Options.    (line  615)
51538* Wno-unused-parameter:                  Warning Options.    (line  626)
51539* Wno-unused-result:                     Warning Options.    (line  633)
51540* Wno-unused-value:                      Warning Options.    (line  646)
51541* Wno-unused-variable:                   Warning Options.    (line  638)
51542* Wno-useless-cast:                      Warning Options.    (line 1275)
51543* Wno-varargs:                           Warning Options.    (line 1659)
51544* Wno-variadic-macros:                   Warning Options.    (line 1653)
51545* Wno-vector-operation-performance:      Warning Options.    (line 1664)
51546* Wno-virtual-move-assign:               Warning Options.    (line 1674)
51547* Wno-vla:                               Warning Options.    (line 1683)
51548* Wno-volatile-register-var:             Warning Options.    (line 1687)
51549* Wno-write-strings:                     Warning Options.    (line 1219)
51550* Wno-zero-as-null-pointer-constant:     Warning Options.    (line 1262)
51551* Wnoexcept:                             C++ Dialect Options.
51552                                                             (line  584)
51553* Wnon-template-friend:                  C++ Dialect Options.
51554                                                             (line  660)
51555* Wnon-virtual-dtor:                     C++ Dialect Options.
51556                                                             (line  590)
51557* Wnonnull:                              Warning Options.    (line  361)
51558* Wnormalized:                           Warning Options.    (line 1481)
51559* Wnormalized=:                          Warning Options.    (line 1481)
51560* Wodr:                                  Warning Options.    (line 1538)
51561* Wold-style-cast:                       C++ Dialect Options.
51562                                                             (line  676)
51563* Wold-style-declaration:                Warning Options.    (line 1413)
51564* Wold-style-definition:                 Warning Options.    (line 1419)
51565* Wopenm-simd:                           Warning Options.    (line 1543)
51566* Woverflow:                             Warning Options.    (line 1535)
51567* Woverlength-strings:                   Warning Options.    (line 1713)
51568* Woverloaded-virtual:                   C++ Dialect Options.
51569                                                             (line  682)
51570* Woverride-init:                        Warning Options.    (line 1548)
51571* Wp:                                    Preprocessor Options.
51572                                                             (line   14)
51573* Wpacked:                               Warning Options.    (line 1556)
51574* Wpacked-bitfield-compat:               Warning Options.    (line 1573)
51575* Wpadded:                               Warning Options.    (line 1590)
51576* Wparentheses:                          Warning Options.    (line  429)
51577* Wpedantic:                             Warning Options.    (line   82)
51578* Wpedantic-ms-format:                   Warning Options.    (line 1140)
51579* Wpmf-conversions:                      C++ Dialect Options.
51580                                                             (line  701)
51581* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
51582* Wpointer-arith:                        Warning Options.    (line 1146)
51583* Wpointer-sign:                         Warning Options.    (line 1702)
51584* Wpointer-to-int-cast:                  Warning Options.    (line 1640)
51585* Wpragmas:                              Warning Options.    (line  736)
51586* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
51587                                                             (line  175)
51588* wrapper:                               Overall Options.    (line  341)
51589* Wredundant-decls:                      Warning Options.    (line 1597)
51590* Wreorder:                              C++ Dialect Options.
51591                                                             (line  598)
51592* Wreturn-local-addr:                    Warning Options.    (line  524)
51593* Wreturn-type:                          Warning Options.    (line  528)
51594* Wselector:                             Objective-C and Objective-C++ Dialect Options.
51595                                                             (line  185)
51596* Wsequence-point:                       Warning Options.    (line  478)
51597* Wshadow:                               Warning Options.    (line 1084)
51598* Wshadow-ivar:                          Warning Options.    (line 1092)
51599* Wshift-count-negative:                 Warning Options.    (line  543)
51600* Wshift-count-overflow:                 Warning Options.    (line  547)
51601* Wsign-compare:                         Warning Options.    (line 1299)
51602* Wsign-conversion:                      Warning Options.    (line 1306)
51603* Wsign-promo:                           C++ Dialect Options.
51604                                                             (line  705)
51605* Wsized-deallocation:                   Warning Options.    (line 1318)
51606* Wsizeof-array-argument:                Warning Options.    (line 1337)
51607* Wsizeof-pointer-memaccess:             Warning Options.    (line 1329)
51608* Wstack-protector:                      Warning Options.    (line 1708)
51609* Wstack-usage:                          Warning Options.    (line 1112)
51610* Wstrict-aliasing:                      Warning Options.    (line  741)
51611* Wstrict-aliasing=n:                    Warning Options.    (line  749)
51612* Wstrict-null-sentinel:                 C++ Dialect Options.
51613                                                             (line  652)
51614* Wstrict-overflow:                      Warning Options.    (line  781)
51615* Wstrict-prototypes:                    Warning Options.    (line 1407)
51616* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
51617                                                             (line  197)
51618* Wsuggest-attribute=:                   Warning Options.    (line  831)
51619* Wsuggest-attribute=const:              Warning Options.    (line  837)
51620* Wsuggest-attribute=format:             Warning Options.    (line  850)
51621* Wsuggest-attribute=noreturn:           Warning Options.    (line  837)
51622* Wsuggest-attribute=pure:               Warning Options.    (line  837)
51623* Wsuggest-final-methods:                Warning Options.    (line  880)
51624* Wsuggest-final-types:                  Warning Options.    (line  871)
51625* Wswitch:                               Warning Options.    (line  551)
51626* Wswitch-bool:                          Warning Options.    (line  571)
51627* Wswitch-default:                       Warning Options.    (line  559)
51628* Wswitch-enum:                          Warning Options.    (line  562)
51629* Wsync-nand:                            Warning Options.    (line  581)
51630* Wsystem-headers <1>:                   Warning Options.    (line  949)
51631* Wsystem-headers:                       Preprocessor Options.
51632                                                             (line  165)
51633* Wtraditional <1>:                      Warning Options.    (line  985)
51634* Wtraditional:                          Preprocessor Options.
51635                                                             (line  118)
51636* Wtraditional-conversion:               Warning Options.    (line 1063)
51637* Wtrampolines:                          Warning Options.    (line  960)
51638* Wtrigraphs <1>:                        Preprocessor Options.
51639                                                             (line  106)
51640* Wtrigraphs:                            Warning Options.    (line  586)
51641* Wtype-limits:                          Warning Options.    (line 1153)
51642* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
51643                                                             (line  205)
51644* Wundef <1>:                            Preprocessor Options.
51645                                                             (line  124)
51646* Wundef:                                Warning Options.    (line 1077)
51647* Wuninitialized:                        Warning Options.    (line  663)
51648* Wunknown-pragmas:                      Warning Options.    (line  729)
51649* Wunsafe-loop-optimizations:            Warning Options.    (line 1134)
51650* Wunsuffixed-float-constants:           Warning Options.    (line 1728)
51651* Wunused:                               Warning Options.    (line  656)
51652* Wunused-but-set-parameter:             Warning Options.    (line  591)
51653* Wunused-but-set-variable:              Warning Options.    (line  600)
51654* Wunused-function:                      Warning Options.    (line  610)
51655* Wunused-label:                         Warning Options.    (line  615)
51656* Wunused-local-typedefs:                Warning Options.    (line  622)
51657* Wunused-macros:                        Preprocessor Options.
51658                                                             (line  129)
51659* Wunused-parameter:                     Warning Options.    (line  626)
51660* Wunused-result:                        Warning Options.    (line  633)
51661* Wunused-value:                         Warning Options.    (line  646)
51662* Wunused-variable:                      Warning Options.    (line  638)
51663* Wuseless-cast:                         Warning Options.    (line 1275)
51664* Wvarargs:                              Warning Options.    (line 1659)
51665* Wvariadic-macros:                      Warning Options.    (line 1653)
51666* Wvector-operation-performance:         Warning Options.    (line 1664)
51667* Wvirtual-move-assign:                  Warning Options.    (line 1674)
51668* Wvla:                                  Warning Options.    (line 1683)
51669* Wvolatile-register-var:                Warning Options.    (line 1687)
51670* Wwrite-strings:                        Warning Options.    (line 1219)
51671* Wzero-as-null-pointer-constant:        Warning Options.    (line 1262)
51672* x <1>:                                 Preprocessor Options.
51673                                                             (line  322)
51674* x:                                     Overall Options.    (line  126)
51675* Xassembler:                            Assembler Options.  (line   13)
51676* Xbind-lazy:                            VxWorks Options.    (line   26)
51677* Xbind-now:                             VxWorks Options.    (line   30)
51678* Xlinker:                               Link Options.       (line  248)
51679* Xpreprocessor:                         Preprocessor Options.
51680                                                             (line   25)
51681* Ym:                                    System V Options.   (line   26)
51682* YP:                                    System V Options.   (line   22)
51683* z:                                     Link Options.       (line  279)
51684
51685
51686File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
51687
51688Keyword Index
51689*************
51690
51691�[index�]
51692* Menu:
51693
51694* ! in constraint:                       Multi-Alternative.  (line   33)
51695* # in constraint:                       Modifiers.          (line   68)
51696* #pragma:                               Pragmas.            (line    6)
51697* #pragma implementation:                C++ Interface.      (line   36)
51698* #pragma implementation, implied:       C++ Interface.      (line   43)
51699* #pragma interface:                     C++ Interface.      (line   17)
51700* #pragma, reason for not using:         Function Attributes.
51701                                                             (line 2050)
51702* $:                                     Dollar Signs.       (line    6)
51703* $ in constraint:                       Multi-Alternative.  (line   42)
51704* % in constraint:                       Modifiers.          (line   52)
51705* %include:                              Spec Files.         (line   27)
51706* %include_noerr:                        Spec Files.         (line   31)
51707* %rename:                               Spec Files.         (line   35)
51708* & in constraint:                       Modifiers.          (line   25)
51709* ':                                     Incompatibilities.  (line  116)
51710* * in constraint:                       Modifiers.          (line   73)
51711* *__builtin_assume_aligned:             Other Builtins.     (line  346)
51712* + in constraint:                       Modifiers.          (line   12)
51713* -lgcc, use with -nodefaultlibs:        Link Options.       (line   91)
51714* -lgcc, use with -nostdlib:             Link Options.       (line   91)
51715* -march feature modifiers:              AArch64 Options.    (line  133)
51716* -mcpu feature modifiers:               AArch64 Options.    (line  133)
51717* -nodefaultlibs and unresolved references: Link Options.    (line   91)
51718* -nostdlib and unresolved references:   Link Options.       (line   91)
51719* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
51720                                                             (line  770)
51721* //:                                    C++ Comments.       (line    6)
51722* 0 in constraint:                       Simple Constraints. (line  127)
51723* < in constraint:                       Simple Constraints. (line   48)
51724* = in constraint:                       Modifiers.          (line    8)
51725* > in constraint:                       Simple Constraints. (line   61)
51726* ? in constraint:                       Multi-Alternative.  (line   27)
51727* ?: extensions:                         Conditionals.       (line    6)
51728* ?: side effect:                        Conditionals.       (line   20)
51729* ^ in constraint:                       Multi-Alternative.  (line   38)
51730* _ in variables in macros:              Typeof.             (line   46)
51731* __atomic_add_fetch:                    __atomic Builtins.  (line  169)
51732* __atomic_always_lock_free:             __atomic Builtins.  (line  247)
51733* __atomic_and_fetch:                    __atomic Builtins.  (line  173)
51734* __atomic_clear:                        __atomic Builtins.  (line  221)
51735* __atomic_compare_exchange:             __atomic Builtins.  (line  161)
51736* __atomic_compare_exchange_n:           __atomic Builtins.  (line  138)
51737* __atomic_exchange:                     __atomic Builtins.  (line  130)
51738* __atomic_exchange_n:                   __atomic Builtins.  (line  119)
51739* __atomic_fetch_add:                    __atomic Builtins.  (line  189)
51740* __atomic_fetch_and:                    __atomic Builtins.  (line  193)
51741* __atomic_fetch_nand:                   __atomic Builtins.  (line  199)
51742* __atomic_fetch_or:                     __atomic Builtins.  (line  197)
51743* __atomic_fetch_sub:                    __atomic Builtins.  (line  191)
51744* __atomic_fetch_xor:                    __atomic Builtins.  (line  195)
51745* __atomic_is_lock_free:                 __atomic Builtins.  (line  261)
51746* __atomic_load:                         __atomic Builtins.  (line   98)
51747* __atomic_load_n:                       __atomic Builtins.  (line   89)
51748* __atomic_nand_fetch:                   __atomic Builtins.  (line  179)
51749* __atomic_or_fetch:                     __atomic Builtins.  (line  177)
51750* __atomic_signal_fence:                 __atomic Builtins.  (line  239)
51751* __atomic_store:                        __atomic Builtins.  (line  113)
51752* __atomic_store_n:                      __atomic Builtins.  (line  104)
51753* __atomic_sub_fetch:                    __atomic Builtins.  (line  171)
51754* __atomic_test_and_set:                 __atomic Builtins.  (line  210)
51755* __atomic_thread_fence:                 __atomic Builtins.  (line  232)
51756* __atomic_xor_fetch:                    __atomic Builtins.  (line  175)
51757* __builtin___bnd_chk_ptr_bounds:        Pointer Bounds Checker builtins.
51758                                                             (line    6)
51759* __builtin___bnd_chk_ptr_lbounds:       Pointer Bounds Checker builtins.
51760                                                             (line   87)
51761* __builtin___bnd_chk_ptr_ubounds:       Pointer Bounds Checker builtins.
51762                                                             (line    6)
51763* __builtin___bnd_copy_ptr_bounds:       Pointer Bounds Checker builtins.
51764                                                             (line   48)
51765* __builtin___bnd_get_ptr_lbound:        Pointer Bounds Checker builtins.
51766                                                             (line  130)
51767* __builtin___bnd_get_ptr_ubound:        Pointer Bounds Checker builtins.
51768                                                             (line  142)
51769* __builtin___bnd_init_ptr_bounds:       Pointer Bounds Checker builtins.
51770                                                             (line   61)
51771* __builtin___bnd_narrow_ptr_bounds:     Pointer Bounds Checker builtins.
51772                                                             (line    6)
51773* __builtin___bnd_null_ptr_bounds:       Pointer Bounds Checker builtins.
51774                                                             (line    6)
51775* __builtin___bnd_set_ptr_bounds:        Pointer Bounds Checker builtins.
51776                                                             (line    6)
51777* __builtin___bnd_store_ptr_bounds:      Pointer Bounds Checker builtins.
51778                                                             (line   77)
51779* __builtin___clear_cache:               Other Builtins.     (line  381)
51780* __builtin___fprintf_chk:               Object Size Checking.
51781                                                             (line    6)
51782* __builtin___memcpy_chk:                Object Size Checking.
51783                                                             (line    6)
51784* __builtin___memmove_chk:               Object Size Checking.
51785                                                             (line    6)
51786* __builtin___mempcpy_chk:               Object Size Checking.
51787                                                             (line    6)
51788* __builtin___memset_chk:                Object Size Checking.
51789                                                             (line    6)
51790* __builtin___printf_chk:                Object Size Checking.
51791                                                             (line    6)
51792* __builtin___snprintf_chk:              Object Size Checking.
51793                                                             (line    6)
51794* __builtin___sprintf_chk:               Object Size Checking.
51795                                                             (line    6)
51796* __builtin___stpcpy_chk:                Object Size Checking.
51797                                                             (line    6)
51798* __builtin___strcat_chk:                Object Size Checking.
51799                                                             (line    6)
51800* __builtin___strcpy_chk:                Object Size Checking.
51801                                                             (line    6)
51802* __builtin___strncat_chk:               Object Size Checking.
51803                                                             (line    6)
51804* __builtin___strncpy_chk:               Object Size Checking.
51805                                                             (line    6)
51806* __builtin___vfprintf_chk:              Object Size Checking.
51807                                                             (line    6)
51808* __builtin___vprintf_chk:               Object Size Checking.
51809                                                             (line    6)
51810* __builtin___vsnprintf_chk:             Object Size Checking.
51811                                                             (line    6)
51812* __builtin___vsprintf_chk:              Object Size Checking.
51813                                                             (line    6)
51814* __builtin_add_overflow:                Integer Overflow Builtins.
51815                                                             (line   11)
51816* __builtin_apply:                       Constructing Calls. (line   31)
51817* __builtin_apply_args:                  Constructing Calls. (line   20)
51818* __builtin_arc_aligned:                 ARC Built-in Functions.
51819                                                             (line   20)
51820* __builtin_arc_brk:                     ARC Built-in Functions.
51821                                                             (line   29)
51822* __builtin_arc_core_read:               ARC Built-in Functions.
51823                                                             (line   34)
51824* __builtin_arc_core_write:              ARC Built-in Functions.
51825                                                             (line   41)
51826* __builtin_arc_divaw:                   ARC Built-in Functions.
51827                                                             (line   47)
51828* __builtin_arc_flag:                    ARC Built-in Functions.
51829                                                             (line   54)
51830* __builtin_arc_lr:                      ARC Built-in Functions.
51831                                                             (line   58)
51832* __builtin_arc_mul64:                   ARC Built-in Functions.
51833                                                             (line   65)
51834* __builtin_arc_mulu64:                  ARC Built-in Functions.
51835                                                             (line   70)
51836* __builtin_arc_nop:                     ARC Built-in Functions.
51837                                                             (line   74)
51838* __builtin_arc_norm:                    ARC Built-in Functions.
51839                                                             (line   78)
51840* __builtin_arc_normw:                   ARC Built-in Functions.
51841                                                             (line   85)
51842* __builtin_arc_rtie:                    ARC Built-in Functions.
51843                                                             (line   92)
51844* __builtin_arc_sleep:                   ARC Built-in Functions.
51845                                                             (line   96)
51846* __builtin_arc_sr:                      ARC Built-in Functions.
51847                                                             (line  101)
51848* __builtin_arc_swap:                    ARC Built-in Functions.
51849                                                             (line  107)
51850* __builtin_arc_swi:                     ARC Built-in Functions.
51851                                                             (line  113)
51852* __builtin_arc_sync:                    ARC Built-in Functions.
51853                                                             (line  117)
51854* __builtin_arc_trap_s:                  ARC Built-in Functions.
51855                                                             (line  121)
51856* __builtin_arc_unimp_s:                 ARC Built-in Functions.
51857                                                             (line  125)
51858* __builtin_bswap16:                     Other Builtins.     (line  612)
51859* __builtin_bswap32:                     Other Builtins.     (line  616)
51860* __builtin_bswap64:                     Other Builtins.     (line  620)
51861* __builtin_call_with_static_chain:      Other Builtins.     (line    6)
51862* __builtin_choose_expr:                 Other Builtins.     (line  168)
51863* __builtin_clrsb:                       Other Builtins.     (line  542)
51864* __builtin_clrsbl:                      Other Builtins.     (line  564)
51865* __builtin_clrsbll:                     Other Builtins.     (line  587)
51866* __builtin_clz:                         Other Builtins.     (line  534)
51867* __builtin_clzl:                        Other Builtins.     (line  556)
51868* __builtin_clzll:                       Other Builtins.     (line  579)
51869* __builtin_complex:                     Other Builtins.     (line  208)
51870* __builtin_constant_p:                  Other Builtins.     (line  218)
51871* __builtin_cpu_init:                    x86 Built-in Functions.
51872                                                             (line   63)
51873* __builtin_cpu_is:                      x86 Built-in Functions.
51874                                                             (line   92)
51875* __builtin_cpu_supports:                x86 Built-in Functions.
51876                                                             (line  164)
51877* __builtin_ctz:                         Other Builtins.     (line  538)
51878* __builtin_ctzl:                        Other Builtins.     (line  560)
51879* __builtin_ctzll:                       Other Builtins.     (line  583)
51880* __builtin_expect:                      Other Builtins.     (line  264)
51881* __builtin_extract_return_addr:         Return Address.     (line   36)
51882* __builtin_ffs:                         Other Builtins.     (line  530)
51883* __builtin_ffsl:                        Other Builtins.     (line  553)
51884* __builtin_ffsll:                       Other Builtins.     (line  575)
51885* __builtin_FILE:                        Other Builtins.     (line  374)
51886* __builtin_fpclassify:                  Other Builtins.     (line    6)
51887* __builtin_frame_address:               Return Address.     (line   49)
51888* __builtin_frob_return_address:         Return Address.     (line   45)
51889* __builtin_FUNCTION:                    Other Builtins.     (line  369)
51890* __builtin_huge_val:                    Other Builtins.     (line  432)
51891* __builtin_huge_valf:                   Other Builtins.     (line  437)
51892* __builtin_huge_vall:                   Other Builtins.     (line  440)
51893* __builtin_huge_valq:                   x86 Built-in Functions.
51894                                                             (line   57)
51895* __builtin_inf:                         Other Builtins.     (line  455)
51896* __builtin_infd128:                     Other Builtins.     (line  465)
51897* __builtin_infd32:                      Other Builtins.     (line  459)
51898* __builtin_infd64:                      Other Builtins.     (line  462)
51899* __builtin_inff:                        Other Builtins.     (line  469)
51900* __builtin_infl:                        Other Builtins.     (line  474)
51901* __builtin_infq:                        x86 Built-in Functions.
51902                                                             (line   53)
51903* __builtin_isfinite:                    Other Builtins.     (line    6)
51904* __builtin_isgreater:                   Other Builtins.     (line    6)
51905* __builtin_isgreaterequal:              Other Builtins.     (line    6)
51906* __builtin_isinf_sign:                  Other Builtins.     (line  478)
51907* __builtin_isless:                      Other Builtins.     (line    6)
51908* __builtin_islessequal:                 Other Builtins.     (line    6)
51909* __builtin_islessgreater:               Other Builtins.     (line    6)
51910* __builtin_isnormal:                    Other Builtins.     (line    6)
51911* __builtin_isunordered:                 Other Builtins.     (line    6)
51912* __builtin_LINE:                        Other Builtins.     (line  363)
51913* __builtin_mul_overflow:                Integer Overflow Builtins.
51914                                                             (line   63)
51915* __builtin_nan:                         Other Builtins.     (line  486)
51916* __builtin_nand128:                     Other Builtins.     (line  508)
51917* __builtin_nand32:                      Other Builtins.     (line  502)
51918* __builtin_nand64:                      Other Builtins.     (line  505)
51919* __builtin_nanf:                        Other Builtins.     (line  512)
51920* __builtin_nanl:                        Other Builtins.     (line  515)
51921* __builtin_nans:                        Other Builtins.     (line  519)
51922* __builtin_nansf:                       Other Builtins.     (line  523)
51923* __builtin_nansl:                       Other Builtins.     (line  526)
51924* __builtin_nds32_isb:                   NDS32 Built-in Functions.
51925                                                             (line   13)
51926* __builtin_nds32_isync:                 NDS32 Built-in Functions.
51927                                                             (line    9)
51928* __builtin_nds32_mfsr:                  NDS32 Built-in Functions.
51929                                                             (line   16)
51930* __builtin_nds32_mfusr:                 NDS32 Built-in Functions.
51931                                                             (line   19)
51932* __builtin_nds32_mtsr:                  NDS32 Built-in Functions.
51933                                                             (line   22)
51934* __builtin_nds32_mtusr:                 NDS32 Built-in Functions.
51935                                                             (line   25)
51936* __builtin_nds32_setgie_dis:            NDS32 Built-in Functions.
51937                                                             (line   31)
51938* __builtin_nds32_setgie_en:             NDS32 Built-in Functions.
51939                                                             (line   28)
51940* __builtin_non_tx_store:                S/390 System z Built-in Functions.
51941                                                             (line  104)
51942* __builtin_object_size:                 Object Size Checking.
51943                                                             (line   11)
51944* __builtin_offsetof:                    Offsetof.           (line    6)
51945* __builtin_parity:                      Other Builtins.     (line  550)
51946* __builtin_parityl:                     Other Builtins.     (line  571)
51947* __builtin_parityll:                    Other Builtins.     (line  595)
51948* __builtin_popcount:                    Other Builtins.     (line  547)
51949* __builtin_popcountl:                   Other Builtins.     (line  567)
51950* __builtin_popcountll:                  Other Builtins.     (line  591)
51951* __builtin_powi:                        Other Builtins.     (line  599)
51952* __builtin_powif:                       Other Builtins.     (line    6)
51953* __builtin_powil:                       Other Builtins.     (line    6)
51954* __builtin_prefetch:                    Other Builtins.     (line  393)
51955* __builtin_return:                      Constructing Calls. (line   48)
51956* __builtin_return_address:              Return Address.     (line   11)
51957* __builtin_rx_brk:                      RX Built-in Functions.
51958                                                             (line   11)
51959* __builtin_rx_clrpsw:                   RX Built-in Functions.
51960                                                             (line   14)
51961* __builtin_rx_int:                      RX Built-in Functions.
51962                                                             (line   18)
51963* __builtin_rx_machi:                    RX Built-in Functions.
51964                                                             (line   22)
51965* __builtin_rx_maclo:                    RX Built-in Functions.
51966                                                             (line   27)
51967* __builtin_rx_mulhi:                    RX Built-in Functions.
51968                                                             (line   32)
51969* __builtin_rx_mullo:                    RX Built-in Functions.
51970                                                             (line   37)
51971* __builtin_rx_mvfachi:                  RX Built-in Functions.
51972                                                             (line   42)
51973* __builtin_rx_mvfacmi:                  RX Built-in Functions.
51974                                                             (line   46)
51975* __builtin_rx_mvfc:                     RX Built-in Functions.
51976                                                             (line   50)
51977* __builtin_rx_mvtachi:                  RX Built-in Functions.
51978                                                             (line   54)
51979* __builtin_rx_mvtaclo:                  RX Built-in Functions.
51980                                                             (line   58)
51981* __builtin_rx_mvtc:                     RX Built-in Functions.
51982                                                             (line   62)
51983* __builtin_rx_mvtipl:                   RX Built-in Functions.
51984                                                             (line   66)
51985* __builtin_rx_racw:                     RX Built-in Functions.
51986                                                             (line   70)
51987* __builtin_rx_revw:                     RX Built-in Functions.
51988                                                             (line   74)
51989* __builtin_rx_rmpa:                     RX Built-in Functions.
51990                                                             (line   79)
51991* __builtin_rx_round:                    RX Built-in Functions.
51992                                                             (line   83)
51993* __builtin_rx_sat:                      RX Built-in Functions.
51994                                                             (line   88)
51995* __builtin_rx_setpsw:                   RX Built-in Functions.
51996                                                             (line   92)
51997* __builtin_rx_wait:                     RX Built-in Functions.
51998                                                             (line   96)
51999* __builtin_sadd_overflow:               Integer Overflow Builtins.
52000                                                             (line   13)
52001* __builtin_saddl_overflow:              Integer Overflow Builtins.
52002                                                             (line   15)
52003* __builtin_saddll_overflow:             Integer Overflow Builtins.
52004                                                             (line   17)
52005* __builtin_set_thread_pointer:          SH Built-in Functions.
52006                                                             (line   10)
52007* __builtin_sh_get_fpscr:                SH Built-in Functions.
52008                                                             (line   36)
52009* __builtin_sh_set_fpscr:                SH Built-in Functions.
52010                                                             (line   39)
52011* __builtin_smul_overflow:               Integer Overflow Builtins.
52012                                                             (line   65)
52013* __builtin_smull_overflow:              Integer Overflow Builtins.
52014                                                             (line   67)
52015* __builtin_smulll_overflow:             Integer Overflow Builtins.
52016                                                             (line   69)
52017* __builtin_ssub_overflow:               Integer Overflow Builtins.
52018                                                             (line   45)
52019* __builtin_ssubl_overflow:              Integer Overflow Builtins.
52020                                                             (line   47)
52021* __builtin_ssubll_overflow:             Integer Overflow Builtins.
52022                                                             (line   49)
52023* __builtin_sub_overflow:                Integer Overflow Builtins.
52024                                                             (line   43)
52025* __builtin_tabort:                      S/390 System z Built-in Functions.
52026                                                             (line   87)
52027* __builtin_tbegin:                      S/390 System z Built-in Functions.
52028                                                             (line    7)
52029* __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
52030                                                             (line   59)
52031* __builtin_tbegin_retry:                S/390 System z Built-in Functions.
52032                                                             (line   65)
52033* __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
52034                                                             (line   72)
52035* __builtin_tbeginc:                     S/390 System z Built-in Functions.
52036                                                             (line   78)
52037* __builtin_tend:                        S/390 System z Built-in Functions.
52038                                                             (line   82)
52039* __builtin_thread_pointer:              SH Built-in Functions.
52040                                                             (line   20)
52041* __builtin_trap:                        Other Builtins.     (line  288)
52042* __builtin_tx_assist:                   S/390 System z Built-in Functions.
52043                                                             (line   92)
52044* __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
52045                                                             (line   98)
52046* __builtin_types_compatible_p:          Other Builtins.     (line  111)
52047* __builtin_uadd_overflow:               Integer Overflow Builtins.
52048                                                             (line   19)
52049* __builtin_uaddl_overflow:              Integer Overflow Builtins.
52050                                                             (line   21)
52051* __builtin_uaddll_overflow:             Integer Overflow Builtins.
52052                                                             (line   23)
52053* __builtin_umul_overflow:               Integer Overflow Builtins.
52054                                                             (line   71)
52055* __builtin_umull_overflow:              Integer Overflow Builtins.
52056                                                             (line   73)
52057* __builtin_umulll_overflow:             Integer Overflow Builtins.
52058                                                             (line   75)
52059* __builtin_unreachable:                 Other Builtins.     (line  295)
52060* __builtin_usub_overflow:               Integer Overflow Builtins.
52061                                                             (line   51)
52062* __builtin_usubl_overflow:              Integer Overflow Builtins.
52063                                                             (line   53)
52064* __builtin_usubll_overflow:             Integer Overflow Builtins.
52065                                                             (line   55)
52066* __builtin_va_arg_pack:                 Constructing Calls. (line   53)
52067* __builtin_va_arg_pack_len:             Constructing Calls. (line   76)
52068* __complex__ keyword:                   Complex.            (line    6)
52069* __declspec(dllexport):                 Function Attributes.
52070                                                             (line  285)
52071* __declspec(dllimport):                 Function Attributes.
52072                                                             (line  319)
52073* __ea SPU Named Address Spaces:         Named Address Spaces.
52074                                                             (line  155)
52075* __extension__:                         Alternate Keywords. (line   30)
52076* __far M32C Named Address Spaces:       Named Address Spaces.
52077                                                             (line  139)
52078* __far RL78 Named Address Spaces:       Named Address Spaces.
52079                                                             (line  147)
52080* __flash AVR Named Address Spaces:      Named Address Spaces.
52081                                                             (line   31)
52082* __flash1 AVR Named Address Spaces:     Named Address Spaces.
52083                                                             (line   40)
52084* __flash2 AVR Named Address Spaces:     Named Address Spaces.
52085                                                             (line   40)
52086* __flash3 AVR Named Address Spaces:     Named Address Spaces.
52087                                                             (line   40)
52088* __flash4 AVR Named Address Spaces:     Named Address Spaces.
52089                                                             (line   40)
52090* __flash5 AVR Named Address Spaces:     Named Address Spaces.
52091                                                             (line   40)
52092* __float128 data type:                  Floating Types.     (line    6)
52093* __float80 data type:                   Floating Types.     (line    6)
52094* __fp16 data type:                      Half-Precision.     (line    6)
52095* __func__ identifier:                   Function Names.     (line    6)
52096* __FUNCTION__ identifier:               Function Names.     (line    6)
52097* __imag__ keyword:                      Complex.            (line   27)
52098* __int128 data types:                   __int128.           (line    6)
52099* __memx AVR Named Address Spaces:       Named Address Spaces.
52100                                                             (line   46)
52101* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
52102* __real__ keyword:                      Complex.            (line   27)
52103* __STDC_HOSTED__:                       Standards.          (line   13)
52104* __sync_add_and_fetch:                  __sync Builtins.    (line   60)
52105* __sync_and_and_fetch:                  __sync Builtins.    (line   60)
52106* __sync_bool_compare_and_swap:          __sync Builtins.    (line   71)
52107* __sync_fetch_and_add:                  __sync Builtins.    (line   44)
52108* __sync_fetch_and_and:                  __sync Builtins.    (line   44)
52109* __sync_fetch_and_nand:                 __sync Builtins.    (line   44)
52110* __sync_fetch_and_or:                   __sync Builtins.    (line   44)
52111* __sync_fetch_and_sub:                  __sync Builtins.    (line   44)
52112* __sync_fetch_and_xor:                  __sync Builtins.    (line   44)
52113* __sync_lock_release:                   __sync Builtins.    (line  101)
52114* __sync_lock_test_and_set:              __sync Builtins.    (line   83)
52115* __sync_nand_and_fetch:                 __sync Builtins.    (line   60)
52116* __sync_or_and_fetch:                   __sync Builtins.    (line   60)
52117* __sync_sub_and_fetch:                  __sync Builtins.    (line   60)
52118* __sync_synchronize:                    __sync Builtins.    (line   80)
52119* __sync_val_compare_and_swap:           __sync Builtins.    (line   71)
52120* __sync_xor_and_fetch:                  __sync Builtins.    (line   60)
52121* __thread:                              Thread-Local.       (line    6)
52122* _Accum data type:                      Fixed-Point.        (line    6)
52123* _Complex keyword:                      Complex.            (line    6)
52124* _Decimal128 data type:                 Decimal Float.      (line    6)
52125* _Decimal32 data type:                  Decimal Float.      (line    6)
52126* _Decimal64 data type:                  Decimal Float.      (line    6)
52127* _exit:                                 Other Builtins.     (line    6)
52128* _Exit:                                 Other Builtins.     (line    6)
52129* _Fract data type:                      Fixed-Point.        (line    6)
52130* _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
52131                                                             (line   48)
52132* _Sat data type:                        Fixed-Point.        (line    6)
52133* _xabort:                               x86 transactional memory intrinsics.
52134                                                             (line   64)
52135* _xbegin:                               x86 transactional memory intrinsics.
52136                                                             (line   20)
52137* _xend:                                 x86 transactional memory intrinsics.
52138                                                             (line   55)
52139* _xtest:                                x86 transactional memory intrinsics.
52140                                                             (line   60)
52141* AArch64 Options:                       AArch64 Options.    (line    6)
52142* ABI:                                   Compatibility.      (line    6)
52143* abi_tag function attribute:            C++ Attributes.     (line    9)
52144* abi_tag type attribute:                C++ Attributes.     (line    9)
52145* abi_tag variable attribute:            C++ Attributes.     (line    9)
52146* abort:                                 Other Builtins.     (line    6)
52147* abs:                                   Other Builtins.     (line    6)
52148* accessing volatiles <1>:               C++ Volatiles.      (line    6)
52149* accessing volatiles:                   Volatiles.          (line    6)
52150* acos:                                  Other Builtins.     (line    6)
52151* acosf:                                 Other Builtins.     (line    6)
52152* acosh:                                 Other Builtins.     (line    6)
52153* acoshf:                                Other Builtins.     (line    6)
52154* acoshl:                                Other Builtins.     (line    6)
52155* acosl:                                 Other Builtins.     (line    6)
52156* Ada:                                   G++ and GCC.        (line    6)
52157* additional floating types:             Floating Types.     (line    6)
52158* address constraints:                   Simple Constraints. (line  154)
52159* address of a label:                    Labels as Values.   (line    6)
52160* address variable attribute, AVR:       Variable Attributes.
52161                                                             (line  375)
52162* address_operand:                       Simple Constraints. (line  158)
52163* alias function attribute:              Function Attributes.
52164                                                             (line   40)
52165* aligned function attribute:            Function Attributes.
52166                                                             (line   53)
52167* aligned type attribute:                Type Attributes.    (line   32)
52168* aligned variable attribute:            Variable Attributes.
52169                                                             (line   24)
52170* alignment:                             Alignment.          (line    6)
52171* alloc_align function attribute:        Function Attributes.
52172                                                             (line   94)
52173* alloc_size function attribute:         Function Attributes.
52174                                                             (line   73)
52175* alloca:                                Other Builtins.     (line    6)
52176* alloca vs variable-length arrays:      Variable Length.    (line   35)
52177* Allow nesting in an interrupt handler on the Blackfin processor: Function Attributes.
52178                                                             (line 1057)
52179* Altera Nios II options:                Nios II Options.    (line    6)
52180* alternate keywords:                    Alternate Keywords. (line    6)
52181* altivec type attribute, PowerPC:       Type Attributes.    (line  363)
52182* altivec variable attribute, PowerPC:   Variable Attributes.
52183                                                             (line  518)
52184* always_inline function attribute:      Function Attributes.
52185                                                             (line  126)
52186* AMD1:                                  Standards.          (line   13)
52187* ANSI C:                                Standards.          (line   13)
52188* ANSI C standard:                       Standards.          (line   13)
52189* ANSI C89:                              Standards.          (line   13)
52190* ANSI support:                          C Dialect Options.  (line   10)
52191* ANSI X3.159-1989:                      Standards.          (line   13)
52192* apostrophes:                           Incompatibilities.  (line  116)
52193* application binary interface:          Compatibility.      (line    6)
52194* ARC options:                           ARC Options.        (line    6)
52195* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
52196                                                             (line    6)
52197* ARM options:                           ARM Options.        (line    6)
52198* arrays of length zero:                 Zero Length.        (line    6)
52199* arrays of variable length:             Variable Length.    (line    6)
52200* arrays, non-lvalue:                    Subscripting.       (line    6)
52201* artificial function attribute:         Function Attributes.
52202                                                             (line  174)
52203* asin:                                  Other Builtins.     (line    6)
52204* asinf:                                 Other Builtins.     (line    6)
52205* asinh:                                 Other Builtins.     (line    6)
52206* asinhf:                                Other Builtins.     (line    6)
52207* asinhl:                                Other Builtins.     (line    6)
52208* asinl:                                 Other Builtins.     (line    6)
52209* asm assembler template:                Extended Asm.       (line  219)
52210* asm clobbers:                          Extended Asm.       (line  578)
52211* asm constraints:                       Constraints.        (line    6)
52212* asm expressions:                       Extended Asm.       (line  482)
52213* asm goto labels:                       Extended Asm.       (line  648)
52214* asm input operands:                    Extended Asm.       (line  482)
52215* asm keyword:                           Using Assembly Language with C.
52216                                                             (line    6)
52217* asm output operands:                   Extended Asm.       (line  322)
52218* asm volatile:                          Extended Asm.       (line  109)
52219* assembler names for identifiers:       Asm Labels.         (line    6)
52220* assembly code, invalid:                Bug Criteria.       (line   12)
52221* assembly language in C:                Using Assembly Language with C.
52222                                                             (line    6)
52223* assembly language in C, basic:         Basic Asm.          (line    6)
52224* assembly language in C, extended:      Extended Asm.       (line    6)
52225* assume_aligned function attribute:     Function Attributes.
52226                                                             (line  111)
52227* atan:                                  Other Builtins.     (line    6)
52228* atan2:                                 Other Builtins.     (line    6)
52229* atan2f:                                Other Builtins.     (line    6)
52230* atan2l:                                Other Builtins.     (line    6)
52231* atanf:                                 Other Builtins.     (line    6)
52232* atanh:                                 Other Builtins.     (line    6)
52233* atanhf:                                Other Builtins.     (line    6)
52234* atanhl:                                Other Builtins.     (line    6)
52235* atanl:                                 Other Builtins.     (line    6)
52236* attribute of types:                    Type Attributes.    (line    6)
52237* attribute of variables:                Variable Attributes.
52238                                                             (line    6)
52239* attribute syntax:                      Attribute Syntax.   (line    6)
52240* autoincrement/decrement addressing:    Simple Constraints. (line   30)
52241* automatic inline for C++ member fns:   Inline.             (line   71)
52242* AVR Options:                           AVR Options.        (line    6)
52243* Backwards Compatibility:               Backwards Compatibility.
52244                                                             (line    6)
52245* bank_switch function attribute, M32C:  Function Attributes.
52246                                                             (line  181)
52247* base class members:                    Name lookup.        (line    6)
52248* based type attribute, MeP:             Type Attributes.    (line  349)
52249* based variable attribute, MeP:         Variable Attributes.
52250                                                             (line  470)
52251* basic asm:                             Basic Asm.          (line    6)
52252* bcmp:                                  Other Builtins.     (line    6)
52253* below100 variable attribute, Xstormy16: Variable Attributes.
52254                                                             (line  656)
52255* binary compatibility:                  Compatibility.      (line    6)
52256* Binary constants using the 0b prefix:  Binary constants.   (line    6)
52257* Blackfin Options:                      Blackfin Options.   (line    6)
52258* bnd_instrument function attribute:     Function Attributes.
52259                                                             (line 1328)
52260* bnd_legacy function attribute:         Function Attributes.
52261                                                             (line 1323)
52262* bnd_variable_size type attribute:      Type Attributes.    (line  295)
52263* bound pointer to member function:      Bound member functions.
52264                                                             (line    6)
52265* break handler functions:               Function Attributes.
52266                                                             (line 1417)
52267* break_handler function attribute, MicroBlaze: Function Attributes.
52268                                                             (line 1417)
52269* brk_interrupt function attribute, RL78: Function Attributes.
52270                                                             (line  799)
52271* bug criteria:                          Bug Criteria.       (line    6)
52272* bugs:                                  Bugs.               (line    6)
52273* bugs, known:                           Trouble.            (line    6)
52274* built-in functions <1>:                C Dialect Options.  (line  213)
52275* built-in functions:                    Other Builtins.     (line    6)
52276* bzero:                                 Other Builtins.     (line    6)
52277* C compilation options:                 Invoking GCC.       (line   17)
52278* C intermediate output, nonexistent:    G++ and GCC.        (line   35)
52279* C language extensions:                 C Extensions.       (line    6)
52280* C language, traditional:               C Dialect Options.  (line  344)
52281* C standard:                            Standards.          (line   13)
52282* C standards:                           Standards.          (line   13)
52283* c++:                                   Invoking G++.       (line   14)
52284* C++:                                   G++ and GCC.        (line   30)
52285* C++ comments:                          C++ Comments.       (line    6)
52286* C++ compilation options:               Invoking GCC.       (line   23)
52287* C++ interface and implementation headers: C++ Interface.   (line    6)
52288* C++ language extensions:               C++ Extensions.     (line    6)
52289* C++ member fns, automatically inline:  Inline.             (line   71)
52290* C++ misunderstandings:                 C++ Misunderstandings.
52291                                                             (line    6)
52292* C++ options, command-line:             C++ Dialect Options.
52293                                                             (line    6)
52294* C++ pragmas, effect on inlining:       C++ Interface.      (line   57)
52295* C++ source file suffixes:              Invoking G++.       (line    6)
52296* C++ static data, declaring and defining: Static Definitions.
52297                                                             (line    6)
52298* C11:                                   Standards.          (line   13)
52299* C1X:                                   Standards.          (line   13)
52300* C6X Options:                           C6X Options.        (line    6)
52301* C89:                                   Standards.          (line   13)
52302* C90:                                   Standards.          (line   13)
52303* C94:                                   Standards.          (line   13)
52304* C95:                                   Standards.          (line   13)
52305* C99:                                   Standards.          (line   13)
52306* C9X:                                   Standards.          (line   13)
52307* C_INCLUDE_PATH:                        Environment Variables.
52308                                                             (line  130)
52309* cabs:                                  Other Builtins.     (line    6)
52310* cabsf:                                 Other Builtins.     (line    6)
52311* cabsl:                                 Other Builtins.     (line    6)
52312* cacos:                                 Other Builtins.     (line    6)
52313* cacosf:                                Other Builtins.     (line    6)
52314* cacosh:                                Other Builtins.     (line    6)
52315* cacoshf:                               Other Builtins.     (line    6)
52316* cacoshl:                               Other Builtins.     (line    6)
52317* cacosl:                                Other Builtins.     (line    6)
52318* callee_pop_aggregate_return function attribute, x86: Function Attributes.
52319                                                             (line 1012)
52320* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
52321                                                             (line  538)
52322* calloc:                                Other Builtins.     (line    6)
52323* caret:                                 Multi-Alternative.  (line   38)
52324* caret GCC_COLORS capability:           Language Independent Options.
52325                                                             (line   78)
52326* carg:                                  Other Builtins.     (line    6)
52327* cargf:                                 Other Builtins.     (line    6)
52328* cargl:                                 Other Builtins.     (line    6)
52329* case labels in initializers:           Designated Inits.   (line    6)
52330* case ranges:                           Case Ranges.        (line    6)
52331* casin:                                 Other Builtins.     (line    6)
52332* casinf:                                Other Builtins.     (line    6)
52333* casinh:                                Other Builtins.     (line    6)
52334* casinhf:                               Other Builtins.     (line    6)
52335* casinhl:                               Other Builtins.     (line    6)
52336* casinl:                                Other Builtins.     (line    6)
52337* cast to a union:                       Cast to Union.      (line    6)
52338* catan:                                 Other Builtins.     (line    6)
52339* catanf:                                Other Builtins.     (line    6)
52340* catanh:                                Other Builtins.     (line    6)
52341* catanhf:                               Other Builtins.     (line    6)
52342* catanhl:                               Other Builtins.     (line    6)
52343* catanl:                                Other Builtins.     (line    6)
52344* cb variable attribute, MeP:            Variable Attributes.
52345                                                             (line  502)
52346* cbrt:                                  Other Builtins.     (line    6)
52347* cbrtf:                                 Other Builtins.     (line    6)
52348* cbrtl:                                 Other Builtins.     (line    6)
52349* ccos:                                  Other Builtins.     (line    6)
52350* ccosf:                                 Other Builtins.     (line    6)
52351* ccosh:                                 Other Builtins.     (line    6)
52352* ccoshf:                                Other Builtins.     (line    6)
52353* ccoshl:                                Other Builtins.     (line    6)
52354* ccosl:                                 Other Builtins.     (line    6)
52355* cdecl function attribute, x86-32:      Function Attributes.
52356                                                             (line  217)
52357* ceil:                                  Other Builtins.     (line    6)
52358* ceilf:                                 Other Builtins.     (line    6)
52359* ceill:                                 Other Builtins.     (line    6)
52360* cexp:                                  Other Builtins.     (line    6)
52361* cexpf:                                 Other Builtins.     (line    6)
52362* cexpl:                                 Other Builtins.     (line    6)
52363* character set, execution:              Preprocessor Options.
52364                                                             (line  564)
52365* character set, input:                  Preprocessor Options.
52366                                                             (line  577)
52367* character set, input normalization:    Warning Options.    (line 1481)
52368* character set, wide execution:         Preprocessor Options.
52369                                                             (line  569)
52370* cimag:                                 Other Builtins.     (line    6)
52371* cimagf:                                Other Builtins.     (line    6)
52372* cimagl:                                Other Builtins.     (line    6)
52373* cleanup variable attribute:            Variable Attributes.
52374                                                             (line   90)
52375* clog:                                  Other Builtins.     (line    6)
52376* clogf:                                 Other Builtins.     (line    6)
52377* clogl:                                 Other Builtins.     (line    6)
52378* COBOL:                                 G++ and GCC.        (line   23)
52379* code generation conventions:           Code Gen Options.   (line    6)
52380* code, mixed with declarations:         Mixed Declarations. (line    6)
52381* cold function attribute:               Function Attributes.
52382                                                             (line 1287)
52383* cold label attribute:                  Label Attributes.   (line   43)
52384* command options:                       Invoking GCC.       (line    6)
52385* comments, C++ style:                   C++ Comments.       (line    6)
52386* common variable attribute:             Variable Attributes.
52387                                                             (line  106)
52388* comparison of signed and unsigned values, warning: Warning Options.
52389                                                             (line 1299)
52390* compiler bugs, reporting:              Bug Reporting.      (line    6)
52391* compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
52392* compiler options, C++:                 C++ Dialect Options.
52393                                                             (line    6)
52394* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
52395                                                             (line    6)
52396* compiler version, specifying:          Target Options.     (line    6)
52397* COMPILER_PATH:                         Environment Variables.
52398                                                             (line   91)
52399* complex conjugation:                   Complex.            (line   34)
52400* complex numbers:                       Complex.            (line    6)
52401* compound literals:                     Compound Literals.  (line    6)
52402* computed gotos:                        Labels as Values.   (line    6)
52403* conditional expressions, extensions:   Conditionals.       (line    6)
52404* conflicting types:                     Disappointments.    (line   21)
52405* conj:                                  Other Builtins.     (line    6)
52406* conjf:                                 Other Builtins.     (line    6)
52407* conjl:                                 Other Builtins.     (line    6)
52408* const applied to function:             Function Attributes.
52409                                                             (line    6)
52410* const function attribute:              Function Attributes.
52411                                                             (line  223)
52412* const qualifier:                       Pointers to Arrays. (line    6)
52413* constants in constraints:              Simple Constraints. (line   70)
52414* constraint modifier characters:        Modifiers.          (line    6)
52415* constraint, matching:                  Simple Constraints. (line  139)
52416* constraints, asm:                      Constraints.        (line    6)
52417* constraints, machine specific:         Machine Constraints.
52418                                                             (line    6)
52419* constructing calls:                    Constructing Calls. (line    6)
52420* constructor expressions:               Compound Literals.  (line    6)
52421* constructor function attribute:        Function Attributes.
52422                                                             (line  238)
52423* contributors:                          Contributors.       (line    6)
52424* copysign:                              Other Builtins.     (line    6)
52425* copysignf:                             Other Builtins.     (line    6)
52426* copysignl:                             Other Builtins.     (line    6)
52427* core dump:                             Bug Criteria.       (line    9)
52428* cos:                                   Other Builtins.     (line    6)
52429* cosf:                                  Other Builtins.     (line    6)
52430* cosh:                                  Other Builtins.     (line    6)
52431* coshf:                                 Other Builtins.     (line    6)
52432* coshl:                                 Other Builtins.     (line    6)
52433* cosl:                                  Other Builtins.     (line    6)
52434* CPATH:                                 Environment Variables.
52435                                                             (line  129)
52436* CPLUS_INCLUDE_PATH:                    Environment Variables.
52437                                                             (line  131)
52438* cpow:                                  Other Builtins.     (line    6)
52439* cpowf:                                 Other Builtins.     (line    6)
52440* cpowl:                                 Other Builtins.     (line    6)
52441* CPP_RESTRICTED:                        Environment Variables.
52442                                                             (line  178)
52443* cproj:                                 Other Builtins.     (line    6)
52444* cprojf:                                Other Builtins.     (line    6)
52445* cprojl:                                Other Builtins.     (line    6)
52446* CR16 Options:                          CR16 Options.       (line    6)
52447* creal:                                 Other Builtins.     (line    6)
52448* crealf:                                Other Builtins.     (line    6)
52449* creall:                                Other Builtins.     (line    6)
52450* CRIS Options:                          CRIS Options.       (line    6)
52451* critical function attribute, MSP430:   Function Attributes.
52452                                                             (line  692)
52453* cross compiling:                       Target Options.     (line    6)
52454* csin:                                  Other Builtins.     (line    6)
52455* csinf:                                 Other Builtins.     (line    6)
52456* csinh:                                 Other Builtins.     (line    6)
52457* csinhf:                                Other Builtins.     (line    6)
52458* csinhl:                                Other Builtins.     (line    6)
52459* csinl:                                 Other Builtins.     (line    6)
52460* csqrt:                                 Other Builtins.     (line    6)
52461* csqrtf:                                Other Builtins.     (line    6)
52462* csqrtl:                                Other Builtins.     (line    6)
52463* ctan:                                  Other Builtins.     (line    6)
52464* ctanf:                                 Other Builtins.     (line    6)
52465* ctanh:                                 Other Builtins.     (line    6)
52466* ctanhf:                                Other Builtins.     (line    6)
52467* ctanhl:                                Other Builtins.     (line    6)
52468* ctanl:                                 Other Builtins.     (line    6)
52469* Darwin options:                        Darwin Options.     (line    6)
52470* dcgettext:                             Other Builtins.     (line    6)
52471* dd integer suffix:                     Decimal Float.      (line    6)
52472* DD integer suffix:                     Decimal Float.      (line    6)
52473* deallocating variable length arrays:   Variable Length.    (line   22)
52474* debugging information options:         Debugging Options.  (line    6)
52475* decimal floating types:                Decimal Float.      (line    6)
52476* declaration scope:                     Incompatibilities.  (line   80)
52477* declarations inside expressions:       Statement Exprs.    (line    6)
52478* declarations, mixed with code:         Mixed Declarations. (line    6)
52479* declaring attributes of functions:     Function Attributes.
52480                                                             (line    6)
52481* declaring static data in C++:          Static Definitions. (line    6)
52482* defining static data in C++:           Static Definitions. (line    6)
52483* dependencies for make as output:       Environment Variables.
52484                                                             (line  157)
52485* dependencies, make:                    Preprocessor Options.
52486                                                             (line  185)
52487* DEPENDENCIES_OUTPUT:                   Environment Variables.
52488                                                             (line  156)
52489* dependent name lookup:                 Name lookup.        (line    6)
52490* deprecated function attribute:         Function Attributes.
52491                                                             (line  260)
52492* deprecated type attribute:             Type Attributes.    (line  205)
52493* deprecated variable attribute:         Variable Attributes.
52494                                                             (line  115)
52495* designated initializers:               Designated Inits.   (line    6)
52496* designated_init type attribute:        Type Attributes.    (line  283)
52497* designator lists:                      Designated Inits.   (line   97)
52498* designators:                           Designated Inits.   (line   64)
52499* destructor function attribute:         Function Attributes.
52500                                                             (line  238)
52501* DF integer suffix:                     Decimal Float.      (line    6)
52502* df integer suffix:                     Decimal Float.      (line    6)
52503* dgettext:                              Other Builtins.     (line    6)
52504* diagnostic messages:                   Language Independent Options.
52505                                                             (line    6)
52506* dialect options:                       C Dialect Options.  (line    6)
52507* digits in constraint:                  Simple Constraints. (line  127)
52508* directory options:                     Directory Options.  (line    6)
52509* disinterrupt function attribute, Epiphany: Function Attributes.
52510                                                             (line  280)
52511* disinterrupt function attribute, MeP:  Function Attributes.
52512                                                             (line  280)
52513* DL integer suffix:                     Decimal Float.      (line    6)
52514* dl integer suffix:                     Decimal Float.      (line    6)
52515* dllexport function attribute:          Function Attributes.
52516                                                             (line  285)
52517* dllexport variable attribute:          Variable Attributes.
52518                                                             (line  311)
52519* dllimport function attribute:          Function Attributes.
52520                                                             (line  319)
52521* dllimport variable attribute:          Variable Attributes.
52522                                                             (line  307)
52523* dollar sign:                           Multi-Alternative.  (line   42)
52524* dollar signs in identifier names:      Dollar Signs.       (line    6)
52525* double-word arithmetic:                Long Long.          (line    6)
52526* downward funargs:                      Nested Functions.   (line    6)
52527* drem:                                  Other Builtins.     (line    6)
52528* dremf:                                 Other Builtins.     (line    6)
52529* dreml:                                 Other Builtins.     (line    6)
52530* E in constraint:                       Simple Constraints. (line   89)
52531* earlyclobber operand:                  Modifiers.          (line   25)
52532* eight-bit data on the H8/300, H8/300H, and H8S: Variable Attributes.
52533                                                             (line  408)
52534* eightbit_data variable attribute, H8/300: Variable Attributes.
52535                                                             (line  408)
52536* EIND:                                  AVR Options.        (line  242)
52537* empty structures:                      Empty Structures.   (line    6)
52538* Enable Cilk Plus:                      C Dialect Options.  (line  288)
52539* environment variables:                 Environment Variables.
52540                                                             (line    6)
52541* erf:                                   Other Builtins.     (line    6)
52542* erfc:                                  Other Builtins.     (line    6)
52543* erfcf:                                 Other Builtins.     (line    6)
52544* erfcl:                                 Other Builtins.     (line    6)
52545* erff:                                  Other Builtins.     (line    6)
52546* erfl:                                  Other Builtins.     (line    6)
52547* error function attribute:              Function Attributes.
52548                                                             (line  193)
52549* error GCC_COLORS capability:           Language Independent Options.
52550                                                             (line   69)
52551* error messages:                        Warnings and Errors.
52552                                                             (line    6)
52553* escaped newlines:                      Escaped Newlines.   (line    6)
52554* exception function attribute:          Function Attributes.
52555                                                             (line  371)
52556* exception handler functions, Blackfin: Function Attributes.
52557                                                             (line  376)
52558* exception handler functions, NDS32:    Function Attributes.
52559                                                             (line  371)
52560* exception_handler function attribute:  Function Attributes.
52561                                                             (line  376)
52562* exclamation point:                     Multi-Alternative.  (line   33)
52563* exit:                                  Other Builtins.     (line    6)
52564* exp:                                   Other Builtins.     (line    6)
52565* exp10:                                 Other Builtins.     (line    6)
52566* exp10f:                                Other Builtins.     (line    6)
52567* exp10l:                                Other Builtins.     (line    6)
52568* exp2:                                  Other Builtins.     (line    6)
52569* exp2f:                                 Other Builtins.     (line    6)
52570* exp2l:                                 Other Builtins.     (line    6)
52571* expf:                                  Other Builtins.     (line    6)
52572* expl:                                  Other Builtins.     (line    6)
52573* explicit register variables:           Explicit Reg Vars.  (line    6)
52574* expm1:                                 Other Builtins.     (line    6)
52575* expm1f:                                Other Builtins.     (line    6)
52576* expm1l:                                Other Builtins.     (line    6)
52577* expressions containing statements:     Statement Exprs.    (line    6)
52578* expressions, constructor:              Compound Literals.  (line    6)
52579* extended asm:                          Extended Asm.       (line    6)
52580* extensible constraints:                Simple Constraints. (line  163)
52581* extensions, ?::                        Conditionals.       (line    6)
52582* extensions, C language:                C Extensions.       (line    6)
52583* extensions, C++ language:              C++ Extensions.     (line    6)
52584* external declaration scope:            Incompatibilities.  (line   80)
52585* externally_visible function attribute: Function Attributes.
52586                                                             (line  382)
52587* F in constraint:                       Simple Constraints. (line   94)
52588* fabs:                                  Other Builtins.     (line    6)
52589* fabsf:                                 Other Builtins.     (line    6)
52590* fabsl:                                 Other Builtins.     (line    6)
52591* far function attribute:                Function Attributes.
52592                                                             (line  395)
52593* far function attribute, MIPS:          Function Attributes.
52594                                                             (line  925)
52595* far type attribute, MeP:               Type Attributes.    (line  349)
52596* far variable attribute, MeP:           Variable Attributes.
52597                                                             (line  485)
52598* fast_interrupt function attribute, M32C: Function Attributes.
52599                                                             (line  400)
52600* fast_interrupt function attribute, RX: Function Attributes.
52601                                                             (line  400)
52602* fastcall function attribute, x86-32:   Function Attributes.
52603                                                             (line  406)
52604* fatal signal:                          Bug Criteria.       (line    9)
52605* fdim:                                  Other Builtins.     (line    6)
52606* fdimf:                                 Other Builtins.     (line    6)
52607* fdiml:                                 Other Builtins.     (line    6)
52608* FDL, GNU Free Documentation License:   GNU Free Documentation License.
52609                                                             (line    6)
52610* ffs:                                   Other Builtins.     (line    6)
52611* file name suffix:                      Overall Options.    (line   14)
52612* file names:                            Link Options.       (line   10)
52613* fixed-point types:                     Fixed-Point.        (line    6)
52614* flatten function attribute:            Function Attributes.
52615                                                             (line  186)
52616* flexible array members:                Zero Length.        (line    6)
52617* float as function value type:          Incompatibilities.  (line  141)
52618* floating point precision:              Disappointments.    (line   68)
52619* floating-point precision:              Optimize Options.   (line 2043)
52620* floor:                                 Other Builtins.     (line    6)
52621* floorf:                                Other Builtins.     (line    6)
52622* floorl:                                Other Builtins.     (line    6)
52623* fma:                                   Other Builtins.     (line    6)
52624* fmaf:                                  Other Builtins.     (line    6)
52625* fmal:                                  Other Builtins.     (line    6)
52626* fmax:                                  Other Builtins.     (line    6)
52627* fmaxf:                                 Other Builtins.     (line    6)
52628* fmaxl:                                 Other Builtins.     (line    6)
52629* fmin:                                  Other Builtins.     (line    6)
52630* fminf:                                 Other Builtins.     (line    6)
52631* fminl:                                 Other Builtins.     (line    6)
52632* fmod:                                  Other Builtins.     (line    6)
52633* fmodf:                                 Other Builtins.     (line    6)
52634* fmodl:                                 Other Builtins.     (line    6)
52635* force_align_arg_pointer function attribute, x86: Function Attributes.
52636                                                             (line 1369)
52637* format function attribute:             Function Attributes.
52638                                                             (line  425)
52639* format_arg function attribute:         Function Attributes.
52640                                                             (line  491)
52641* Fortran:                               G++ and GCC.        (line    6)
52642* forwarder_section function attribute, Epiphany: Function Attributes.
52643                                                             (line  730)
52644* forwarding calls:                      Constructing Calls. (line    6)
52645* fprintf:                               Other Builtins.     (line    6)
52646* fprintf_unlocked:                      Other Builtins.     (line    6)
52647* fputs:                                 Other Builtins.     (line    6)
52648* fputs_unlocked:                        Other Builtins.     (line    6)
52649* FR30 Options:                          FR30 Options.       (line    6)
52650* freestanding environment:              Standards.          (line   13)
52651* freestanding implementation:           Standards.          (line   13)
52652* frexp:                                 Other Builtins.     (line    6)
52653* frexpf:                                Other Builtins.     (line    6)
52654* frexpl:                                Other Builtins.     (line    6)
52655* FRV Options:                           FRV Options.        (line    6)
52656* fscanf:                                Other Builtins.     (line    6)
52657* fscanf, and constant strings:          Incompatibilities.  (line   17)
52658* function addressability on the M32R/D: Function Attributes.
52659                                                             (line  979)
52660* function attributes:                   Function Attributes.
52661                                                             (line    6)
52662* function pointers, arithmetic:         Pointer Arith.      (line    6)
52663* function prototype declarations:       Function Prototypes.
52664                                                             (line    6)
52665* function versions:                     Function Multiversioning.
52666                                                             (line    6)
52667* function without prologue/epilogue code: Function Attributes.
52668                                                             (line 1041)
52669* function, size of pointer to:          Pointer Arith.      (line    6)
52670* function_vector function attribute, H8/300: Function Attributes.
52671                                                             (line  538)
52672* function_vector function attribute, M16C/M32C: Function Attributes.
52673                                                             (line  538)
52674* function_vector function attribute, SH: Function Attributes.
52675                                                             (line  538)
52676* functions in arbitrary sections:       Function Attributes.
52677                                                             (line    6)
52678* functions that are dynamically resolved: Function Attributes.
52679                                                             (line    6)
52680* functions that are passed arguments in registers on x86-32: Function Attributes.
52681                                                             (line    6)
52682* functions that behave like malloc:     Function Attributes.
52683                                                             (line    6)
52684* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
52685                                                             (line 1052)
52686* functions that do not pop the argument stack on x86-32: Function Attributes.
52687                                                             (line    6)
52688* functions that do pop the argument stack on x86-32: Function Attributes.
52689                                                             (line  217)
52690* functions that have different compilation options on x86-32: Function Attributes.
52691                                                             (line    6)
52692* functions that have different optimization options: Function Attributes.
52693                                                             (line    6)
52694* functions that have no side effects:   Function Attributes.
52695                                                             (line    6)
52696* functions that never return:           Function Attributes.
52697                                                             (line    6)
52698* functions that pop the argument stack on x86-32: Function Attributes.
52699                                                             (line    6)
52700* functions that return more than once:  Function Attributes.
52701                                                             (line    6)
52702* functions with non-null pointer arguments: Function Attributes.
52703                                                             (line    6)
52704* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
52705                                                             (line    6)
52706* g in constraint:                       Simple Constraints. (line  120)
52707* G in constraint:                       Simple Constraints. (line   98)
52708* G++:                                   G++ and GCC.        (line   30)
52709* g++:                                   Invoking G++.       (line   14)
52710* gamma:                                 Other Builtins.     (line    6)
52711* gamma_r:                               Other Builtins.     (line    6)
52712* gammaf:                                Other Builtins.     (line    6)
52713* gammaf_r:                              Other Builtins.     (line    6)
52714* gammal:                                Other Builtins.     (line    6)
52715* gammal_r:                              Other Builtins.     (line    6)
52716* GCC:                                   G++ and GCC.        (line    6)
52717* GCC command options:                   Invoking GCC.       (line    6)
52718* GCC_COLORS environment variable:       Language Independent Options.
52719                                                             (line   35)
52720* GCC_COMPARE_DEBUG:                     Environment Variables.
52721                                                             (line   52)
52722* GCC_EXEC_PREFIX:                       Environment Variables.
52723                                                             (line   57)
52724* gcc_struct type attribute, PowerPC:    Type Attributes.    (line  360)
52725* gcc_struct type attribute, x86:        Type Attributes.    (line  392)
52726* gcc_struct variable attribute, PowerPC: Variable Attributes.
52727                                                             (line  515)
52728* gcc_struct variable attribute, x86:    Variable Attributes.
52729                                                             (line  536)
52730* gcov:                                  Debugging Options.  (line  723)
52731* gettext:                               Other Builtins.     (line    6)
52732* global offset table:                   Code Gen Options.   (line  280)
52733* global register after longjmp:         Global Reg Vars.    (line   65)
52734* global register variables:             Global Reg Vars.    (line    6)
52735* GNAT:                                  G++ and GCC.        (line   30)
52736* GNU C Compiler:                        G++ and GCC.        (line    6)
52737* GNU Compiler Collection:               G++ and GCC.        (line    6)
52738* gnu_inline function attribute:         Function Attributes.
52739                                                             (line  136)
52740* Go:                                    G++ and GCC.        (line    6)
52741* goto with computed label:              Labels as Values.   (line    6)
52742* gprof:                                 Debugging Options.  (line  645)
52743* grouping options:                      Invoking GCC.       (line   26)
52744* H in constraint:                       Simple Constraints. (line   98)
52745* half-precision floating point:         Half-Precision.     (line    6)
52746* hardware models and configurations, specifying: Submodel Options.
52747                                                             (line    6)
52748* hex floats:                            Hex Floats.         (line    6)
52749* highlight, color, colour:              Language Independent Options.
52750                                                             (line   35)
52751* HK fixed-suffix:                       Fixed-Point.        (line    6)
52752* hk fixed-suffix:                       Fixed-Point.        (line    6)
52753* hosted environment <1>:                C Dialect Options.  (line  254)
52754* hosted environment <2>:                Standards.          (line   13)
52755* hosted environment:                    C Dialect Options.  (line  247)
52756* hosted implementation:                 Standards.          (line   13)
52757* hot function attribute:                Function Attributes.
52758                                                             (line 1277)
52759* hot label attribute:                   Label Attributes.   (line   36)
52760* hotpatch function attribute, S/390:    Function Attributes.
52761                                                             (line 1029)
52762* HPPA Options:                          HPPA Options.       (line    6)
52763* hr fixed-suffix:                       Fixed-Point.        (line    6)
52764* HR fixed-suffix:                       Fixed-Point.        (line    6)
52765* hypot:                                 Other Builtins.     (line    6)
52766* hypotf:                                Other Builtins.     (line    6)
52767* hypotl:                                Other Builtins.     (line    6)
52768* I in constraint:                       Simple Constraints. (line   81)
52769* i in constraint:                       Simple Constraints. (line   70)
52770* IA-64 Options:                         IA-64 Options.      (line    6)
52771* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
52772                                                             (line    6)
52773* identifier names, dollar signs in:     Dollar Signs.       (line    6)
52774* identifiers, names in assembler code:  Asm Labels.         (line    6)
52775* ifunc function attribute:              Function Attributes.
52776                                                             (line  599)
52777* ilogb:                                 Other Builtins.     (line    6)
52778* ilogbf:                                Other Builtins.     (line    6)
52779* ilogbl:                                Other Builtins.     (line    6)
52780* imaxabs:                               Other Builtins.     (line    6)
52781* implementation-defined behavior, C language: C Implementation.
52782                                                             (line    6)
52783* implementation-defined behavior, C++ language: C++ Implementation.
52784                                                             (line    6)
52785* implied #pragma implementation:        C++ Interface.      (line   43)
52786* incompatibilities of GCC:              Incompatibilities.  (line    6)
52787* increment operators:                   Bug Criteria.       (line   17)
52788* index:                                 Other Builtins.     (line    6)
52789* indirect calls, ARC:                   Function Attributes.
52790                                                             (line  887)
52791* indirect calls, ARM:                   Function Attributes.
52792                                                             (line  887)
52793* indirect calls, Blackfin:              Function Attributes.
52794                                                             (line  911)
52795* indirect calls, Epiphany:              Function Attributes.
52796                                                             (line  887)
52797* indirect calls, MIPS:                  Function Attributes.
52798                                                             (line  925)
52799* indirect calls, PowerPC:               Function Attributes.
52800                                                             (line  911)
52801* init_priority variable attribute:      C++ Attributes.     (line   50)
52802* initializations in expressions:        Compound Literals.  (line    6)
52803* initializers with labeled elements:    Designated Inits.   (line    6)
52804* initializers, non-constant:            Initializers.       (line    6)
52805* inline assembly language:              Using Assembly Language with C.
52806                                                             (line    6)
52807* inline automatic for C++ member fns:   Inline.             (line   71)
52808* inline functions:                      Inline.             (line    6)
52809* inline functions, omission of:         Inline.             (line   51)
52810* inlining and C++ pragmas:              C++ Interface.      (line   57)
52811* installation trouble:                  Trouble.            (line    6)
52812* integrating function code:             Inline.             (line    6)
52813* interface and implementation headers, C++: C++ Interface.  (line    6)
52814* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
52815* interrupt function attribute, ARC:     Function Attributes.
52816                                                             (line  639)
52817* interrupt function attribute, ARM:     Function Attributes.
52818                                                             (line  639)
52819* interrupt function attribute, AVR:     Function Attributes.
52820                                                             (line  639)
52821* interrupt function attribute, CR16:    Function Attributes.
52822                                                             (line  639)
52823* interrupt function attribute, Epiphany: Function Attributes.
52824                                                             (line  639)
52825* interrupt function attribute, M32C:    Function Attributes.
52826                                                             (line  639)
52827* interrupt function attribute, M32R/D:  Function Attributes.
52828                                                             (line  639)
52829* interrupt function attribute, m68k:    Function Attributes.
52830                                                             (line  639)
52831* interrupt function attribute, MeP:     Function Attributes.
52832                                                             (line  639)
52833* interrupt function attribute, MIPS:    Function Attributes.
52834                                                             (line  639)
52835* interrupt function attribute, MSP430:  Function Attributes.
52836                                                             (line  639)
52837* interrupt function attribute, NDS32:   Function Attributes.
52838                                                             (line  639)
52839* interrupt function attribute, RL78:    Function Attributes.
52840                                                             (line  639)
52841* interrupt function attribute, RX:      Function Attributes.
52842                                                             (line  639)
52843* interrupt function attribute, Visium:  Function Attributes.
52844                                                             (line  639)
52845* interrupt function attribute, Xstormy16: Function Attributes.
52846                                                             (line  639)
52847* interrupt_handler function attribute, Blackfin: Function Attributes.
52848                                                             (line  822)
52849* interrupt_handler function attribute, H8/300: Function Attributes.
52850                                                             (line  822)
52851* interrupt_handler function attribute, m68k: Function Attributes.
52852                                                             (line  822)
52853* interrupt_handler function attribute, SH: Function Attributes.
52854                                                             (line  822)
52855* interrupt_thread function attribute, fido: Function Attributes.
52856                                                             (line  829)
52857* introduction:                          Top.                (line    6)
52858* invalid assembly code:                 Bug Criteria.       (line   12)
52859* invalid input:                         Bug Criteria.       (line   42)
52860* invoking g++:                          Invoking G++.       (line   22)
52861* io variable attribute, AVR:            Variable Attributes.
52862                                                             (line  351)
52863* io variable attribute, MeP:            Variable Attributes.
52864                                                             (line  491)
52865* io_low variable attribute, AVR:        Variable Attributes.
52866                                                             (line  369)
52867* isalnum:                               Other Builtins.     (line    6)
52868* isalpha:                               Other Builtins.     (line    6)
52869* isascii:                               Other Builtins.     (line    6)
52870* isblank:                               Other Builtins.     (line    6)
52871* iscntrl:                               Other Builtins.     (line    6)
52872* isdigit:                               Other Builtins.     (line    6)
52873* isgraph:                               Other Builtins.     (line    6)
52874* islower:                               Other Builtins.     (line    6)
52875* ISO 9899:                              Standards.          (line   13)
52876* ISO C:                                 Standards.          (line   13)
52877* ISO C standard:                        Standards.          (line   13)
52878* ISO C11:                               Standards.          (line   13)
52879* ISO C1X:                               Standards.          (line   13)
52880* ISO C90:                               Standards.          (line   13)
52881* ISO C94:                               Standards.          (line   13)
52882* ISO C95:                               Standards.          (line   13)
52883* ISO C99:                               Standards.          (line   13)
52884* ISO C9X:                               Standards.          (line   13)
52885* ISO support:                           C Dialect Options.  (line   10)
52886* ISO/IEC 9899:                          Standards.          (line   13)
52887* isprint:                               Other Builtins.     (line    6)
52888* ispunct:                               Other Builtins.     (line    6)
52889* isr function attribute, ARM:           Function Attributes.
52890                                                             (line  837)
52891* isspace:                               Other Builtins.     (line    6)
52892* isupper:                               Other Builtins.     (line    6)
52893* iswalnum:                              Other Builtins.     (line    6)
52894* iswalpha:                              Other Builtins.     (line    6)
52895* iswblank:                              Other Builtins.     (line    6)
52896* iswcntrl:                              Other Builtins.     (line    6)
52897* iswdigit:                              Other Builtins.     (line    6)
52898* iswgraph:                              Other Builtins.     (line    6)
52899* iswlower:                              Other Builtins.     (line    6)
52900* iswprint:                              Other Builtins.     (line    6)
52901* iswpunct:                              Other Builtins.     (line    6)
52902* iswspace:                              Other Builtins.     (line    6)
52903* iswupper:                              Other Builtins.     (line    6)
52904* iswxdigit:                             Other Builtins.     (line    6)
52905* isxdigit:                              Other Builtins.     (line    6)
52906* j0:                                    Other Builtins.     (line    6)
52907* j0f:                                   Other Builtins.     (line    6)
52908* j0l:                                   Other Builtins.     (line    6)
52909* j1:                                    Other Builtins.     (line    6)
52910* j1f:                                   Other Builtins.     (line    6)
52911* j1l:                                   Other Builtins.     (line    6)
52912* Java:                                  G++ and GCC.        (line    6)
52913* java_interface type attribute:         C++ Attributes.     (line   70)
52914* jn:                                    Other Builtins.     (line    6)
52915* jnf:                                   Other Builtins.     (line    6)
52916* jnl:                                   Other Builtins.     (line    6)
52917* k fixed-suffix:                        Fixed-Point.        (line    6)
52918* K fixed-suffix:                        Fixed-Point.        (line    6)
52919* keep_interrupts_masked function attribute, MIPS: Function Attributes.
52920                                                             (line  752)
52921* keywords, alternate:                   Alternate Keywords. (line    6)
52922* known causes of trouble:               Trouble.            (line    6)
52923* kspisusp function attribute, Blackfin: Function Attributes.
52924                                                             (line  841)
52925* l1_data variable attribute, Blackfin:  Variable Attributes.
52926                                                             (line  390)
52927* l1_data_A variable attribute, Blackfin: Variable Attributes.
52928                                                             (line  390)
52929* l1_data_B variable attribute, Blackfin: Variable Attributes.
52930                                                             (line  390)
52931* l1_text function attribute, Blackfin:  Function Attributes.
52932                                                             (line  846)
52933* l2 function attribute, Blackfin:       Function Attributes.
52934                                                             (line  852)
52935* l2 variable attribute, Blackfin:       Variable Attributes.
52936                                                             (line  398)
52937* Label Attributes:                      Label Attributes.   (line    6)
52938* labeled elements in initializers:      Designated Inits.   (line    6)
52939* labels as values:                      Labels as Values.   (line    6)
52940* labs:                                  Other Builtins.     (line    6)
52941* LANG:                                  Environment Variables.
52942                                                             (line  106)
52943* language dialect options:              C Dialect Options.  (line    6)
52944* LC_ALL:                                Environment Variables.
52945                                                             (line   21)
52946* LC_CTYPE:                              Environment Variables.
52947                                                             (line   21)
52948* LC_MESSAGES:                           Environment Variables.
52949                                                             (line   21)
52950* ldexp:                                 Other Builtins.     (line    6)
52951* ldexpf:                                Other Builtins.     (line    6)
52952* ldexpl:                                Other Builtins.     (line    6)
52953* leaf function attribute:               Function Attributes.
52954                                                             (line  858)
52955* length-zero arrays:                    Zero Length.        (line    6)
52956* lgamma:                                Other Builtins.     (line    6)
52957* lgamma_r:                              Other Builtins.     (line    6)
52958* lgammaf:                               Other Builtins.     (line    6)
52959* lgammaf_r:                             Other Builtins.     (line    6)
52960* lgammal:                               Other Builtins.     (line    6)
52961* lgammal_r:                             Other Builtins.     (line    6)
52962* Libraries:                             Link Options.       (line   30)
52963* LIBRARY_PATH:                          Environment Variables.
52964                                                             (line   97)
52965* link options:                          Link Options.       (line    6)
52966* linker script:                         Link Options.       (line  242)
52967* LK fixed-suffix:                       Fixed-Point.        (line    6)
52968* lk fixed-suffix:                       Fixed-Point.        (line    6)
52969* LL integer suffix:                     Long Long.          (line    6)
52970* llabs:                                 Other Builtins.     (line    6)
52971* llk fixed-suffix:                      Fixed-Point.        (line    6)
52972* LLK fixed-suffix:                      Fixed-Point.        (line    6)
52973* LLR fixed-suffix:                      Fixed-Point.        (line    6)
52974* llr fixed-suffix:                      Fixed-Point.        (line    6)
52975* llrint:                                Other Builtins.     (line    6)
52976* llrintf:                               Other Builtins.     (line    6)
52977* llrintl:                               Other Builtins.     (line    6)
52978* llround:                               Other Builtins.     (line    6)
52979* llroundf:                              Other Builtins.     (line    6)
52980* llroundl:                              Other Builtins.     (line    6)
52981* LM32 options:                          LM32 Options.       (line    6)
52982* load address instruction:              Simple Constraints. (line  154)
52983* local labels:                          Local Labels.       (line    6)
52984* local variables in macros:             Typeof.             (line   46)
52985* local variables, specifying registers: Local Reg Vars.     (line    6)
52986* locale:                                Environment Variables.
52987                                                             (line   21)
52988* locale definition:                     Environment Variables.
52989                                                             (line  106)
52990* locus GCC_COLORS capability:           Language Independent Options.
52991                                                             (line   81)
52992* log:                                   Other Builtins.     (line    6)
52993* log10:                                 Other Builtins.     (line    6)
52994* log10f:                                Other Builtins.     (line    6)
52995* log10l:                                Other Builtins.     (line    6)
52996* log1p:                                 Other Builtins.     (line    6)
52997* log1pf:                                Other Builtins.     (line    6)
52998* log1pl:                                Other Builtins.     (line    6)
52999* log2:                                  Other Builtins.     (line    6)
53000* log2f:                                 Other Builtins.     (line    6)
53001* log2l:                                 Other Builtins.     (line    6)
53002* logb:                                  Other Builtins.     (line    6)
53003* logbf:                                 Other Builtins.     (line    6)
53004* logbl:                                 Other Builtins.     (line    6)
53005* logf:                                  Other Builtins.     (line    6)
53006* logl:                                  Other Builtins.     (line    6)
53007* long long data types:                  Long Long.          (line    6)
53008* long_call function attribute, ARC:     Function Attributes.
53009                                                             (line  887)
53010* long_call function attribute, ARM:     Function Attributes.
53011                                                             (line  887)
53012* long_call function attribute, Epiphany: Function Attributes.
53013                                                             (line  887)
53014* long_call function attribute, MIPS:    Function Attributes.
53015                                                             (line  925)
53016* longcall function attribute, Blackfin: Function Attributes.
53017                                                             (line  911)
53018* longcall function attribute, PowerPC:  Function Attributes.
53019                                                             (line  911)
53020* longjmp:                               Global Reg Vars.    (line   65)
53021* longjmp incompatibilities:             Incompatibilities.  (line   39)
53022* longjmp warnings:                      Warning Options.    (line  712)
53023* lr fixed-suffix:                       Fixed-Point.        (line    6)
53024* LR fixed-suffix:                       Fixed-Point.        (line    6)
53025* lrint:                                 Other Builtins.     (line    6)
53026* lrintf:                                Other Builtins.     (line    6)
53027* lrintl:                                Other Builtins.     (line    6)
53028* lround:                                Other Builtins.     (line    6)
53029* lroundf:                               Other Builtins.     (line    6)
53030* lroundl:                               Other Builtins.     (line    6)
53031* m in constraint:                       Simple Constraints. (line   17)
53032* M32C options:                          M32C Options.       (line    6)
53033* M32R/D options:                        M32R/D Options.     (line    6)
53034* M680x0 options:                        M680x0 Options.     (line    6)
53035* machine dependent options:             Submodel Options.   (line    6)
53036* machine specific constraints:          Machine Constraints.
53037                                                             (line    6)
53038* macro with variable arguments:         Variadic Macros.    (line    6)
53039* macros, inline alternative:            Inline.             (line    6)
53040* macros, local labels:                  Local Labels.       (line    6)
53041* macros, local variables in:            Typeof.             (line   46)
53042* macros, statements in expressions:     Statement Exprs.    (line    6)
53043* macros, types of arguments:            Typeof.             (line    6)
53044* make:                                  Preprocessor Options.
53045                                                             (line  185)
53046* malloc:                                Other Builtins.     (line    6)
53047* malloc function attribute:             Function Attributes.
53048                                                             (line  935)
53049* matching constraint:                   Simple Constraints. (line  139)
53050* may_alias type attribute:              Type Attributes.    (line  233)
53051* MCore options:                         MCore Options.      (line    6)
53052* medium_call function attribute, ARC:   Function Attributes.
53053                                                             (line  887)
53054* member fns, automatically inline:      Inline.             (line   71)
53055* memchr:                                Other Builtins.     (line    6)
53056* memcmp:                                Other Builtins.     (line    6)
53057* memcpy:                                Other Builtins.     (line    6)
53058* memory references in constraints:      Simple Constraints. (line   17)
53059* mempcpy:                               Other Builtins.     (line    6)
53060* memset:                                Other Builtins.     (line    6)
53061* MeP options:                           MeP Options.        (line    6)
53062* Mercury:                               G++ and GCC.        (line   23)
53063* message formatting:                    Language Independent Options.
53064                                                             (line    6)
53065* messages, warning:                     Warning Options.    (line    6)
53066* messages, warning and error:           Warnings and Errors.
53067                                                             (line    6)
53068* MicroBlaze Options:                    MicroBlaze Options. (line    6)
53069* micromips function attribute:          Function Attributes.
53070                                                             (line  963)
53071* middle-operands, omitted:              Conditionals.       (line    6)
53072* MIPS options:                          MIPS Options.       (line    6)
53073* mips16 function attribute, MIPS:       Function Attributes.
53074                                                             (line  948)
53075* misunderstandings in C++:              C++ Misunderstandings.
53076                                                             (line    6)
53077* mixed declarations and code:           Mixed Declarations. (line    6)
53078* mixing assembly language and C:        Using Assembly Language with C.
53079                                                             (line    6)
53080* mktemp, and constant strings:          Incompatibilities.  (line   13)
53081* MMIX Options:                          MMIX Options.       (line    6)
53082* MN10300 options:                       MN10300 Options.    (line    6)
53083* mode variable attribute:               Variable Attributes.
53084                                                             (line  135)
53085* model function attribute, M32R/D:      Function Attributes.
53086                                                             (line  979)
53087* model variable attribute, IA-64:       Variable Attributes.
53088                                                             (line  431)
53089* model-name variable attribute, M32R/D: Variable Attributes.
53090                                                             (line  446)
53091* modf:                                  Other Builtins.     (line    6)
53092* modff:                                 Other Builtins.     (line    6)
53093* modfl:                                 Other Builtins.     (line    6)
53094* modifiers in constraints:              Modifiers.          (line    6)
53095* Moxie Options:                         Moxie Options.      (line    6)
53096* ms_abi function attribute, x86:        Function Attributes.
53097                                                             (line 1000)
53098* ms_hook_prologue function attribute, x86: Function Attributes.
53099                                                             (line 1023)
53100* ms_struct type attribute, PowerPC:     Type Attributes.    (line  360)
53101* ms_struct type attribute, x86:         Type Attributes.    (line  392)
53102* ms_struct variable attribute, PowerPC: Variable Attributes.
53103                                                             (line  515)
53104* ms_struct variable attribute, x86:     Variable Attributes.
53105                                                             (line  536)
53106* MSP430 Options:                        MSP430 Options.     (line    6)
53107* multiple alternative constraints:      Multi-Alternative.  (line    6)
53108* multiprecision arithmetic:             Long Long.          (line    6)
53109* n in constraint:                       Simple Constraints. (line   75)
53110* naked function attribute, ARM:         Function Attributes.
53111                                                             (line 1041)
53112* naked function attribute, AVR:         Function Attributes.
53113                                                             (line 1041)
53114* naked function attribute, MCORE:       Function Attributes.
53115                                                             (line 1041)
53116* naked function attribute, MSP430:      Function Attributes.
53117                                                             (line 1041)
53118* naked function attribute, NDS32:       Function Attributes.
53119                                                             (line 1041)
53120* naked function attribute, RL78:        Function Attributes.
53121                                                             (line 1041)
53122* naked function attribute, RX:          Function Attributes.
53123                                                             (line 1041)
53124* naked function attribute, SPU:         Function Attributes.
53125                                                             (line 1041)
53126* Named Address Spaces:                  Named Address Spaces.
53127                                                             (line    6)
53128* names used in assembler code:          Asm Labels.         (line    6)
53129* naming convention, implementation headers: C++ Interface.  (line   43)
53130* NDS32 Options:                         NDS32 Options.      (line    6)
53131* near function attribute, MeP:          Function Attributes.
53132                                                             (line 1052)
53133* near function attribute, MIPS:         Function Attributes.
53134                                                             (line  925)
53135* near type attribute, MeP:              Type Attributes.    (line  349)
53136* near variable attribute, MeP:          Variable Attributes.
53137                                                             (line  479)
53138* nearbyint:                             Other Builtins.     (line    6)
53139* nearbyintf:                            Other Builtins.     (line    6)
53140* nearbyintl:                            Other Builtins.     (line    6)
53141* nested function attribute, NDS32:      Function Attributes.
53142                                                             (line  780)
53143* nested functions:                      Nested Functions.   (line    6)
53144* nested_ready function attribute, NDS32: Function Attributes.
53145                                                             (line  786)
53146* nesting function attribute, Blackfin:  Function Attributes.
53147                                                             (line 1057)
53148* newlines (escaped):                    Escaped Newlines.   (line    6)
53149* nextafter:                             Other Builtins.     (line    6)
53150* nextafterf:                            Other Builtins.     (line    6)
53151* nextafterl:                            Other Builtins.     (line    6)
53152* nexttoward:                            Other Builtins.     (line    6)
53153* nexttowardf:                           Other Builtins.     (line    6)
53154* nexttowardl:                           Other Builtins.     (line    6)
53155* NFC:                                   Warning Options.    (line 1481)
53156* NFKC:                                  Warning Options.    (line 1481)
53157* Nios II options:                       Nios II Options.    (line    6)
53158* nmi function attribute, NDS32:         Function Attributes.
53159                                                             (line 1355)
53160* NMI handler functions on the Blackfin processor: Function Attributes.
53161                                                             (line 1062)
53162* nmi_handler function attribute, Blackfin: Function Attributes.
53163                                                             (line 1062)
53164* no_icf function attribute:             Function Attributes.
53165                                                             (line 1107)
53166* no_instrument_function function attribute: Function Attributes.
53167                                                             (line 1074)
53168* no_reorder function attribute:         Function Attributes.
53169                                                             (line 1135)
53170* no_sanitize_address function attribute: Function Attributes.
53171                                                             (line 1304)
53172* no_sanitize_thread function attribute: Function Attributes.
53173                                                             (line 1312)
53174* no_sanitize_undefined function attribute: Function Attributes.
53175                                                             (line 1317)
53176* no_split_stack function attribute:     Function Attributes.
53177                                                             (line 1079)
53178* noclone function attribute:            Function Attributes.
53179                                                             (line 1101)
53180* nocommon variable attribute:           Variable Attributes.
53181                                                             (line  106)
53182* nocompression function attribute, MIPS: Function Attributes.
53183                                                             (line 1068)
53184* noinline function attribute:           Function Attributes.
53185                                                             (line 1090)
53186* nomicromips function attribute:        Function Attributes.
53187                                                             (line  963)
53188* nomips16 function attribute, MIPS:     Function Attributes.
53189                                                             (line  948)
53190* non-constant initializers:             Initializers.       (line    6)
53191* non-static inline function:            Inline.             (line   85)
53192* nonnull function attribute:            Function Attributes.
53193                                                             (line 1111)
53194* noreturn function attribute:           Function Attributes.
53195                                                             (line 1153)
53196* nosave_low_regs function attribute, SH: Function Attributes.
53197                                                             (line 1191)
53198* not_nested function attribute, NDS32:  Function Attributes.
53199                                                             (line  783)
53200* note GCC_COLORS capability:            Language Independent Options.
53201                                                             (line   75)
53202* nothrow function attribute:            Function Attributes.
53203                                                             (line 1184)
53204* notshared type attribute, ARM:         Type Attributes.    (line  328)
53205* Nvidia PTX options:                    Nvidia PTX Options. (line    6)
53206* nvptx options:                         Nvidia PTX Options. (line    6)
53207* o in constraint:                       Simple Constraints. (line   23)
53208* OBJC_INCLUDE_PATH:                     Environment Variables.
53209                                                             (line  132)
53210* Objective-C <1>:                       Standards.          (line  163)
53211* Objective-C:                           G++ and GCC.        (line    6)
53212* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
53213                                                             (line    6)
53214* Objective-C++ <1>:                     G++ and GCC.        (line    6)
53215* Objective-C++:                         Standards.          (line  163)
53216* offsettable address:                   Simple Constraints. (line   23)
53217* old-style function definitions:        Function Prototypes.
53218                                                             (line    6)
53219* omitted middle-operands:               Conditionals.       (line    6)
53220* only open regular files:               Environment Variables.
53221                                                             (line  179)
53222* open coding:                           Inline.             (line    6)
53223* OpenACC accelerator programming:       C Dialect Options.  (line  264)
53224* OpenMP parallel:                       C Dialect Options.  (line  276)
53225* OpenMP SIMD:                           C Dialect Options.  (line  284)
53226* operand constraints, asm:              Constraints.        (line    6)
53227* optimize function attribute:           Function Attributes.
53228                                                             (line 1197)
53229* optimize options:                      Optimize Options.   (line    6)
53230* options to control diagnostics formatting: Language Independent Options.
53231                                                             (line    6)
53232* options to control warnings:           Warning Options.    (line    6)
53233* options, C++:                          C++ Dialect Options.
53234                                                             (line    6)
53235* options, code generation:              Code Gen Options.   (line    6)
53236* options, debugging:                    Debugging Options.  (line    6)
53237* options, dialect:                      C Dialect Options.  (line    6)
53238* options, directory search:             Directory Options.  (line    6)
53239* options, GCC command:                  Invoking GCC.       (line    6)
53240* options, grouping:                     Invoking GCC.       (line   26)
53241* options, linking:                      Link Options.       (line    6)
53242* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
53243                                                             (line    6)
53244* options, optimization:                 Optimize Options.   (line    6)
53245* options, order:                        Invoking GCC.       (line   30)
53246* options, preprocessor:                 Preprocessor Options.
53247                                                             (line    6)
53248* order of evaluation, side effects:     Non-bugs.           (line  196)
53249* order of options:                      Invoking GCC.       (line   30)
53250* OS_main function attribute, AVR:       Function Attributes.
53251                                                             (line 1215)
53252* OS_task function attribute, AVR:       Function Attributes.
53253                                                             (line 1215)
53254* other register constraints:            Simple Constraints. (line  163)
53255* output file option:                    Overall Options.    (line  191)
53256* overloaded virtual function, warning:  C++ Dialect Options.
53257                                                             (line  682)
53258* p in constraint:                       Simple Constraints. (line  154)
53259* packed type attribute:                 Type Attributes.    (line  108)
53260* packed variable attribute:             Variable Attributes.
53261                                                             (line  146)
53262* parameter forward declaration:         Variable Length.    (line   68)
53263* partial_save function attribute, NDS32: Function Attributes.
53264                                                             (line  796)
53265* Pascal:                                G++ and GCC.        (line   23)
53266* pcs function attribute, ARM:           Function Attributes.
53267                                                             (line 1240)
53268* PDP-11 Options:                        PDP-11 Options.     (line    6)
53269* PIC:                                   Code Gen Options.   (line  280)
53270* picoChip options:                      picoChip Options.   (line    6)
53271* pmf:                                   Bound member functions.
53272                                                             (line    6)
53273* pointer arguments:                     Function Attributes.
53274                                                             (line  228)
53275* Pointer Bounds Checker attributes <1>: Function Attributes.
53276                                                             (line 1323)
53277* Pointer Bounds Checker attributes:     Type Attributes.    (line  295)
53278* Pointer Bounds Checker builtins:       Pointer Bounds Checker builtins.
53279                                                             (line    6)
53280* Pointer Bounds Checker options:        Debugging Options.  (line  388)
53281* pointer to member function:            Bound member functions.
53282                                                             (line    6)
53283* pointers to arrays:                    Pointers to Arrays. (line    6)
53284* portions of temporary objects, pointers to: Temporaries.   (line    6)
53285* pow:                                   Other Builtins.     (line    6)
53286* pow10:                                 Other Builtins.     (line    6)
53287* pow10f:                                Other Builtins.     (line    6)
53288* pow10l:                                Other Builtins.     (line    6)
53289* PowerPC options:                       PowerPC Options.    (line    6)
53290* powf:                                  Other Builtins.     (line    6)
53291* powl:                                  Other Builtins.     (line    6)
53292* pragma GCC ivdep:                      Loop-Specific Pragmas.
53293                                                             (line    7)
53294* pragma GCC optimize:                   Function Specific Option Pragmas.
53295                                                             (line   19)
53296* pragma GCC pop_options:                Function Specific Option Pragmas.
53297                                                             (line   29)
53298* pragma GCC push_options:               Function Specific Option Pragmas.
53299                                                             (line   29)
53300* pragma GCC reset_options:              Function Specific Option Pragmas.
53301                                                             (line   36)
53302* pragma GCC target:                     Function Specific Option Pragmas.
53303                                                             (line    7)
53304* pragma, address:                       M32C Pragmas.       (line   15)
53305* pragma, align:                         Solaris Pragmas.    (line   11)
53306* pragma, call:                          MeP Pragmas.        (line   48)
53307* pragma, coprocessor available:         MeP Pragmas.        (line   13)
53308* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
53309* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
53310* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
53311* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
53312* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
53313* pragma, fini:                          Solaris Pragmas.    (line   19)
53314* pragma, init:                          Solaris Pragmas.    (line   24)
53315* pragma, long_calls:                    ARM Pragmas.        (line   11)
53316* pragma, long_calls_off:                ARM Pragmas.        (line   17)
53317* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
53318                                                             (line   14)
53319* pragma, mark:                          Darwin Pragmas.     (line   11)
53320* pragma, memregs:                       M32C Pragmas.       (line    7)
53321* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
53322* pragma, options align:                 Darwin Pragmas.     (line   14)
53323* pragma, pop_macro:                     Push/Pop Macro Pragmas.
53324                                                             (line   15)
53325* pragma, push_macro:                    Push/Pop Macro Pragmas.
53326                                                             (line   11)
53327* pragma, reason for not using:          Function Attributes.
53328                                                             (line 2050)
53329* pragma, redefine_extname:              Symbol-Renaming Pragmas.
53330                                                             (line   13)
53331* pragma, segment:                       Darwin Pragmas.     (line   21)
53332* pragma, unused:                        Darwin Pragmas.     (line   24)
53333* pragma, visibility:                    Visibility Pragmas. (line    8)
53334* pragma, weak:                          Weak Pragmas.       (line   10)
53335* pragmas:                               Pragmas.            (line    6)
53336* pragmas in C++, effect on inlining:    C++ Interface.      (line   57)
53337* pragmas, interface and implementation: C++ Interface.      (line    6)
53338* pragmas, warning of unknown:           Warning Options.    (line  729)
53339* precompiled headers:                   Precompiled Headers.
53340                                                             (line    6)
53341* preprocessing numbers:                 Incompatibilities.  (line  173)
53342* preprocessing tokens:                  Incompatibilities.  (line  173)
53343* preprocessor options:                  Preprocessor Options.
53344                                                             (line    6)
53345* printf:                                Other Builtins.     (line    6)
53346* printf_unlocked:                       Other Builtins.     (line    6)
53347* prof:                                  Debugging Options.  (line  639)
53348* progmem variable attribute, AVR:       Variable Attributes.
53349                                                             (line  319)
53350* promotion of formal parameters:        Function Prototypes.
53351                                                             (line    6)
53352* pure function attribute:               Function Attributes.
53353                                                             (line 1258)
53354* push address instruction:              Simple Constraints. (line  154)
53355* putchar:                               Other Builtins.     (line    6)
53356* puts:                                  Other Builtins.     (line    6)
53357* q floating point suffix:               Floating Types.     (line    6)
53358* Q floating point suffix:               Floating Types.     (line    6)
53359* qsort, and global register variables:  Global Reg Vars.    (line   41)
53360* question mark:                         Multi-Alternative.  (line   27)
53361* quote GCC_COLORS capability:           Language Independent Options.
53362                                                             (line   85)
53363* R fixed-suffix:                        Fixed-Point.        (line    6)
53364* r fixed-suffix:                        Fixed-Point.        (line    6)
53365* r in constraint:                       Simple Constraints. (line   66)
53366* RAMPD:                                 AVR Options.        (line  358)
53367* RAMPX:                                 AVR Options.        (line  358)
53368* RAMPY:                                 AVR Options.        (line  358)
53369* RAMPZ:                                 AVR Options.        (line  358)
53370* ranges in case statements:             Case Ranges.        (line    6)
53371* read-only strings:                     Incompatibilities.  (line    9)
53372* reentrant function attribute, MSP430:  Function Attributes.
53373                                                             (line  698)
53374* register variable after longjmp:       Global Reg Vars.    (line   65)
53375* registers for local variables:         Local Reg Vars.     (line    6)
53376* registers in constraints:              Simple Constraints. (line   66)
53377* registers, global allocation:          Explicit Reg Vars.  (line    6)
53378* registers, global variables in:        Global Reg Vars.    (line    6)
53379* regparm function attribute, x86:       Function Attributes.
53380                                                             (line 1333)
53381* relocation truncated to fit (ColdFire): M680x0 Options.    (line  329)
53382* relocation truncated to fit (MIPS):    MIPS Options.       (line  239)
53383* remainder:                             Other Builtins.     (line    6)
53384* remainderf:                            Other Builtins.     (line    6)
53385* remainderl:                            Other Builtins.     (line    6)
53386* remquo:                                Other Builtins.     (line    6)
53387* remquof:                               Other Builtins.     (line    6)
53388* remquol:                               Other Builtins.     (line    6)
53389* renesas function attribute, SH:        Function Attributes.
53390                                                             (line 1377)
53391* reordering, warning:                   C++ Dialect Options.
53392                                                             (line  598)
53393* reporting bugs:                        Bugs.               (line    6)
53394* resbank function attribute, SH:        Function Attributes.
53395                                                             (line 1381)
53396* reset function attribute, NDS32:       Function Attributes.
53397                                                             (line 1350)
53398* reset handler functions:               Function Attributes.
53399                                                             (line 1350)
53400* rest argument (in macro):              Variadic Macros.    (line    6)
53401* restricted pointers:                   Restricted Pointers.
53402                                                             (line    6)
53403* restricted references:                 Restricted Pointers.
53404                                                             (line    6)
53405* restricted this pointer:               Restricted Pointers.
53406                                                             (line    6)
53407* returns_nonnull function attribute:    Function Attributes.
53408                                                             (line 1143)
53409* returns_twice function attribute:      Function Attributes.
53410                                                             (line 1395)
53411* rindex:                                Other Builtins.     (line    6)
53412* rint:                                  Other Builtins.     (line    6)
53413* rintf:                                 Other Builtins.     (line    6)
53414* rintl:                                 Other Builtins.     (line    6)
53415* RL78 Options:                          RL78 Options.       (line    6)
53416* round:                                 Other Builtins.     (line    6)
53417* roundf:                                Other Builtins.     (line    6)
53418* roundl:                                Other Builtins.     (line    6)
53419* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
53420                                                             (line    6)
53421* RTTI:                                  Vague Linkage.      (line   42)
53422* run-time options:                      Code Gen Options.   (line    6)
53423* RX Options:                            RX Options.         (line    6)
53424* s in constraint:                       Simple Constraints. (line  102)
53425* S/390 and zSeries Options:             S/390 and zSeries Options.
53426                                                             (line    6)
53427* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
53428                                                             (line 1404)
53429* save_all function attribute, NDS32:    Function Attributes.
53430                                                             (line  792)
53431* save_volatiles function attribute, MicroBlaze: Function Attributes.
53432                                                             (line 1409)
53433* saveall function attribute, Blackfin:  Function Attributes.
53434                                                             (line 1404)
53435* saveall function attribute, H8/300:    Function Attributes.
53436                                                             (line 1404)
53437* scalb:                                 Other Builtins.     (line    6)
53438* scalbf:                                Other Builtins.     (line    6)
53439* scalbl:                                Other Builtins.     (line    6)
53440* scalbln:                               Other Builtins.     (line    6)
53441* scalblnf:                              Other Builtins.     (line    6)
53442* scalbn:                                Other Builtins.     (line    6)
53443* scalbnf:                               Other Builtins.     (line    6)
53444* scanf, and constant strings:           Incompatibilities.  (line   17)
53445* scanfnl:                               Other Builtins.     (line    6)
53446* scope of a variable length array:      Variable Length.    (line   22)
53447* scope of declaration:                  Disappointments.    (line   21)
53448* scope of external declarations:        Incompatibilities.  (line   80)
53449* Score Options:                         Score Options.      (line    6)
53450* search path:                           Directory Options.  (line    6)
53451* section function attribute:            Function Attributes.
53452                                                             (line 1426)
53453* section variable attribute:            Variable Attributes.
53454                                                             (line  167)
53455* selectany variable attribute:          Variable Attributes.
53456                                                             (line  283)
53457* sentinel function attribute:           Function Attributes.
53458                                                             (line 1442)
53459* setjmp:                                Global Reg Vars.    (line   65)
53460* setjmp incompatibilities:              Incompatibilities.  (line   39)
53461* shared strings:                        Incompatibilities.  (line    9)
53462* shared variable attribute:             Variable Attributes.
53463                                                             (line  212)
53464* short_call function attribute, ARC:    Function Attributes.
53465                                                             (line  887)
53466* short_call function attribute, ARM:    Function Attributes.
53467                                                             (line  887)
53468* short_call function attribute, Epiphany: Function Attributes.
53469                                                             (line  887)
53470* shortcall function attribute, Blackfin: Function Attributes.
53471                                                             (line  911)
53472* shortcall function attribute, PowerPC: Function Attributes.
53473                                                             (line  911)
53474* side effect in ?::                     Conditionals.       (line   20)
53475* side effects, macro argument:          Statement Exprs.    (line   35)
53476* side effects, order of evaluation:     Non-bugs.           (line  196)
53477* signal function attribute, AVR:        Function Attributes.
53478                                                             (line 1473)
53479* signbit:                               Other Builtins.     (line    6)
53480* signbitd128:                           Other Builtins.     (line    6)
53481* signbitd32:                            Other Builtins.     (line    6)
53482* signbitd64:                            Other Builtins.     (line    6)
53483* signbitf:                              Other Builtins.     (line    6)
53484* signbitl:                              Other Builtins.     (line    6)
53485* signed and unsigned values, comparison warning: Warning Options.
53486                                                             (line 1299)
53487* significand:                           Other Builtins.     (line    6)
53488* significandf:                          Other Builtins.     (line    6)
53489* significandl:                          Other Builtins.     (line    6)
53490* SIMD:                                  C Dialect Options.  (line  284)
53491* simple constraints:                    Simple Constraints. (line    6)
53492* sin:                                   Other Builtins.     (line    6)
53493* sincos:                                Other Builtins.     (line    6)
53494* sincosf:                               Other Builtins.     (line    6)
53495* sincosl:                               Other Builtins.     (line    6)
53496* sinf:                                  Other Builtins.     (line    6)
53497* sinh:                                  Other Builtins.     (line    6)
53498* sinhf:                                 Other Builtins.     (line    6)
53499* sinhl:                                 Other Builtins.     (line    6)
53500* sinl:                                  Other Builtins.     (line    6)
53501* sizeof:                                Typeof.             (line    6)
53502* smaller data references <1>:           M32R/D Options.     (line   57)
53503* smaller data references:               Nios II Options.    (line    9)
53504* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
53505                                                             (line  770)
53506* snprintf:                              Other Builtins.     (line    6)
53507* Solaris 2 options:                     Solaris 2 Options.  (line    6)
53508* sp_switch function attribute, SH:      Function Attributes.
53509                                                             (line 1491)
53510* SPARC options:                         SPARC Options.      (line    6)
53511* Spec Files:                            Spec Files.         (line    6)
53512* specified registers:                   Explicit Reg Vars.  (line    6)
53513* specifying compiler version and target machine: Target Options.
53514                                                             (line    6)
53515* specifying hardware config:            Submodel Options.   (line    6)
53516* specifying machine version:            Target Options.     (line    6)
53517* specifying registers for local variables: Local Reg Vars.  (line    6)
53518* speed of compilation:                  Precompiled Headers.
53519                                                             (line    6)
53520* sprintf:                               Other Builtins.     (line    6)
53521* SPU options:                           SPU Options.        (line    6)
53522* spu_vector type attribute, SPU:        Type Attributes.    (line  379)
53523* spu_vector variable attribute, SPU:    Variable Attributes.
53524                                                             (line  524)
53525* sqrt:                                  Other Builtins.     (line    6)
53526* sqrtf:                                 Other Builtins.     (line    6)
53527* sqrtl:                                 Other Builtins.     (line    6)
53528* sscanf:                                Other Builtins.     (line    6)
53529* sscanf, and constant strings:          Incompatibilities.  (line   17)
53530* sseregparm function attribute, x86:    Function Attributes.
53531                                                             (line 1362)
53532* stack_protect function attribute:      Function Attributes.
53533                                                             (line 1085)
53534* statements inside expressions:         Statement Exprs.    (line    6)
53535* static data in C++, declaring and defining: Static Definitions.
53536                                                             (line    6)
53537* stdcall function attribute, x86-32:    Function Attributes.
53538                                                             (line 1501)
53539* stpcpy:                                Other Builtins.     (line    6)
53540* stpncpy:                               Other Builtins.     (line    6)
53541* strcasecmp:                            Other Builtins.     (line    6)
53542* strcat:                                Other Builtins.     (line    6)
53543* strchr:                                Other Builtins.     (line    6)
53544* strcmp:                                Other Builtins.     (line    6)
53545* strcpy:                                Other Builtins.     (line    6)
53546* strcspn:                               Other Builtins.     (line    6)
53547* strdup:                                Other Builtins.     (line    6)
53548* strfmon:                               Other Builtins.     (line    6)
53549* strftime:                              Other Builtins.     (line    6)
53550* string constants:                      Incompatibilities.  (line    9)
53551* strlen:                                Other Builtins.     (line    6)
53552* strncasecmp:                           Other Builtins.     (line    6)
53553* strncat:                               Other Builtins.     (line    6)
53554* strncmp:                               Other Builtins.     (line    6)
53555* strncpy:                               Other Builtins.     (line    6)
53556* strndup:                               Other Builtins.     (line    6)
53557* strpbrk:                               Other Builtins.     (line    6)
53558* strrchr:                               Other Builtins.     (line    6)
53559* strspn:                                Other Builtins.     (line    6)
53560* strstr:                                Other Builtins.     (line    6)
53561* struct:                                Unnamed Fields.     (line    6)
53562* struct __htm_tdb:                      S/390 System z Built-in Functions.
53563                                                             (line   54)
53564* structures:                            Incompatibilities.  (line  146)
53565* structures, constructor expression:    Compound Literals.  (line    6)
53566* submodel options:                      Submodel Options.   (line    6)
53567* subscripting:                          Subscripting.       (line    6)
53568* subscripting and function values:      Subscripting.       (line    6)
53569* suffixes for C++ source:               Invoking G++.       (line    6)
53570* SUNPRO_DEPENDENCIES:                   Environment Variables.
53571                                                             (line  172)
53572* suppressing warnings:                  Warning Options.    (line    6)
53573* surprises in C++:                      C++ Misunderstandings.
53574                                                             (line    6)
53575* syntax checking:                       Warning Options.    (line   13)
53576* syscall_linkage function attribute, IA-64: Function Attributes.
53577                                                             (line 1506)
53578* system headers, warnings from:         Warning Options.    (line  949)
53579* sysv_abi function attribute, x86:      Function Attributes.
53580                                                             (line 1000)
53581* tan:                                   Other Builtins.     (line    6)
53582* tanf:                                  Other Builtins.     (line    6)
53583* tanh:                                  Other Builtins.     (line    6)
53584* tanhf:                                 Other Builtins.     (line    6)
53585* tanhl:                                 Other Builtins.     (line    6)
53586* tanl:                                  Other Builtins.     (line    6)
53587* target function attribute:             Function Attributes.
53588                                                             (line 1513)
53589* target machine, specifying:            Target Options.     (line    6)
53590* target options:                        Target Options.     (line    6)
53591* target("abm") function attribute, x86: Function Attributes.
53592                                                             (line 1546)
53593* target("aes") function attribute, x86: Function Attributes.
53594                                                             (line 1551)
53595* target("align-stringops") function attribute, x86: Function Attributes.
53596                                                             (line 1645)
53597* target("altivec") function attribute, PowerPC: Function Attributes.
53598                                                             (line 1671)
53599* target("arch=ARCH") function attribute, x86: Function Attributes.
53600                                                             (line 1654)
53601* target("avoid-indexed-addresses") function attribute, PowerPC: Function Attributes.
53602                                                             (line 1792)
53603* target("cld") function attribute, x86: Function Attributes.
53604                                                             (line 1616)
53605* target("cmpb") function attribute, PowerPC: Function Attributes.
53606                                                             (line 1677)
53607* target("cpu=CPU") function attribute, PowerPC: Function Attributes.
53608                                                             (line 1807)
53609* target("custom-fpu-cfg=NAME") function attribute, Nios II: Function Attributes.
53610                                                             (line 1833)
53611* target("custom-INSN=N") function attribute, Nios II: Function Attributes.
53612                                                             (line 1824)
53613* target("default") function attribute, x86: Function Attributes.
53614                                                             (line 1554)
53615* target("dlmzb") function attribute, PowerPC: Function Attributes.
53616                                                             (line 1683)
53617* target("fancy-math-387") function attribute, x86: Function Attributes.
53618                                                             (line 1620)
53619* target("fma4") function attribute, x86: Function Attributes.
53620                                                             (line 1600)
53621* target("fpmath=FPMATH") function attribute, x86: Function Attributes.
53622                                                             (line 1662)
53623* target("fprnd") function attribute, PowerPC: Function Attributes.
53624                                                             (line 1690)
53625* target("friz") function attribute, PowerPC: Function Attributes.
53626                                                             (line 1783)
53627* target("fused-madd") function attribute, x86: Function Attributes.
53628                                                             (line 1625)
53629* target("hard-dfp") function attribute, PowerPC: Function Attributes.
53630                                                             (line 1696)
53631* target("ieee-fp") function attribute, x86: Function Attributes.
53632                                                             (line 1630)
53633* target("inline-all-stringops") function attribute, x86: Function Attributes.
53634                                                             (line 1635)
53635* target("inline-stringops-dynamically") function attribute, x86: Function Attributes.
53636                                                             (line 1639)
53637* target("isel") function attribute, PowerPC: Function Attributes.
53638                                                             (line 1702)
53639* target("longcall") function attribute, PowerPC: Function Attributes.
53640                                                             (line 1802)
53641* target("lwp") function attribute, x86: Function Attributes.
53642                                                             (line 1608)
53643* target("mfcrf") function attribute, PowerPC: Function Attributes.
53644                                                             (line 1706)
53645* target("mfpgpr") function attribute, PowerPC: Function Attributes.
53646                                                             (line 1713)
53647* target("mmx") function attribute, x86: Function Attributes.
53648                                                             (line 1559)
53649* target("mulhw") function attribute, PowerPC: Function Attributes.
53650                                                             (line 1720)
53651* target("multiple") function attribute, PowerPC: Function Attributes.
53652                                                             (line 1727)
53653* target("no-custom-INSN") function attribute, Nios II: Function Attributes.
53654                                                             (line 1824)
53655* target("paired") function attribute, PowerPC: Function Attributes.
53656                                                             (line 1797)
53657* target("pclmul") function attribute, x86: Function Attributes.
53658                                                             (line 1563)
53659* target("popcnt") function attribute, x86: Function Attributes.
53660                                                             (line 1567)
53661* target("popcntb") function attribute, PowerPC: Function Attributes.
53662                                                             (line 1738)
53663* target("popcntd") function attribute, PowerPC: Function Attributes.
53664                                                             (line 1745)
53665* target("powerpc-gfxopt") function attribute, PowerPC: Function Attributes.
53666                                                             (line 1751)
53667* target("powerpc-gpopt") function attribute, PowerPC: Function Attributes.
53668                                                             (line 1757)
53669* target("recip") function attribute, x86: Function Attributes.
53670                                                             (line 1649)
53671* target("recip-precision") function attribute, PowerPC: Function Attributes.
53672                                                             (line 1763)
53673* target("sse") function attribute, x86: Function Attributes.
53674                                                             (line 1571)
53675* target("sse2") function attribute, x86: Function Attributes.
53676                                                             (line 1575)
53677* target("sse3") function attribute, x86: Function Attributes.
53678                                                             (line 1579)
53679* target("sse4") function attribute, x86: Function Attributes.
53680                                                             (line 1583)
53681* target("sse4.1") function attribute, x86: Function Attributes.
53682                                                             (line 1588)
53683* target("sse4.2") function attribute, x86: Function Attributes.
53684                                                             (line 1592)
53685* target("sse4a") function attribute, x86: Function Attributes.
53686                                                             (line 1596)
53687* target("ssse3") function attribute, x86: Function Attributes.
53688                                                             (line 1612)
53689* target("string") function attribute, PowerPC: Function Attributes.
53690                                                             (line 1769)
53691* target("tune=TUNE") function attribute, PowerPC: Function Attributes.
53692                                                             (line 1814)
53693* target("tune=TUNE") function attribute, x86: Function Attributes.
53694                                                             (line 1658)
53695* target("update") function attribute, PowerPC: Function Attributes.
53696                                                             (line 1732)
53697* target("vsx") function attribute, PowerPC: Function Attributes.
53698                                                             (line 1775)
53699* target("xop") function attribute, x86: Function Attributes.
53700                                                             (line 1604)
53701* TC1:                                   Standards.          (line   13)
53702* TC2:                                   Standards.          (line   13)
53703* TC3:                                   Standards.          (line   13)
53704* Technical Corrigenda:                  Standards.          (line   13)
53705* Technical Corrigendum 1:               Standards.          (line   13)
53706* Technical Corrigendum 2:               Standards.          (line   13)
53707* Technical Corrigendum 3:               Standards.          (line   13)
53708* template instantiation:                Template Instantiation.
53709                                                             (line    6)
53710* temporaries, lifetime of:              Temporaries.        (line    6)
53711* tgamma:                                Other Builtins.     (line    6)
53712* tgammaf:                               Other Builtins.     (line    6)
53713* tgammal:                               Other Builtins.     (line    6)
53714* thiscall function attribute, x86-32:   Function Attributes.
53715                                                             (line  415)
53716* Thread-Local Storage:                  Thread-Local.       (line    6)
53717* thunks:                                Nested Functions.   (line    6)
53718* TILE-Gx options:                       TILE-Gx Options.    (line    6)
53719* TILEPro options:                       TILEPro Options.    (line    6)
53720* tiny data section on the H8/300H and H8S: Variable Attributes.
53721                                                             (line  418)
53722* tiny type attribute, MeP:              Type Attributes.    (line  349)
53723* tiny variable attribute, MeP:          Variable Attributes.
53724                                                             (line  475)
53725* tiny_data variable attribute, H8/300:  Variable Attributes.
53726                                                             (line  418)
53727* TLS:                                   Thread-Local.       (line    6)
53728* tls_model variable attribute:          Variable Attributes.
53729                                                             (line  236)
53730* TMPDIR:                                Environment Variables.
53731                                                             (line   45)
53732* toascii:                               Other Builtins.     (line    6)
53733* tolower:                               Other Builtins.     (line    6)
53734* toupper:                               Other Builtins.     (line    6)
53735* towlower:                              Other Builtins.     (line    6)
53736* towupper:                              Other Builtins.     (line    6)
53737* traditional C language:                C Dialect Options.  (line  344)
53738* transparent_union type attribute:      Type Attributes.    (line  143)
53739* trap_exit function attribute, SH:      Function Attributes.
53740                                                             (line 1845)
53741* trapa_handler function attribute, SH:  Function Attributes.
53742                                                             (line 1850)
53743* trunc:                                 Other Builtins.     (line    6)
53744* truncf:                                Other Builtins.     (line    6)
53745* truncl:                                Other Builtins.     (line    6)
53746* two-stage name lookup:                 Name lookup.        (line    6)
53747* type alignment:                        Alignment.          (line    6)
53748* type attributes:                       Type Attributes.    (line    6)
53749* type_info:                             Vague Linkage.      (line   42)
53750* typedef names as function parameters:  Incompatibilities.  (line   97)
53751* typeof:                                Typeof.             (line    6)
53752* uhk fixed-suffix:                      Fixed-Point.        (line    6)
53753* UHK fixed-suffix:                      Fixed-Point.        (line    6)
53754* UHR fixed-suffix:                      Fixed-Point.        (line    6)
53755* uhr fixed-suffix:                      Fixed-Point.        (line    6)
53756* UK fixed-suffix:                       Fixed-Point.        (line    6)
53757* uk fixed-suffix:                       Fixed-Point.        (line    6)
53758* ulk fixed-suffix:                      Fixed-Point.        (line    6)
53759* ULK fixed-suffix:                      Fixed-Point.        (line    6)
53760* ULL integer suffix:                    Long Long.          (line    6)
53761* ULLK fixed-suffix:                     Fixed-Point.        (line    6)
53762* ullk fixed-suffix:                     Fixed-Point.        (line    6)
53763* ULLR fixed-suffix:                     Fixed-Point.        (line    6)
53764* ullr fixed-suffix:                     Fixed-Point.        (line    6)
53765* ulr fixed-suffix:                      Fixed-Point.        (line    6)
53766* ULR fixed-suffix:                      Fixed-Point.        (line    6)
53767* undefined behavior:                    Bug Criteria.       (line   17)
53768* undefined function value:              Bug Criteria.       (line   17)
53769* underscores in variables in macros:    Typeof.             (line   46)
53770* union:                                 Unnamed Fields.     (line    6)
53771* union, casting to a:                   Cast to Union.      (line    6)
53772* unions:                                Incompatibilities.  (line  146)
53773* unknown pragmas, warning:              Warning Options.    (line  729)
53774* unresolved references and -nodefaultlibs: Link Options.    (line   91)
53775* unresolved references and -nostdlib:   Link Options.       (line   91)
53776* unused function attribute:             Function Attributes.
53777                                                             (line 1854)
53778* unused label attribute:                Label Attributes.   (line   29)
53779* unused type attribute:                 Type Attributes.    (line  195)
53780* unused variable attribute:             Variable Attributes.
53781                                                             (line  245)
53782* UR fixed-suffix:                       Fixed-Point.        (line    6)
53783* ur fixed-suffix:                       Fixed-Point.        (line    6)
53784* use_debug_exception_return function attribute, MIPS: Function Attributes.
53785                                                             (line  757)
53786* use_shadow_register_set function attribute, MIPS: Function Attributes.
53787                                                             (line  748)
53788* used function attribute:               Function Attributes.
53789                                                             (line 1859)
53790* used variable attribute:               Variable Attributes.
53791                                                             (line  250)
53792* User stack pointer in interrupts on the Blackfin: Function Attributes.
53793                                                             (line  841)
53794* V in constraint:                       Simple Constraints. (line   43)
53795* V850 Options:                          V850 Options.       (line    6)
53796* vague linkage:                         Vague Linkage.      (line    6)
53797* value after longjmp:                   Global Reg Vars.    (line   65)
53798* variable addressability on the M32R/D: Variable Attributes.
53799                                                             (line  446)
53800* variable alignment:                    Alignment.          (line    6)
53801* variable attributes:                   Variable Attributes.
53802                                                             (line    6)
53803* variable number of arguments:          Variadic Macros.    (line    6)
53804* variable-length array in a structure:  Variable Length.    (line   26)
53805* variable-length array scope:           Variable Length.    (line   22)
53806* variable-length arrays:                Variable Length.    (line    6)
53807* variables in specified registers:      Explicit Reg Vars.  (line    6)
53808* variables, local, in macros:           Typeof.             (line   46)
53809* variadic macros:                       Variadic Macros.    (line    6)
53810* VAX options:                           VAX Options.        (line    6)
53811* vector function attribute, RX:         Function Attributes.
53812                                                             (line 1869)
53813* vector_size variable attribute:        Variable Attributes.
53814                                                             (line  259)
53815* version_id function attribute, IA-64:  Function Attributes.
53816                                                             (line 1876)
53817* vfprintf:                              Other Builtins.     (line    6)
53818* vfscanf:                               Other Builtins.     (line    6)
53819* visibility function attribute:         Function Attributes.
53820                                                             (line 1886)
53821* visibility type attribute:             Type Attributes.    (line  269)
53822* Visium options:                        Visium Options.     (line    6)
53823* VLAs:                                  Variable Length.    (line    6)
53824* vliw function attribute, MeP:          Function Attributes.
53825                                                             (line 1983)
53826* void pointers, arithmetic:             Pointer Arith.      (line    6)
53827* void, size of pointer to:              Pointer Arith.      (line    6)
53828* volatile access <1>:                   C++ Volatiles.      (line    6)
53829* volatile access:                       Volatiles.          (line    6)
53830* volatile applied to function:          Function Attributes.
53831                                                             (line    6)
53832* volatile asm:                          Extended Asm.       (line  109)
53833* volatile read <1>:                     Volatiles.          (line    6)
53834* volatile read:                         C++ Volatiles.      (line    6)
53835* volatile write <1>:                    C++ Volatiles.      (line    6)
53836* volatile write:                        Volatiles.          (line    6)
53837* vprintf:                               Other Builtins.     (line    6)
53838* vscanf:                                Other Builtins.     (line    6)
53839* vsnprintf:                             Other Builtins.     (line    6)
53840* vsprintf:                              Other Builtins.     (line    6)
53841* vsscanf:                               Other Builtins.     (line    6)
53842* vtable:                                Vague Linkage.      (line   27)
53843* VxWorks Options:                       VxWorks Options.    (line    6)
53844* w floating point suffix:               Floating Types.     (line    6)
53845* W floating point suffix:               Floating Types.     (line    6)
53846* wakeup function attribute, MSP430:     Function Attributes.
53847                                                             (line  704)
53848* warm function attribute, NDS32:        Function Attributes.
53849                                                             (line 1358)
53850* warn_unused type attribute:            C++ Attributes.     (line   77)
53851* warn_unused_result function attribute: Function Attributes.
53852                                                             (line 1989)
53853* warning for comparison of signed and unsigned values: Warning Options.
53854                                                             (line 1299)
53855* warning for overloaded virtual function: C++ Dialect Options.
53856                                                             (line  682)
53857* warning for reordering of member initializers: C++ Dialect Options.
53858                                                             (line  598)
53859* warning for unknown pragmas:           Warning Options.    (line  729)
53860* warning function attribute:            Function Attributes.
53861                                                             (line  206)
53862* warning GCC_COLORS capability:         Language Independent Options.
53863                                                             (line   72)
53864* warning messages:                      Warning Options.    (line    6)
53865* warnings from system headers:          Warning Options.    (line  949)
53866* warnings vs errors:                    Warnings and Errors.
53867                                                             (line    6)
53868* weak function attribute:               Function Attributes.
53869                                                             (line 2006)
53870* weak variable attribute:               Variable Attributes.
53871                                                             (line  304)
53872* weakref function attribute:            Function Attributes.
53873                                                             (line 2015)
53874* whitespace:                            Incompatibilities.  (line  112)
53875* Windows Options for x86:               x86 Windows Options.
53876                                                             (line    6)
53877* X in constraint:                       Simple Constraints. (line  124)
53878* X3.159-1989:                           Standards.          (line   13)
53879* x86 Options:                           x86 Options.        (line    6)
53880* x86 Windows Options:                   x86 Windows Options.
53881                                                             (line    6)
53882* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
53883* Xtensa Options:                        Xtensa Options.     (line    6)
53884* y0:                                    Other Builtins.     (line    6)
53885* y0f:                                   Other Builtins.     (line    6)
53886* y0l:                                   Other Builtins.     (line    6)
53887* y1:                                    Other Builtins.     (line    6)
53888* y1f:                                   Other Builtins.     (line    6)
53889* y1l:                                   Other Builtins.     (line    6)
53890* yn:                                    Other Builtins.     (line    6)
53891* ynf:                                   Other Builtins.     (line    6)
53892* ynl:                                   Other Builtins.     (line    6)
53893* zero-length arrays:                    Zero Length.        (line    6)
53894* zero-size structures:                  Empty Structures.   (line    6)
53895* zSeries options:                       zSeries Options.    (line    6)
53896
53897
53898
53899Tag Table:
53900Node: Top2034
53901Node: G++ and GCC3877
53902Node: Standards5946
53903Node: Invoking GCC18036
53904Node: Option Summary21781
53905Node: Overall Options66338
53906Node: Invoking G++80576
53907Node: C Dialect Options82099
53908Node: C++ Dialect Options99365
53909Node: Objective-C and Objective-C++ Dialect Options131351
53910Node: Language Independent Options142587
53911Node: Warning Options147405
53912Node: Debugging Options225838
53913Node: Optimize Options297316
53914Ref: Type-punning360579
53915Node: Preprocessor Options449370
53916Ref: Wtrigraphs454152
53917Ref: dashMF458900
53918Ref: fdollars-in-identifiers470226
53919Node: Assembler Options480469
53920Node: Link Options481161
53921Ref: Link Options-Footnote-1494689
53922Node: Directory Options495023
53923Node: Spec Files501765
53924Node: Target Options523636
53925Node: Submodel Options524035
53926Node: AArch64 Options525800
53927Node: Adapteva Epiphany Options531540
53928Node: ARC Options537491
53929Node: ARM Options549930
53930Node: AVR Options567617
53931Node: Blackfin Options588911
53932Node: C6X Options596926
53933Node: CRIS Options598469
53934Node: CR16 Options602213
53935Node: Darwin Options603120
53936Node: DEC Alpha Options610561
53937Node: FR30 Options622149
53938Node: FRV Options622714
53939Node: GNU/Linux Options629433
53940Node: H8/300 Options630694
53941Node: HPPA Options632144
53942Node: IA-64 Options641333
53943Node: LM32 Options649378
53944Node: M32C Options649902
53945Node: M32R/D Options651176
53946Node: M680x0 Options654722
53947Node: MCore Options668768
53948Node: MeP Options670271
53949Node: MicroBlaze Options674231
53950Node: MIPS Options677027
53951Node: MMIX Options710548
53952Node: MN10300 Options713030
53953Node: Moxie Options715573
53954Node: MSP430 Options716061
53955Node: NDS32 Options719565
53956Node: Nios II Options721459
53957Node: Nvidia PTX Options731636
53958Node: PDP-11 Options732028
53959Node: picoChip Options733725
53960Node: PowerPC Options735866
53961Node: RL78 Options736087
53962Node: RS/6000 and PowerPC Options736935
53963Node: RX Options777263
53964Node: S/390 and zSeries Options784613
53965Node: Score Options793171
53966Node: SH Options794013
53967Node: Solaris 2 Options814907
53968Node: SPARC Options816435
53969Node: SPU Options829704
53970Node: System V Options834641
53971Node: TILE-Gx Options835467
53972Node: TILEPro Options836485
53973Node: V850 Options836989
53974Node: VAX Options843681
53975Node: Visium Options844219
53976Node: VMS Options846527
53977Node: VxWorks Options847341
53978Node: x86 Options848493
53979Node: x86 Windows Options892077
53980Node: Xstormy16 Options894877
53981Node: Xtensa Options895171
53982Node: zSeries Options899496
53983Node: Code Gen Options899692
53984Node: Environment Variables930516
53985Node: Precompiled Headers938783
53986Node: C Implementation944791
53987Node: Translation implementation946480
53988Node: Environment implementation947072
53989Node: Identifiers implementation947627
53990Node: Characters implementation948714
53991Node: Integers implementation952365
53992Node: Floating point implementation954251
53993Node: Arrays and pointers implementation957316
53994Ref: Arrays and pointers implementation-Footnote-1958775
53995Node: Hints implementation958899
53996Node: Structures unions enumerations and bit-fields implementation960386
53997Node: Qualifiers implementation962611
53998Node: Declarators implementation964391
53999Node: Statements implementation964733
54000Node: Preprocessing directives implementation965060
54001Node: Library functions implementation967382
54002Node: Architecture implementation968032
54003Node: Locale-specific behavior implementation969674
54004Node: C++ Implementation969979
54005Node: Conditionally-supported behavior971261
54006Node: Exception handling971879
54007Node: C Extensions972288
54008Node: Statement Exprs977446
54009Node: Local Labels981922
54010Node: Labels as Values984895
54011Ref: Labels as Values-Footnote-1987420
54012Node: Nested Functions987603
54013Node: Constructing Calls991561
54014Node: Typeof996279
54015Node: Conditionals1000207
54016Node: __int1281001097
54017Node: Long Long1001621
54018Node: Complex1003097
54019Node: Floating Types1005686
54020Node: Half-Precision1006806
54021Node: Decimal Float1008988
54022Node: Hex Floats1010843
54023Node: Fixed-Point1011879
54024Node: Named Address Spaces1015161
54025Ref: AVR Named Address Spaces1015842
54026Node: Zero Length1021048
54027Node: Empty Structures1024087
54028Node: Variable Length1024493
54029Node: Variadic Macros1027349
54030Node: Escaped Newlines1029727
54031Node: Subscripting1030588
54032Node: Pointer Arith1031314
54033Node: Pointers to Arrays1031888
54034Node: Initializers1032632
54035Node: Compound Literals1033133
54036Node: Designated Inits1036480
54037Node: Case Ranges1040218
54038Node: Cast to Union1040899
54039Node: Mixed Declarations1041990
54040Node: Function Attributes1042500
54041Node: Label Attributes1136352
54042Node: Attribute Syntax1138196
54043Node: Function Prototypes1148410
54044Node: C++ Comments1150191
54045Node: Dollar Signs1150710
54046Node: Character Escapes1151175
54047Node: Variable Attributes1151469
54048Ref: AVR Variable Attributes1165190
54049Ref: MeP Variable Attributes1170555
54050Ref: x86 Variable Attributes1173125
54051Node: Type Attributes1178164
54052Ref: MeP Type Attributes1193413
54053Ref: PowerPC Type Attributes1193687
54054Ref: SPU Type Attributes1194548
54055Ref: x86 Type Attributes1194839
54056Node: Alignment1195527
54057Node: Inline1196897
54058Node: Volatiles1201872
54059Node: Using Assembly Language with C1204772
54060Node: Basic Asm1205976
54061Node: Extended Asm1210110
54062Ref: Volatile1213907
54063Ref: AssemblerTemplate1217979
54064Ref: OutputOperands1222204
54065Ref: InputOperands1229106
54066Ref: Clobbers1233331
54067Ref: GotoLabels1236627
54068Ref: x86Operandmodifiers1238760
54069Ref: x86floatingpointasmoperands1241004
54070Node: Constraints1244334
54071Node: Simple Constraints1245440
54072Node: Multi-Alternative1252765
54073Node: Modifiers1254772
54074Node: Machine Constraints1258276
54075Node: Asm Labels1314728
54076Node: Explicit Reg Vars1316426
54077Node: Global Reg Vars1318047
54078Node: Local Reg Vars1322547
54079Node: Size of an asm1325667
54080Node: Alternate Keywords1326912
54081Node: Incomplete Enums1328411
54082Node: Function Names1329167
54083Node: Return Address1330770
54084Node: Vector Extensions1334277
54085Node: Offsetof1341562
54086Node: __sync Builtins1342403
54087Node: __atomic Builtins1347879
54088Node: Integer Overflow Builtins1359483
54089Node: x86 specific memory model extensions for transactional memory1363613
54090Node: Object Size Checking1364882
54091Node: Pointer Bounds Checker builtins1370388
54092Node: Cilk Plus Builtins1376394
54093Node: Other Builtins1377310
54094Node: Target Builtins1406954
54095Node: AArch64 Built-in Functions1408446
54096Node: Alpha Built-in Functions1408901
54097Node: Altera Nios II Built-in Functions1411949
54098Node: ARC Built-in Functions1415934
54099Node: ARC SIMD Built-in Functions1421145
54100Node: ARM iWMMXt Built-in Functions1430041
54101Node: ARM C Language Extensions (ACLE)1437037
54102Node: ARM Floating Point Status and Control Intrinsics1438314
54103Node: AVR Built-in Functions1438790
54104Node: Blackfin Built-in Functions1441889
54105Node: FR-V Built-in Functions1442508
54106Node: Argument Types1443374
54107Node: Directly-mapped Integer Functions1445128
54108Node: Directly-mapped Media Functions1446212
54109Node: Raw read/write Functions1453246
54110Node: Other Built-in Functions1454160
54111Node: MIPS DSP Built-in Functions1455346
54112Node: MIPS Paired-Single Support1467844
54113Node: MIPS Loongson Built-in Functions1469343
54114Node: Paired-Single Arithmetic1475863
54115Node: Paired-Single Built-in Functions1476811
54116Node: MIPS-3D Built-in Functions1479478
54117Node: Other MIPS Built-in Functions1484855
54118Node: MSP430 Built-in Functions1485860
54119Node: NDS32 Built-in Functions1487261
54120Node: picoChip Built-in Functions1488554
54121Node: PowerPC Built-in Functions1489898
54122Node: PowerPC AltiVec/VSX Built-in Functions1493605
54123Node: PowerPC Hardware Transactional Memory Built-in Functions1633396
54124Node: RX Built-in Functions1641887
54125Node: S/390 System z Built-in Functions1645920
54126Node: SH Built-in Functions1651157
54127Node: SPARC VIS Built-in Functions1652885
54128Node: SPU Built-in Functions1658489
54129Node: TI C6X Built-in Functions1660305
54130Node: TILE-Gx Built-in Functions1661329
54131Node: TILEPro Built-in Functions1662446
54132Node: x86 Built-in Functions1663544
54133Node: x86 transactional memory intrinsics1723079
54134Node: Target Format Checks1726299
54135Node: Solaris Format Checks1726731
54136Node: Darwin Format Checks1727157
54137Node: Pragmas1727975
54138Node: ARM Pragmas1728711
54139Node: M32C Pragmas1729314
54140Node: MeP Pragmas1730388
54141Node: RS/6000 and PowerPC Pragmas1732457
54142Node: Darwin Pragmas1733198
54143Node: Solaris Pragmas1734265
54144Node: Symbol-Renaming Pragmas1735426
54145Node: Structure-Packing Pragmas1737040
54146Node: Weak Pragmas1738689
54147Node: Diagnostic Pragmas1739423
54148Node: Visibility Pragmas1742530
54149Node: Push/Pop Macro Pragmas1743215
54150Node: Function Specific Option Pragmas1744187
54151Node: Loop-Specific Pragmas1746032
54152Node: Unnamed Fields1747122
54153Node: Thread-Local1749320
54154Node: C99 Thread-Local Edits1751425
54155Node: C++98 Thread-Local Edits1753437
54156Node: Binary constants1756881
54157Node: C++ Extensions1757552
54158Node: C++ Volatiles1759263
54159Node: Restricted Pointers1761611
54160Node: Vague Linkage1763202
54161Node: C++ Interface1766826
54162Ref: C++ Interface-Footnote-11770619
54163Node: Template Instantiation1770755
54164Node: Bound member functions1777341
54165Node: C++ Attributes1778873
54166Node: Function Multiversioning1783310
54167Node: Namespace Association1785125
54168Node: Type Traits1786505
54169Node: Java Exceptions1792993
54170Node: Deprecated Features1794383
54171Node: Backwards Compatibility1797348
54172Node: Objective-C1798700
54173Node: GNU Objective-C runtime API1799309
54174Node: Modern GNU Objective-C runtime API1800316
54175Node: Traditional GNU Objective-C runtime API1802753
54176Node: Executing code before main1803481
54177Node: What you can and what you cannot do in +load1806223
54178Node: Type encoding1808595
54179Node: Legacy type encoding1813671
54180Node: @encode1814762
54181Node: Method signatures1815307
54182Node: Garbage Collection1817302
54183Node: Constant string objects1819991
54184Node: compatibility_alias1822499
54185Node: Exceptions1823225
54186Node: Synchronization1825936
54187Node: Fast enumeration1827120
54188Node: Using fast enumeration1827432
54189Node: c99-like fast enumeration syntax1828643
54190Node: Fast enumeration details1829346
54191Node: Fast enumeration protocol1831687
54192Node: Messaging with the GNU Objective-C runtime1834839
54193Node: Dynamically registering methods1836210
54194Node: Forwarding hook1837901
54195Node: Compatibility1840941
54196Node: Gcov1847508
54197Node: Gcov Intro1848043
54198Node: Invoking Gcov1850761
54199Node: Gcov and Optimization1865007
54200Node: Gcov Data Files1868007
54201Node: Cross-profiling1869402
54202Node: Gcov-tool1871253
54203Node: Gcov-tool Intro1871676
54204Node: Invoking Gcov-tool1873637
54205Node: Trouble1876185
54206Node: Actual Bugs1877602
54207Node: Interoperation1878049
54208Node: Incompatibilities1884941
54209Node: Fixed Headers1893092
54210Node: Standard Libraries1894755
54211Node: Disappointments1896127
54212Node: C++ Misunderstandings1900485
54213Node: Static Definitions1901296
54214Node: Name lookup1902349
54215Ref: Name lookup-Footnote-11907127
54216Node: Temporaries1907314
54217Node: Copy Assignment1909290
54218Node: Non-bugs1911097
54219Node: Warnings and Errors1921604
54220Node: Bugs1923366
54221Node: Bug Criteria1923833
54222Node: Bug Reporting1926043
54223Node: Service1926275
54224Node: Contributing1927094
54225Node: Funding1927834
54226Node: GNU Project1930323
54227Node: Copying1930969
54228Node: GNU Free Documentation License1968497
54229Node: Contributors1993634
54230Node: Option Index2032402
54231Node: Keyword Index2253577
54232
54233End Tag Table
54234