This is gcc.info, produced by makeinfo version 5.2 from gcc.texi.

Copyright (C) 1988-2015 Free Software Foundation, Inc.

 Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover Texts
being (a) (see below), and with the Back-Cover Texts being (b) (see
below).  A copy of the license is included in the section entitled "GNU
Free Documentation License".

 (a) The FSF's Front-Cover Text is:

 A GNU Manual

 (b) The FSF's Back-Cover Text is:

 You have freedom to copy and modify this GNU Manual, like GNU software.
Copies published by the Free Software Foundation raise funds for GNU
development.
INFO-DIR-SECTION Software development
START-INFO-DIR-ENTRY
* gcc: (gcc).                  The GNU Compiler Collection.
* g++: (gcc).                  The GNU C++ compiler.
* gcov: (gcc) Gcov.            'gcov'--a test coverage program.
* gcov-tool: (gcc) Gcov-tool.  'gcov-tool'--an offline gcda profile processing program.
END-INFO-DIR-ENTRY

 This file documents the use of the GNU compilers.

 Copyright (C) 1988-2015 Free Software Foundation, Inc.

 Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover Texts
being (a) (see below), and with the Back-Cover Texts being (b) (see
below).  A copy of the license is included in the section entitled "GNU
Free Documentation License".

 (a) The FSF's Front-Cover Text is:

 A GNU Manual

 (b) The FSF's Back-Cover Text is:

 You have freedom to copy and modify this GNU Manual, like GNU software.
Copies published by the Free Software Foundation raise funds for GNU
development.


File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)

Introduction
************

This manual documents how to use the GNU compilers, as well as their
features and incompatibilities, and how to report bugs.  It corresponds
to the compilers (Linaro GCC 5.1-2015.08) version 5.1.1.  The internals
of the GNU compilers, including how to port them to new targets and some
information about how to write front ends for new languages, are
documented in a separate manual.  *Note Introduction: (gccint)Top.

* Menu:

* G++ and GCC::     You can compile C or C++ programs.
* Standards::       Language standards supported by GCC.
* Invoking GCC::    Command options supported by 'gcc'.
* C Implementation:: How GCC implements the ISO C specification.
* C++ Implementation:: How GCC implements the ISO C++ specification.
* C Extensions::    GNU extensions to the C language family.
* C++ Extensions::  GNU extensions to the C++ language.
* Objective-C::     GNU Objective-C runtime features.
* Compatibility::   Binary Compatibility
* Gcov::            'gcov'--a test coverage program.
* Gcov-tool::       'gcov-tool'--an offline gcda profile processing program.
* Trouble::         If you have trouble using GCC.
* Bugs::            How, why and where to report bugs.
* Service::         How To Get Help with GCC
* Contributing::    How to contribute to testing and developing GCC.

* Funding::         How to help assure funding for free software.
* GNU Project::     The GNU Project and GNU/Linux.

* Copying::         GNU General Public License says
                    how you can copy and share GCC.
* GNU Free Documentation License:: How you can copy and share this manual.
* Contributors::    People who have contributed to GCC.

* Option Index::    Index to command line options.
* Keyword Index::   Index of concepts and symbol names.


File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Up: Top

1 Programming Languages Supported by GCC
****************************************

GCC stands for "GNU Compiler Collection".  GCC is an integrated
distribution of compilers for several major programming languages.
These languages currently include C, C++, Objective-C, Objective-C++,
Java, Fortran, Ada, and Go.

 The abbreviation "GCC" has multiple meanings in common use.  The
current official meaning is "GNU Compiler Collection", which refers
generically to the complete suite of tools.  The name historically stood
for "GNU C Compiler", and this usage is still common when the emphasis
is on compiling C programs.  Finally, the name is also used when
speaking of the "language-independent" component of GCC: code shared
among the compilers for all supported languages.

 The language-independent component of GCC includes the majority of the
optimizers, as well as the "back ends" that generate machine code for
various processors.

 The part of a compiler that is specific to a particular language is
called the "front end".  In addition to the front ends that are
integrated components of GCC, there are several other front ends that
are maintained separately.  These support languages such as Pascal,
Mercury, and COBOL.  To use these, they must be built together with GCC
proper.

 Most of the compilers for languages other than C have their own names.
The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
talk about compiling one of those languages, we might refer to that
compiler by its own name, or as GCC.  Either is correct.

 Historically, compilers for many languages, including C++ and Fortran,
have been implemented as "preprocessors" which emit another high level
language such as C.  None of the compilers included in GCC are
implemented this way; they all generate machine code directly.  This
sort of preprocessor should not be confused with the "C preprocessor",
which is an integral feature of the C, C++, Objective-C and
Objective-C++ languages.


File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top

2 Language Standards Supported by GCC
*************************************

For each language compiled by GCC for which there is a standard, GCC
attempts to follow one or more versions of that standard, possibly with
some exceptions, and possibly with some extensions.

2.1 C Language
==============

GCC supports three versions of the C standard, although support for the
most recent version is not yet complete.

 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
published in 1990.  This standard was ratified as an ISO standard
(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
between these publications, although the sections of the ANSI standard
were renumbered and became clauses in the ISO standard.  This standard,
in both its forms, is commonly known as "C89", or occasionally as "C90",
from the dates of ratification.  The ANSI standard, but not the ISO
standard, also came with a Rationale document.  To select this standard
in GCC, use one of the options '-ansi', '-std=c90' or
'-std=iso9899:1990'; to obtain all the diagnostics required by the
standard, you should also specify '-pedantic' (or '-pedantic-errors' if
you want them to be errors rather than warnings).  *Note Options
Controlling C Dialect: C Dialect Options.

 Errors in the 1990 ISO C standard were corrected in two Technical
Corrigenda published in 1994 and 1996.  GCC does not support the
uncorrected version.

 An amendment to the 1990 standard was published in 1995.  This
amendment added digraphs and '__STDC_VERSION__' to the language, but
otherwise concerned the library.  This amendment is commonly known as
"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
select this standard in GCC, use the option '-std=iso9899:199409' (with,
as for other standard versions, '-pedantic' to receive all required
diagnostics).

 A new edition of the ISO C standard was published in 1999 as ISO/IEC
9899:1999, and is commonly known as "C99".  GCC has substantially
complete support for this standard version; see
<http://gcc.gnu.org/c99status.html> for details.  To select this
standard, use '-std=c99' or '-std=iso9899:1999'.  (While in development,
drafts of this standard version were referred to as "C9X".)

 Errors in the 1999 ISO C standard were corrected in three Technical
Corrigenda published in 2001, 2004 and 2007.  GCC does not support the
uncorrected version.

 A fourth version of the C standard, known as "C11", was published in
2011 as ISO/IEC 9899:2011.  GCC has substantially complete support for
this standard, enabled with '-std=c11' or '-std=iso9899:2011'.  (While
in development, drafts of this standard version were referred to as
"C1X".)

 By default, GCC provides some extensions to the C language that on rare
occasions conflict with the C standard.  *Note Extensions to the C
Language Family: C Extensions.  Use of the '-std' options listed above
will disable these extensions where they conflict with the C standard
version selected.  You may also select an extended version of the C
language explicitly with '-std=gnu90' (for C90 with GNU extensions),
'-std=gnu99' (for C99 with GNU extensions) or '-std=gnu11' (for C11 with
GNU extensions).  The default, if no C language dialect options are
given, is '-std=gnu11'.  Some features that are part of the C99 standard
are accepted as extensions in C90 mode, and some features that are part
of the C11 standard are accepted as extensions in C90 and C99 modes.

 The ISO C standard defines (in clause 4) two classes of conforming
implementation.  A "conforming hosted implementation" supports the whole
standard including all the library facilities; a "conforming
freestanding implementation" is only required to provide certain library
facilities: those in '<float.h>', '<limits.h>', '<stdarg.h>', and
'<stddef.h>'; since AMD1, also those in '<iso646.h>'; since C99, also
those in '<stdbool.h>' and '<stdint.h>'; and since C11, also those in
'<stdalign.h>' and '<stdnoreturn.h>'.  In addition, complex types, added
in C99, are not required for freestanding implementations.  The standard
also defines two environments for programs, a "freestanding
environment", required of all implementations and which may not have
library facilities beyond those required of freestanding
implementations, where the handling of program startup and termination
are implementation-defined, and a "hosted environment", which is not
required, in which all the library facilities are provided and startup
is through a function 'int main (void)' or 'int main (int, char *[])'.
An OS kernel would be a freestanding environment; a program using the
facilities of an operating system would normally be in a hosted
implementation.

 GCC aims towards being usable as a conforming freestanding
implementation, or as the compiler for a conforming hosted
implementation.  By default, it will act as the compiler for a hosted
implementation, defining '__STDC_HOSTED__' as '1' and presuming that
when the names of ISO C functions are used, they have the semantics
defined in the standard.  To make it act as a conforming freestanding
implementation for a freestanding environment, use the option
'-ffreestanding'; it will then define '__STDC_HOSTED__' to '0' and not
make assumptions about the meanings of function names from the standard
library, with exceptions noted below.  To build an OS kernel, you may
well still need to make your own arrangements for linking and startup.
*Note Options Controlling C Dialect: C Dialect Options.

 GCC does not provide the library facilities required only of hosted
implementations, nor yet all the facilities required by C99 of
freestanding implementations on all platforms; to use the facilities of
a hosted environment, you will need to find them elsewhere (for example,
in the GNU C library).  *Note Standard Libraries: Standard Libraries.

 Most of the compiler support routines used by GCC are present in
'libgcc', but there are a few exceptions.  GCC requires the freestanding
environment provide 'memcpy', 'memmove', 'memset' and 'memcmp'.
Finally, if '__builtin_trap' is used, and the target does not implement
the 'trap' pattern, then GCC will emit a call to 'abort'.

 For references to Technical Corrigenda, Rationale documents and
information concerning the history of C that is available online, see
<http://gcc.gnu.org/readings.html>

2.2 C++ Language
================

GCC supports the original ISO C++ standard (1998) and contains
experimental support for the second ISO C++ standard (2011).

 The original ISO C++ standard was published as the ISO standard
(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in
2003 (ISO/IEC 14882:2003).  These standards are referred to as C++98 and
C++03, respectively.  GCC implements the majority of C++98 ('export' is
a notable exception) and most of the changes in C++03.  To select this
standard in GCC, use one of the options '-ansi', '-std=c++98', or
'-std=c++03'; to obtain all the diagnostics required by the standard,
you should also specify '-pedantic' (or '-pedantic-errors' if you want
them to be errors rather than warnings).

 A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011,
and is referred to as C++11; before its publication it was commonly
referred to as C++0x.  C++11 contains several changes to the C++
language, most of which have been implemented in an experimental C++11
mode in GCC.  For information regarding the C++11 features available in
the experimental C++11 mode, see
<http://gcc.gnu.org/projects/cxx0x.html>.  To select this standard in
GCC, use the option '-std=c++11'; to obtain all the diagnostics required
by the standard, you should also specify '-pedantic' (or
'-pedantic-errors' if you want them to be errors rather than warnings).

 More information about the C++ standards is available on the ISO C++
committee's web site at <http://www.open-std.org/jtc1/sc22/wg21/>.

 By default, GCC provides some extensions to the C++ language; *Note
Options Controlling C++ Dialect: C++ Dialect Options.  Use of the '-std'
option listed above will disable these extensions.  You may also select
an extended version of the C++ language explicitly with '-std=gnu++98'
(for C++98 with GNU extensions) or '-std=gnu++11' (for C++11 with GNU
extensions).  The default, if no C++ language dialect options are given,
is '-std=gnu++98'.

2.3 Objective-C and Objective-C++ Languages
===========================================

GCC supports "traditional" Objective-C (also known as "Objective-C 1.0")
and contains support for the Objective-C exception and synchronization
syntax.  It has also support for a number of "Objective-C 2.0" language
extensions, including properties, fast enumeration (only for
Objective-C), method attributes and the @optional and @required keywords
in protocols.  GCC supports Objective-C++ and features available in
Objective-C are also available in Objective-C++.

 GCC by default uses the GNU Objective-C runtime library, which is part
of GCC and is not the same as the Apple/NeXT Objective-C runtime library
used on Apple systems.  There are a number of differences documented in
this manual.  The options '-fgnu-runtime' and '-fnext-runtime' allow you
to switch between producing output that works with the GNU Objective-C
runtime library and output that works with the Apple/NeXT Objective-C
runtime library.

 There is no formal written standard for Objective-C or Objective-C++.
The authoritative manual on traditional Objective-C (1.0) is
"Object-Oriented Programming and the Objective-C Language", available at
a number of web sites:
   * <http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf>
     is the original NeXTstep document;
   * <http://objc.toodarkpark.net> is the same document in another
     format;
   * 
     <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/>
     has an updated version but make sure you search for "Object
     Oriented Programming and the Objective-C Programming Language 1.0",
     not documentation on the newer "Objective-C 2.0" language

 The Objective-C exception and synchronization syntax (that is, the
keywords @try, @throw, @catch, @finally and @synchronized) is supported
by GCC and is enabled with the option '-fobjc-exceptions'.  The syntax
is briefly documented in this manual and in the Objective-C 2.0 manuals
from Apple.

 The Objective-C 2.0 language extensions and features are automatically
enabled; they include properties (via the @property, @synthesize and
@dynamic keywords), fast enumeration (not available in Objective-C++),
attributes for methods (such as deprecated, noreturn, sentinel, format),
the unused attribute for method arguments, the @package keyword for
instance variables and the @optional and @required keywords in
protocols.  You can disable all these Objective-C 2.0 language
extensions with the option '-fobjc-std=objc1', which causes the compiler
to recognize the same Objective-C language syntax recognized by GCC 4.0,
and to produce an error if one of the new features is used.

 GCC has currently no support for non-fragile instance variables.

 The authoritative manual on Objective-C 2.0 is available from Apple:
   * 
     <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/>

 For more information concerning the history of Objective-C that is
available online, see <http://gcc.gnu.org/readings.html>

2.4 Go Language
===============

As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
described at <http://golang.org/doc/go1.html>.

2.5 References for Other Languages
==================================

*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
conformance and compatibility of the Ada compiler.

 *Note Standards: (gfortran)Standards, for details of standards
supported by GNU Fortran.

 *Note Compatibility with the Java Platform: (gcj)Compatibility, for
details of compatibility between 'gcj' and the Java Platform.


File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top

3 GCC Command Options
*********************

When you invoke GCC, it normally does preprocessing, compilation,
assembly and linking.  The "overall options" allow you to stop this
process at an intermediate stage.  For example, the '-c' option says not
to run the linker.  Then the output consists of object files output by
the assembler.

 Other options are passed on to one stage of processing.  Some options
control the preprocessor and others the compiler itself.  Yet other
options control the assembler and linker; most of these are not
documented here, since you rarely need to use any of them.

 Most of the command-line options that you can use with GCC are useful
for C programs; when an option is only useful with another language
(usually C++), the explanation says so explicitly.  If the description
for a particular option does not mention a source language, you can use
that option with all supported languages.

 *Note Compiling C++ Programs: Invoking G++, for a summary of special
options for compiling C++ programs.

 The 'gcc' program accepts options and file names as operands.  Many
options have multi-letter names; therefore multiple single-letter
options may _not_ be grouped: '-dv' is very different from '-d -v'.

 You can mix options and other arguments.  For the most part, the order
you use doesn't matter.  Order does matter when you use several options
of the same kind; for example, if you specify '-L' more than once, the
directories are searched in the order specified.  Also, the placement of
the '-l' option is significant.

 Many options have long names starting with '-f' or with '-W'--for
example, '-fmove-loop-invariants', '-Wformat' and so on.  Most of these
have both positive and negative forms; the negative form of '-ffoo' is
'-fno-foo'.  This manual documents only one of these two forms,
whichever one is not the default.

 *Note Option Index::, for an index to GCC's options.

* Menu:

* Option Summary::      Brief list of all options, without explanations.
* Overall Options::     Controlling the kind of output:
                        an executable, object files, assembler files,
                        or preprocessed source.
* Invoking G++::        Compiling C++ programs.
* C Dialect Options::   Controlling the variant of C language compiled.
* C++ Dialect Options:: Variations on C++.
* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
                        and Objective-C++.
* Language Independent Options:: Controlling how diagnostics should be
                        formatted.
* Warning Options::     How picky should the compiler be?
* Debugging Options::   Symbol tables, measurements, and debugging dumps.
* Optimize Options::    How much optimization?
* Preprocessor Options:: Controlling header files and macro definitions.
                         Also, getting dependency information for Make.
* Assembler Options::   Passing options to the assembler.
* Link Options::        Specifying libraries and so on.
* Directory Options::   Where to find header files and libraries.
                        Where to find the compiler executable files.
* Spec Files::          How to pass switches to sub-processes.
* Target Options::      Running a cross-compiler, or an old version of GCC.
* Submodel Options::    Specifying minor hardware or convention variations,
                        such as 68010 vs 68020.
* Code Gen Options::    Specifying conventions for function calls, data layout
                        and register usage.
* Environment Variables:: Env vars that affect GCC.
* Precompiled Headers:: Compiling a header once, and using it many times.


File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC

3.1 Option Summary
==================

Here is a summary of all the options, grouped by type.  Explanations are
in the following sections.

_Overall Options_
     *Note Options Controlling the Kind of Output: Overall Options.
          -c  -S  -E  -o FILE  -no-canonical-prefixes
          -pipe  -pass-exit-codes
          -x LANGUAGE  -v  -###  --help[=CLASS[,...]]  --target-help
          --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG
          -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE

_C Language Options_
     *Note Options Controlling C Dialect: C Dialect Options.
          -ansi  -std=STANDARD  -fgnu89-inline
          -aux-info FILENAME -fallow-parameterless-variadic-functions
          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
          -fhosted  -ffreestanding -fopenacc -fopenmp -fopenmp-simd
          -fms-extensions -fplan9-extensions -trigraphs -traditional -traditional-cpp
          -fallow-single-precision  -fcond-mismatch -flax-vector-conversions
          -fsigned-bitfields  -fsigned-char
          -funsigned-bitfields  -funsigned-char

_C++ Language Options_
     *Note Options Controlling C++ Dialect: C++ Dialect Options.
          -fabi-version=N  -fno-access-control  -fcheck-new
          -fconstexpr-depth=N  -ffriend-injection
          -fno-elide-constructors
          -fno-enforce-eh-specs
          -ffor-scope  -fno-for-scope  -fno-gnu-keywords
          -fno-implicit-templates
          -fno-implicit-inline-templates
          -fno-implement-inlines  -fms-extensions
          -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names
          -fno-optional-diags  -fpermissive
          -fno-pretty-templates
          -frepo  -fno-rtti -fsized-deallocation
          -fstats  -ftemplate-backtrace-limit=N
          -ftemplate-depth=N
          -fno-threadsafe-statics  -fuse-cxa-atexit
          -fno-weak  -nostdinc++
          -fvisibility-inlines-hidden
          -fvtable-verify=[std|preinit|none]
          -fvtv-counts -fvtv-debug
          -fvisibility-ms-compat
          -fext-numeric-literals
          -Wabi=N  -Wabi-tag  -Wconversion-null  -Wctor-dtor-privacy
          -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing
          -Wnoexcept -Wnon-virtual-dtor  -Wreorder
          -Weffc++  -Wstrict-null-sentinel
          -Wno-non-template-friend  -Wold-style-cast
          -Woverloaded-virtual  -Wno-pmf-conversions
          -Wsign-promo

_Objective-C and Objective-C++ Language Options_
     *Note Options Controlling Objective-C and Objective-C++ Dialects:
     Objective-C and Objective-C++ Dialect Options.
          -fconstant-string-class=CLASS-NAME
          -fgnu-runtime  -fnext-runtime
          -fno-nil-receivers
          -fobjc-abi-version=N
          -fobjc-call-cxx-cdtors
          -fobjc-direct-dispatch
          -fobjc-exceptions
          -fobjc-gc
          -fobjc-nilcheck
          -fobjc-std=objc1
          -fno-local-ivars
          -fivar-visibility=[public|protected|private|package]
          -freplace-objc-classes
          -fzero-link
          -gen-decls
          -Wassign-intercept
          -Wno-protocol  -Wselector
          -Wstrict-selector-match
          -Wundeclared-selector

_Language Independent Options_
     *Note Options to Control Diagnostic Messages Formatting: Language
     Independent Options.
          -fmessage-length=N
          -fdiagnostics-show-location=[once|every-line]
          -fdiagnostics-color=[auto|never|always]
          -fno-diagnostics-show-option -fno-diagnostics-show-caret

_Warning Options_
     *Note Options to Request or Suppress Warnings: Warning Options.
          -fsyntax-only  -fmax-errors=N  -Wpedantic
          -pedantic-errors
          -w  -Wextra  -Wall  -Waddress  -Waggregate-return
          -Waggressive-loop-optimizations -Warray-bounds -Warray-bounds=N
          -Wbool-compare
          -Wno-attributes -Wno-builtin-macro-redefined
          -Wc90-c99-compat -Wc99-c11-compat
          -Wc++-compat -Wc++11-compat -Wc++14-compat -Wcast-align  -Wcast-qual
          -Wchar-subscripts -Wclobbered  -Wcomment -Wconditionally-supported
          -Wconversion -Wcoverage-mismatch -Wdate-time -Wdelete-incomplete -Wno-cpp
          -Wno-deprecated -Wno-deprecated-declarations -Wno-designated-init
          -Wdisabled-optimization
          -Wno-discarded-qualifiers -Wno-discarded-array-qualifiers
          -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare
          -Wno-endif-labels -Werror  -Werror=*
          -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
          -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral
          -Wformat-security  -Wformat-signedness  -Wformat-y2k
          -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init
          -Wignored-qualifiers  -Wincompatible-pointer-types
          -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
          -Winit-self  -Winline  -Wno-int-conversion
          -Wno-int-to-pointer-cast -Wno-invalid-offsetof
          -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
          -Wlogical-op -Wlogical-not-parentheses -Wlong-long
          -Wmain -Wmaybe-uninitialized -Wmemset-transposed-args -Wmissing-braces
          -Wmissing-field-initializers -Wmissing-include-dirs
          -Wno-multichar  -Wnonnull  -Wnormalized=[none|id|nfc|nfkc]
           -Wodr  -Wno-overflow  -Wopenmp-simd
          -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
          -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
          -Wpointer-arith  -Wno-pointer-to-int-cast
          -Wredundant-decls  -Wno-return-local-addr
          -Wreturn-type  -Wsequence-point  -Wshadow  -Wno-shadow-ivar
          -Wshift-count-negative -Wshift-count-overflow
          -Wsign-compare  -Wsign-conversion -Wfloat-conversion
          -Wsizeof-pointer-memaccess  -Wsizeof-array-argument
          -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing
          -Wstrict-aliasing=n  -Wstrict-overflow -Wstrict-overflow=N
          -Wsuggest-attribute=[pure|const|noreturn|format]
          -Wsuggest-final-types  -Wsuggest-final-methods  -Wsuggest-override
          -Wmissing-format-attribute
          -Wswitch  -Wswitch-default  -Wswitch-enum -Wswitch-bool -Wsync-nand
          -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
          -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
          -Wunsuffixed-float-constants  -Wunused  -Wunused-function
          -Wunused-label  -Wunused-local-typedefs -Wunused-parameter
          -Wno-unused-result -Wunused-value  -Wunused-variable
          -Wunused-but-set-parameter -Wunused-but-set-variable
          -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance
          -Wvla -Wvolatile-register-var  -Wwrite-strings
          -Wzero-as-null-pointer-constant

_C and Objective-C-only Warning Options_
          -Wbad-function-cast  -Wmissing-declarations
          -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs
          -Wold-style-declaration  -Wold-style-definition
          -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion
          -Wdeclaration-after-statement -Wpointer-sign

_Debugging Options_
     *Note Options for Debugging Your Program or GCC: Debugging Options.
          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
          -fsanitize=STYLE -fsanitize-recover -fsanitize-recover=STYLE
          -fasan-shadow-offset=NUMBER -fsanitize-undefined-trap-on-error
          -fcheck-pointer-bounds -fchkp-check-incomplete-type
          -fchkp-first-field-has-own-bounds -fchkp-narrow-bounds
          -fchkp-narrow-to-innermost-array -fchkp-optimize
          -fchkp-use-fast-string-functions -fchkp-use-nochk-string-functions
          -fchkp-use-static-bounds -fchkp-use-static-const-bounds
          -fchkp-treat-zero-dynamic-size-as-infinite -fchkp-check-read
          -fchkp-check-read -fchkp-check-write -fchkp-store-bounds
          -fchkp-instrument-calls -fchkp-instrument-marked-only
          -fchkp-use-wrappers
          -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST
          -fdisable-ipa-PASS_NAME
          -fdisable-rtl-PASS_NAME
          -fdisable-rtl-PASS-NAME=RANGE-LIST
          -fdisable-tree-PASS_NAME
          -fdisable-tree-PASS-NAME=RANGE-LIST
          -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links
          -fdump-translation-unit[-N]
          -fdump-class-hierarchy[-N]
          -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
          -fdump-passes
          -fdump-statistics
          -fdump-tree-all
          -fdump-tree-original[-N]
          -fdump-tree-optimized[-N]
          -fdump-tree-cfg -fdump-tree-alias
          -fdump-tree-ch
          -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
          -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
          -fdump-tree-gimple[-raw]
          -fdump-tree-dom[-N]
          -fdump-tree-dse[-N]
          -fdump-tree-phiprop[-N]
          -fdump-tree-phiopt[-N]
          -fdump-tree-forwprop[-N]
          -fdump-tree-copyrename[-N]
          -fdump-tree-nrv -fdump-tree-vect
          -fdump-tree-sink
          -fdump-tree-sra[-N]
          -fdump-tree-forwprop[-N]
          -fdump-tree-fre[-N]
          -fdump-tree-vtable-verify
          -fdump-tree-vrp[-N]
          -fdump-tree-storeccp[-N]
          -fdump-final-insns=FILE
          -fcompare-debug[=OPTS]  -fcompare-debug-second
          -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
          -feliminate-unused-debug-symbols -femit-class-debug-always
          -fenable-KIND-PASS
          -fenable-KIND-PASS=RANGE-LIST
          -fdebug-types-section -fmem-report-wpa
          -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
          -fopt-info
          -fopt-info-OPTIONS[=FILE]
          -frandom-seed=NUMBER -fsched-verbose=N
          -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose
          -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking
          -fvar-tracking-assignments  -fvar-tracking-assignments-toggle
          -g  -gLEVEL  -gtoggle  -gcoff  -gdwarf-VERSION
          -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches
          -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
          -gvms  -gxcoff  -gxcoff+ -gz[=TYPE]
          -fno-merge-debug-strings -fno-dwarf2-cfi-asm
          -fdebug-prefix-map=OLD=NEW
          -femit-struct-debug-baseonly -femit-struct-debug-reduced
          -femit-struct-debug-detailed[=SPEC-LIST]
          -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
          -print-multi-directory  -print-multi-lib  -print-multi-os-directory
          -print-prog-name=PROGRAM  -print-search-dirs  -Q
          -print-sysroot -print-sysroot-headers-suffix
          -save-temps -save-temps=cwd -save-temps=obj -time[=FILE]

_Optimization Options_
     *Note Options that Control Optimization: Optimize Options.
          -faggressive-loop-optimizations -falign-functions[=N]
          -falign-jumps[=N]
          -falign-labels[=N] -falign-loops[=N]
          -fassociative-math -fauto-profile -fauto-profile[=PATH]
          -fauto-inc-dec -fbranch-probabilities
          -fbranch-target-load-optimize -fbranch-target-load-optimize2
          -fbtr-bb-exclusive -fcaller-saves
          -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
          -fcompare-elim -fcprop-registers -fcrossjumping
          -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
          -fcx-limited-range
          -fdata-sections -fdce -fdelayed-branch
          -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively
          -fdevirtualize-at-ltrans -fdse
          -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects
          -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE
          -fforward-propagate -ffp-contract=STYLE -ffunction-sections
          -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity
          -fgcse-sm -fhoist-adjacent-loads -fif-conversion
          -fif-conversion2 -findirect-inlining
          -finline-functions -finline-functions-called-once -finline-limit=N
          -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-cp-alignment
          -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference -fipa-icf
          -fira-algorithm=ALGORITHM
          -fira-region=REGION -fira-hoist-pressure
          -fira-loop-pressure -fno-ira-share-save-slots
          -fno-ira-share-spill-slots -fira-verbose=N
          -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute
          -fivopts -fkeep-inline-functions -fkeep-static-consts
          -flive-range-shrinkage
          -floop-block -floop-interchange -floop-strip-mine
          -floop-unroll-and-jam -floop-nest-optimize
          -floop-parallelize-all -flra-remat -flto -flto-compression-level
          -flto-partition=ALG -flto-report -flto-report-wpa -fmerge-all-constants
          -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
          -fmove-loop-invariants -fno-branch-count-reg
          -fno-defer-pop -fno-function-cse -fno-guess-branch-probability
          -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
          -fno-sched-interblock -fno-sched-spec -fno-signed-zeros
          -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss
          -fomit-frame-pointer -foptimize-sibling-calls
          -fpartial-inlining -fpeel-loops -fpredictive-commoning
          -fprefetch-loop-arrays -fprofile-report
          -fprofile-correction -fprofile-dir=PATH -fprofile-generate
          -fprofile-generate=PATH
          -fprofile-use -fprofile-use=PATH -fprofile-values
          -fprofile-reorder-functions
          -freciprocal-math -free -frename-registers -freorder-blocks
          -freorder-blocks-and-partition -freorder-functions
          -frerun-cse-after-loop -freschedule-modulo-scheduled-loops
          -frounding-math -fsched2-use-superblocks -fsched-pressure
          -fsched-spec-load -fsched-spec-load-dangerous
          -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N]
          -fsched-group-heuristic -fsched-critical-path-heuristic
          -fsched-spec-insn-heuristic -fsched-rank-heuristic
          -fsched-last-insn-heuristic -fsched-dep-count-heuristic
          -fschedule-fusion
          -fschedule-insns -fschedule-insns2 -fsection-anchors
          -fselective-scheduling -fselective-scheduling2
          -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
          -fsemantic-interposition
          -fshrink-wrap -fsignaling-nans -fsingle-precision-constant
          -fsplit-ivs-in-unroller -fsplit-wide-types -fssa-phiopt
          -fstack-protector -fstack-protector-all -fstack-protector-strong
          -fstack-protector-explicit -fstdarg-opt -fstrict-aliasing
          -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp
          -ftree-builtin-call-dce -ftree-ccp -ftree-ch
          -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
          -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
          -ftree-forwprop -ftree-fre -ftree-loop-if-convert
          -ftree-loop-if-convert-stores -ftree-loop-im
          -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns
          -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize
          -ftree-loop-vectorize
          -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta
          -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra
          -ftree-switch-conversion -ftree-tail-merge -ftree-ter
          -ftree-vectorize -ftree-vrp
          -funit-at-a-time -funroll-all-loops -funroll-loops
          -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
          -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt
          -fweb -fwhole-program -fwpa -fuse-linker-plugin
          --param NAME=VALUE
          -O  -O0  -O1  -O2  -O3  -Os -Ofast -Og

_Preprocessor Options_
     *Note Options Controlling the Preprocessor: Preprocessor Options.
          -AQUESTION=ANSWER
          -A-QUESTION[=ANSWER]
          -C  -dD  -dI  -dM  -dN
          -DMACRO[=DEFN]  -E  -H
          -idirafter DIR
          -include FILE  -imacros FILE
          -iprefix FILE  -iwithprefix DIR
          -iwithprefixbefore DIR  -isystem DIR
          -imultilib DIR -isysroot DIR
          -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
          -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory
          -remap -trigraphs  -undef  -UMACRO
          -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp

_Assembler Option_
     *Note Passing Options to the Assembler: Assembler Options.
          -Wa,OPTION  -Xassembler OPTION

_Linker Options_
     *Note Options for Linking: Link Options.
          OBJECT-FILE-NAME  -fuse-ld=LINKER -lLIBRARY
          -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
          -s  -static -static-libgcc -static-libstdc++
          -static-libasan -static-libtsan -static-liblsan -static-libubsan
          -static-libmpx -static-libmpxwrappers
          -shared -shared-libgcc  -symbolic
          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
          -u SYMBOL -z KEYWORD

_Directory Options_
     *Note Options for Directory Search: Directory Options.
          -BPREFIX -IDIR -iplugindir=DIR
          -iquoteDIR -LDIR -specs=FILE -I-
          --sysroot=DIR --no-sysroot-suffix

_Machine Dependent Options_
     *Note Hardware Models and Configurations: Submodel Options.

     _AArch64 Options_
          -mabi=NAME  -mbig-endian  -mlittle-endian
          -mgeneral-regs-only
          -mcmodel=tiny  -mcmodel=small  -mcmodel=large
          -mstrict-align
          -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
          -mtls-dialect=desc  -mtls-dialect=traditional
          -mfix-cortex-a53-835769  -mno-fix-cortex-a53-835769
          -mfix-cortex-a53-843419  -mno-fix-cortex-a53-843419
          -march=NAME  -mcpu=NAME  -mtune=NAME

     _Adapteva Epiphany Options_
          -mhalf-reg-file -mprefer-short-insn-regs
          -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf
          -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM
          -mround-nearest -mlong-calls -mshort-calls -msmall16
          -mfp-mode=MODE -mvect-double -max-vect-align=NUM
          -msplit-vecmove-early -m1reg-REG

     _ARC Options_
          -mbarrel-shifter
          -mcpu=CPU -mA6 -mARC600 -mA7 -mARC700
          -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr
          -mea -mno-mpy -mmul32x16 -mmul64
          -mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap
          -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape
          -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof
          -mepilogue-cfi -mlong-calls -mmedium-calls -msdata
          -mucb-mcount -mvolatile-cache
          -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc
          -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi
          -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none
          -mlra-priority-compact mlra-priority-noncompact -mno-millicode
          -mmixed-code -mq-class -mRcq -mRcw -msize-level=LEVEL
          -mtune=CPU -mmultcost=NUM -munalign-prob-threshold=PROBABILITY

     _ARM Options_
          -mapcs-frame  -mno-apcs-frame
          -mabi=NAME
          -mapcs-stack-check  -mno-apcs-stack-check
          -mapcs-float  -mno-apcs-float
          -mapcs-reentrant  -mno-apcs-reentrant
          -msched-prolog  -mno-sched-prolog
          -mlittle-endian  -mbig-endian
          -mfloat-abi=NAME
          -mfp16-format=NAME
          -mthumb-interwork  -mno-thumb-interwork
          -mcpu=NAME  -march=NAME  -mfpu=NAME
          -mtune=NAME -mprint-tune-info
          -mstructure-size-boundary=N
          -mabort-on-noreturn
          -mlong-calls  -mno-long-calls
          -msingle-pic-base  -mno-single-pic-base
          -mpic-register=REG
          -mnop-fun-dllimport
          -mpoke-function-name
          -mthumb  -marm
          -mtpcs-frame  -mtpcs-leaf-frame
          -mcaller-super-interworking  -mcallee-super-interworking
          -mtp=NAME -mtls-dialect=DIALECT
          -mword-relocations
          -mfix-cortex-m3-ldrd
          -munaligned-access
          -mneon-for-64bits
          -mslow-flash-data
          -masm-syntax-unified
          -mrestrict-it

     _AVR Options_
          -mmcu=MCU -maccumulate-args -mbranch-cost=COST
          -mcall-prologues -mint8 -mn_flash=SIZE -mno-interrupts
          -mrelax -mrmw -mstrict-X -mtiny-stack -nodevicelib -Waddr-space-convert

     _Blackfin Options_
          -mcpu=CPU[-SIREVISION]
          -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer
          -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly
          -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library
          -mno-id-shared-library  -mshared-library-id=N
          -mleaf-id-shared-library  -mno-leaf-id-shared-library
          -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls
          -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram
          -micplb

     _C6X Options_
          -mbig-endian  -mlittle-endian -march=CPU
          -msim -msdata=SDATA-TYPE

     _CRIS Options_
          -mcpu=CPU  -march=CPU  -mtune=CPU
          -mmax-stack-frame=N  -melinux-stacksize=N
          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
          -mstack-align  -mdata-align  -mconst-align
          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
          -melf  -maout  -melinux  -mlinux  -sim  -sim2
          -mmul-bug-workaround  -mno-mul-bug-workaround

     _CR16 Options_
          -mmac
          -mcr16cplus -mcr16c
          -msim -mint32 -mbit-ops
          -mdata-model=MODEL

     _Darwin Options_
          -all_load  -allowable_client  -arch  -arch_errors_fatal
          -arch_only  -bind_at_load  -bundle  -bundle_loader
          -client_name  -compatibility_version  -current_version
          -dead_strip
          -dependency-file  -dylib_file  -dylinker_install_name
          -dynamic  -dynamiclib  -exported_symbols_list
          -filelist  -flat_namespace  -force_cpusubtype_ALL
          -force_flat_namespace  -headerpad_max_install_names
          -iframework
          -image_base  -init  -install_name  -keep_private_externs
          -multi_module  -multiply_defined  -multiply_defined_unused
          -noall_load   -no_dead_strip_inits_and_terms
          -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
          -pagezero_size  -prebind  -prebind_all_twolevel_modules
          -private_bundle  -read_only_relocs  -sectalign
          -sectobjectsymbols  -whyload  -seg1addr
          -sectcreate  -sectobjectsymbols  -sectorder
          -segaddr -segs_read_only_addr -segs_read_write_addr
          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
          -segprot  -segs_read_only_addr  -segs_read_write_addr
          -single_module  -static  -sub_library  -sub_umbrella
          -twolevel_namespace  -umbrella  -undefined
          -unexported_symbols_list  -weak_reference_mismatches
          -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
          -mkernel -mone-byte-bool

     _DEC Alpha Options_
          -mno-fp-regs  -msoft-float
          -mieee  -mieee-with-inexact  -mieee-conformant
          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
          -mtrap-precision=MODE  -mbuild-constants
          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
          -mbwx  -mmax  -mfix  -mcix
          -mfloat-vax  -mfloat-ieee
          -mexplicit-relocs  -msmall-data  -mlarge-data
          -msmall-text  -mlarge-text
          -mmemory-latency=TIME

     _FR30 Options_
          -msmall-model -mno-lsim

     _FRV Options_
          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
          -mhard-float  -msoft-float
          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
          -mdouble  -mno-double
          -mmedia  -mno-media  -mmuladd  -mno-muladd
          -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
          -mlinked-fp  -mlong-calls  -malign-labels
          -mlibrary-pic  -macc-4  -macc-8
          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
          -moptimize-membar -mno-optimize-membar
          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
          -mvliw-branch  -mno-vliw-branch
          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
          -mno-nested-cond-exec  -mtomcat-stats
          -mTLS -mtls
          -mcpu=CPU

     _GNU/Linux Options_
          -mglibc -muclibc -mbionic -mandroid
          -tno-android-cc -tno-android-ld

     _H8/300 Options_
          -mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300

     _HPPA Options_
          -march=ARCHITECTURE-TYPE
          -mdisable-fpregs  -mdisable-indexing
          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
          -mfixed-range=REGISTER-RANGE
          -mjump-in-delay -mlinker-opt -mlong-calls
          -mlong-load-store  -mno-disable-fpregs
          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
          -mno-jump-in-delay  -mno-long-load-store
          -mno-portable-runtime  -mno-soft-float
          -mno-space-regs  -msoft-float  -mpa-risc-1-0
          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
          -munix=UNIX-STD  -nolibdld  -static  -threads

     _IA-64 Options_
          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
          -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata
          -mconstant-gp  -mauto-pic  -mfused-madd
          -minline-float-divide-min-latency
          -minline-float-divide-max-throughput
          -mno-inline-float-divide
          -minline-int-divide-min-latency
          -minline-int-divide-max-throughput
          -mno-inline-int-divide
          -minline-sqrt-min-latency -minline-sqrt-max-throughput
          -mno-inline-sqrt
          -mdwarf2-asm -mearly-stop-bits
          -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
          -mtune=CPU-TYPE -milp32 -mlp64
          -msched-br-data-spec -msched-ar-data-spec -msched-control-spec
          -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
          -msched-spec-ldc -msched-spec-control-ldc
          -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns
          -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path
          -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost
          -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS

     _LM32 Options_
          -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
          -msign-extend-enabled -muser-enabled

     _M32R/D Options_
          -m32r2 -m32rx -m32r
          -mdebug
          -malign-loops -mno-align-loops
          -missue-rate=NUMBER
          -mbranch-cost=NUMBER
          -mmodel=CODE-SIZE-MODEL-TYPE
          -msdata=SDATA-TYPE
          -mno-flush-func -mflush-func=NAME
          -mno-flush-trap -mflush-trap=NUMBER
          -G NUM

     _M32C Options_
          -mcpu=CPU -msim -memregs=NUMBER

     _M680x0 Options_
          -march=ARCH  -mcpu=CPU  -mtune=TUNE
          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
          -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
          -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
          -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
          -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
          -mxgot -mno-xgot

     _MCore Options_
          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment

     _MeP Options_
          -mabsdiff -mall-opts -maverage -mbased=N -mbitops
          -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2
          -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax
          -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf
          -mtiny=N

     _MicroBlaze Options_
          -msoft-float -mhard-float -msmall-divides -mcpu=CPU
          -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift
          -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss
          -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
          -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL

     _MIPS Options_
          -EL  -EB  -march=ARCH  -mtune=ARCH
          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5
          -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6
          -mips16  -mno-mips16  -mflip-mips16
          -minterlink-compressed -mno-interlink-compressed
          -minterlink-mips16  -mno-interlink-mips16
          -mabi=ABI  -mabicalls  -mno-abicalls
          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
          -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float
          -mno-float  -msingle-float  -mdouble-float
          -modd-spreg -mno-odd-spreg
          -mabs=MODE  -mnan=ENCODING
          -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
          -mmcu -mmno-mcu
          -meva -mno-eva
          -mvirt -mno-virt
          -mxpa -mno-xpa
          -mmicromips -mno-micromips
          -mfpu=FPU-TYPE
          -msmartmips  -mno-smartmips
          -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
          -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
          -mlong64  -mlong32  -msym32  -mno-sym32
          -GNUM  -mlocal-sdata  -mno-local-sdata
          -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
          -membedded-data  -mno-embedded-data
          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
          -mcode-readable=SETTING
          -msplit-addresses  -mno-split-addresses
          -mexplicit-relocs  -mno-explicit-relocs
          -mcheck-zero-division  -mno-check-zero-division
          -mdivide-traps  -mdivide-breaks
          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
          -mmad -mno-mad -mimadd -mno-imadd -mfused-madd  -mno-fused-madd  -nocpp
          -mfix-24k -mno-fix-24k
          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
          -mfix-r10000 -mno-fix-r10000  -mfix-rm7000 -mno-fix-rm7000
          -mfix-vr4120  -mno-fix-vr4120
          -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
          -mflush-func=FUNC  -mno-flush-func
          -mbranch-cost=NUM  -mbranch-likely  -mno-branch-likely
          -mfp-exceptions -mno-fp-exceptions
          -mvr4130-align -mno-vr4130-align -msynci -mno-synci
          -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address

     _MMIX Options_
          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
          -mno-base-addresses  -msingle-exit  -mno-single-exit

     _MN10300 Options_
          -mmult-bug  -mno-mult-bug
          -mno-am33 -mam33 -mam33-2 -mam34
          -mtune=CPU-TYPE
          -mreturn-pointer-on-d0
          -mno-crt0  -mrelax -mliw -msetlb

     _Moxie Options_
          -meb -mel -mmul.x -mno-crt0

     _MSP430 Options_
          -msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax
          -mhwmult= -minrt

     _NDS32 Options_
          -mbig-endian -mlittle-endian
          -mreduced-regs -mfull-regs
          -mcmov -mno-cmov
          -mperf-ext -mno-perf-ext
          -mv3push -mno-v3push
          -m16bit -mno-16bit
          -misr-vector-size=NUM
          -mcache-block-size=NUM
          -march=ARCH
          -mcmodel=CODE-MODEL
          -mctor-dtor -mrelax

     _Nios II Options_
          -G NUM -mgpopt=OPTION -mgpopt -mno-gpopt
          -mel -meb
          -mno-bypass-cache -mbypass-cache
          -mno-cache-volatile -mcache-volatile
          -mno-fast-sw-div -mfast-sw-div
          -mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div
          -mcustom-INSN=N -mno-custom-INSN
          -mcustom-fpu-cfg=NAME
          -mhal -msmallc -msys-crt0=NAME -msys-lib=NAME

     _Nvidia PTX Options_
          -m32 -m64 -mmainkernel

     _PDP-11 Options_
          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
          -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
          -mint16  -mno-int32  -mfloat32  -mno-float64
          -mfloat64  -mno-float32  -mabshi  -mno-abshi
          -mbranch-expensive  -mbranch-cheap
          -munix-asm  -mdec-asm

     _picoChip Options_
          -mae=AE_TYPE -mvliw-lookahead=N
          -msymbol-as-address -mno-inefficient-warnings

     _PowerPC Options_ See RS/6000 and PowerPC Options.

     _RL78 Options_
          -msim -mmul=none -mmul=g13 -mmul=rl78
          -m64bit-doubles -m32bit-doubles

     _RS/6000 and PowerPC Options_
          -mcpu=CPU-TYPE
          -mtune=CPU-TYPE
          -mcmodel=CODE-MODEL
          -mpowerpc64
          -maltivec  -mno-altivec
          -mpowerpc-gpopt  -mno-powerpc-gpopt
          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd
          -mfprnd  -mno-fprnd
          -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
          -malign-power  -malign-natural
          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
          -msingle-float -mdouble-float -msimple-fpu
          -mstring  -mno-string  -mupdate  -mno-update
          -mavoid-indexed-addresses  -mno-avoid-indexed-addresses
          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
          -mstrict-align  -mno-strict-align  -mrelocatable
          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
          -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base
          -mprioritize-restricted-insns=PRIORITY
          -msched-costly-dep=DEPENDENCE_TYPE
          -minsert-sched-nops=SCHEME
          -mcall-sysv  -mcall-netbsd
          -maix-struct-return  -msvr4-struct-return
          -mabi=ABI-TYPE -msecure-plt -mbss-plt
          -mblock-move-inline-limit=NUM
          -misel -mno-isel
          -misel=yes  -misel=no
          -mspe -mno-spe
          -mspe=yes  -mspe=no
          -mpaired
          -mgen-cell-microcode -mwarn-cell-microcode
          -mvrsave -mno-vrsave
          -mmulhw -mno-mulhw
          -mdlmzb -mno-dlmzb
          -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
          -mprototype  -mno-prototype
          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
          -msdata=OPT  -mvxworks  -G NUM  -pthread
          -mrecip -mrecip=OPT -mno-recip -mrecip-precision
          -mno-recip-precision
          -mveclibabi=TYPE -mfriz -mno-friz
          -mpointers-to-nested-functions -mno-pointers-to-nested-functions
          -msave-toc-indirect -mno-save-toc-indirect
          -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector
          -mcrypto -mno-crypto -mdirect-move -mno-direct-move
          -mquad-memory -mno-quad-memory
          -mquad-memory-atomic -mno-quad-memory-atomic
          -mcompat-align-parm -mno-compat-align-parm
          -mupper-regs-df -mno-upper-regs-df -mupper-regs-sf -mno-upper-regs-sf
          -mupper-regs -mno-upper-regs

     _RX Options_
          -m64bit-doubles  -m32bit-doubles  -fpu  -nofpu
          -mcpu=
          -mbig-endian-data -mlittle-endian-data
          -msmall-data
          -msim  -mno-sim
          -mas100-syntax -mno-as100-syntax
          -mrelax
          -mmax-constant-size=
          -mint-register=
          -mpid
          -mno-warn-multiple-fast-interrupts
          -msave-acc-in-interrupts

     _S/390 and zSeries Options_
          -mtune=CPU-TYPE  -march=CPU-TYPE
          -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp
          -mlong-double-64 -mlong-double-128
          -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
          -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
          -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
          -mhotpatch=HALFWORDS,HALFWORDS

     _Score Options_
          -meb -mel
          -mnhwloop
          -muls
          -mmac
          -mscore5 -mscore5u -mscore7 -mscore7d

     _SH Options_
          -m1  -m2  -m2e
          -m2a-nofpu -m2a-single-only -m2a-single -m2a
          -m3  -m3e
          -m4-nofpu  -m4-single-only  -m4-single  -m4
          -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
          -m5-64media  -m5-64media-nofpu
          -m5-32media  -m5-32media-nofpu
          -m5-compact  -m5-compact-nofpu
          -mb  -ml  -mdalign  -mrelax
          -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
          -mieee -mno-ieee -mbitops  -misize  -minline-ic_invalidate -mpadstruct
          -mspace -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
          -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE
          -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
          -maccumulate-outgoing-args -minvalid-symbols
          -matomic-model=ATOMIC-MODEL
          -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch
          -mcbranch-force-delay-slot
          -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
          -mpretend-cmove -mtas

     _Solaris 2 Options_
          -mclear-hwcap -mno-clear-hwcap -mimpure-text  -mno-impure-text
          -pthreads -pthread

     _SPARC Options_
          -mcpu=CPU-TYPE
          -mtune=CPU-TYPE
          -mcmodel=CODE-MODEL
          -mmemory-model=MEM-MODEL
          -m32  -m64  -mapp-regs  -mno-app-regs
          -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat
          -mfpu  -mno-fpu  -mhard-float  -msoft-float
          -mhard-quad-float  -msoft-quad-float
          -mstack-bias  -mno-stack-bias
          -munaligned-doubles  -mno-unaligned-doubles
          -muser-mode  -mno-user-mode
          -mv8plus  -mno-v8plus  -mvis  -mno-vis
          -mvis2  -mno-vis2  -mvis3  -mno-vis3
          -mcbcond -mno-cbcond
          -mfmaf  -mno-fmaf  -mpopc  -mno-popc
          -mfix-at697f -mfix-ut699

     _SPU Options_
          -mwarn-reloc -merror-reloc
          -msafe-dma -munsafe-dma
          -mbranch-hints
          -msmall-mem -mlarge-mem -mstdmain
          -mfixed-range=REGISTER-RANGE
          -mea32 -mea64
          -maddress-space-conversion -mno-address-space-conversion
          -mcache-size=CACHE-SIZE
          -matomic-updates -mno-atomic-updates

     _System V Options_
          -Qy  -Qn  -YP,PATHS  -Ym,DIR

     _TILE-Gx Options_
          -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian
          -mcmodel=CODE-MODEL

     _TILEPro Options_
          -mcpu=CPU -m32

     _V850 Options_
          -mlong-calls  -mno-long-calls  -mep  -mno-ep
          -mprolog-function  -mno-prolog-function  -mspace
          -mtda=N  -msda=N  -mzda=N
          -mapp-regs  -mno-app-regs
          -mdisable-callt  -mno-disable-callt
          -mv850e2v3 -mv850e2 -mv850e1 -mv850es
          -mv850e -mv850 -mv850e3v5
          -mloop
          -mrelax
          -mlong-jumps
          -msoft-float
          -mhard-float
          -mgcc-abi
          -mrh850-abi
          -mbig-switch

     _VAX Options_
          -mg  -mgnu  -munix

     _Visium Options_
          -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float
          -mcpu=CPU-TYPE -mtune=CPU-TYPE -msv-mode -muser-mode

     _VMS Options_
          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64
          -mpointer-size=SIZE

     _VxWorks Options_
          -mrtp  -non-static  -Bstatic  -Bdynamic
          -Xbind-lazy  -Xbind-now

     _x86 Options_
          -mtune=CPU-TYPE  -march=CPU-TYPE
          -mtune-ctrl=FEATURE-LIST -mdump-tune-features -mno-default
          -mfpmath=UNIT
          -masm=DIALECT  -mno-fancy-math-387
          -mno-fp-ret-in-387  -msoft-float
          -mno-wide-multiply  -mrtd  -malign-double
          -mpreferred-stack-boundary=NUM
          -mincoming-stack-boundary=NUM
          -mcld -mcx16 -msahf -mmovbe -mcrc32
          -mrecip -mrecip=OPT
          -mvzeroupper -mprefer-avx128
          -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
          -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha
          -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
          -mclflushopt -mxsavec -mxsaves
          -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt
          -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mthreads
          -mno-align-stringops  -minline-all-stringops
          -minline-stringops-dynamically -mstringop-strategy=ALG
          -mmemcpy-strategy=STRATEGY -mmemset-strategy=STRATEGY
          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
          -m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128
          -mregparm=NUM  -msseregparm
          -mveclibabi=TYPE -mvect8-ret-in-mem
          -mpc32 -mpc64 -mpc80 -mstackrealign
          -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
          -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE
          -m32 -m64 -mx32 -m16 -mlarge-data-threshold=NUM
          -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
          -mavx256-split-unaligned-load -mavx256-split-unaligned-store
          -malign-data=TYPE -mstack-protector-guard=GUARD

     _x86 Windows Options_
          -mconsole -mcygwin -mno-cygwin -mdll
          -mnop-fun-dllimport -mthread
          -municode -mwin32 -mwindows -fno-set-stack-executable

     _Xstormy16 Options_
          -msim

     _Xtensa Options_
          -mconst16 -mno-const16
          -mfused-madd  -mno-fused-madd
          -mforce-no-pic
          -mserialize-volatile  -mno-serialize-volatile
          -mtext-section-literals  -mno-text-section-literals
          -mtarget-align  -mno-target-align
          -mlongcalls  -mno-longcalls

     _zSeries Options_ See S/390 and zSeries Options.

_Code Generation Options_
     *Note Options for Code Generation Conventions: Code Gen Options.
          -fcall-saved-REG  -fcall-used-REG
          -ffixed-REG  -fexceptions
          -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables
          -fasynchronous-unwind-tables
          -fno-gnu-unique
          -finhibit-size-directive  -finstrument-functions
          -finstrument-functions-exclude-function-list=SYM,SYM,...
          -finstrument-functions-exclude-file-list=FILE,FILE,...
          -fno-common  -fno-ident
          -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
          -fno-jump-tables
          -frecord-gcc-switches
          -freg-struct-return  -fshort-enums
          -fshort-double  -fshort-wchar
          -fverbose-asm  -fpack-struct[=N]  -fstack-check
          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
          -fno-stack-limit -fsplit-stack
          -fleading-underscore  -ftls-model=MODEL
          -fstack-reuse=REUSE_LEVEL
          -ftrapv  -fwrapv  -fbounds-check
          -fvisibility=[default|internal|hidden|protected]
          -fstrict-volatile-bitfields -fsync-libcalls


File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC

3.2 Options Controlling the Kind of Output
==========================================

Compilation can involve up to four stages: preprocessing, compilation
proper, assembly and linking, always in that order.  GCC is capable of
preprocessing and compiling several files either into several assembler
input files, or into one assembler input file; then each assembler input
file produces an object file, and linking combines all the object files
(those newly compiled, and those specified as input) into an executable
file.

 For any given input file, the file name suffix determines what kind of
compilation is done:

'FILE.c'
     C source code that must be preprocessed.

'FILE.i'
     C source code that should not be preprocessed.

'FILE.ii'
     C++ source code that should not be preprocessed.

'FILE.m'
     Objective-C source code.  Note that you must link with the
     'libobjc' library to make an Objective-C program work.

'FILE.mi'
     Objective-C source code that should not be preprocessed.

'FILE.mm'
'FILE.M'
     Objective-C++ source code.  Note that you must link with the
     'libobjc' library to make an Objective-C++ program work.  Note that
     '.M' refers to a literal capital M.

'FILE.mii'
     Objective-C++ source code that should not be preprocessed.

'FILE.h'
     C, C++, Objective-C or Objective-C++ header file to be turned into
     a precompiled header (default), or C, C++ header file to be turned
     into an Ada spec (via the '-fdump-ada-spec' switch).

'FILE.cc'
'FILE.cp'
'FILE.cxx'
'FILE.cpp'
'FILE.CPP'
'FILE.c++'
'FILE.C'
     C++ source code that must be preprocessed.  Note that in '.cxx',
     the last two letters must both be literally 'x'.  Likewise, '.C'
     refers to a literal capital C.

'FILE.mm'
'FILE.M'
     Objective-C++ source code that must be preprocessed.

'FILE.mii'
     Objective-C++ source code that should not be preprocessed.

'FILE.hh'
'FILE.H'
'FILE.hp'
'FILE.hxx'
'FILE.hpp'
'FILE.HPP'
'FILE.h++'
'FILE.tcc'
     C++ header file to be turned into a precompiled header or Ada spec.

'FILE.f'
'FILE.for'
'FILE.ftn'
     Fixed form Fortran source code that should not be preprocessed.

'FILE.F'
'FILE.FOR'
'FILE.fpp'
'FILE.FPP'
'FILE.FTN'
     Fixed form Fortran source code that must be preprocessed (with the
     traditional preprocessor).

'FILE.f90'
'FILE.f95'
'FILE.f03'
'FILE.f08'
     Free form Fortran source code that should not be preprocessed.

'FILE.F90'
'FILE.F95'
'FILE.F03'
'FILE.F08'
     Free form Fortran source code that must be preprocessed (with the
     traditional preprocessor).

'FILE.go'
     Go source code.

'FILE.ads'
     Ada source code file that contains a library unit declaration (a
     declaration of a package, subprogram, or generic, or a generic
     instantiation), or a library unit renaming declaration (a package,
     generic, or subprogram renaming declaration).  Such files are also
     called "specs".

'FILE.adb'
     Ada source code file containing a library unit body (a subprogram
     or package body).  Such files are also called "bodies".

'FILE.s'
     Assembler code.

'FILE.S'
'FILE.sx'
     Assembler code that must be preprocessed.

'OTHER'
     An object file to be fed straight into linking.  Any file name with
     no recognized suffix is treated this way.

 You can specify the input language explicitly with the '-x' option:

'-x LANGUAGE'
     Specify explicitly the LANGUAGE for the following input files
     (rather than letting the compiler choose a default based on the
     file name suffix).  This option applies to all following input
     files until the next '-x' option.  Possible values for LANGUAGE
     are:
          c  c-header  cpp-output
          c++  c++-header  c++-cpp-output
          objective-c  objective-c-header  objective-c-cpp-output
          objective-c++ objective-c++-header objective-c++-cpp-output
          assembler  assembler-with-cpp
          ada
          f77  f77-cpp-input f95  f95-cpp-input
          go
          java

'-x none'
     Turn off any specification of a language, so that subsequent files
     are handled according to their file name suffixes (as they are if
     '-x' has not been used at all).

'-pass-exit-codes'
     Normally the 'gcc' program exits with the code of 1 if any phase of
     the compiler returns a non-success return code.  If you specify
     '-pass-exit-codes', the 'gcc' program instead returns with the
     numerically highest error produced by any phase returning an error
     indication.  The C, C++, and Fortran front ends return 4 if an
     internal compiler error is encountered.

 If you only want some of the stages of compilation, you can use '-x'
(or filename suffixes) to tell 'gcc' where to start, and one of the
options '-c', '-S', or '-E' to say where 'gcc' is to stop.  Note that
some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do
nothing at all.

'-c'
     Compile or assemble the source files, but do not link.  The linking
     stage simply is not done.  The ultimate output is in the form of an
     object file for each source file.

     By default, the object file name for a source file is made by
     replacing the suffix '.c', '.i', '.s', etc., with '.o'.

     Unrecognized input files, not requiring compilation or assembly,
     are ignored.

'-S'
     Stop after the stage of compilation proper; do not assemble.  The
     output is in the form of an assembler code file for each
     non-assembler input file specified.

     By default, the assembler file name for a source file is made by
     replacing the suffix '.c', '.i', etc., with '.s'.

     Input files that don't require compilation are ignored.

'-E'
     Stop after the preprocessing stage; do not run the compiler proper.
     The output is in the form of preprocessed source code, which is
     sent to the standard output.

     Input files that don't require preprocessing are ignored.

'-o FILE'
     Place output in file FILE.  This applies to whatever sort of output
     is being produced, whether it be an executable file, an object
     file, an assembler file or preprocessed C code.

     If '-o' is not specified, the default is to put an executable file
     in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its
     assembler file in 'SOURCE.s', a precompiled header file in
     'SOURCE.SUFFIX.gch', and all preprocessed C source on standard
     output.

'-v'
     Print (on standard error output) the commands executed to run the
     stages of compilation.  Also print the version number of the
     compiler driver program and of the preprocessor and the compiler
     proper.

'-###'
     Like '-v' except the commands are not executed and arguments are
     quoted unless they contain only alphanumeric characters or './-_'.
     This is useful for shell scripts to capture the driver-generated
     command lines.

'-pipe'
     Use pipes rather than temporary files for communication between the
     various stages of compilation.  This fails to work on some systems
     where the assembler is unable to read from a pipe; but the GNU
     assembler has no trouble.

'--help'
     Print (on the standard output) a description of the command-line
     options understood by 'gcc'.  If the '-v' option is also specified
     then '--help' is also passed on to the various processes invoked by
     'gcc', so that they can display the command-line options they
     accept.  If the '-Wextra' option has also been specified (prior to
     the '--help' option), then command-line options that have no
     documentation associated with them are also displayed.

'--target-help'
     Print (on the standard output) a description of target-specific
     command-line options for each tool.  For some targets extra
     target-specific information may also be printed.

'--help={CLASS|[^]QUALIFIER}[,...]'
     Print (on the standard output) a description of the command-line
     options understood by the compiler that fit into all specified
     classes and qualifiers.  These are the supported classes:

     'optimizers'
          Display all of the optimization options supported by the
          compiler.

     'warnings'
          Display all of the options controlling warning messages
          produced by the compiler.

     'target'
          Display target-specific options.  Unlike the '--target-help'
          option however, target-specific options of the linker and
          assembler are not displayed.  This is because those tools do
          not currently support the extended '--help=' syntax.

     'params'
          Display the values recognized by the '--param' option.

     LANGUAGE
          Display the options supported for LANGUAGE, where LANGUAGE is
          the name of one of the languages supported in this version of
          GCC.

     'common'
          Display the options that are common to all languages.

     These are the supported qualifiers:

     'undocumented'
          Display only those options that are undocumented.

     'joined'
          Display options taking an argument that appears after an equal
          sign in the same continuous piece of text, such as:
          '--help=target'.

     'separate'
          Display options taking an argument that appears as a separate
          word following the original option, such as: '-o output-file'.

     Thus for example to display all the undocumented target-specific
     switches supported by the compiler, use:

          --help=target,undocumented

     The sense of a qualifier can be inverted by prefixing it with the
     '^' character, so for example to display all binary warning options
     (i.e., ones that are either on or off and that do not take an
     argument) that have a description, use:

          --help=warnings,^joined,^undocumented

     The argument to '--help=' should not consist solely of inverted
     qualifiers.

     Combining several classes is possible, although this usually
     restricts the output so much that there is nothing to display.  One
     case where it does work, however, is when one of the classes is
     TARGET.  For example, to display all the target-specific
     optimization options, use:

          --help=target,optimizers

     The '--help=' option can be repeated on the command line.  Each
     successive use displays its requested class of options, skipping
     those that have already been displayed.

     If the '-Q' option appears on the command line before the '--help='
     option, then the descriptive text displayed by '--help=' is
     changed.  Instead of describing the displayed options, an
     indication is given as to whether the option is enabled, disabled
     or set to a specific value (assuming that the compiler knows this
     at the point where the '--help=' option is used).

     Here is a truncated example from the ARM port of 'gcc':

            % gcc -Q -mabi=2 --help=target -c
            The following options are target specific:
            -mabi=                                2
            -mabort-on-noreturn                   [disabled]
            -mapcs                                [disabled]

     The output is sensitive to the effects of previous command-line
     options, so for example it is possible to find out which
     optimizations are enabled at '-O2' by using:

          -Q -O2 --help=optimizers

     Alternatively you can discover which binary optimizations are
     enabled by '-O3' by using:

          gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
          gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
          diff /tmp/O2-opts /tmp/O3-opts | grep enabled

'-no-canonical-prefixes'
     Do not expand any symbolic links, resolve references to '/../' or
     '/./', or make the path absolute when generating a relative prefix.

'--version'
     Display the version number and copyrights of the invoked GCC.

'-wrapper'
     Invoke all subcommands under a wrapper program.  The name of the
     wrapper program and its parameters are passed as a comma separated
     list.

          gcc -c t.c -wrapper gdb,--args

     This invokes all subprograms of 'gcc' under 'gdb --args', thus the
     invocation of 'cc1' is 'gdb --args cc1 ...'.

'-fplugin=NAME.so'
     Load the plugin code in file NAME.so, assumed to be a shared object
     to be dlopen'd by the compiler.  The base name of the shared object
     file is used to identify the plugin for the purposes of argument
     parsing (See '-fplugin-arg-NAME-KEY=VALUE' below).  Each plugin
     should define the callback functions specified in the Plugins API.

'-fplugin-arg-NAME-KEY=VALUE'
     Define an argument called KEY with a value of VALUE for the plugin
     called NAME.

'-fdump-ada-spec[-slim]'
     For C and C++ source and include files, generate corresponding Ada
     specs.  *Note (gnat_ugn)Generating Ada Bindings for C and C++
     headers::, which provides detailed documentation on this feature.

'-fada-spec-parent=UNIT'
     In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada
     specs as child units of parent UNIT.

'-fdump-go-spec=FILE'
     For input files in any language, generate corresponding Go
     declarations in FILE.  This generates Go 'const', 'type', 'var',
     and 'func' declarations which may be a useful way to start writing
     a Go interface to code written in some other language.

'@FILE'
     Read command-line options from FILE.  The options read are inserted
     in place of the original @FILE option.  If FILE does not exist, or
     cannot be read, then the option will be treated literally, and not
     removed.

     Options in FILE are separated by whitespace.  A whitespace
     character may be included in an option by surrounding the entire
     option in either single or double quotes.  Any character (including
     a backslash) may be included by prefixing the character to be
     included with a backslash.  The FILE may itself contain additional
     @FILE options; any such options will be processed recursively.


File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC

3.3 Compiling C++ Programs
==========================

C++ source files conventionally use one of the suffixes '.C', '.cc',
'.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use
'.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and
preprocessed C++ files use the suffix '.ii'.  GCC recognizes files with
these names and compiles them as C++ programs even if you call the
compiler the same way as for compiling C programs (usually with the name
'gcc').

 However, the use of 'gcc' does not add the C++ library.  'g++' is a
program that calls GCC and automatically specifies linking against the
C++ library.  It treats '.c', '.h' and '.i' files as C++ source files
instead of C source files unless '-x' is used.  This program is also
useful when precompiling a C header file with a '.h' extension for use
in C++ compilations.  On many systems, 'g++' is also installed with the
name 'c++'.

 When you compile C++ programs, you may specify many of the same
command-line options that you use for compiling programs in any
language; or command-line options meaningful for C and related
languages; or options that are meaningful only for C++ programs.  *Note
Options Controlling C Dialect: C Dialect Options, for explanations of
options for languages related to C.  *Note Options Controlling C++
Dialect: C++ Dialect Options, for explanations of options that are
meaningful only for C++ programs.


File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC

3.4 Options Controlling C Dialect
=================================

The following options control the dialect of C (or languages derived
from C, such as C++, Objective-C and Objective-C++) that the compiler
accepts:

'-ansi'
     In C mode, this is equivalent to '-std=c90'.  In C++ mode, it is
     equivalent to '-std=c++98'.

     This turns off certain features of GCC that are incompatible with
     ISO C90 (when compiling C code), or of standard C++ (when compiling
     C++ code), such as the 'asm' and 'typeof' keywords, and predefined
     macros such as 'unix' and 'vax' that identify the type of system
     you are using.  It also enables the undesirable and rarely used ISO
     trigraph feature.  For the C compiler, it disables recognition of
     C++ style '//' comments as well as the 'inline' keyword.

     The alternate keywords '__asm__', '__extension__', '__inline__' and
     '__typeof__' continue to work despite '-ansi'.  You would not want
     to use them in an ISO C program, of course, but it is useful to put
     them in header files that might be included in compilations done
     with '-ansi'.  Alternate predefined macros such as '__unix__' and
     '__vax__' are also available, with or without '-ansi'.

     The '-ansi' option does not cause non-ISO programs to be rejected
     gratuitously.  For that, '-Wpedantic' is required in addition to
     '-ansi'.  *Note Warning Options::.

     The macro '__STRICT_ANSI__' is predefined when the '-ansi' option
     is used.  Some header files may notice this macro and refrain from
     declaring certain functions or defining certain macros that the ISO
     standard doesn't call for; this is to avoid interfering with any
     programs that might use these names for other things.

     Functions that are normally built in but do not have semantics
     defined by ISO C (such as 'alloca' and 'ffs') are not built-in
     functions when '-ansi' is used.  *Note Other built-in functions
     provided by GCC: Other Builtins, for details of the functions
     affected.

'-std='
     Determine the language standard.  *Note Language Standards
     Supported by GCC: Standards, for details of these standard
     versions.  This option is currently only supported when compiling C
     or C++.

     The compiler can accept several base standards, such as 'c90' or
     'c++98', and GNU dialects of those standards, such as 'gnu90' or
     'gnu++98'.  When a base standard is specified, the compiler accepts
     all programs following that standard plus those using GNU
     extensions that do not contradict it.  For example, '-std=c90'
     turns off certain features of GCC that are incompatible with ISO
     C90, such as the 'asm' and 'typeof' keywords, but not other GNU
     extensions that do not have a meaning in ISO C90, such as omitting
     the middle term of a '?:' expression.  On the other hand, when a
     GNU dialect of a standard is specified, all features supported by
     the compiler are enabled, even when those features change the
     meaning of the base standard.  As a result, some strict-conforming
     programs may be rejected.  The particular standard is used by
     '-Wpedantic' to identify which features are GNU extensions given
     that version of the standard.  For example '-std=gnu90 -Wpedantic'
     warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic'
     does not.

     A value for this option must be provided; possible values are

     'c90'
     'c89'
     'iso9899:1990'
          Support all ISO C90 programs (certain GNU extensions that
          conflict with ISO C90 are disabled).  Same as '-ansi' for C
          code.

     'iso9899:199409'
          ISO C90 as modified in amendment 1.

     'c99'
     'c9x'
     'iso9899:1999'
     'iso9899:199x'
          ISO C99.  This standard is substantially completely supported,
          modulo bugs and floating-point issues (mainly but not entirely
          relating to optional C99 features from Annexes F and G). See <http://gcc.gnu.org/c99status.html>
          for more information.  The names 'c9x' and 'iso9899:199x' are
          deprecated.

     'c11'
     'c1x'
     'iso9899:2011'
          ISO C11, the 2011 revision of the ISO C standard.  This
          standard is substantially completely supported, modulo bugs,
          floating-point issues (mainly but not entirely relating to
          optional C11 features from Annexes F and G) and the optional
          Annexes K (Bounds-checking interfaces) and L (Analyzability).
          The name 'c1x' is deprecated.

     'gnu90'
     'gnu89'
          GNU dialect of ISO C90 (including some C99 features).

     'gnu99'
     'gnu9x'
          GNU dialect of ISO C99.  The name 'gnu9x' is deprecated.

     'gnu11'
     'gnu1x'
          GNU dialect of ISO C11.  This is the default for C code.  The
          name 'gnu1x' is deprecated.

     'c++98'
     'c++03'
          The 1998 ISO C++ standard plus the 2003 technical corrigendum
          and some additional defect reports.  Same as '-ansi' for C++
          code.

     'gnu++98'
     'gnu++03'
          GNU dialect of '-std=c++98'.  This is the default for C++
          code.

     'c++11'
     'c++0x'
          The 2011 ISO C++ standard plus amendments.  The name 'c++0x'
          is deprecated.

     'gnu++11'
     'gnu++0x'
          GNU dialect of '-std=c++11'.  The name 'gnu++0x' is
          deprecated.

     'c++14'
     'c++1y'
          The 2014 ISO C++ standard plus amendments.  The name 'c++1y'
          is deprecated.

     'gnu++14'
     'gnu++1y'
          GNU dialect of '-std=c++14'.  The name 'gnu++1y' is
          deprecated.

     'c++1z'
          The next revision of the ISO C++ standard, tentatively planned
          for 2017.  Support is highly experimental, and will almost
          certainly change in incompatible ways in future releases.

     'gnu++1z'
          GNU dialect of '-std=c++1z'.  Support is highly experimental,
          and will almost certainly change in incompatible ways in
          future releases.

'-fgnu89-inline'
     The option '-fgnu89-inline' tells GCC to use the traditional GNU
     semantics for 'inline' functions when in C99 mode.  *Note An Inline
     Function is As Fast As a Macro: Inline.  Using this option is
     roughly equivalent to adding the 'gnu_inline' function attribute to
     all inline functions (*note Function Attributes::).

     The option '-fno-gnu89-inline' explicitly tells GCC to use the C99
     semantics for 'inline' when in C99 or gnu99 mode (i.e., it
     specifies the default behavior).  This option is not supported in
     '-std=c90' or '-std=gnu90' mode.

     The preprocessor macros '__GNUC_GNU_INLINE__' and
     '__GNUC_STDC_INLINE__' may be used to check which semantics are in
     effect for 'inline' functions.  *Note (cpp)Common Predefined
     Macros::.

'-aux-info FILENAME'
     Output to the given filename prototyped declarations for all
     functions declared and/or defined in a translation unit, including
     those in header files.  This option is silently ignored in any
     language other than C.

     Besides declarations, the file indicates, in comments, the origin
     of each declaration (source file and line), whether the declaration
     was implicit, prototyped or unprototyped ('I', 'N' for new or 'O'
     for old, respectively, in the first character after the line number
     and the colon), and whether it came from a declaration or a
     definition ('C' or 'F', respectively, in the following character).
     In the case of function definitions, a K&R-style list of arguments
     followed by their declarations is also provided, inside comments,
     after the declaration.

'-fallow-parameterless-variadic-functions'
     Accept variadic functions without named parameters.

     Although it is possible to define such a function, this is not very
     useful as it is not possible to read the arguments.  This is only
     supported for C as this construct is allowed by C++.

'-fno-asm'
     Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that
     code can use these words as identifiers.  You can use the keywords
     '__asm__', '__inline__' and '__typeof__' instead.  '-ansi' implies
     '-fno-asm'.

     In C++, this switch only affects the 'typeof' keyword, since 'asm'
     and 'inline' are standard keywords.  You may want to use the
     '-fno-gnu-keywords' flag instead, which has the same effect.  In
     C99 mode ('-std=c99' or '-std=gnu99'), this switch only affects the
     'asm' and 'typeof' keywords, since 'inline' is a standard keyword
     in ISO C99.

'-fno-builtin'
'-fno-builtin-FUNCTION'
     Don't recognize built-in functions that do not begin with
     '__builtin_' as prefix.  *Note Other built-in functions provided by
     GCC: Other Builtins, for details of the functions affected,
     including those which are not built-in functions when '-ansi' or
     '-std' options for strict ISO C conformance are used because they
     do not have an ISO standard meaning.

     GCC normally generates special code to handle certain built-in
     functions more efficiently; for instance, calls to 'alloca' may
     become single instructions which adjust the stack directly, and
     calls to 'memcpy' may become inline copy loops.  The resulting code
     is often both smaller and faster, but since the function calls no
     longer appear as such, you cannot set a breakpoint on those calls,
     nor can you change the behavior of the functions by linking with a
     different library.  In addition, when a function is recognized as a
     built-in function, GCC may use information about that function to
     warn about problems with calls to that function, or to generate
     more efficient code, even if the resulting code still contains
     calls to that function.  For example, warnings are given with
     '-Wformat' for bad calls to 'printf' when 'printf' is built in and
     'strlen' is known not to modify global memory.

     With the '-fno-builtin-FUNCTION' option only the built-in function
     FUNCTION is disabled.  FUNCTION must not begin with '__builtin_'.
     If a function is named that is not built-in in this version of GCC,
     this option is ignored.  There is no corresponding
     '-fbuiltin-FUNCTION' option; if you wish to enable built-in
     functions selectively when using '-fno-builtin' or
     '-ffreestanding', you may define macros such as:

          #define abs(n)          __builtin_abs ((n))
          #define strcpy(d, s)    __builtin_strcpy ((d), (s))

'-fhosted'

     Assert that compilation targets a hosted environment.  This implies
     '-fbuiltin'.  A hosted environment is one in which the entire
     standard library is available, and in which 'main' has a return
     type of 'int'.  Examples are nearly everything except a kernel.
     This is equivalent to '-fno-freestanding'.

'-ffreestanding'

     Assert that compilation targets a freestanding environment.  This
     implies '-fno-builtin'.  A freestanding environment is one in which
     the standard library may not exist, and program startup may not
     necessarily be at 'main'.  The most obvious example is an OS
     kernel.  This is equivalent to '-fno-hosted'.

     *Note Language Standards Supported by GCC: Standards, for details
     of freestanding and hosted environments.

'-fopenacc'
     Enable handling of OpenACC directives '#pragma acc' in C/C++ and
     '!$acc' in Fortran.  When '-fopenacc' is specified, the compiler
     generates accelerated code according to the OpenACC Application
     Programming Interface v2.0 <http://www.openacc.org/>.  This option
     implies '-pthread', and thus is only supported on targets that have
     support for '-pthread'.

     Note that this is an experimental feature, incomplete, and subject
     to change in future versions of GCC. See <https://gcc.gnu.org/wiki/OpenACC>
     for more information.

'-fopenmp'
     Enable handling of OpenMP directives '#pragma omp' in C/C++ and
     '!$omp' in Fortran.  When '-fopenmp' is specified, the compiler
     generates parallel code according to the OpenMP Application Program
     Interface v4.0 <http://www.openmp.org/>.  This option implies
     '-pthread', and thus is only supported on targets that have support
     for '-pthread'.  '-fopenmp' implies '-fopenmp-simd'.

'-fopenmp-simd'
     Enable handling of OpenMP's SIMD directives with '#pragma omp' in
     C/C++ and '!$omp' in Fortran.  Other OpenMP directives are ignored.

'-fcilkplus'
     Enable the usage of Cilk Plus language extension features for
     C/C++.  When the option '-fcilkplus' is specified, enable the usage
     of the Cilk Plus Language extension features for C/C++.  The
     present implementation follows ABI version 1.2.  This is an
     experimental feature that is only partially complete, and whose
     interface may change in future versions of GCC as the official
     specification changes.  Currently, all features but '_Cilk_for'
     have been implemented.

'-fgnu-tm'
     When the option '-fgnu-tm' is specified, the compiler generates
     code for the Linux variant of Intel's current Transactional Memory
     ABI specification document (Revision 1.1, May 6 2009).  This is an
     experimental feature whose interface may change in future versions
     of GCC, as the official specification changes.  Please note that
     not all architectures are supported for this feature.

     For more information on GCC's support for transactional memory,
     *Note The GNU Transactional Memory Library: (libitm)Enabling
     libitm.

     Note that the transactional memory feature is not supported with
     non-call exceptions ('-fnon-call-exceptions').

'-fms-extensions'
     Accept some non-standard constructs used in Microsoft header files.

     In C++ code, this allows member names in structures to be similar
     to previous types declarations.

          typedef int UOW;
          struct ABC {
            UOW UOW;
          };

     Some cases of unnamed fields in structures and unions are only
     accepted with this option.  *Note Unnamed struct/union fields
     within structs/unions: Unnamed Fields, for details.

     Note that this option is off for all targets but x86 targets using
     ms-abi.

'-fplan9-extensions'
     Accept some non-standard constructs used in Plan 9 code.

     This enables '-fms-extensions', permits passing pointers to
     structures with anonymous fields to functions that expect pointers
     to elements of the type of the field, and permits referring to
     anonymous fields declared using a typedef.  *Note Unnamed
     struct/union fields within structs/unions: Unnamed Fields, for
     details.  This is only supported for C, not C++.

'-trigraphs'
     Support ISO C trigraphs.  The '-ansi' option (and '-std' options
     for strict ISO C conformance) implies '-trigraphs'.

'-traditional'
'-traditional-cpp'
     Formerly, these options caused GCC to attempt to emulate a
     pre-standard C compiler.  They are now only supported with the '-E'
     switch.  The preprocessor continues to support a pre-standard mode.
     See the GNU CPP manual for details.

'-fcond-mismatch'
     Allow conditional expressions with mismatched types in the second
     and third arguments.  The value of such an expression is void.
     This option is not supported for C++.

'-flax-vector-conversions'
     Allow implicit conversions between vectors with differing numbers
     of elements and/or incompatible element types.  This option should
     not be used for new code.

'-funsigned-char'
     Let the type 'char' be unsigned, like 'unsigned char'.

     Each kind of machine has a default for what 'char' should be.  It
     is either like 'unsigned char' by default or like 'signed char' by
     default.

     Ideally, a portable program should always use 'signed char' or
     'unsigned char' when it depends on the signedness of an object.
     But many programs have been written to use plain 'char' and expect
     it to be signed, or expect it to be unsigned, depending on the
     machines they were written for.  This option, and its inverse, let
     you make such a program work with the opposite default.

     The type 'char' is always a distinct type from each of 'signed
     char' or 'unsigned char', even though its behavior is always just
     like one of those two.

'-fsigned-char'
     Let the type 'char' be signed, like 'signed char'.

     Note that this is equivalent to '-fno-unsigned-char', which is the
     negative form of '-funsigned-char'.  Likewise, the option
     '-fno-signed-char' is equivalent to '-funsigned-char'.

'-fsigned-bitfields'
'-funsigned-bitfields'
'-fno-signed-bitfields'
'-fno-unsigned-bitfields'
     These options control whether a bit-field is signed or unsigned,
     when the declaration does not use either 'signed' or 'unsigned'.
     By default, such a bit-field is signed, because this is consistent:
     the basic integer types such as 'int' are signed types.


File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC

3.5 Options Controlling C++ Dialect
===================================

This section describes the command-line options that are only meaningful
for C++ programs.  You can also use most of the GNU compiler options
regardless of what language your program is in.  For example, you might
compile a file 'firstClass.C' like this:

     g++ -g -frepo -O -c firstClass.C

In this example, only '-frepo' is an option meant only for C++ programs;
you can use the other options with any language supported by GCC.

 Here is a list of options that are _only_ for compiling C++ programs:

'-fabi-version=N'
     Use version N of the C++ ABI.  The default is version 0.

     Version 0 refers to the version conforming most closely to the C++
     ABI specification.  Therefore, the ABI obtained using version 0
     will change in different versions of G++ as ABI bugs are fixed.

     Version 1 is the version of the C++ ABI that first appeared in G++
     3.2.

     Version 2 is the version of the C++ ABI that first appeared in G++
     3.4, and was the default through G++ 4.9.

     Version 3 corrects an error in mangling a constant address as a
     template argument.

     Version 4, which first appeared in G++ 4.5, implements a standard
     mangling for vector types.

     Version 5, which first appeared in G++ 4.6, corrects the mangling
     of attribute const/volatile on function pointer types, decltype of
     a plain decl, and use of a function parameter in the declaration of
     another parameter.

     Version 6, which first appeared in G++ 4.7, corrects the promotion
     behavior of C++11 scoped enums and the mangling of template
     argument packs, const/static_cast, prefix ++ and -, and a class
     scope function used as a template argument.

     Version 7, which first appeared in G++ 4.8, that treats nullptr_t
     as a builtin type and corrects the mangling of lambdas in default
     argument scope.

     Version 8, which first appeared in G++ 4.9, corrects the
     substitution behavior of function types with
     function-cv-qualifiers.

     See also '-Wabi'.

'-fabi-compat-version=N'
     On targets that support strong aliases, G++ works around mangling
     changes by creating an alias with the correct mangled name when
     defining a symbol with an incorrect mangled name.  This switch
     specifies which ABI version to use for the alias.

     With '-fabi-version=0' (the default), this defaults to 2.  If
     another ABI version is explicitly selected, this defaults to 0.

     The compatibility version is also set by '-Wabi=N'.

'-fno-access-control'
     Turn off all access checking.  This switch is mainly useful for
     working around bugs in the access control code.

'-fcheck-new'
     Check that the pointer returned by 'operator new' is non-null
     before attempting to modify the storage allocated.  This check is
     normally unnecessary because the C++ standard specifies that
     'operator new' only returns '0' if it is declared 'throw()', in
     which case the compiler always checks the return value even without
     this option.  In all other cases, when 'operator new' has a
     non-empty exception specification, memory exhaustion is signalled
     by throwing 'std::bad_alloc'.  See also 'new (nothrow)'.

'-fconstexpr-depth=N'
     Set the maximum nested evaluation depth for C++11 constexpr
     functions to N.  A limit is needed to detect endless recursion
     during constant expression evaluation.  The minimum specified by
     the standard is 512.

'-fdeduce-init-list'
     Enable deduction of a template type parameter as
     'std::initializer_list' from a brace-enclosed initializer list,
     i.e.

          template <class T> auto forward(T t) -> decltype (realfn (t))
          {
            return realfn (t);
          }

          void f()
          {
            forward({1,2}); // call forward<std::initializer_list<int>>
          }

     This deduction was implemented as a possible extension to the
     originally proposed semantics for the C++11 standard, but was not
     part of the final standard, so it is disabled by default.  This
     option is deprecated, and may be removed in a future version of
     G++.

'-ffriend-injection'
     Inject friend functions into the enclosing namespace, so that they
     are visible outside the scope of the class in which they are
     declared.  Friend functions were documented to work this way in the
     old Annotated C++ Reference Manual.  However, in ISO C++ a friend
     function that is not declared in an enclosing scope can only be
     found using argument dependent lookup.  GCC defaults to the
     standard behavior.

     This option is for compatibility, and may be removed in a future
     release of G++.

'-fno-elide-constructors'
     The C++ standard allows an implementation to omit creating a
     temporary that is only used to initialize another object of the
     same type.  Specifying this option disables that optimization, and
     forces G++ to call the copy constructor in all cases.

'-fno-enforce-eh-specs'
     Don't generate code to check for violation of exception
     specifications at run time.  This option violates the C++ standard,
     but may be useful for reducing code size in production builds, much
     like defining 'NDEBUG'.  This does not give user code permission to
     throw exceptions in violation of the exception specifications; the
     compiler still optimizes based on the specifications, so throwing
     an unexpected exception results in undefined behavior at run time.

'-fextern-tls-init'
'-fno-extern-tls-init'
     The C++11 and OpenMP standards allow 'thread_local' and
     'threadprivate' variables to have dynamic (runtime) initialization.
     To support this, any use of such a variable goes through a wrapper
     function that performs any necessary initialization.  When the use
     and definition of the variable are in the same translation unit,
     this overhead can be optimized away, but when the use is in a
     different translation unit there is significant overhead even if
     the variable doesn't actually need dynamic initialization.  If the
     programmer can be sure that no use of the variable in a
     non-defining TU needs to trigger dynamic initialization (either
     because the variable is statically initialized, or a use of the
     variable in the defining TU will be executed before any uses in
     another TU), they can avoid this overhead with the
     '-fno-extern-tls-init' option.

     On targets that support symbol aliases, the default is
     '-fextern-tls-init'.  On targets that do not support symbol
     aliases, the default is '-fno-extern-tls-init'.

'-ffor-scope'
'-fno-for-scope'
     If '-ffor-scope' is specified, the scope of variables declared in a
     for-init-statement is limited to the 'for' loop itself, as
     specified by the C++ standard.  If '-fno-for-scope' is specified,
     the scope of variables declared in a for-init-statement extends to
     the end of the enclosing scope, as was the case in old versions of
     G++, and other (traditional) implementations of C++.

     If neither flag is given, the default is to follow the standard,
     but to allow and give a warning for old-style code that would
     otherwise be invalid, or have different behavior.

'-fno-gnu-keywords'
     Do not recognize 'typeof' as a keyword, so that code can use this
     word as an identifier.  You can use the keyword '__typeof__'
     instead.  '-ansi' implies '-fno-gnu-keywords'.

'-fno-implicit-templates'
     Never emit code for non-inline templates that are instantiated
     implicitly (i.e. by use); only emit code for explicit
     instantiations.  *Note Template Instantiation::, for more
     information.

'-fno-implicit-inline-templates'
     Don't emit code for implicit instantiations of inline templates,
     either.  The default is to handle inlines differently so that
     compiles with and without optimization need the same set of
     explicit instantiations.

'-fno-implement-inlines'
     To save space, do not emit out-of-line copies of inline functions
     controlled by '#pragma implementation'.  This causes linker errors
     if these functions are not inlined everywhere they are called.

'-fms-extensions'
     Disable Wpedantic warnings about constructs used in MFC, such as
     implicit int and getting a pointer to member function via
     non-standard syntax.

'-fno-nonansi-builtins'
     Disable built-in declarations of functions that are not mandated by
     ANSI/ISO C.  These include 'ffs', 'alloca', '_exit', 'index',
     'bzero', 'conjf', and other related functions.

'-fnothrow-opt'
     Treat a 'throw()' exception specification as if it were a
     'noexcept' specification to reduce or eliminate the text size
     overhead relative to a function with no exception specification.
     If the function has local variables of types with non-trivial
     destructors, the exception specification actually makes the
     function smaller because the EH cleanups for those variables can be
     optimized away.  The semantic effect is that an exception thrown
     out of a function with such an exception specification results in a
     call to 'terminate' rather than 'unexpected'.

'-fno-operator-names'
     Do not treat the operator name keywords 'and', 'bitand', 'bitor',
     'compl', 'not', 'or' and 'xor' as synonyms as keywords.

'-fno-optional-diags'
     Disable diagnostics that the standard says a compiler does not need
     to issue.  Currently, the only such diagnostic issued by G++ is the
     one for a name having multiple meanings within a class.

'-fpermissive'
     Downgrade some diagnostics about nonconformant code from errors to
     warnings.  Thus, using '-fpermissive' allows some nonconforming
     code to compile.

'-fno-pretty-templates'
     When an error message refers to a specialization of a function
     template, the compiler normally prints the signature of the
     template followed by the template arguments and any typedefs or
     typenames in the signature (e.g.  'void f(T) [with T = int]' rather
     than 'void f(int)') so that it's clear which template is involved.
     When an error message refers to a specialization of a class
     template, the compiler omits any template arguments that match the
     default template arguments for that template.  If either of these
     behaviors make it harder to understand the error message rather
     than easier, you can use '-fno-pretty-templates' to disable them.

'-frepo'
     Enable automatic template instantiation at link time.  This option
     also implies '-fno-implicit-templates'.  *Note Template
     Instantiation::, for more information.

'-fno-rtti'
     Disable generation of information about every class with virtual
     functions for use by the C++ run-time type identification features
     ('dynamic_cast' and 'typeid').  If you don't use those parts of the
     language, you can save some space by using this flag.  Note that
     exception handling uses the same information, but G++ generates it
     as needed.  The 'dynamic_cast' operator can still be used for casts
     that do not require run-time type information, i.e. casts to 'void
     *' or to unambiguous base classes.

'-fsized-deallocation'
     Enable the built-in global declarations
          void operator delete (void *, std::size_t) noexcept;
          void operator delete[] (void *, std::size_t) noexcept;
     as introduced in C++14.  This is useful for user-defined
     replacement deallocation functions that, for example, use the size
     of the object to make deallocation faster.  Enabled by default
     under '-std=c++14' and above.  The flag '-Wsized-deallocation'
     warns about places that might want to add a definition.

'-fstats'
     Emit statistics about front-end processing at the end of the
     compilation.  This information is generally only useful to the G++
     development team.

'-fstrict-enums'
     Allow the compiler to optimize using the assumption that a value of
     enumerated type can only be one of the values of the enumeration
     (as defined in the C++ standard; basically, a value that can be
     represented in the minimum number of bits needed to represent all
     the enumerators).  This assumption may not be valid if the program
     uses a cast to convert an arbitrary integer value to the enumerated
     type.

'-ftemplate-backtrace-limit=N'
     Set the maximum number of template instantiation notes for a single
     warning or error to N.  The default value is 10.

'-ftemplate-depth=N'
     Set the maximum instantiation depth for template classes to N.  A
     limit on the template instantiation depth is needed to detect
     endless recursions during template class instantiation.  ANSI/ISO
     C++ conforming programs must not rely on a maximum depth greater
     than 17 (changed to 1024 in C++11).  The default value is 900, as
     the compiler can run out of stack space before hitting 1024 in some
     situations.

'-fno-threadsafe-statics'
     Do not emit the extra code to use the routines specified in the C++
     ABI for thread-safe initialization of local statics.  You can use
     this option to reduce code size slightly in code that doesn't need
     to be thread-safe.

'-fuse-cxa-atexit'
     Register destructors for objects with static storage duration with
     the '__cxa_atexit' function rather than the 'atexit' function.
     This option is required for fully standards-compliant handling of
     static destructors, but only works if your C library supports
     '__cxa_atexit'.

'-fno-use-cxa-get-exception-ptr'
     Don't use the '__cxa_get_exception_ptr' runtime routine.  This
     causes 'std::uncaught_exception' to be incorrect, but is necessary
     if the runtime routine is not available.

'-fvisibility-inlines-hidden'
     This switch declares that the user does not attempt to compare
     pointers to inline functions or methods where the addresses of the
     two functions are taken in different shared objects.

     The effect of this is that GCC may, effectively, mark inline
     methods with '__attribute__ ((visibility ("hidden")))' so that they
     do not appear in the export table of a DSO and do not require a PLT
     indirection when used within the DSO.  Enabling this option can
     have a dramatic effect on load and link times of a DSO as it
     massively reduces the size of the dynamic export table when the
     library makes heavy use of templates.

     The behavior of this switch is not quite the same as marking the
     methods as hidden directly, because it does not affect static
     variables local to the function or cause the compiler to deduce
     that the function is defined in only one shared object.

     You may mark a method as having a visibility explicitly to negate
     the effect of the switch for that method.  For example, if you do
     want to compare pointers to a particular inline method, you might
     mark it as having default visibility.  Marking the enclosing class
     with explicit visibility has no effect.

     Explicitly instantiated inline methods are unaffected by this
     option as their linkage might otherwise cross a shared library
     boundary.  *Note Template Instantiation::.

'-fvisibility-ms-compat'
     This flag attempts to use visibility settings to make GCC's C++
     linkage model compatible with that of Microsoft Visual Studio.

     The flag makes these changes to GCC's linkage model:

       1. It sets the default visibility to 'hidden', like
          '-fvisibility=hidden'.

       2. Types, but not their members, are not hidden by default.

       3. The One Definition Rule is relaxed for types without explicit
          visibility specifications that are defined in more than one
          shared object: those declarations are permitted if they are
          permitted when this option is not used.

     In new code it is better to use '-fvisibility=hidden' and export
     those classes that are intended to be externally visible.
     Unfortunately it is possible for code to rely, perhaps
     accidentally, on the Visual Studio behavior.

     Among the consequences of these changes are that static data
     members of the same type with the same name but defined in
     different shared objects are different, so changing one does not
     change the other; and that pointers to function members defined in
     different shared objects may not compare equal.  When this flag is
     given, it is a violation of the ODR to define types with the same
     name differently.

'-fvtable-verify=[std|preinit|none]'
     Turn on (or off, if using '-fvtable-verify=none') the security
     feature that verifies at run time, for every virtual call, that the
     vtable pointer through which the call is made is valid for the type
     of the object, and has not been corrupted or overwritten.  If an
     invalid vtable pointer is detected at run time, an error is
     reported and execution of the program is immediately halted.

     This option causes run-time data structures to be built at program
     startup, which are used for verifying the vtable pointers.  The
     options 'std' and 'preinit' control the timing of when these data
     structures are built.  In both cases the data structures are built
     before execution reaches 'main'.  Using '-fvtable-verify=std'
     causes the data structures to be built after shared libraries have
     been loaded and initialized.  '-fvtable-verify=preinit' causes them
     to be built before shared libraries have been loaded and
     initialized.

     If this option appears multiple times in the command line with
     different values specified, 'none' takes highest priority over both
     'std' and 'preinit'; 'preinit' takes priority over 'std'.

'-fvtv-debug'
     When used in conjunction with '-fvtable-verify=std' or
     '-fvtable-verify=preinit', causes debug versions of the runtime
     functions for the vtable verification feature to be called.  This
     flag also causes the compiler to log information about which vtable
     pointers it finds for each class.  This information is written to a
     file named 'vtv_set_ptr_data.log' in the directory named by the
     environment variable 'VTV_LOGS_DIR' if that is defined or the
     current working directory otherwise.

     Note: This feature _appends_ data to the log file.  If you want a
     fresh log file, be sure to delete any existing one.

'-fvtv-counts'
     This is a debugging flag.  When used in conjunction with
     '-fvtable-verify=std' or '-fvtable-verify=preinit', this causes the
     compiler to keep track of the total number of virtual calls it
     encounters and the number of verifications it inserts.  It also
     counts the number of calls to certain run-time library functions
     that it inserts and logs this information for each compilation
     unit.  The compiler writes this information to a file named
     'vtv_count_data.log' in the directory named by the environment
     variable 'VTV_LOGS_DIR' if that is defined or the current working
     directory otherwise.  It also counts the size of the vtable pointer
     sets for each class, and writes this information to
     'vtv_class_set_sizes.log' in the same directory.

     Note: This feature _appends_ data to the log files.  To get fresh
     log files, be sure to delete any existing ones.

'-fno-weak'
     Do not use weak symbol support, even if it is provided by the
     linker.  By default, G++ uses weak symbols if they are available.
     This option exists only for testing, and should not be used by
     end-users; it results in inferior code and has no benefits.  This
     option may be removed in a future release of G++.

'-nostdinc++'
     Do not search for header files in the standard directories specific
     to C++, but do still search the other standard directories.  (This
     option is used when building the C++ library.)

 In addition, these optimization, warning, and code generation options
have meanings only for C++ programs:

'-Wabi (C, Objective-C, C++ and Objective-C++ only)'
     When an explicit '-fabi-version=N' option is used, causes G++ to
     warn when it generates code that is probably not compatible with
     the vendor-neutral C++ ABI.  Since G++ now defaults to
     '-fabi-version=0', '-Wabi' has no effect unless either an older ABI
     version is selected (with '-fabi-version=N') or an older
     compatibility version is selected (with '-Wabi=N' or
     '-fabi-compat-version=N').

     Although an effort has been made to warn about all such cases,
     there are probably some cases that are not warned about, even
     though G++ is generating incompatible code.  There may also be
     cases where warnings are emitted even though the code that is
     generated is compatible.

     You should rewrite your code to avoid these warnings if you are
     concerned about the fact that code generated by G++ may not be
     binary compatible with code generated by other compilers.

     '-Wabi' can also be used with an explicit version number to warn
     about compatibility with a particular '-fabi-version' level, e.g.
     '-Wabi=2' to warn about changes relative to '-fabi-version=2'.
     Specifying a version number also sets '-fabi-compat-version=N'.

     The known incompatibilities in '-fabi-version=2' (which was the
     default from GCC 3.4 to 4.9) include:

        * A template with a non-type template parameter of reference
          type was mangled incorrectly:
               extern int N;
               template <int &> struct S {};
               void n (S<N>) {2}

          This was fixed in '-fabi-version=3'.

        * SIMD vector types declared using '__attribute ((vector_size))'
          were mangled in a non-standard way that does not allow for
          overloading of functions taking vectors of different sizes.

          The mangling was changed in '-fabi-version=4'.

        * '__attribute ((const))' and 'noreturn' were mangled as type
          qualifiers, and 'decltype' of a plain declaration was folded
          away.

          These mangling issues were fixed in '-fabi-version=5'.

        * Scoped enumerators passed as arguments to a variadic function
          are promoted like unscoped enumerators, causing 'va_arg' to
          complain.  On most targets this does not actually affect the
          parameter passing ABI, as there is no way to pass an argument
          smaller than 'int'.

          Also, the ABI changed the mangling of template argument packs,
          'const_cast', 'static_cast', prefix increment/decrement, and a
          class scope function used as a template argument.

          These issues were corrected in '-fabi-version=6'.

        * Lambdas in default argument scope were mangled incorrectly,
          and the ABI changed the mangling of 'nullptr_t'.

          These issues were corrected in '-fabi-version=7'.

        * When mangling a function type with function-cv-qualifiers, the
          un-qualified function type was incorrectly treated as a
          substitution candidate.

          This was fixed in '-fabi-version=8'.

     It also warns about psABI-related changes.  The known psABI changes
     at this point include:

        * For SysV/x86-64, unions with 'long double' members are passed
          in memory as specified in psABI. For example:

               union U {
                 long double ld;
                 int i;
               };

          'union U' is always passed in memory.

'-Wabi-tag (C++ and Objective-C++ only)'
     Warn when a type with an ABI tag is used in a context that does not
     have that ABI tag.  See *note C++ Attributes:: for more information
     about ABI tags.

'-Wctor-dtor-privacy (C++ and Objective-C++ only)'
     Warn when a class seems unusable because all the constructors or
     destructors in that class are private, and it has neither friends
     nor public static member functions.  Also warn if there are no
     non-private methods, and there's at least one private member
     function that isn't a constructor or destructor.

'-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)'
     Warn when 'delete' is used to destroy an instance of a class that
     has virtual functions and non-virtual destructor.  It is unsafe to
     delete an instance of a derived class through a pointer to a base
     class if the base class does not have a virtual destructor.  This
     warning is enabled by '-Wall'.

'-Wliteral-suffix (C++ and Objective-C++ only)'
     Warn when a string or character literal is followed by a ud-suffix
     which does not begin with an underscore.  As a conforming
     extension, GCC treats such suffixes as separate preprocessing
     tokens in order to maintain backwards compatibility with code that
     uses formatting macros from '<inttypes.h>'.  For example:

          #define __STDC_FORMAT_MACROS
          #include <inttypes.h>
          #include <stdio.h>

          int main() {
            int64_t i64 = 123;
            printf("My int64: %"PRId64"\n", i64);
          }

     In this case, 'PRId64' is treated as a separate preprocessing
     token.

     This warning is enabled by default.

'-Wnarrowing (C++ and Objective-C++ only)'
     Warn when a narrowing conversion prohibited by C++11 occurs within
     '{ }', e.g.

          int i = { 2.2 }; // error: narrowing from double to int

     This flag is included in '-Wall' and '-Wc++11-compat'.

     With '-std=c++11', '-Wno-narrowing' suppresses the diagnostic
     required by the standard.  Note that this does not affect the
     meaning of well-formed code; narrowing conversions are still
     considered ill-formed in SFINAE context.

'-Wnoexcept (C++ and Objective-C++ only)'
     Warn when a noexcept-expression evaluates to false because of a
     call to a function that does not have a non-throwing exception
     specification (i.e.  'throw()' or 'noexcept') but is known by the
     compiler to never throw an exception.

'-Wnon-virtual-dtor (C++ and Objective-C++ only)'
     Warn when a class has virtual functions and an accessible
     non-virtual destructor itself or in an accessible polymorphic base
     class, in which case it is possible but unsafe to delete an
     instance of a derived class through a pointer to the class itself
     or base class.  This warning is automatically enabled if '-Weffc++'
     is specified.

'-Wreorder (C++ and Objective-C++ only)'
     Warn when the order of member initializers given in the code does
     not match the order in which they must be executed.  For instance:

          struct A {
            int i;
            int j;
            A(): j (0), i (1) { }
          };

     The compiler rearranges the member initializers for 'i' and 'j' to
     match the declaration order of the members, emitting a warning to
     that effect.  This warning is enabled by '-Wall'.

'-fext-numeric-literals (C++ and Objective-C++ only)'
     Accept imaginary, fixed-point, or machine-defined literal number
     suffixes as GNU extensions.  When this option is turned off these
     suffixes are treated as C++11 user-defined literal numeric
     suffixes.  This is on by default for all pre-C++11 dialects and all
     GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11',
     '-std=gnu++14'.  This option is off by default for ISO C++11
     onwards ('-std=c++11', ...).

 The following '-W...' options are not affected by '-Wall'.

'-Weffc++ (C++ and Objective-C++ only)'
     Warn about violations of the following style guidelines from Scott
     Meyers' 'Effective C++' series of books:

        * Define a copy constructor and an assignment operator for
          classes with dynamically-allocated memory.

        * Prefer initialization to assignment in constructors.

        * Have 'operator=' return a reference to '*this'.

        * Don't try to return a reference when you must return an
          object.

        * Distinguish between prefix and postfix forms of increment and
          decrement operators.

        * Never overload '&&', '||', or ','.

     This option also enables '-Wnon-virtual-dtor', which is also one of
     the effective C++ recommendations.  However, the check is extended
     to warn about the lack of virtual destructor in accessible
     non-polymorphic bases classes too.

     When selecting this option, be aware that the standard library
     headers do not obey all of these guidelines; use 'grep -v' to
     filter out those warnings.

'-Wstrict-null-sentinel (C++ and Objective-C++ only)'
     Warn about the use of an uncasted 'NULL' as sentinel.  When
     compiling only with GCC this is a valid sentinel, as 'NULL' is
     defined to '__null'.  Although it is a null pointer constant rather
     than a null pointer, it is guaranteed to be of the same size as a
     pointer.  But this use is not portable across different compilers.

'-Wno-non-template-friend (C++ and Objective-C++ only)'
     Disable warnings when non-templatized friend functions are declared
     within a template.  Since the advent of explicit template
     specification support in G++, if the name of the friend is an
     unqualified-id (i.e., 'friend foo(int)'), the C++ language
     specification demands that the friend declare or define an
     ordinary, nontemplate function.  (Section 14.5.3).  Before G++
     implemented explicit specification, unqualified-ids could be
     interpreted as a particular specialization of a templatized
     function.  Because this non-conforming behavior is no longer the
     default behavior for G++, '-Wnon-template-friend' allows the
     compiler to check existing code for potential trouble spots and is
     on by default.  This new compiler behavior can be turned off with
     '-Wno-non-template-friend', which keeps the conformant compiler
     code but disables the helpful warning.

'-Wold-style-cast (C++ and Objective-C++ only)'
     Warn if an old-style (C-style) cast to a non-void type is used
     within a C++ program.  The new-style casts ('dynamic_cast',
     'static_cast', 'reinterpret_cast', and 'const_cast') are less
     vulnerable to unintended effects and much easier to search for.

'-Woverloaded-virtual (C++ and Objective-C++ only)'
     Warn when a function declaration hides virtual functions from a
     base class.  For example, in:

          struct A {
            virtual void f();
          };

          struct B: public A {
            void f(int);
          };

     the 'A' class version of 'f' is hidden in 'B', and code like:

          B* b;
          b->f();

     fails to compile.

'-Wno-pmf-conversions (C++ and Objective-C++ only)'
     Disable the diagnostic for converting a bound pointer to member
     function to a plain pointer.

'-Wsign-promo (C++ and Objective-C++ only)'
     Warn when overload resolution chooses a promotion from unsigned or
     enumerated type to a signed type, over a conversion to an unsigned
     type of the same size.  Previous versions of G++ tried to preserve
     unsignedness, but the standard mandates the current behavior.


File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC

3.6 Options Controlling Objective-C and Objective-C++ Dialects
==============================================================

(NOTE: This manual does not describe the Objective-C and Objective-C++
languages themselves.  *Note Language Standards Supported by GCC:
Standards, for references.)

 This section describes the command-line options that are only
meaningful for Objective-C and Objective-C++ programs.  You can also use
most of the language-independent GNU compiler options.  For example, you
might compile a file 'some_class.m' like this:

     gcc -g -fgnu-runtime -O -c some_class.m

In this example, '-fgnu-runtime' is an option meant only for Objective-C
and Objective-C++ programs; you can use the other options with any
language supported by GCC.

 Note that since Objective-C is an extension of the C language,
Objective-C compilations may also use options specific to the C
front-end (e.g., '-Wtraditional').  Similarly, Objective-C++
compilations may use C++-specific options (e.g., '-Wabi').

 Here is a list of options that are _only_ for compiling Objective-C and
Objective-C++ programs:

'-fconstant-string-class=CLASS-NAME'
     Use CLASS-NAME as the name of the class to instantiate for each
     literal string specified with the syntax '@"..."'.  The default
     class name is 'NXConstantString' if the GNU runtime is being used,
     and 'NSConstantString' if the NeXT runtime is being used (see
     below).  The '-fconstant-cfstrings' option, if also present,
     overrides the '-fconstant-string-class' setting and cause '@"..."'
     literals to be laid out as constant CoreFoundation strings.

'-fgnu-runtime'
     Generate object code compatible with the standard GNU Objective-C
     runtime.  This is the default for most types of systems.

'-fnext-runtime'
     Generate output compatible with the NeXT runtime.  This is the
     default for NeXT-based systems, including Darwin and Mac OS X.  The
     macro '__NEXT_RUNTIME__' is predefined if (and only if) this option
     is used.

'-fno-nil-receivers'
     Assume that all Objective-C message dispatches ('[receiver
     message:arg]') in this translation unit ensure that the receiver is
     not 'nil'.  This allows for more efficient entry points in the
     runtime to be used.  This option is only available in conjunction
     with the NeXT runtime and ABI version 0 or 1.

'-fobjc-abi-version=N'
     Use version N of the Objective-C ABI for the selected runtime.
     This option is currently supported only for the NeXT runtime.  In
     that case, Version 0 is the traditional (32-bit) ABI without
     support for properties and other Objective-C 2.0 additions.
     Version 1 is the traditional (32-bit) ABI with support for
     properties and other Objective-C 2.0 additions.  Version 2 is the
     modern (64-bit) ABI. If nothing is specified, the default is
     Version 0 on 32-bit target machines, and Version 2 on 64-bit target
     machines.

'-fobjc-call-cxx-cdtors'
     For each Objective-C class, check if any of its instance variables
     is a C++ object with a non-trivial default constructor.  If so,
     synthesize a special '- (id) .cxx_construct' instance method which
     runs non-trivial default constructors on any such instance
     variables, in order, and then return 'self'.  Similarly, check if
     any instance variable is a C++ object with a non-trivial
     destructor, and if so, synthesize a special '- (void)
     .cxx_destruct' method which runs all such default destructors, in
     reverse order.

     The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods
     thusly generated only operate on instance variables declared in the
     current Objective-C class, and not those inherited from
     superclasses.  It is the responsibility of the Objective-C runtime
     to invoke all such methods in an object's inheritance hierarchy.
     The '- (id) .cxx_construct' methods are invoked by the runtime
     immediately after a new object instance is allocated; the '- (void)
     .cxx_destruct' methods are invoked immediately before the runtime
     deallocates an object instance.

     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
     later has support for invoking the '- (id) .cxx_construct' and '-
     (void) .cxx_destruct' methods.

'-fobjc-direct-dispatch'
     Allow fast jumps to the message dispatcher.  On Darwin this is
     accomplished via the comm page.

'-fobjc-exceptions'
     Enable syntactic support for structured exception handling in
     Objective-C, similar to what is offered by C++ and Java.  This
     option is required to use the Objective-C keywords '@try',
     '@throw', '@catch', '@finally' and '@synchronized'.  This option is
     available with both the GNU runtime and the NeXT runtime (but not
     available in conjunction with the NeXT runtime on Mac OS X 10.2 and
     earlier).

'-fobjc-gc'
     Enable garbage collection (GC) in Objective-C and Objective-C++
     programs.  This option is only available with the NeXT runtime; the
     GNU runtime has a different garbage collection implementation that
     does not require special compiler flags.

'-fobjc-nilcheck'
     For the NeXT runtime with version 2 of the ABI, check for a nil
     receiver in method invocations before doing the actual method call.
     This is the default and can be disabled using '-fno-objc-nilcheck'.
     Class methods and super calls are never checked for nil in this way
     no matter what this flag is set to.  Currently this flag does
     nothing when the GNU runtime, or an older version of the NeXT
     runtime ABI, is used.

'-fobjc-std=objc1'
     Conform to the language syntax of Objective-C 1.0, the language
     recognized by GCC 4.0.  This only affects the Objective-C additions
     to the C/C++ language; it does not affect conformance to C/C++
     standards, which is controlled by the separate C/C++ dialect option
     flags.  When this option is used with the Objective-C or
     Objective-C++ compiler, any Objective-C syntax that is not
     recognized by GCC 4.0 is rejected.  This is useful if you need to
     make sure that your Objective-C code can be compiled with older
     versions of GCC.

'-freplace-objc-classes'
     Emit a special marker instructing 'ld(1)' not to statically link in
     the resulting object file, and allow 'dyld(1)' to load it in at run
     time instead.  This is used in conjunction with the
     Fix-and-Continue debugging mode, where the object file in question
     may be recompiled and dynamically reloaded in the course of program
     execution, without the need to restart the program itself.
     Currently, Fix-and-Continue functionality is only available in
     conjunction with the NeXT runtime on Mac OS X 10.3 and later.

'-fzero-link'
     When compiling for the NeXT runtime, the compiler ordinarily
     replaces calls to 'objc_getClass("...")' (when the name of the
     class is known at compile time) with static class references that
     get initialized at load time, which improves run-time performance.
     Specifying the '-fzero-link' flag suppresses this behavior and
     causes calls to 'objc_getClass("...")' to be retained.  This is
     useful in Zero-Link debugging mode, since it allows for individual
     class implementations to be modified during program execution.  The
     GNU runtime currently always retains calls to
     'objc_get_class("...")' regardless of command-line options.

'-fno-local-ivars'
     By default instance variables in Objective-C can be accessed as if
     they were local variables from within the methods of the class
     they're declared in.  This can lead to shadowing between instance
     variables and other variables declared either locally inside a
     class method or globally with the same name.  Specifying the
     '-fno-local-ivars' flag disables this behavior thus avoiding
     variable shadowing issues.

'-fivar-visibility=[public|protected|private|package]'
     Set the default instance variable visibility to the specified
     option so that instance variables declared outside the scope of any
     access modifier directives default to the specified visibility.

'-gen-decls'
     Dump interface declarations for all classes seen in the source file
     to a file named 'SOURCENAME.decl'.

'-Wassign-intercept (Objective-C and Objective-C++ only)'
     Warn whenever an Objective-C assignment is being intercepted by the
     garbage collector.

'-Wno-protocol (Objective-C and Objective-C++ only)'
     If a class is declared to implement a protocol, a warning is issued
     for every method in the protocol that is not implemented by the
     class.  The default behavior is to issue a warning for every method
     not explicitly implemented in the class, even if a method
     implementation is inherited from the superclass.  If you use the
     '-Wno-protocol' option, then methods inherited from the superclass
     are considered to be implemented, and no warning is issued for
     them.

'-Wselector (Objective-C and Objective-C++ only)'
     Warn if multiple methods of different types for the same selector
     are found during compilation.  The check is performed on the list
     of methods in the final stage of compilation.  Additionally, a
     check is performed for each selector appearing in a
     '@selector(...)' expression, and a corresponding method for that
     selector has been found during compilation.  Because these checks
     scan the method table only at the end of compilation, these
     warnings are not produced if the final stage of compilation is not
     reached, for example because an error is found during compilation,
     or because the '-fsyntax-only' option is being used.

'-Wstrict-selector-match (Objective-C and Objective-C++ only)'
     Warn if multiple methods with differing argument and/or return
     types are found for a given selector when attempting to send a
     message using this selector to a receiver of type 'id' or 'Class'.
     When this flag is off (which is the default behavior), the compiler
     omits such warnings if any differences found are confined to types
     that share the same size and alignment.

'-Wundeclared-selector (Objective-C and Objective-C++ only)'
     Warn if a '@selector(...)' expression referring to an undeclared
     selector is found.  A selector is considered undeclared if no
     method with that name has been declared before the '@selector(...)'
     expression, either explicitly in an '@interface' or '@protocol'
     declaration, or implicitly in an '@implementation' section.  This
     option always performs its checks as soon as a '@selector(...)'
     expression is found, while '-Wselector' only performs its checks in
     the final stage of compilation.  This also enforces the coding
     style convention that methods and selectors must be declared before
     being used.

'-print-objc-runtime-info'
     Generate C header describing the largest structure that is passed
     by value, if any.


File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC

3.7 Options to Control Diagnostic Messages Formatting
=====================================================

Traditionally, diagnostic messages have been formatted irrespective of
the output device's aspect (e.g. its width, ...).  You can use the
options described below to control the formatting algorithm for
diagnostic messages, e.g. how many characters per line, how often source
location information should be reported.  Note that some language front
ends may not honor these options.

'-fmessage-length=N'
     Try to format error messages so that they fit on lines of about N
     characters.  If N is zero, then no line-wrapping is done; each
     error message appears on a single line.  This is the default for
     all front ends.

'-fdiagnostics-show-location=once'
     Only meaningful in line-wrapping mode.  Instructs the diagnostic
     messages reporter to emit source location information _once_; that
     is, in case the message is too long to fit on a single physical
     line and has to be wrapped, the source location won't be emitted
     (as prefix) again, over and over, in subsequent continuation lines.
     This is the default behavior.

'-fdiagnostics-show-location=every-line'
     Only meaningful in line-wrapping mode.  Instructs the diagnostic
     messages reporter to emit the same source location information (as
     prefix) for physical lines that result from the process of breaking
     a message which is too long to fit on a single line.

'-fdiagnostics-color[=WHEN]'
'-fno-diagnostics-color'
     Use color in diagnostics.  WHEN is 'never', 'always', or 'auto'.
     The default depends on how the compiler has been configured, it can
     be any of the above WHEN options or also 'never' if 'GCC_COLORS'
     environment variable isn't present in the environment, and 'auto'
     otherwise.  'auto' means to use color only when the standard error
     is a terminal.  The forms '-fdiagnostics-color' and
     '-fno-diagnostics-color' are aliases for
     '-fdiagnostics-color=always' and '-fdiagnostics-color=never',
     respectively.

     The colors are defined by the environment variable 'GCC_COLORS'.
     Its value is a colon-separated list of capabilities and Select
     Graphic Rendition (SGR) substrings.  SGR commands are interpreted
     by the terminal or terminal emulator.  (See the section in the
     documentation of your text terminal for permitted values and their
     meanings as character attributes.)  These substring values are
     integers in decimal representation and can be concatenated with
     semicolons.  Common values to concatenate include '1' for bold, '4'
     for underline, '5' for blink, '7' for inverse, '39' for default
     foreground color, '30' to '37' for foreground colors, '90' to '97'
     for 16-color mode foreground colors, '38;5;0' to '38;5;255' for
     88-color and 256-color modes foreground colors, '49' for default
     background color, '40' to '47' for background colors, '100' to
     '107' for 16-color mode background colors, and '48;5;0' to
     '48;5;255' for 88-color and 256-color modes background colors.

     The default 'GCC_COLORS' is
          error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
     where '01;31' is bold red, '01;35' is bold magenta, '01;36' is bold
     cyan, '01;32' is bold green and '01' is bold.  Setting 'GCC_COLORS'
     to the empty string disables colors.  Supported capabilities are as
     follows.

     'error='
          SGR substring for error: markers.

     'warning='
          SGR substring for warning: markers.

     'note='
          SGR substring for note: markers.

     'caret='
          SGR substring for caret line.

     'locus='
          SGR substring for location information, 'file:line' or
          'file:line:column' etc.

     'quote='
          SGR substring for information printed within quotes.

'-fno-diagnostics-show-option'
     By default, each diagnostic emitted includes text indicating the
     command-line option that directly controls the diagnostic (if such
     an option is known to the diagnostic machinery).  Specifying the
     '-fno-diagnostics-show-option' flag suppresses that behavior.

'-fno-diagnostics-show-caret'
     By default, each diagnostic emitted includes the original source
     line and a caret '^' indicating the column.  This option suppresses
     this information.  The source line is truncated to N characters, if
     the '-fmessage-length=n' option is given.  When the output is done
     to the terminal, the width is limited to the width given by the
     'COLUMNS' environment variable or, if not set, to the terminal
     width.


File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC

3.8 Options to Request or Suppress Warnings
===========================================

Warnings are diagnostic messages that report constructions that are not
inherently erroneous but that are risky or suggest there may have been
an error.

 The following language-independent options do not enable specific
warnings but control the kinds of diagnostics produced by GCC.

'-fsyntax-only'
     Check the code for syntax errors, but don't do anything beyond
     that.

'-fmax-errors=N'
     Limits the maximum number of error messages to N, at which point
     GCC bails out rather than attempting to continue processing the
     source code.  If N is 0 (the default), there is no limit on the
     number of error messages produced.  If '-Wfatal-errors' is also
     specified, then '-Wfatal-errors' takes precedence over this option.

'-w'
     Inhibit all warning messages.

'-Werror'
     Make all warnings into errors.

'-Werror='
     Make the specified warning into an error.  The specifier for a
     warning is appended; for example '-Werror=switch' turns the
     warnings controlled by '-Wswitch' into errors.  This switch takes a
     negative form, to be used to negate '-Werror' for specific
     warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings
     not be errors, even when '-Werror' is in effect.

     The warning message for each controllable warning includes the
     option that controls the warning.  That option can then be used
     with '-Werror=' and '-Wno-error=' as described above.  (Printing of
     the option in the warning message can be disabled using the
     '-fno-diagnostics-show-option' flag.)

     Note that specifying '-Werror='FOO automatically implies '-W'FOO.
     However, '-Wno-error='FOO does not imply anything.

'-Wfatal-errors'
     This option causes the compiler to abort compilation on the first
     error occurred rather than trying to keep going and printing
     further error messages.

 You can request many specific warnings with options beginning with
'-W', for example '-Wimplicit' to request warnings on implicit
declarations.  Each of these specific warning options also has a
negative form beginning '-Wno-' to turn off warnings; for example,
'-Wno-implicit'.  This manual lists only one of the two forms, whichever
is not the default.  For further language-specific options also refer to
*note C++ Dialect Options:: and *note Objective-C and Objective-C++
Dialect Options::.

 Some options, such as '-Wall' and '-Wextra', turn on other options,
such as '-Wunused', which may turn on further options, such as
'-Wunused-value'.  The combined effect of positive and negative forms is
that more specific options have priority over less specific ones,
independently of their position in the command-line.  For options of the
same specificity, the last one takes effect.  Options enabled or
disabled via pragmas (*note Diagnostic Pragmas::) take effect as if they
appeared at the end of the command-line.

 When an unrecognized warning option is requested (e.g.,
'-Wunknown-warning'), GCC emits a diagnostic stating that the option is
not recognized.  However, if the '-Wno-' form is used, the behavior is
slightly different: no diagnostic is produced for '-Wno-unknown-warning'
unless other diagnostics are being produced.  This allows the use of new
'-Wno-' options with old compilers, but if something goes wrong, the
compiler warns that an unrecognized option is present.

'-Wpedantic'
'-pedantic'
     Issue all the warnings demanded by strict ISO C and ISO C++; reject
     all programs that use forbidden extensions, and some other programs
     that do not follow ISO C and ISO C++.  For ISO C, follows the
     version of the ISO C standard specified by any '-std' option used.

     Valid ISO C and ISO C++ programs should compile properly with or
     without this option (though a rare few require '-ansi' or a '-std'
     option specifying the required version of ISO C).  However, without
     this option, certain GNU extensions and traditional C and C++
     features are supported as well.  With this option, they are
     rejected.

     '-Wpedantic' does not cause warning messages for use of the
     alternate keywords whose names begin and end with '__'.  Pedantic
     warnings are also disabled in the expression that follows
     '__extension__'.  However, only system header files should use
     these escape routes; application programs should avoid them.  *Note
     Alternate Keywords::.

     Some users try to use '-Wpedantic' to check programs for strict ISO
     C conformance.  They soon find that it does not do quite what they
     want: it finds some non-ISO practices, but not all--only those for
     which ISO C _requires_ a diagnostic, and some others for which
     diagnostics have been added.

     A feature to report any failure to conform to ISO C might be useful
     in some instances, but would require considerable additional work
     and would be quite different from '-Wpedantic'.  We don't have
     plans to support such a feature in the near future.

     Where the standard specified with '-std' represents a GNU extended
     dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding
     "base standard", the version of ISO C on which the GNU extended
     dialect is based.  Warnings from '-Wpedantic' are given where they
     are required by the base standard.  (It does not make sense for
     such warnings to be given only for features not in the specified
     GNU C dialect, since by definition the GNU dialects of C include
     all features the compiler supports with the given option, and there
     would be nothing to warn about.)

'-pedantic-errors'
     Give an error whenever the "base standard" (see '-Wpedantic')
     requires a diagnostic, in some cases where there is undefined
     behavior at compile-time and in some other cases that do not
     prevent compilation of programs that are valid according to the
     standard.  This is not equivalent to '-Werror=pedantic', since
     there are errors enabled by this option and not enabled by the
     latter and vice versa.

'-Wall'
     This enables all the warnings about constructions that some users
     consider questionable, and that are easy to avoid (or modify to
     prevent the warning), even in conjunction with macros.  This also
     enables some language-specific warnings described in *note C++
     Dialect Options:: and *note Objective-C and Objective-C++ Dialect
     Options::.

     '-Wall' turns on the following warning flags:

          -Waddress
          -Warray-bounds=1 (only with -O2)
          -Wc++11-compat  -Wc++14-compat
          -Wchar-subscripts
          -Wenum-compare (in C/ObjC; this is on by default in C++)
          -Wimplicit-int (C and Objective-C only)
          -Wimplicit-function-declaration (C and Objective-C only)
          -Wcomment
          -Wformat
          -Wmain (only for C/ObjC and unless -ffreestanding)
          -Wmaybe-uninitialized
          -Wmissing-braces (only for C/ObjC)
          -Wnonnull
          -Wopenmp-simd
          -Wparentheses
          -Wpointer-sign
          -Wreorder
          -Wreturn-type
          -Wsequence-point
          -Wsign-compare (only in C++)
          -Wstrict-aliasing
          -Wstrict-overflow=1
          -Wswitch
          -Wtrigraphs
          -Wuninitialized
          -Wunknown-pragmas
          -Wunused-function
          -Wunused-label
          -Wunused-value
          -Wunused-variable
          -Wvolatile-register-var


     Note that some warning flags are not implied by '-Wall'.  Some of
     them warn about constructions that users generally do not consider
     questionable, but which occasionally you might wish to check for;
     others warn about constructions that are necessary or hard to avoid
     in some cases, and there is no simple way to modify the code to
     suppress the warning.  Some of them are enabled by '-Wextra' but
     many of them must be enabled individually.

'-Wextra'
     This enables some extra warning flags that are not enabled by
     '-Wall'.  (This option used to be called '-W'.  The older name is
     still supported, but the newer name is more descriptive.)

          -Wclobbered
          -Wempty-body
          -Wignored-qualifiers
          -Wmissing-field-initializers
          -Wmissing-parameter-type (C only)
          -Wold-style-declaration (C only)
          -Woverride-init
          -Wsign-compare
          -Wtype-limits
          -Wuninitialized
          -Wunused-parameter (only with -Wunused or -Wall)
          -Wunused-but-set-parameter (only with -Wunused or -Wall)


     The option '-Wextra' also prints warning messages for the following
     cases:

        * A pointer is compared against integer zero with '<', '<=',
          '>', or '>='.

        * (C++ only) An enumerator and a non-enumerator both appear in a
          conditional expression.

        * (C++ only) Ambiguous virtual bases.

        * (C++ only) Subscripting an array that has been declared
          'register'.

        * (C++ only) Taking the address of a variable that has been
          declared 'register'.

        * (C++ only) A base class is not initialized in a derived
          class's copy constructor.

'-Wchar-subscripts'
     Warn if an array subscript has type 'char'.  This is a common cause
     of error, as programmers often forget that this type is signed on
     some machines.  This warning is enabled by '-Wall'.

'-Wcomment'
     Warn whenever a comment-start sequence '/*' appears in a '/*'
     comment, or whenever a Backslash-Newline appears in a '//' comment.
     This warning is enabled by '-Wall'.

'-Wno-coverage-mismatch'
     Warn if feedback profiles do not match when using the
     '-fprofile-use' option.  If a source file is changed between
     compiling with '-fprofile-gen' and with '-fprofile-use', the files
     with the profile feedback can fail to match the source file and GCC
     cannot use the profile feedback information.  By default, this
     warning is enabled and is treated as an error.
     '-Wno-coverage-mismatch' can be used to disable the warning or
     '-Wno-error=coverage-mismatch' can be used to disable the error.
     Disabling the error for this warning can result in poorly optimized
     code and is useful only in the case of very minor changes such as
     bug fixes to an existing code-base.  Completely disabling the
     warning is not recommended.

'-Wno-cpp'
     (C, Objective-C, C++, Objective-C++ and Fortran only)

     Suppress warning messages emitted by '#warning' directives.

'-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)'
     Give a warning when a value of type 'float' is implicitly promoted
     to 'double'.  CPUs with a 32-bit "single-precision" floating-point
     unit implement 'float' in hardware, but emulate 'double' in
     software.  On such a machine, doing computations using 'double'
     values is much more expensive because of the overhead required for
     software emulation.

     It is easy to accidentally do computations with 'double' because
     floating-point literals are implicitly of type 'double'.  For
     example, in:
          float area(float radius)
          {
             return 3.14159 * radius * radius;
          }
     the compiler performs the entire computation with 'double' because
     the floating-point literal is a 'double'.

'-Wformat'
'-Wformat=N'
     Check calls to 'printf' and 'scanf', etc., to make sure that the
     arguments supplied have types appropriate to the format string
     specified, and that the conversions specified in the format string
     make sense.  This includes standard functions, and others specified
     by format attributes (*note Function Attributes::), in the
     'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension,
     not in the C standard) families (or other target-specific
     families).  Which functions are checked without format attributes
     having been specified depends on the standard version selected, and
     such checks of functions without the attribute specified are
     disabled by '-ffreestanding' or '-fno-builtin'.

     The formats are checked against the format features supported by
     GNU libc version 2.2.  These include all ISO C90 and C99 features,
     as well as features from the Single Unix Specification and some BSD
     and GNU extensions.  Other library implementations may not support
     all these features; GCC does not support warning about features
     that go beyond a particular library's limitations.  However, if
     '-Wpedantic' is used with '-Wformat', warnings are given about
     format features not in the selected standard version (but not for
     'strfmon' formats, since those are not in any version of the C
     standard).  *Note Options Controlling C Dialect: C Dialect Options.

     '-Wformat=1'
     '-Wformat'
          Option '-Wformat' is equivalent to '-Wformat=1', and
          '-Wno-format' is equivalent to '-Wformat=0'.  Since '-Wformat'
          also checks for null format arguments for several functions,
          '-Wformat' also implies '-Wnonnull'.  Some aspects of this
          level of format checking can be disabled by the options:
          '-Wno-format-contains-nul', '-Wno-format-extra-args', and
          '-Wno-format-zero-length'.  '-Wformat' is enabled by '-Wall'.

     '-Wno-format-contains-nul'
          If '-Wformat' is specified, do not warn about format strings
          that contain NUL bytes.

     '-Wno-format-extra-args'
          If '-Wformat' is specified, do not warn about excess arguments
          to a 'printf' or 'scanf' format function.  The C standard
          specifies that such arguments are ignored.

          Where the unused arguments lie between used arguments that are
          specified with '$' operand number specifications, normally
          warnings are still given, since the implementation could not
          know what type to pass to 'va_arg' to skip the unused
          arguments.  However, in the case of 'scanf' formats, this
          option suppresses the warning if the unused arguments are all
          pointers, since the Single Unix Specification says that such
          unused arguments are allowed.

     '-Wno-format-zero-length'
          If '-Wformat' is specified, do not warn about zero-length
          formats.  The C standard specifies that zero-length formats
          are allowed.

     '-Wformat=2'
          Enable '-Wformat' plus additional format checks.  Currently
          equivalent to '-Wformat -Wformat-nonliteral -Wformat-security
          -Wformat-y2k'.

     '-Wformat-nonliteral'
          If '-Wformat' is specified, also warn if the format string is
          not a string literal and so cannot be checked, unless the
          format function takes its format arguments as a 'va_list'.

     '-Wformat-security'
          If '-Wformat' is specified, also warn about uses of format
          functions that represent possible security problems.  At
          present, this warns about calls to 'printf' and 'scanf'
          functions where the format string is not a string literal and
          there are no format arguments, as in 'printf (foo);'.  This
          may be a security hole if the format string came from
          untrusted input and contains '%n'.  (This is currently a
          subset of what '-Wformat-nonliteral' warns about, but in
          future warnings may be added to '-Wformat-security' that are
          not included in '-Wformat-nonliteral'.)

     '-Wformat-signedness'
          If '-Wformat' is specified, also warn if the format string
          requires an unsigned argument and the argument is signed and
          vice versa.

     '-Wformat-y2k'
          If '-Wformat' is specified, also warn about 'strftime' formats
          that may yield only a two-digit year.

'-Wnonnull'
     Warn about passing a null pointer for arguments marked as requiring
     a non-null value by the 'nonnull' function attribute.

     '-Wnonnull' is included in '-Wall' and '-Wformat'.  It can be
     disabled with the '-Wno-nonnull' option.

'-Winit-self (C, C++, Objective-C and Objective-C++ only)'
     Warn about uninitialized variables that are initialized with
     themselves.  Note this option can only be used with the
     '-Wuninitialized' option.

     For example, GCC warns about 'i' being uninitialized in the
     following snippet only when '-Winit-self' has been specified:
          int f()
          {
            int i = i;
            return i;
          }

     This warning is enabled by '-Wall' in C++.

'-Wimplicit-int (C and Objective-C only)'
     Warn when a declaration does not specify a type.  This warning is
     enabled by '-Wall'.

'-Wimplicit-function-declaration (C and Objective-C only)'
     Give a warning whenever a function is used before being declared.
     In C99 mode ('-std=c99' or '-std=gnu99'), this warning is enabled
     by default and it is made into an error by '-pedantic-errors'.
     This warning is also enabled by '-Wall'.

'-Wimplicit (C and Objective-C only)'
     Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'.
     This warning is enabled by '-Wall'.

'-Wignored-qualifiers (C and C++ only)'
     Warn if the return type of a function has a type qualifier such as
     'const'.  For ISO C such a type qualifier has no effect, since the
     value returned by a function is not an lvalue.  For C++, the
     warning is only emitted for scalar types or 'void'.  ISO C
     prohibits qualified 'void' return types on function definitions, so
     such return types always receive a warning even without this
     option.

     This warning is also enabled by '-Wextra'.

'-Wmain'
     Warn if the type of 'main' is suspicious.  'main' should be a
     function with external linkage, returning int, taking either zero
     arguments, two, or three arguments of appropriate types.  This
     warning is enabled by default in C++ and is enabled by either
     '-Wall' or '-Wpedantic'.

'-Wmissing-braces'
     Warn if an aggregate or union initializer is not fully bracketed.
     In the following example, the initializer for 'a' is not fully
     bracketed, but that for 'b' is fully bracketed.  This warning is
     enabled by '-Wall' in C.

          int a[2][2] = { 0, 1, 2, 3 };
          int b[2][2] = { { 0, 1 }, { 2, 3 } };

     This warning is enabled by '-Wall'.

'-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
     Warn if a user-supplied include directory does not exist.

'-Wparentheses'
     Warn if parentheses are omitted in certain contexts, such as when
     there is an assignment in a context where a truth value is
     expected, or when operators are nested whose precedence people
     often get confused about.

     Also warn if a comparison like 'x<=y<=z' appears; this is
     equivalent to '(x<=y ? 1 : 0) <= z', which is a different
     interpretation from that of ordinary mathematical notation.

     Also warn about constructions where there may be confusion to which
     'if' statement an 'else' branch belongs.  Here is an example of
     such a case:

          {
            if (a)
              if (b)
                foo ();
            else
              bar ();
          }

     In C/C++, every 'else' branch belongs to the innermost possible
     'if' statement, which in this example is 'if (b)'.  This is often
     not what the programmer expected, as illustrated in the above
     example by indentation the programmer chose.  When there is the
     potential for this confusion, GCC issues a warning when this flag
     is specified.  To eliminate the warning, add explicit braces around
     the innermost 'if' statement so there is no way the 'else' can
     belong to the enclosing 'if'.  The resulting code looks like this:

          {
            if (a)
              {
                if (b)
                  foo ();
                else
                  bar ();
              }
          }

     Also warn for dangerous uses of the GNU extension to '?:' with
     omitted middle operand.  When the condition in the '?': operator is
     a boolean expression, the omitted value is always 1.  Often
     programmers expect it to be a value computed inside the conditional
     expression instead.

     This warning is enabled by '-Wall'.

'-Wsequence-point'
     Warn about code that may have undefined semantics because of
     violations of sequence point rules in the C and C++ standards.

     The C and C++ standards define the order in which expressions in a
     C/C++ program are evaluated in terms of "sequence points", which
     represent a partial ordering between the execution of parts of the
     program: those executed before the sequence point, and those
     executed after it.  These occur after the evaluation of a full
     expression (one which is not part of a larger expression), after
     the evaluation of the first operand of a '&&', '||', '? :' or ','
     (comma) operator, before a function is called (but after the
     evaluation of its arguments and the expression denoting the called
     function), and in certain other places.  Other than as expressed by
     the sequence point rules, the order of evaluation of subexpressions
     of an expression is not specified.  All these rules describe only a
     partial order rather than a total order, since, for example, if two
     functions are called within one expression with no sequence point
     between them, the order in which the functions are called is not
     specified.  However, the standards committee have ruled that
     function calls do not overlap.

     It is not specified when between sequence points modifications to
     the values of objects take effect.  Programs whose behavior depends
     on this have undefined behavior; the C and C++ standards specify
     that "Between the previous and next sequence point an object shall
     have its stored value modified at most once by the evaluation of an
     expression.  Furthermore, the prior value shall be read only to
     determine the value to be stored.".  If a program breaks these
     rules, the results on any particular implementation are entirely
     unpredictable.

     Examples of code with undefined behavior are 'a = a++;', 'a[n] =
     b[n++]' and 'a[i++] = i;'.  Some more complicated cases are not
     diagnosed by this option, and it may give an occasional false
     positive result, but in general it has been found fairly effective
     at detecting this sort of problem in programs.

     The standard is worded confusingly, therefore there is some debate
     over the precise meaning of the sequence point rules in subtle
     cases.  Links to discussions of the problem, including proposed
     formal definitions, may be found on the GCC readings page, at
     <http://gcc.gnu.org/readings.html>.

     This warning is enabled by '-Wall' for C and C++.

'-Wno-return-local-addr'
     Do not warn about returning a pointer (or in C++, a reference) to a
     variable that goes out of scope after the function returns.

'-Wreturn-type'
     Warn whenever a function is defined with a return type that
     defaults to 'int'.  Also warn about any 'return' statement with no
     return value in a function whose return type is not 'void' (falling
     off the end of the function body is considered returning without a
     value), and about a 'return' statement with an expression in a
     function whose return type is 'void'.

     For C++, a function without return type always produces a
     diagnostic message, even when '-Wno-return-type' is specified.  The
     only exceptions are 'main' and functions defined in system headers.

     This warning is enabled by '-Wall'.

'-Wshift-count-negative'
     Warn if shift count is negative.  This warning is enabled by
     default.

'-Wshift-count-overflow'
     Warn if shift count >= width of type.  This warning is enabled by
     default.

'-Wswitch'
     Warn whenever a 'switch' statement has an index of enumerated type
     and lacks a 'case' for one or more of the named codes of that
     enumeration.  (The presence of a 'default' label prevents this
     warning.)  'case' labels outside the enumeration range also provoke
     warnings when this option is used (even if there is a 'default'
     label).  This warning is enabled by '-Wall'.

'-Wswitch-default'
     Warn whenever a 'switch' statement does not have a 'default' case.

'-Wswitch-enum'
     Warn whenever a 'switch' statement has an index of enumerated type
     and lacks a 'case' for one or more of the named codes of that
     enumeration.  'case' labels outside the enumeration range also
     provoke warnings when this option is used.  The only difference
     between '-Wswitch' and this option is that this option gives a
     warning about an omitted enumeration code even if there is a
     'default' label.

'-Wswitch-bool'
     Warn whenever a 'switch' statement has an index of boolean type.
     It is possible to suppress this warning by casting the controlling
     expression to a type other than 'bool'.  For example:
          switch ((int) (a == 4))
            {
            ...
            }
     This warning is enabled by default for C and C++ programs.

'-Wsync-nand (C and C++ only)'
     Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch'
     built-in functions are used.  These functions changed semantics in
     GCC 4.4.

'-Wtrigraphs'
     Warn if any trigraphs are encountered that might change the meaning
     of the program (trigraphs within comments are not warned about).
     This warning is enabled by '-Wall'.

'-Wunused-but-set-parameter'
     Warn whenever a function parameter is assigned to, but otherwise
     unused (aside from its declaration).

     To suppress this warning use the 'unused' attribute (*note Variable
     Attributes::).

     This warning is also enabled by '-Wunused' together with '-Wextra'.

'-Wunused-but-set-variable'
     Warn whenever a local variable is assigned to, but otherwise unused
     (aside from its declaration).  This warning is enabled by '-Wall'.

     To suppress this warning use the 'unused' attribute (*note Variable
     Attributes::).

     This warning is also enabled by '-Wunused', which is enabled by
     '-Wall'.

'-Wunused-function'
     Warn whenever a static function is declared but not defined or a
     non-inline static function is unused.  This warning is enabled by
     '-Wall'.

'-Wunused-label'
     Warn whenever a label is declared but not used.  This warning is
     enabled by '-Wall'.

     To suppress this warning use the 'unused' attribute (*note Variable
     Attributes::).

'-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)'
     Warn when a typedef locally defined in a function is not used.
     This warning is enabled by '-Wall'.

'-Wunused-parameter'
     Warn whenever a function parameter is unused aside from its
     declaration.

     To suppress this warning use the 'unused' attribute (*note Variable
     Attributes::).

'-Wno-unused-result'
     Do not warn if a caller of a function marked with attribute
     'warn_unused_result' (*note Function Attributes::) does not use its
     return value.  The default is '-Wunused-result'.

'-Wunused-variable'
     Warn whenever a local variable or non-constant static variable is
     unused aside from its declaration.  This warning is enabled by
     '-Wall'.

     To suppress this warning use the 'unused' attribute (*note Variable
     Attributes::).

'-Wunused-value'
     Warn whenever a statement computes a result that is explicitly not
     used.  To suppress this warning cast the unused expression to
     'void'.  This includes an expression-statement or the left-hand
     side of a comma expression that contains no side effects.  For
     example, an expression such as 'x[i,j]' causes a warning, while
     'x[(void)i,j]' does not.

     This warning is enabled by '-Wall'.

'-Wunused'
     All the above '-Wunused' options combined.

     In order to get a warning about an unused function parameter, you
     must either specify '-Wextra -Wunused' (note that '-Wall' implies
     '-Wunused'), or separately specify '-Wunused-parameter'.

'-Wuninitialized'
     Warn if an automatic variable is used without first being
     initialized or if a variable may be clobbered by a 'setjmp' call.
     In C++, warn if a non-static reference or non-static 'const' member
     appears in a class without constructors.

     If you want to warn about code that uses the uninitialized value of
     the variable in its own initializer, use the '-Winit-self' option.

     These warnings occur for individual uninitialized or clobbered
     elements of structure, union or array variables as well as for
     variables that are uninitialized or clobbered as a whole.  They do
     not occur for variables or elements declared 'volatile'.  Because
     these warnings depend on optimization, the exact variables or
     elements for which there are warnings depends on the precise
     optimization options and version of GCC used.

     Note that there may be no warning about a variable that is used
     only to compute a value that itself is never used, because such
     computations may be deleted by data flow analysis before the
     warnings are printed.

'-Wmaybe-uninitialized'
     For an automatic variable, if there exists a path from the function
     entry to a use of the variable that is initialized, but there exist
     some other paths for which the variable is not initialized, the
     compiler emits a warning if it cannot prove the uninitialized paths
     are not executed at run time.  These warnings are made optional
     because GCC is not smart enough to see all the reasons why the code
     might be correct in spite of appearing to have an error.  Here is
     one example of how this can happen:

          {
            int x;
            switch (y)
              {
              case 1: x = 1;
                break;
              case 2: x = 4;
                break;
              case 3: x = 5;
              }
            foo (x);
          }

     If the value of 'y' is always 1, 2 or 3, then 'x' is always
     initialized, but GCC doesn't know this.  To suppress the warning,
     you need to provide a default case with assert(0) or similar code.

     This option also warns when a non-volatile automatic variable might
     be changed by a call to 'longjmp'.  These warnings as well are
     possible only in optimizing compilation.

     The compiler sees only the calls to 'setjmp'.  It cannot know where
     'longjmp' will be called; in fact, a signal handler could call it
     at any point in the code.  As a result, you may get a warning even
     when there is in fact no problem because 'longjmp' cannot in fact
     be called at the place that would cause a problem.

     Some spurious warnings can be avoided if you declare all the
     functions you use that never return as 'noreturn'.  *Note Function
     Attributes::.

     This warning is enabled by '-Wall' or '-Wextra'.

'-Wunknown-pragmas'
     Warn when a '#pragma' directive is encountered that is not
     understood by GCC.  If this command-line option is used, warnings
     are even issued for unknown pragmas in system header files.  This
     is not the case if the warnings are only enabled by the '-Wall'
     command-line option.

'-Wno-pragmas'
     Do not warn about misuses of pragmas, such as incorrect parameters,
     invalid syntax, or conflicts between pragmas.  See also
     '-Wunknown-pragmas'.

'-Wstrict-aliasing'
     This option is only active when '-fstrict-aliasing' is active.  It
     warns about code that might break the strict aliasing rules that
     the compiler is using for optimization.  The warning does not catch
     all cases, but does attempt to catch the more common pitfalls.  It
     is included in '-Wall'.  It is equivalent to '-Wstrict-aliasing=3'

'-Wstrict-aliasing=n'
     This option is only active when '-fstrict-aliasing' is active.  It
     warns about code that might break the strict aliasing rules that
     the compiler is using for optimization.  Higher levels correspond
     to higher accuracy (fewer false positives).  Higher levels also
     correspond to more effort, similar to the way '-O' works.
     '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'.

     Level 1: Most aggressive, quick, least accurate.  Possibly useful
     when higher levels do not warn but '-fstrict-aliasing' still breaks
     the code, as it has very few false negatives.  However, it has many
     false positives.  Warns for all pointer conversions between
     possibly incompatible types, even if never dereferenced.  Runs in
     the front end only.

     Level 2: Aggressive, quick, not too precise.  May still have many
     false positives (not as many as level 1 though), and few false
     negatives (but possibly more than level 1).  Unlike level 1, it
     only warns when an address is taken.  Warns about incomplete types.
     Runs in the front end only.

     Level 3 (default for '-Wstrict-aliasing'): Should have very few
     false positives and few false negatives.  Slightly slower than
     levels 1 or 2 when optimization is enabled.  Takes care of the
     common pun+dereference pattern in the front end:
     '*(int*)&some_float'.  If optimization is enabled, it also runs in
     the back end, where it deals with multiple statement cases using
     flow-sensitive points-to information.  Only warns when the
     converted pointer is dereferenced.  Does not warn about incomplete
     types.

'-Wstrict-overflow'
'-Wstrict-overflow=N'
     This option is only active when '-fstrict-overflow' is active.  It
     warns about cases where the compiler optimizes based on the
     assumption that signed overflow does not occur.  Note that it does
     not warn about all cases where the code might overflow: it only
     warns about cases where the compiler implements some optimization.
     Thus this warning depends on the optimization level.

     An optimization that assumes that signed overflow does not occur is
     perfectly safe if the values of the variables involved are such
     that overflow never does, in fact, occur.  Therefore this warning
     can easily give a false positive: a warning about code that is not
     actually a problem.  To help focus on important issues, several
     warning levels are defined.  No warnings are issued for the use of
     undefined signed overflow when estimating how many iterations a
     loop requires, in particular when determining whether a loop will
     be executed at all.

     '-Wstrict-overflow=1'
          Warn about cases that are both questionable and easy to avoid.
          For example, with '-fstrict-overflow', the compiler simplifies
          'x + 1 > x' to '1'.  This level of '-Wstrict-overflow' is
          enabled by '-Wall'; higher levels are not, and must be
          explicitly requested.

     '-Wstrict-overflow=2'
          Also warn about other cases where a comparison is simplified
          to a constant.  For example: 'abs (x) >= 0'.  This can only be
          simplified when '-fstrict-overflow' is in effect, because 'abs
          (INT_MIN)' overflows to 'INT_MIN', which is less than zero.
          '-Wstrict-overflow' (with no level) is the same as
          '-Wstrict-overflow=2'.

     '-Wstrict-overflow=3'
          Also warn about other cases where a comparison is simplified.
          For example: 'x + 1 > 1' is simplified to 'x > 0'.

     '-Wstrict-overflow=4'
          Also warn about other simplifications not covered by the above
          cases.  For example: '(x * 10) / 5' is simplified to 'x * 2'.

     '-Wstrict-overflow=5'
          Also warn about cases where the compiler reduces the magnitude
          of a constant involved in a comparison.  For example: 'x + 2 >
          y' is simplified to 'x + 1 >= y'.  This is reported only at
          the highest warning level because this simplification applies
          to many comparisons, so this warning level gives a very large
          number of false positives.

'-Wsuggest-attribute=[pure|const|noreturn|format]'
     Warn for cases where adding an attribute may be beneficial.  The
     attributes currently supported are listed below.

     '-Wsuggest-attribute=pure'
     '-Wsuggest-attribute=const'
     '-Wsuggest-attribute=noreturn'

          Warn about functions that might be candidates for attributes
          'pure', 'const' or 'noreturn'.  The compiler only warns for
          functions visible in other compilation units or (in the case
          of 'pure' and 'const') if it cannot prove that the function
          returns normally.  A function returns normally if it doesn't
          contain an infinite loop or return abnormally by throwing,
          calling 'abort' or trapping.  This analysis requires option
          '-fipa-pure-const', which is enabled by default at '-O' and
          higher.  Higher optimization levels improve the accuracy of
          the analysis.

     '-Wsuggest-attribute=format'
     '-Wmissing-format-attribute'

          Warn about function pointers that might be candidates for
          'format' attributes.  Note these are only possible candidates,
          not absolute ones.  GCC guesses that function pointers with
          'format' attributes that are used in assignment,
          initialization, parameter passing or return statements should
          have a corresponding 'format' attribute in the resulting type.
          I.e. the left-hand side of the assignment or initialization,
          the type of the parameter variable, or the return type of the
          containing function respectively should also have a 'format'
          attribute to avoid the warning.

          GCC also warns about function definitions that might be
          candidates for 'format' attributes.  Again, these are only
          possible candidates.  GCC guesses that 'format' attributes
          might be appropriate for any function that calls a function
          like 'vprintf' or 'vscanf', but this might not always be the
          case, and some functions for which 'format' attributes are
          appropriate may not be detected.

'-Wsuggest-final-types'
     Warn about types with virtual methods where code quality would be
     improved if the type were declared with the C++11 'final'
     specifier, or, if possible, declared in an anonymous namespace.
     This allows GCC to more aggressively devirtualize the polymorphic
     calls.  This warning is more effective with link time optimization,
     where the information about the class hierarchy graph is more
     complete.

'-Wsuggest-final-methods'
     Warn about virtual methods where code quality would be improved if
     the method were declared with the C++11 'final' specifier, or, if
     possible, its type were declared in an anonymous namespace or with
     the 'final' specifier.  This warning is more effective with link
     time optimization, where the information about the class hierarchy
     graph is more complete.  It is recommended to first consider
     suggestions of '-Wsuggest-final-types' and then rebuild with new
     annotations.

'-Wsuggest-override'
     Warn about overriding virtual functions that are not marked with
     the override keyword.

'-Warray-bounds'
'-Warray-bounds=N'
     This option is only active when '-ftree-vrp' is active (default for
     '-O2' and above).  It warns about subscripts to arrays that are
     always out of bounds.  This warning is enabled by '-Wall'.

     '-Warray-bounds=1'
          This is the warning level of '-Warray-bounds' and is enabled
          by '-Wall'; higher levels are not, and must be explicitly
          requested.

     '-Warray-bounds=2'
          This warning level also warns about out of bounds access for
          arrays at the end of a struct and for arrays accessed through
          pointers.  This warning level may give a larger number of
          false positives and is deactivated by default.

'-Wbool-compare'
     Warn about boolean expression compared with an integer value
     different from 'true'/'false'.  For instance, the following
     comparison is always false:
          int n = 5;
          ...
          if ((n > 1) == 2) { ... }
     This warning is enabled by '-Wall'.

'-Wno-discarded-qualifiers (C and Objective-C only)'
     Do not warn if type qualifiers on pointers are being discarded.
     Typically, the compiler warns if a 'const char *' variable is
     passed to a function that takes a 'char *' parameter.  This option
     can be used to suppress such a warning.

'-Wno-discarded-array-qualifiers (C and Objective-C only)'
     Do not warn if type qualifiers on arrays which are pointer targets
     are being discarded.  Typically, the compiler warns if a 'const int
     (*)[]' variable is passed to a function that takes a 'int (*)[]'
     parameter.  This option can be used to suppress such a warning.

'-Wno-incompatible-pointer-types (C and Objective-C only)'
     Do not warn when there is a conversion between pointers that have
     incompatible types.  This warning is for cases not covered by
     '-Wno-pointer-sign', which warns for pointer argument passing or
     assignment with different signedness.

'-Wno-int-conversion (C and Objective-C only)'
     Do not warn about incompatible integer to pointer and pointer to
     integer conversions.  This warning is about implicit conversions;
     for explicit conversions the warnings '-Wno-int-to-pointer-cast'
     and '-Wno-pointer-to-int-cast' may be used.

'-Wno-div-by-zero'
     Do not warn about compile-time integer division by zero.
     Floating-point division by zero is not warned about, as it can be a
     legitimate way of obtaining infinities and NaNs.

'-Wsystem-headers'
     Print warning messages for constructs found in system header files.
     Warnings from system headers are normally suppressed, on the
     assumption that they usually do not indicate real problems and
     would only make the compiler output harder to read.  Using this
     command-line option tells GCC to emit warnings from system headers
     as if they occurred in user code.  However, note that using '-Wall'
     in conjunction with this option does _not_ warn about unknown
     pragmas in system headers--for that, '-Wunknown-pragmas' must also
     be used.

'-Wtrampolines'
     Warn about trampolines generated for pointers to nested functions.
     A trampoline is a small piece of data or code that is created at
     run time on the stack when the address of a nested function is
     taken, and is used to call the nested function indirectly.  For
     some targets, it is made up of data only and thus requires no
     special treatment.  But, for most targets, it is made up of code
     and thus requires the stack to be made executable in order for the
     program to work properly.

'-Wfloat-equal'
     Warn if floating-point values are used in equality comparisons.

     The idea behind this is that sometimes it is convenient (for the
     programmer) to consider floating-point values as approximations to
     infinitely precise real numbers.  If you are doing this, then you
     need to compute (by analyzing the code, or in some other way) the
     maximum or likely maximum error that the computation introduces,
     and allow for it when performing comparisons (and when producing
     output, but that's a different problem).  In particular, instead of
     testing for equality, you should check to see whether the two
     values have ranges that overlap; and this is done with the
     relational operators, so equality comparisons are probably
     mistaken.

'-Wtraditional (C and Objective-C only)'
     Warn about certain constructs that behave differently in
     traditional and ISO C.  Also warn about ISO C constructs that have
     no traditional C equivalent, and/or problematic constructs that
     should be avoided.

        * Macro parameters that appear within string literals in the
          macro body.  In traditional C macro replacement takes place
          within string literals, but in ISO C it does not.

        * In traditional C, some preprocessor directives did not exist.
          Traditional preprocessors only considered a line to be a
          directive if the '#' appeared in column 1 on the line.
          Therefore '-Wtraditional' warns about directives that
          traditional C understands but ignores because the '#' does not
          appear as the first character on the line.  It also suggests
          you hide directives like '#pragma' not understood by
          traditional C by indenting them.  Some traditional
          implementations do not recognize '#elif', so this option
          suggests avoiding it altogether.

        * A function-like macro that appears without arguments.

        * The unary plus operator.

        * The 'U' integer constant suffix, or the 'F' or 'L'
          floating-point constant suffixes.  (Traditional C does support
          the 'L' suffix on integer constants.)  Note, these suffixes
          appear in macros defined in the system headers of most modern
          systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'.  Use
          of these macros in user code might normally lead to spurious
          warnings, however GCC's integrated preprocessor has enough
          context to avoid warning in these cases.

        * A function declared external in one block and then used after
          the end of the block.

        * A 'switch' statement has an operand of type 'long'.

        * A non-'static' function declaration follows a 'static' one.
          This construct is not accepted by some traditional C
          compilers.

        * The ISO type of an integer constant has a different width or
          signedness from its traditional type.  This warning is only
          issued if the base of the constant is ten.  I.e. hexadecimal
          or octal values, which typically represent bit patterns, are
          not warned about.

        * Usage of ISO string concatenation is detected.

        * Initialization of automatic aggregates.

        * Identifier conflicts with labels.  Traditional C lacks a
          separate namespace for labels.

        * Initialization of unions.  If the initializer is zero, the
          warning is omitted.  This is done under the assumption that
          the zero initializer in user code appears conditioned on e.g.
          '__STDC__' to avoid missing initializer warnings and relies on
          default initialization to zero in the traditional C case.

        * Conversions by prototypes between fixed/floating-point values
          and vice versa.  The absence of these prototypes when
          compiling with traditional C causes serious problems.  This is
          a subset of the possible conversion warnings; for the full set
          use '-Wtraditional-conversion'.

        * Use of ISO C style function definitions.  This warning
          intentionally is _not_ issued for prototype declarations or
          variadic functions because these ISO C features appear in your
          code when using libiberty's traditional C compatibility
          macros, 'PARAMS' and 'VPARAMS'.  This warning is also bypassed
          for nested functions because that feature is already a GCC
          extension and thus not relevant to traditional C
          compatibility.

'-Wtraditional-conversion (C and Objective-C only)'
     Warn if a prototype causes a type conversion that is different from
     what would happen to the same argument in the absence of a
     prototype.  This includes conversions of fixed point to floating
     and vice versa, and conversions changing the width or signedness of
     a fixed-point argument except when the same as the default
     promotion.

'-Wdeclaration-after-statement (C and Objective-C only)'
     Warn when a declaration is found after a statement in a block.
     This construct, known from C++, was introduced with ISO C99 and is
     by default allowed in GCC.  It is not supported by ISO C90.  *Note
     Mixed Declarations::.

'-Wundef'
     Warn if an undefined identifier is evaluated in an '#if' directive.

'-Wno-endif-labels'
     Do not warn whenever an '#else' or an '#endif' are followed by
     text.

'-Wshadow'
     Warn whenever a local variable or type declaration shadows another
     variable, parameter, type, class member (in C++), or instance
     variable (in Objective-C) or whenever a built-in function is
     shadowed.  Note that in C++, the compiler warns if a local variable
     shadows an explicit typedef, but not if it shadows a
     struct/class/enum.

'-Wno-shadow-ivar (Objective-C only)'
     Do not warn whenever a local variable shadows an instance variable
     in an Objective-C method.

'-Wlarger-than=LEN'
     Warn whenever an object of larger than LEN bytes is defined.

'-Wframe-larger-than=LEN'
     Warn if the size of a function frame is larger than LEN bytes.  The
     computation done to determine the stack frame size is approximate
     and not conservative.  The actual requirements may be somewhat
     greater than LEN even if you do not get a warning.  In addition,
     any space allocated via 'alloca', variable-length arrays, or
     related constructs is not included by the compiler when determining
     whether or not to issue a warning.

'-Wno-free-nonheap-object'
     Do not warn when attempting to free an object that was not
     allocated on the heap.

'-Wstack-usage=LEN'
     Warn if the stack usage of a function might be larger than LEN
     bytes.  The computation done to determine the stack usage is
     conservative.  Any space allocated via 'alloca', variable-length
     arrays, or related constructs is included by the compiler when
     determining whether or not to issue a warning.

     The message is in keeping with the output of '-fstack-usage'.

        * If the stack usage is fully static but exceeds the specified
          amount, it's:

                 warning: stack usage is 1120 bytes
        * If the stack usage is (partly) dynamic but bounded, it's:

                 warning: stack usage might be 1648 bytes
        * If the stack usage is (partly) dynamic and not bounded, it's:

                 warning: stack usage might be unbounded

'-Wunsafe-loop-optimizations'
     Warn if the loop cannot be optimized because the compiler cannot
     assume anything on the bounds of the loop indices.  With
     '-funsafe-loop-optimizations' warn if the compiler makes such
     assumptions.

'-Wno-pedantic-ms-format (MinGW targets only)'
     When used in combination with '-Wformat' and '-pedantic' without
     GNU extensions, this option disables the warnings about non-ISO
     'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I'
     used on Windows targets, which depend on the MS runtime.

'-Wpointer-arith'
     Warn about anything that depends on the "size of" a function type
     or of 'void'.  GNU C assigns these types a size of 1, for
     convenience in calculations with 'void *' pointers and pointers to
     functions.  In C++, warn also when an arithmetic operation involves
     'NULL'.  This warning is also enabled by '-Wpedantic'.

'-Wtype-limits'
     Warn if a comparison is always true or always false due to the
     limited range of the data type, but do not warn for constant
     expressions.  For example, warn if an unsigned variable is compared
     against zero with '<' or '>='.  This warning is also enabled by
     '-Wextra'.

'-Wbad-function-cast (C and Objective-C only)'
     Warn when a function call is cast to a non-matching type.  For
     example, warn if a call to a function returning an integer type is
     cast to a pointer type.

'-Wc90-c99-compat (C and Objective-C only)'
     Warn about features not present in ISO C90, but present in ISO C99.
     For instance, warn about use of variable length arrays, 'long long'
     type, 'bool' type, compound literals, designated initializers, and
     so on.  This option is independent of the standards mode.  Warnings
     are disabled in the expression that follows '__extension__'.

'-Wc99-c11-compat (C and Objective-C only)'
     Warn about features not present in ISO C99, but present in ISO C11.
     For instance, warn about use of anonymous structures and unions,
     '_Atomic' type qualifier, '_Thread_local' storage-class specifier,
     '_Alignas' specifier, 'Alignof' operator, '_Generic' keyword, and
     so on.  This option is independent of the standards mode.  Warnings
     are disabled in the expression that follows '__extension__'.

'-Wc++-compat (C and Objective-C only)'
     Warn about ISO C constructs that are outside of the common subset
     of ISO C and ISO C++, e.g. request for implicit conversion from
     'void *' to a pointer to non-'void' type.

'-Wc++11-compat (C++ and Objective-C++ only)'
     Warn about C++ constructs whose meaning differs between ISO C++
     1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are
     keywords in ISO C++ 2011.  This warning turns on '-Wnarrowing' and
     is enabled by '-Wall'.

'-Wc++14-compat (C++ and Objective-C++ only)'
     Warn about C++ constructs whose meaning differs between ISO C++
     2011 and ISO C++ 2014.  This warning is enabled by '-Wall'.

'-Wcast-qual'
     Warn whenever a pointer is cast so as to remove a type qualifier
     from the target type.  For example, warn if a 'const char *' is
     cast to an ordinary 'char *'.

     Also warn when making a cast that introduces a type qualifier in an
     unsafe way.  For example, casting 'char **' to 'const char **' is
     unsafe, as in this example:

            /* p is char ** value.  */
            const char **q = (const char **) p;
            /* Assignment of readonly string to const char * is OK.  */
            *q = "string";
            /* Now char** pointer points to read-only memory.  */
            **p = 'b';

'-Wcast-align'
     Warn whenever a pointer is cast such that the required alignment of
     the target is increased.  For example, warn if a 'char *' is cast
     to an 'int *' on machines where integers can only be accessed at
     two- or four-byte boundaries.

'-Wwrite-strings'
     When compiling C, give string constants the type 'const
     char[LENGTH]' so that copying the address of one into a non-'const'
     'char *' pointer produces a warning.  These warnings help you find
     at compile time code that can try to write into a string constant,
     but only if you have been very careful about using 'const' in
     declarations and prototypes.  Otherwise, it is just a nuisance.
     This is why we did not make '-Wall' request these warnings.

     When compiling C++, warn about the deprecated conversion from
     string literals to 'char *'.  This warning is enabled by default
     for C++ programs.

'-Wclobbered'
     Warn for variables that might be changed by 'longjmp' or 'vfork'.
     This warning is also enabled by '-Wextra'.

'-Wconditionally-supported (C++ and Objective-C++ only)'
     Warn for conditionally-supported (C++11 [intro.defs]) constructs.

'-Wconversion'
     Warn for implicit conversions that may alter a value.  This
     includes conversions between real and integer, like 'abs (x)' when
     'x' is 'double'; conversions between signed and unsigned, like
     'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf
     (M_PI)'.  Do not warn for explicit casts like 'abs ((int) x)' and
     'ui = (unsigned) -1', or if the value is not changed by the
     conversion like in 'abs (2.0)'.  Warnings about conversions between
     signed and unsigned integers can be disabled by using
     '-Wno-sign-conversion'.

     For C++, also warn for confusing overload resolution for
     user-defined conversions; and conversions that never use a type
     conversion operator: conversions to 'void', the same type, a base
     class or a reference to them.  Warnings about conversions between
     signed and unsigned integers are disabled by default in C++ unless
     '-Wsign-conversion' is explicitly enabled.

'-Wno-conversion-null (C++ and Objective-C++ only)'
     Do not warn for conversions between 'NULL' and non-pointer types.
     '-Wconversion-null' is enabled by default.

'-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)'
     Warn when a literal '0' is used as null pointer constant.  This can
     be useful to facilitate the conversion to 'nullptr' in C++11.

'-Wdate-time'
     Warn when macros '__TIME__', '__DATE__' or '__TIMESTAMP__' are
     encountered as they might prevent bit-wise-identical reproducible
     compilations.

'-Wdelete-incomplete (C++ and Objective-C++ only)'
     Warn when deleting a pointer to incomplete type, which may cause
     undefined behavior at runtime.  This warning is enabled by default.

'-Wuseless-cast (C++ and Objective-C++ only)'
     Warn when an expression is casted to its own type.

'-Wempty-body'
     Warn if an empty body occurs in an 'if', 'else' or 'do while'
     statement.  This warning is also enabled by '-Wextra'.

'-Wenum-compare'
     Warn about a comparison between values of different enumerated
     types.  In C++ enumeral mismatches in conditional expressions are
     also diagnosed and the warning is enabled by default.  In C this
     warning is enabled by '-Wall'.

'-Wjump-misses-init (C, Objective-C only)'
     Warn if a 'goto' statement or a 'switch' statement jumps forward
     across the initialization of a variable, or jumps backward to a
     label after the variable has been initialized.  This only warns
     about variables that are initialized when they are declared.  This
     warning is only supported for C and Objective-C; in C++ this sort
     of branch is an error in any case.

     '-Wjump-misses-init' is included in '-Wc++-compat'.  It can be
     disabled with the '-Wno-jump-misses-init' option.

'-Wsign-compare'
     Warn when a comparison between signed and unsigned values could
     produce an incorrect result when the signed value is converted to
     unsigned.  This warning is also enabled by '-Wextra'; to get the
     other warnings of '-Wextra' without this warning, use '-Wextra
     -Wno-sign-compare'.

'-Wsign-conversion'
     Warn for implicit conversions that may change the sign of an
     integer value, like assigning a signed integer expression to an
     unsigned integer variable.  An explicit cast silences the warning.
     In C, this option is enabled also by '-Wconversion'.

'-Wfloat-conversion'
     Warn for implicit conversions that reduce the precision of a real
     value.  This includes conversions from real to integer, and from
     higher precision real to lower precision real values.  This option
     is also enabled by '-Wconversion'.

'-Wsized-deallocation (C++ and Objective-C++ only)'
     Warn about a definition of an unsized deallocation function
          void operator delete (void *) noexcept;
          void operator delete[] (void *) noexcept;
     without a definition of the corresponding sized deallocation
     function
          void operator delete (void *, std::size_t) noexcept;
          void operator delete[] (void *, std::size_t) noexcept;
     or vice versa.  Enabled by '-Wextra' along with
     '-fsized-deallocation'.

'-Wsizeof-pointer-memaccess'
     Warn for suspicious length parameters to certain string and memory
     built-in functions if the argument uses 'sizeof'.  This warning
     warns e.g. about 'memset (ptr, 0, sizeof (ptr));' if 'ptr' is not
     an array, but a pointer, and suggests a possible fix, or about
     'memcpy (&foo, ptr, sizeof (&foo));'.  This warning is enabled by
     '-Wall'.

'-Wsizeof-array-argument'
     Warn when the 'sizeof' operator is applied to a parameter that is
     declared as an array in a function definition.  This warning is
     enabled by default for C and C++ programs.

'-Wmemset-transposed-args'
     Warn for suspicious calls to the 'memset' built-in function, if the
     second argument is not zero and the third argument is zero.  This
     warns e.g. about 'memset (buf, sizeof buf, 0)' where most probably
     'memset (buf, 0, sizeof buf)' was meant instead.  The diagnostics
     is only emitted if the third argument is literal zero.  If it is
     some expression that is folded to zero, a cast of zero to some
     type, etc., it is far less likely that the user has mistakenly
     exchanged the arguments and no warning is emitted.  This warning is
     enabled by '-Wall'.

'-Waddress'
     Warn about suspicious uses of memory addresses.  These include
     using the address of a function in a conditional expression, such
     as 'void func(void); if (func)', and comparisons against the memory
     address of a string literal, such as 'if (x == "abc")'.  Such uses
     typically indicate a programmer error: the address of a function
     always evaluates to true, so their use in a conditional usually
     indicate that the programmer forgot the parentheses in a function
     call; and comparisons against string literals result in unspecified
     behavior and are not portable in C, so they usually indicate that
     the programmer intended to use 'strcmp'.  This warning is enabled
     by '-Wall'.

'-Wlogical-op'
     Warn about suspicious uses of logical operators in expressions.
     This includes using logical operators in contexts where a bit-wise
     operator is likely to be expected.

'-Wlogical-not-parentheses'
     Warn about logical not used on the left hand side operand of a
     comparison.  This option does not warn if the RHS operand is of a
     boolean type.  Its purpose is to detect suspicious code like the
     following:
          int a;
          ...
          if (!a > 1) { ... }

     It is possible to suppress the warning by wrapping the LHS into
     parentheses:
          if ((!a) > 1) { ... }

     This warning is enabled by '-Wall'.

'-Waggregate-return'
     Warn if any functions that return structures or unions are defined
     or called.  (In languages where you can return an array, this also
     elicits a warning.)

'-Wno-aggressive-loop-optimizations'
     Warn if in a loop with constant number of iterations the compiler
     detects undefined behavior in some statement during one or more of
     the iterations.

'-Wno-attributes'
     Do not warn if an unexpected '__attribute__' is used, such as
     unrecognized attributes, function attributes applied to variables,
     etc.  This does not stop errors for incorrect use of supported
     attributes.

'-Wno-builtin-macro-redefined'
     Do not warn if certain built-in macros are redefined.  This
     suppresses warnings for redefinition of '__TIMESTAMP__',
     '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'.

'-Wstrict-prototypes (C and Objective-C only)'
     Warn if a function is declared or defined without specifying the
     argument types.  (An old-style function definition is permitted
     without a warning if preceded by a declaration that specifies the
     argument types.)

'-Wold-style-declaration (C and Objective-C only)'
     Warn for obsolescent usages, according to the C Standard, in a
     declaration.  For example, warn if storage-class specifiers like
     'static' are not the first things in a declaration.  This warning
     is also enabled by '-Wextra'.

'-Wold-style-definition (C and Objective-C only)'
     Warn if an old-style function definition is used.  A warning is
     given even if there is a previous prototype.

'-Wmissing-parameter-type (C and Objective-C only)'
     A function parameter is declared without a type specifier in
     K&R-style functions:

          void foo(bar) { }

     This warning is also enabled by '-Wextra'.

'-Wmissing-prototypes (C and Objective-C only)'
     Warn if a global function is defined without a previous prototype
     declaration.  This warning is issued even if the definition itself
     provides a prototype.  Use this option to detect global functions
     that do not have a matching prototype declaration in a header file.
     This option is not valid for C++ because all function declarations
     provide prototypes and a non-matching declaration declares an
     overload rather than conflict with an earlier declaration.  Use
     '-Wmissing-declarations' to detect missing declarations in C++.

'-Wmissing-declarations'
     Warn if a global function is defined without a previous
     declaration.  Do so even if the definition itself provides a
     prototype.  Use this option to detect global functions that are not
     declared in header files.  In C, no warnings are issued for
     functions with previous non-prototype declarations; use
     '-Wmissing-prototypes' to detect missing prototypes.  In C++, no
     warnings are issued for function templates, or for inline
     functions, or for functions in anonymous namespaces.

'-Wmissing-field-initializers'
     Warn if a structure's initializer has some fields missing.  For
     example, the following code causes such a warning, because 'x.h' is
     implicitly zero:

          struct s { int f, g, h; };
          struct s x = { 3, 4 };

     This option does not warn about designated initializers, so the
     following modification does not trigger a warning:

          struct s { int f, g, h; };
          struct s x = { .f = 3, .g = 4 };

     In C++ this option does not warn either about the empty { }
     initializer, for example:

          struct s { int f, g, h; };
          s x = { };

     This warning is included in '-Wextra'.  To get other '-Wextra'
     warnings without this one, use '-Wextra
     -Wno-missing-field-initializers'.

'-Wno-multichar'
     Do not warn if a multicharacter constant (''FOOF'') is used.
     Usually they indicate a typo in the user's code, as they have
     implementation-defined values, and should not be used in portable
     code.

'-Wnormalized[=<none|id|nfc|nfkc>]'
     In ISO C and ISO C++, two identifiers are different if they are
     different sequences of characters.  However, sometimes when
     characters outside the basic ASCII character set are used, you can
     have two different character sequences that look the same.  To
     avoid confusion, the ISO 10646 standard sets out some
     "normalization rules" which when applied ensure that two sequences
     that look the same are turned into the same sequence.  GCC can warn
     you if you are using identifiers that have not been normalized;
     this option controls that warning.

     There are four levels of warning supported by GCC.  The default is
     '-Wnormalized=nfc', which warns about any identifier that is not in
     the ISO 10646 "C" normalized form, "NFC". NFC is the recommended
     form for most uses.  It is equivalent to '-Wnormalized'.

     Unfortunately, there are some characters allowed in identifiers by
     ISO C and ISO C++ that, when turned into NFC, are not allowed in
     identifiers.  That is, there's no way to use these symbols in
     portable ISO C or C++ and have all your identifiers in NFC.
     '-Wnormalized=id' suppresses the warning for these characters.  It
     is hoped that future versions of the standards involved will
     correct this, which is why this option is not the default.

     You can switch the warning off for all characters by writing
     '-Wnormalized=none' or '-Wno-normalized'.  You should only do this
     if you are using some other normalization scheme (like "D"),
     because otherwise you can easily create bugs that are literally
     impossible to see.

     Some characters in ISO 10646 have distinct meanings but look
     identical in some fonts or display methodologies, especially once
     formatting has been applied.  For instance '\u207F', "SUPERSCRIPT
     LATIN SMALL LETTER N", displays just like a regular 'n' that has
     been placed in a superscript.  ISO 10646 defines the "NFKC"
     normalization scheme to convert all these into a standard form as
     well, and GCC warns if your code is not in NFKC if you use
     '-Wnormalized=nfkc'.  This warning is comparable to warning about
     every identifier that contains the letter O because it might be
     confused with the digit 0, and so is not the default, but may be
     useful as a local coding convention if the programming environment
     cannot be fixed to display these characters distinctly.

'-Wno-deprecated'
     Do not warn about usage of deprecated features.  *Note Deprecated
     Features::.

'-Wno-deprecated-declarations'
     Do not warn about uses of functions (*note Function Attributes::),
     variables (*note Variable Attributes::), and types (*note Type
     Attributes::) marked as deprecated by using the 'deprecated'
     attribute.

'-Wno-overflow'
     Do not warn about compile-time overflow in constant expressions.

'-Wno-odr'
     Warn about One Definition Rule violations during link-time
     optimization.  Requires '-flto-odr-type-merging' to be enabled.
     Enabled by default.

'-Wopenmp-simd'
     Warn if the vectorizer cost model overrides the OpenMP or the Cilk
     Plus simd directive set by user.  The '-fsimd-cost-model=unlimited'
     option can be used to relax the cost model.

'-Woverride-init (C and Objective-C only)'
     Warn if an initialized field without side effects is overridden
     when using designated initializers (*note Designated Initializers:
     Designated Inits.).

     This warning is included in '-Wextra'.  To get other '-Wextra'
     warnings without this one, use '-Wextra -Wno-override-init'.

'-Wpacked'
     Warn if a structure is given the packed attribute, but the packed
     attribute has no effect on the layout or size of the structure.
     Such structures may be mis-aligned for little benefit.  For
     instance, in this code, the variable 'f.x' in 'struct bar' is
     misaligned even though 'struct bar' does not itself have the packed
     attribute:

          struct foo {
            int x;
            char a, b, c, d;
          } __attribute__((packed));
          struct bar {
            char z;
            struct foo f;
          };

'-Wpacked-bitfield-compat'
     The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on
     bit-fields of type 'char'.  This has been fixed in GCC 4.4 but the
     change can lead to differences in the structure layout.  GCC
     informs you when the offset of such a field has changed in GCC 4.4.
     For example there is no longer a 4-bit padding between field 'a'
     and 'b' in this structure:

          struct foo
          {
            char a:4;
            char b:8;
          } __attribute__ ((packed));

     This warning is enabled by default.  Use
     '-Wno-packed-bitfield-compat' to disable this warning.

'-Wpadded'
     Warn if padding is included in a structure, either to align an
     element of the structure or to align the whole structure.
     Sometimes when this happens it is possible to rearrange the fields
     of the structure to reduce the padding and so make the structure
     smaller.

'-Wredundant-decls'
     Warn if anything is declared more than once in the same scope, even
     in cases where multiple declaration is valid and changes nothing.

'-Wnested-externs (C and Objective-C only)'
     Warn if an 'extern' declaration is encountered within a function.

'-Wno-inherited-variadic-ctor'
     Suppress warnings about use of C++11 inheriting constructors when
     the base class inherited from has a C variadic constructor; the
     warning is on by default because the ellipsis is not inherited.

'-Winline'
     Warn if a function that is declared as inline cannot be inlined.
     Even with this option, the compiler does not warn about failures to
     inline functions declared in system headers.

     The compiler uses a variety of heuristics to determine whether or
     not to inline a function.  For example, the compiler takes into
     account the size of the function being inlined and the amount of
     inlining that has already been done in the current function.
     Therefore, seemingly insignificant changes in the source program
     can cause the warnings produced by '-Winline' to appear or
     disappear.

'-Wno-invalid-offsetof (C++ and Objective-C++ only)'
     Suppress warnings from applying the 'offsetof' macro to a non-POD
     type.  According to the 2014 ISO C++ standard, applying 'offsetof'
     to a non-standard-layout type is undefined.  In existing C++
     implementations, however, 'offsetof' typically gives meaningful
     results.  This flag is for users who are aware that they are
     writing nonportable code and who have deliberately chosen to ignore
     the warning about it.

     The restrictions on 'offsetof' may be relaxed in a future version
     of the C++ standard.

'-Wno-int-to-pointer-cast'
     Suppress warnings from casts to pointer type of an integer of a
     different size.  In C++, casting to a pointer type of smaller size
     is an error.  'Wint-to-pointer-cast' is enabled by default.

'-Wno-pointer-to-int-cast (C and Objective-C only)'
     Suppress warnings from casts from a pointer to an integer type of a
     different size.

'-Winvalid-pch'
     Warn if a precompiled header (*note Precompiled Headers::) is found
     in the search path but can't be used.

'-Wlong-long'
     Warn if 'long long' type is used.  This is enabled by either
     '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes.  To
     inhibit the warning messages, use '-Wno-long-long'.

'-Wvariadic-macros'
     Warn if variadic macros are used in ISO C90 mode, or if the GNU
     alternate syntax is used in ISO C99 mode.  This is enabled by
     either '-Wpedantic' or '-Wtraditional'.  To inhibit the warning
     messages, use '-Wno-variadic-macros'.

'-Wvarargs'
     Warn upon questionable usage of the macros used to handle variable
     arguments like 'va_start'.  This is default.  To inhibit the
     warning messages, use '-Wno-varargs'.

'-Wvector-operation-performance'
     Warn if vector operation is not implemented via SIMD capabilities
     of the architecture.  Mainly useful for the performance tuning.
     Vector operation can be implemented 'piecewise', which means that
     the scalar operation is performed on every vector element; 'in
     parallel', which means that the vector operation is implemented
     using scalars of wider type, which normally is more performance
     efficient; and 'as a single scalar', which means that vector fits
     into a scalar type.

'-Wno-virtual-move-assign'
     Suppress warnings about inheriting from a virtual base with a
     non-trivial C++11 move assignment operator.  This is dangerous
     because if the virtual base is reachable along more than one path,
     it is moved multiple times, which can mean both objects end up in
     the moved-from state.  If the move assignment operator is written
     to avoid moving from a moved-from object, this warning can be
     disabled.

'-Wvla'
     Warn if variable length array is used in the code.  '-Wno-vla'
     prevents the '-Wpedantic' warning of the variable length array.

'-Wvolatile-register-var'
     Warn if a register variable is declared volatile.  The volatile
     modifier does not inhibit all optimizations that may eliminate
     reads and/or writes to register variables.  This warning is enabled
     by '-Wall'.

'-Wdisabled-optimization'
     Warn if a requested optimization pass is disabled.  This warning
     does not generally indicate that there is anything wrong with your
     code; it merely indicates that GCC's optimizers are unable to
     handle the code effectively.  Often, the problem is that your code
     is too big or too complex; GCC refuses to optimize programs when
     the optimization itself is likely to take inordinate amounts of
     time.

'-Wpointer-sign (C and Objective-C only)'
     Warn for pointer argument passing or assignment with different
     signedness.  This option is only supported for C and Objective-C.
     It is implied by '-Wall' and by '-Wpedantic', which can be disabled
     with '-Wno-pointer-sign'.

'-Wstack-protector'
     This option is only active when '-fstack-protector' is active.  It
     warns about functions that are not protected against stack
     smashing.

'-Woverlength-strings'
     Warn about string constants that are longer than the "minimum
     maximum" length specified in the C standard.  Modern compilers
     generally allow string constants that are much longer than the
     standard's minimum limit, but very portable programs should avoid
     using longer strings.

     The limit applies _after_ string constant concatenation, and does
     not count the trailing NUL.  In C90, the limit was 509 characters;
     in C99, it was raised to 4095.  C++98 does not specify a normative
     minimum maximum, so we do not diagnose overlength strings in C++.

     This option is implied by '-Wpedantic', and can be disabled with
     '-Wno-overlength-strings'.

'-Wunsuffixed-float-constants (C and Objective-C only)'

     Issue a warning for any floating constant that does not have a
     suffix.  When used together with '-Wsystem-headers' it warns about
     such constants in system header files.  This can be useful when
     preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from
     the decimal floating-point extension to C99.

'-Wno-designated-init (C and Objective-C only)'
     Suppress warnings when a positional initializer is used to
     initialize a structure that has been marked with the
     'designated_init' attribute.


File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC

3.9 Options for Debugging Your Program or GCC
=============================================

GCC has various special options that are used for debugging either your
program or GCC:

'-g'
     Produce debugging information in the operating system's native
     format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
     debugging information.

     On most systems that use stabs format, '-g' enables use of extra
     debugging information that only GDB can use; this extra information
     makes debugging work better in GDB but probably makes other
     debuggers crash or refuse to read the program.  If you want to
     control for certain whether to generate the extra information, use
     '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see
     below).

     GCC allows you to use '-g' with '-O'.  The shortcuts taken by
     optimized code may occasionally produce surprising results: some
     variables you declared may not exist at all; flow of control may
     briefly move where you did not expect it; some statements may not
     be executed because they compute constant results or their values
     are already at hand; some statements may execute in different
     places because they have been moved out of loops.

     Nevertheless it proves possible to debug optimized output.  This
     makes it reasonable to use the optimizer for programs that might
     have bugs.

     The following options are useful when GCC is generated with the
     capability for more than one debugging format.

'-gsplit-dwarf'
     Separate as much dwarf debugging information as possible into a
     separate output file with the extension .dwo.  This option allows
     the build system to avoid linking files with debug information.  To
     be useful, this option requires a debugger capable of reading .dwo
     files.

'-ggdb'
     Produce debugging information for use by GDB.  This means to use
     the most expressive format available (DWARF 2, stabs, or the native
     format if neither of those are supported), including GDB extensions
     if at all possible.

'-gpubnames'
     Generate dwarf .debug_pubnames and .debug_pubtypes sections.

'-ggnu-pubnames'
     Generate .debug_pubnames and .debug_pubtypes sections in a format
     suitable for conversion into a GDB index.  This option is only
     useful with a linker that can produce GDB index version 7.

'-gstabs'
     Produce debugging information in stabs format (if that is
     supported), without GDB extensions.  This is the format used by DBX
     on most BSD systems.  On MIPS, Alpha and System V Release 4 systems
     this option produces stabs debugging output that is not understood
     by DBX or SDB.  On System V Release 4 systems this option requires
     the GNU assembler.

'-feliminate-unused-debug-symbols'
     Produce debugging information in stabs format (if that is
     supported), for only symbols that are actually used.

'-femit-class-debug-always'
     Instead of emitting debugging information for a C++ class in only
     one object file, emit it in all object files using the class.  This
     option should be used only with debuggers that are unable to handle
     the way GCC normally emits debugging information for classes
     because using this option increases the size of debugging
     information by as much as a factor of two.

'-fdebug-types-section'
     When using DWARF Version 4 or higher, type DIEs can be put into
     their own '.debug_types' section instead of making them part of the
     '.debug_info' section.  It is more efficient to put them in a
     separate comdat sections since the linker can then remove
     duplicates.  But not all DWARF consumers support '.debug_types'
     sections yet and on some objects '.debug_types' produces larger
     instead of smaller debugging information.

'-gstabs+'
     Produce debugging information in stabs format (if that is
     supported), using GNU extensions understood only by the GNU
     debugger (GDB).  The use of these extensions is likely to make
     other debuggers crash or refuse to read the program.

'-gcoff'
     Produce debugging information in COFF format (if that is
     supported).  This is the format used by SDB on most System V
     systems prior to System V Release 4.

'-gxcoff'
     Produce debugging information in XCOFF format (if that is
     supported).  This is the format used by the DBX debugger on IBM
     RS/6000 systems.

'-gxcoff+'
     Produce debugging information in XCOFF format (if that is
     supported), using GNU extensions understood only by the GNU
     debugger (GDB).  The use of these extensions is likely to make
     other debuggers crash or refuse to read the program, and may cause
     assemblers other than the GNU assembler (GAS) to fail with an
     error.

'-gdwarf-VERSION'
     Produce debugging information in DWARF format (if that is
     supported).  The value of VERSION may be either 2, 3, 4 or 5; the
     default version for most targets is 4.  DWARF Version 5 is only
     experimental.

     Note that with DWARF Version 2, some ports require and always use
     some non-conflicting DWARF 3 extensions in the unwind tables.

     Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for
     maximum benefit.

'-grecord-gcc-switches'
     This switch causes the command-line options used to invoke the
     compiler that may affect code generation to be appended to the
     DW_AT_producer attribute in DWARF debugging information.  The
     options are concatenated with spaces separating them from each
     other and from the compiler version.  See also
     '-frecord-gcc-switches' for another way of storing compiler options
     into the object file.  This is the default.

'-gno-record-gcc-switches'
     Disallow appending command-line options to the DW_AT_producer
     attribute in DWARF debugging information.

'-gstrict-dwarf'
     Disallow using extensions of later DWARF standard version than
     selected with '-gdwarf-VERSION'.  On most targets using
     non-conflicting DWARF extensions from later standard versions is
     allowed.

'-gno-strict-dwarf'
     Allow using extensions of later DWARF standard version than
     selected with '-gdwarf-VERSION'.

'-gz[=TYPE]'
     Produce compressed debug sections in DWARF format, if that is
     supported.  If TYPE is not given, the default type depends on the
     capabilities of the assembler and linker used.  TYPE may be one of
     'none' (don't compress debug sections), 'zlib' (use zlib
     compression in ELF gABI format), or 'zlib-gnu' (use zlib
     compression in traditional GNU format).  If the linker doesn't
     support writing compressed debug sections, the option is rejected.
     Otherwise, if the assembler does not support them, '-gz' is
     silently ignored when producing object files.

'-gvms'
     Produce debugging information in Alpha/VMS debug format (if that is
     supported).  This is the format used by DEBUG on Alpha/VMS systems.

'-gLEVEL'
'-ggdbLEVEL'
'-gstabsLEVEL'
'-gcoffLEVEL'
'-gxcoffLEVEL'
'-gvmsLEVEL'
     Request debugging information and also use LEVEL to specify how
     much information.  The default level is 2.

     Level 0 produces no debug information at all.  Thus, '-g0' negates
     '-g'.

     Level 1 produces minimal information, enough for making backtraces
     in parts of the program that you don't plan to debug.  This
     includes descriptions of functions and external variables, and line
     number tables, but no information about local variables.

     Level 3 includes extra information, such as all the macro
     definitions present in the program.  Some debuggers support macro
     expansion when you use '-g3'.

     '-gdwarf-2' does not accept a concatenated debug level, because GCC
     used to support an option '-gdwarf' that meant to generate debug
     information in version 1 of the DWARF format (which is very
     different from version 2), and it would have been too confusing.
     That debug format is long obsolete, but the option cannot be
     changed now.  Instead use an additional '-gLEVEL' option to change
     the debug level for DWARF.

'-gtoggle'
     Turn off generation of debug info, if leaving out this option
     generates it, or turn it on at level 2 otherwise.  The position of
     this argument in the command line does not matter; it takes effect
     after all other options are processed, and it does so only once, no
     matter how many times it is given.  This is mainly intended to be
     used with '-fcompare-debug'.

'-fsanitize=address'
     Enable AddressSanitizer, a fast memory error detector.  Memory
     access instructions are instrumented to detect out-of-bounds and
     use-after-free bugs.  See
     <http://code.google.com/p/address-sanitizer/> for more details.
     The run-time behavior can be influenced using the 'ASAN_OPTIONS'
     environment variable; see
     <https://code.google.com/p/address-sanitizer/wiki/Flags#Run-time_flags>
     for a list of supported options.

'-fsanitize=kernel-address'
     Enable AddressSanitizer for Linux kernel.  See
     <http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel>
     for more details.

'-fsanitize=thread'
     Enable ThreadSanitizer, a fast data race detector.  Memory access
     instructions are instrumented to detect data race bugs.  See
     <http://code.google.com/p/thread-sanitizer/> for more details.  The
     run-time behavior can be influenced using the 'TSAN_OPTIONS'
     environment variable; see
     <https://code.google.com/p/thread-sanitizer/wiki/Flags> for a list
     of supported options.

'-fsanitize=leak'
     Enable LeakSanitizer, a memory leak detector.  This option only
     matters for linking of executables and if neither
     '-fsanitize=address' nor '-fsanitize=thread' is used.  In that case
     the executable is linked against a library that overrides 'malloc'
     and other allocator functions.  See
     <https://code.google.com/p/address-sanitizer/wiki/LeakSanitizer>
     for more details.  The run-time behavior can be influenced using
     the 'LSAN_OPTIONS' environment variable.

'-fsanitize=undefined'
     Enable UndefinedBehaviorSanitizer, a fast undefined behavior
     detector.  Various computations are instrumented to detect
     undefined behavior at runtime.  Current suboptions are:

     '-fsanitize=shift'
          This option enables checking that the result of a shift
          operation is not undefined.  Note that what exactly is
          considered undefined differs slightly between C and C++, as
          well as between ISO C90 and C99, etc.

     '-fsanitize=integer-divide-by-zero'
          Detect integer division by zero as well as 'INT_MIN / -1'
          division.

     '-fsanitize=unreachable'
          With this option, the compiler turns the
          '__builtin_unreachable' call into a diagnostics message call
          instead.  When reaching the '__builtin_unreachable' call, the
          behavior is undefined.

     '-fsanitize=vla-bound'
          This option instructs the compiler to check that the size of a
          variable length array is positive.

     '-fsanitize=null'
          This option enables pointer checking.  Particularly, the
          application built with this option turned on will issue an
          error message when it tries to dereference a NULL pointer, or
          if a reference (possibly an rvalue reference) is bound to a
          NULL pointer, or if a method is invoked on an object pointed
          by a NULL pointer.

     '-fsanitize=return'
          This option enables return statement checking.  Programs built
          with this option turned on will issue an error message when
          the end of a non-void function is reached without actually
          returning a value.  This option works in C++ only.

     '-fsanitize=signed-integer-overflow'
          This option enables signed integer overflow checking.  We
          check that the result of '+', '*', and both unary and binary
          '-' does not overflow in the signed arithmetics.  Note,
          integer promotion rules must be taken into account.  That is,
          the following is not an overflow:
               signed char a = SCHAR_MAX;
               a++;

     '-fsanitize=bounds'
          This option enables instrumentation of array bounds.  Various
          out of bounds accesses are detected.  Flexible array members,
          flexible array member-like arrays, and initializers of
          variables with static storage are not instrumented.

     '-fsanitize=alignment'

          This option enables checking of alignment of pointers when
          they are dereferenced, or when a reference is bound to
          insufficiently aligned target, or when a method or constructor
          is invoked on insufficiently aligned object.

     '-fsanitize=object-size'
          This option enables instrumentation of memory references using
          the '__builtin_object_size' function.  Various out of bounds
          pointer accesses are detected.

     '-fsanitize=float-divide-by-zero'
          Detect floating-point division by zero.  Unlike other similar
          options, '-fsanitize=float-divide-by-zero' is not enabled by
          '-fsanitize=undefined', since floating-point division by zero
          can be a legitimate way of obtaining infinities and NaNs.

     '-fsanitize=float-cast-overflow'
          This option enables floating-point type to integer conversion
          checking.  We check that the result of the conversion does not
          overflow.  Unlike other similar options,
          '-fsanitize=float-cast-overflow' is not enabled by
          '-fsanitize=undefined'.  This option does not work well with
          'FE_INVALID' exceptions enabled.

     '-fsanitize=nonnull-attribute'

          This option enables instrumentation of calls, checking whether
          null values are not passed to arguments marked as requiring a
          non-null value by the 'nonnull' function attribute.

     '-fsanitize=returns-nonnull-attribute'

          This option enables instrumentation of return statements in
          functions marked with 'returns_nonnull' function attribute, to
          detect returning of null values from such functions.

     '-fsanitize=bool'

          This option enables instrumentation of loads from bool.  If a
          value other than 0/1 is loaded, a run-time error is issued.

     '-fsanitize=enum'

          This option enables instrumentation of loads from an enum
          type.  If a value outside the range of values for the enum
          type is loaded, a run-time error is issued.

     '-fsanitize=vptr'

          This option enables instrumentation of C++ member function
          calls, member accesses and some conversions between pointers
          to base and derived classes, to verify the referenced object
          has the correct dynamic type.

     While '-ftrapv' causes traps for signed overflows to be emitted,
     '-fsanitize=undefined' gives a diagnostic message.  This currently
     works only for the C family of languages.

'-fno-sanitize=all'

     This option disables all previously enabled sanitizers.
     '-fsanitize=all' is not allowed, as some sanitizers cannot be used
     together.

'-fasan-shadow-offset=NUMBER'
     This option forces GCC to use custom shadow offset in
     AddressSanitizer checks.  It is useful for experimenting with
     different shadow memory layouts in Kernel AddressSanitizer.

'-fsanitize-recover[=OPTS]'
     '-fsanitize-recover=' controls error recovery mode for sanitizers
     mentioned in comma-separated list of OPTS.  Enabling this option
     for a sanitizer component causes it to attempt to continue running
     the program as if no error happened.  This means multiple runtime
     errors can be reported in a single program run, and the exit code
     of the program may indicate success even when errors have been
     reported.  The '-fno-sanitize-recover=' option can be used to alter
     this behavior: only the first detected error is reported and
     program then exits with a non-zero exit code.

     Currently this feature only works for '-fsanitize=undefined' (and
     its suboptions except for '-fsanitize=unreachable' and
     '-fsanitize=return'), '-fsanitize=float-cast-overflow',
     '-fsanitize=float-divide-by-zero' and '-fsanitize=kernel-address'.
     For these sanitizers error recovery is turned on by default.
     '-fsanitize-recover=all' and '-fno-sanitize-recover=all' is also
     accepted, the former enables recovery for all sanitizers that
     support it, the latter disables recovery for all sanitizers that
     support it.

     Syntax without explicit OPTS parameter is deprecated.  It is
     equivalent to
          -fsanitize-recover=undefined,float-cast-overflow,float-divide-by-zero
     Similarly '-fno-sanitize-recover' is equivalent to
          -fno-sanitize-recover=undefined,float-cast-overflow,float-divide-by-zero

'-fsanitize-undefined-trap-on-error'
     The '-fsanitize-undefined-trap-on-error' option instructs the
     compiler to report undefined behavior using '__builtin_trap' rather
     than a 'libubsan' library routine.  The advantage of this is that
     the 'libubsan' library is not needed and is not linked in, so this
     is usable even in freestanding environments.

'-fcheck-pointer-bounds'
     Enable Pointer Bounds Checker instrumentation.  Each memory
     reference is instrumented with checks of the pointer used for
     memory access against bounds associated with that pointer.

     Currently there is only an implementation for Intel MPX available,
     thus x86 target and '-mmpx' are required to enable this feature.
     MPX-based instrumentation requires a runtime library to enable MPX
     in hardware and handle bounds violation signals.  By default when
     '-fcheck-pointer-bounds' and '-mmpx' options are used to link a
     program, the GCC driver links against the 'libmpx' runtime library
     and 'libmpxwrappers' library.  It also passes '-z bndplt' to a
     linker in case it supports this option (which is checked on libmpx
     configuration).  Note that old versions of linker may ignore
     option.  Gold linker doesn't support '-z bndplt' option.  With no
     '-z bndplt' support in linker all calls to dynamic libraries lose
     passed bounds reducing overall protection level.  It's highly
     recommended to use linker with '-z bndplt' support.  In case such
     linker is not available it is adviced to always use
     '-static-libmpxwrappers' for better protection level or use
     '-static' to completely avoid external calls to dynamic libraries.
     MPX-based instrumentation may be used for debugging and also may be
     included in production code to increase program security.
     Depending on usage, you may have different requirements for the
     runtime library.  The current version of the MPX runtime library is
     more oriented for use as a debugging tool.  MPX runtime library
     usage implies '-lpthread'.  See also '-static-libmpx'.  The runtime
     library behavior can be influenced using various 'CHKP_RT_*'
     environment variables.  See
     <https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler>
     for more details.

     Generated instrumentation may be controlled by various '-fchkp-*'
     options and by the 'bnd_variable_size' structure field attribute
     (*note Type Attributes::) and 'bnd_legacy', and 'bnd_instrument'
     function attributes (*note Function Attributes::).  GCC also
     provides a number of built-in functions for controlling the Pointer
     Bounds Checker.  *Note Pointer Bounds Checker builtins::, for more
     information.

'-fchkp-check-incomplete-type'
     Generate pointer bounds checks for variables with incomplete type.
     Enabled by default.

'-fchkp-narrow-bounds'
     Controls bounds used by Pointer Bounds Checker for pointers to
     object fields.  If narrowing is enabled then field bounds are used.
     Otherwise object bounds are used.  See also
     '-fchkp-narrow-to-innermost-array' and
     '-fchkp-first-field-has-own-bounds'.  Enabled by default.

'-fchkp-first-field-has-own-bounds'
     Forces Pointer Bounds Checker to use narrowed bounds for the
     address of the first field in the structure.  By default a pointer
     to the first field has the same bounds as a pointer to the whole
     structure.

'-fchkp-narrow-to-innermost-array'
     Forces Pointer Bounds Checker to use bounds of the innermost arrays
     in case of nested static array access.  By default this option is
     disabled and bounds of the outermost array are used.

'-fchkp-optimize'
     Enables Pointer Bounds Checker optimizations.  Enabled by default
     at optimization levels '-O', '-O2', '-O3'.

'-fchkp-use-fast-string-functions'
     Enables use of '*_nobnd' versions of string functions (not copying
     bounds) by Pointer Bounds Checker.  Disabled by default.

'-fchkp-use-nochk-string-functions'
     Enables use of '*_nochk' versions of string functions (not checking
     bounds) by Pointer Bounds Checker.  Disabled by default.

'-fchkp-use-static-bounds'
     Allow Pointer Bounds Checker to generate static bounds holding
     bounds of static variables.  Enabled by default.

'-fchkp-use-static-const-bounds'
     Use statically-initialized bounds for constant bounds instead of
     generating them each time they are required.  By default enabled
     when '-fchkp-use-static-bounds' is enabled.

'-fchkp-treat-zero-dynamic-size-as-infinite'
     With this option, objects with incomplete type whose
     dynamically-obtained size is zero are treated as having infinite
     size instead by Pointer Bounds Checker.  This option may be helpful
     if a program is linked with a library missing size information for
     some symbols.  Disabled by default.

'-fchkp-check-read'
     Instructs Pointer Bounds Checker to generate checks for all read
     accesses to memory.  Enabled by default.

'-fchkp-check-write'
     Instructs Pointer Bounds Checker to generate checks for all write
     accesses to memory.  Enabled by default.

'-fchkp-store-bounds'
     Instructs Pointer Bounds Checker to generate bounds stores for
     pointer writes.  Enabled by default.

'-fchkp-instrument-calls'
     Instructs Pointer Bounds Checker to pass pointer bounds to calls.
     Enabled by default.

'-fchkp-instrument-marked-only'
     Instructs Pointer Bounds Checker to instrument only functions
     marked with the 'bnd_instrument' attribute (*note Function
     Attributes::).  Disabled by default.

'-fchkp-use-wrappers'
     Allows Pointer Bounds Checker to replace calls to built-in
     functions with calls to wrapper functions.  When
     '-fchkp-use-wrappers' is used to link a program, the GCC driver
     automatically links against 'libmpxwrappers'.  See also
     '-static-libmpxwrappers'.  Enabled by default.

'-fdump-final-insns[=FILE]'
     Dump the final internal representation (RTL) to FILE.  If the
     optional argument is omitted (or if FILE is '.'), the name of the
     dump file is determined by appending '.gkd' to the compilation
     output file name.

'-fcompare-debug[=OPTS]'
     If no error occurs during compilation, run the compiler a second
     time, adding OPTS and '-fcompare-debug-second' to the arguments
     passed to the second compilation.  Dump the final internal
     representation in both compilations, and print an error if they
     differ.

     If the equal sign is omitted, the default '-gtoggle' is used.

     The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty
     and nonzero, implicitly enables '-fcompare-debug'.  If
     'GCC_COMPARE_DEBUG' is defined to a string starting with a dash,
     then it is used for OPTS, otherwise the default '-gtoggle' is used.

     '-fcompare-debug=', with the equal sign but without OPTS, is
     equivalent to '-fno-compare-debug', which disables the dumping of
     the final representation and the second compilation, preventing
     even 'GCC_COMPARE_DEBUG' from taking effect.

     To verify full coverage during '-fcompare-debug' testing, set
     'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which
     GCC rejects as an invalid option in any actual compilation (rather
     than preprocessing, assembly or linking).  To get just a warning,
     setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden'
     will do.

'-fcompare-debug-second'
     This option is implicitly passed to the compiler for the second
     compilation requested by '-fcompare-debug', along with options to
     silence warnings, and omitting other options that would cause
     side-effect compiler outputs to files or to the standard output.
     Dump files and preserved temporary files are renamed so as to
     contain the '.gk' additional extension during the second
     compilation, to avoid overwriting those generated by the first.

     When this option is passed to the compiler driver, it causes the
     _first_ compilation to be skipped, which makes it useful for little
     other than debugging the compiler proper.

'-feliminate-dwarf2-dups'
     Compress DWARF 2 debugging information by eliminating duplicated
     information about each symbol.  This option only makes sense when
     generating DWARF 2 debugging information with '-gdwarf-2'.

'-femit-struct-debug-baseonly'
     Emit debug information for struct-like types only when the base
     name of the compilation source file matches the base name of file
     in which the struct is defined.

     This option substantially reduces the size of debugging
     information, but at significant potential loss in type information
     to the debugger.  See '-femit-struct-debug-reduced' for a less
     aggressive option.  See '-femit-struct-debug-detailed' for more
     detailed control.

     This option works only with DWARF 2.

'-femit-struct-debug-reduced'
     Emit debug information for struct-like types only when the base
     name of the compilation source file matches the base name of file
     in which the type is defined, unless the struct is a template or
     defined in a system header.

     This option significantly reduces the size of debugging
     information, with some potential loss in type information to the
     debugger.  See '-femit-struct-debug-baseonly' for a more aggressive
     option.  See '-femit-struct-debug-detailed' for more detailed
     control.

     This option works only with DWARF 2.

'-femit-struct-debug-detailed[=SPEC-LIST]'
     Specify the struct-like types for which the compiler generates
     debug information.  The intent is to reduce duplicate struct debug
     information between different object files within the same program.

     This option is a detailed version of '-femit-struct-debug-reduced'
     and '-femit-struct-debug-baseonly', which serves for most needs.

     A specification has the syntax
     ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none')

     The optional first word limits the specification to structs that
     are used directly ('dir:') or used indirectly ('ind:').  A struct
     type is used directly when it is the type of a variable, member.
     Indirect uses arise through pointers to structs.  That is, when use
     of an incomplete struct is valid, the use is indirect.  An example
     is 'struct one direct; struct two * indirect;'.

     The optional second word limits the specification to ordinary
     structs ('ord:') or generic structs ('gen:').  Generic structs are
     a bit complicated to explain.  For C++, these are non-explicit
     specializations of template classes, or non-template classes within
     the above.  Other programming languages have generics, but
     '-femit-struct-debug-detailed' does not yet implement them.

     The third word specifies the source files for those structs for
     which the compiler should emit debug information.  The values
     'none' and 'any' have the normal meaning.  The value 'base' means
     that the base of name of the file in which the type declaration
     appears must match the base of the name of the main compilation
     file.  In practice, this means that when compiling 'foo.c', debug
     information is generated for types declared in that file and
     'foo.h', but not other header files.  The value 'sys' means those
     types satisfying 'base' or declared in system or compiler headers.

     You may need to experiment to determine the best settings for your
     application.

     The default is '-femit-struct-debug-detailed=all'.

     This option works only with DWARF 2.

'-fno-merge-debug-strings'
     Direct the linker to not merge together strings in the debugging
     information that are identical in different object files.  Merging
     is not supported by all assemblers or linkers.  Merging decreases
     the size of the debug information in the output file at the cost of
     increasing link processing time.  Merging is enabled by default.

'-fdebug-prefix-map=OLD=NEW'
     When compiling files in directory 'OLD', record debugging
     information describing them as in 'NEW' instead.

'-fno-dwarf2-cfi-asm'
     Emit DWARF 2 unwind info as compiler generated '.eh_frame' section
     instead of using GAS '.cfi_*' directives.

'-p'
     Generate extra code to write profile information suitable for the
     analysis program 'prof'.  You must use this option when compiling
     the source files you want data about, and you must also use it when
     linking.

'-pg'
     Generate extra code to write profile information suitable for the
     analysis program 'gprof'.  You must use this option when compiling
     the source files you want data about, and you must also use it when
     linking.

'-Q'
     Makes the compiler print out each function name as it is compiled,
     and print some statistics about each pass when it finishes.

'-ftime-report'
     Makes the compiler print some statistics about the time consumed by
     each pass when it finishes.

'-fmem-report'
     Makes the compiler print some statistics about permanent memory
     allocation when it finishes.

'-fmem-report-wpa'
     Makes the compiler print some statistics about permanent memory
     allocation for the WPA phase only.

'-fpre-ipa-mem-report'
'-fpost-ipa-mem-report'
     Makes the compiler print some statistics about permanent memory
     allocation before or after interprocedural optimization.

'-fprofile-report'
     Makes the compiler print some statistics about consistency of the
     (estimated) profile and effect of individual passes.

'-fstack-usage'
     Makes the compiler output stack usage information for the program,
     on a per-function basis.  The filename for the dump is made by
     appending '.su' to the AUXNAME.  AUXNAME is generated from the name
     of the output file, if explicitly specified and it is not an
     executable, otherwise it is the basename of the source file.  An
     entry is made up of three fields:

        * The name of the function.
        * A number of bytes.
        * One or more qualifiers: 'static', 'dynamic', 'bounded'.

     The qualifier 'static' means that the function manipulates the
     stack statically: a fixed number of bytes are allocated for the
     frame on function entry and released on function exit; no stack
     adjustments are otherwise made in the function.  The second field
     is this fixed number of bytes.

     The qualifier 'dynamic' means that the function manipulates the
     stack dynamically: in addition to the static allocation described
     above, stack adjustments are made in the body of the function, for
     example to push/pop arguments around function calls.  If the
     qualifier 'bounded' is also present, the amount of these
     adjustments is bounded at compile time and the second field is an
     upper bound of the total amount of stack used by the function.  If
     it is not present, the amount of these adjustments is not bounded
     at compile time and the second field only represents the bounded
     part.

'-fprofile-arcs'
     Add code so that program flow "arcs" are instrumented.  During
     execution the program records how many times each branch and call
     is executed and how many times it is taken or returns.  When the
     compiled program exits it saves this data to a file called
     'AUXNAME.gcda' for each source file.  The data may be used for
     profile-directed optimizations ('-fbranch-probabilities'), or for
     test coverage analysis ('-ftest-coverage').  Each object file's
     AUXNAME is generated from the name of the output file, if
     explicitly specified and it is not the final executable, otherwise
     it is the basename of the source file.  In both cases any suffix is
     removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or
     'dir/foo.gcda' for output file specified as '-o dir/foo.o').  *Note
     Cross-profiling::.

'--coverage'

     This option is used to compile and link code instrumented for
     coverage analysis.  The option is a synonym for '-fprofile-arcs'
     '-ftest-coverage' (when compiling) and '-lgcov' (when linking).
     See the documentation for those options for more details.

        * Compile the source files with '-fprofile-arcs' plus
          optimization and code generation options.  For test coverage
          analysis, use the additional '-ftest-coverage' option.  You do
          not need to profile every source file in a program.

        * Link your object files with '-lgcov' or '-fprofile-arcs' (the
          latter implies the former).

        * Run the program on a representative workload to generate the
          arc profile information.  This may be repeated any number of
          times.  You can run concurrent instances of your program, and
          provided that the file system supports locking, the data files
          will be correctly updated.  Also 'fork' calls are detected and
          correctly handled (double counting will not happen).

        * For profile-directed optimizations, compile the source files
          again with the same optimization and code generation options
          plus '-fbranch-probabilities' (*note Options that Control
          Optimization: Optimize Options.).

        * For test coverage analysis, use 'gcov' to produce human
          readable information from the '.gcno' and '.gcda' files.
          Refer to the 'gcov' documentation for further information.

     With '-fprofile-arcs', for each function of your program GCC
     creates a program flow graph, then finds a spanning tree for the
     graph.  Only arcs that are not on the spanning tree have to be
     instrumented: the compiler adds code to count the number of times
     that these arcs are executed.  When an arc is the only exit or only
     entrance to a block, the instrumentation code can be added to the
     block; otherwise, a new basic block must be created to hold the
     instrumentation code.

'-ftest-coverage'
     Produce a notes file that the 'gcov' code-coverage utility (*note
     'gcov'--a Test Coverage Program: Gcov.) can use to show program
     coverage.  Each source file's note file is called 'AUXNAME.gcno'.
     Refer to the '-fprofile-arcs' option above for a description of
     AUXNAME and instructions on how to generate test coverage data.
     Coverage data matches the source files more closely if you do not
     optimize.

'-fdbg-cnt-list'
     Print the name and the counter upper bound for all debug counters.

'-fdbg-cnt=COUNTER-VALUE-LIST'
     Set the internal debug counter upper bound.  COUNTER-VALUE-LIST is
     a comma-separated list of NAME:VALUE pairs which sets the upper
     bound of each debug counter NAME to VALUE.  All debug counters have
     the initial upper bound of 'UINT_MAX'; thus 'dbg_cnt' returns true
     always unless the upper bound is set by this option.  For example,
     with '-fdbg-cnt=dce:10,tail_call:0', 'dbg_cnt(dce)' returns true
     only for first 10 invocations.

'-fenable-KIND-PASS'
'-fdisable-KIND-PASS=RANGE-LIST'

     This is a set of options that are used to explicitly disable/enable
     optimization passes.  These options are intended for use for
     debugging GCC. Compiler users should use regular options for
     enabling/disabling passes instead.

     '-fdisable-ipa-PASS'
          Disable IPA pass PASS.  PASS is the pass name.  If the same
          pass is statically invoked in the compiler multiple times, the
          pass name should be appended with a sequential number starting
          from 1.

     '-fdisable-rtl-PASS'
     '-fdisable-rtl-PASS=RANGE-LIST'
          Disable RTL pass PASS.  PASS is the pass name.  If the same
          pass is statically invoked in the compiler multiple times, the
          pass name should be appended with a sequential number starting
          from 1.  RANGE-LIST is a comma-separated list of function
          ranges or assembler names.  Each range is a number pair
          separated by a colon.  The range is inclusive in both ends.
          If the range is trivial, the number pair can be simplified as
          a single number.  If the function's call graph node's UID
          falls within one of the specified ranges, the PASS is disabled
          for that function.  The UID is shown in the function header of
          a dump file, and the pass names can be dumped by using option
          '-fdump-passes'.

     '-fdisable-tree-PASS'
     '-fdisable-tree-PASS=RANGE-LIST'
          Disable tree pass PASS.  See '-fdisable-rtl' for the
          description of option arguments.

     '-fenable-ipa-PASS'
          Enable IPA pass PASS.  PASS is the pass name.  If the same
          pass is statically invoked in the compiler multiple times, the
          pass name should be appended with a sequential number starting
          from 1.

     '-fenable-rtl-PASS'
     '-fenable-rtl-PASS=RANGE-LIST'
          Enable RTL pass PASS.  See '-fdisable-rtl' for option argument
          description and examples.

     '-fenable-tree-PASS'
     '-fenable-tree-PASS=RANGE-LIST'
          Enable tree pass PASS.  See '-fdisable-rtl' for the
          description of option arguments.

     Here are some examples showing uses of these options.


          # disable ccp1 for all functions
             -fdisable-tree-ccp1
          # disable complete unroll for function whose cgraph node uid is 1
             -fenable-tree-cunroll=1
          # disable gcse2 for functions at the following ranges [1,1],
          # [300,400], and [400,1000]
          # disable gcse2 for functions foo and foo2
             -fdisable-rtl-gcse2=foo,foo2
          # disable early inlining
             -fdisable-tree-einline
          # disable ipa inlining
             -fdisable-ipa-inline
          # enable tree full unroll
             -fenable-tree-unroll


'-dLETTERS'
'-fdump-rtl-PASS'
'-fdump-rtl-PASS=FILENAME'
     Says to make debugging dumps during compilation at times specified
     by LETTERS.  This is used for debugging the RTL-based passes of the
     compiler.  The file names for most of the dumps are made by
     appending a pass number and a word to the DUMPNAME, and the files
     are created in the directory of the output file.  In case of
     '=FILENAME' option, the dump is output on the given file instead of
     the pass numbered dump files.  Note that the pass number is
     computed statically as passes get registered into the pass manager.
     Thus the numbering is not related to the dynamic order of execution
     of passes.  In particular, a pass installed by a plugin could have
     a number over 200 even if it executed quite early.  DUMPNAME is
     generated from the name of the output file, if explicitly specified
     and it is not an executable, otherwise it is the basename of the
     source file.  These switches may have different effects when '-E'
     is used for preprocessing.

     Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d'
     option LETTERS.  Here are the possible letters for use in PASS and
     LETTERS, and their meanings:

     '-fdump-rtl-alignments'
          Dump after branch alignments have been computed.

     '-fdump-rtl-asmcons'
          Dump after fixing rtl statements that have unsatisfied in/out
          constraints.

     '-fdump-rtl-auto_inc_dec'
          Dump after auto-inc-dec discovery.  This pass is only run on
          architectures that have auto inc or auto dec instructions.

     '-fdump-rtl-barriers'
          Dump after cleaning up the barrier instructions.

     '-fdump-rtl-bbpart'
          Dump after partitioning hot and cold basic blocks.

     '-fdump-rtl-bbro'
          Dump after block reordering.

     '-fdump-rtl-btl1'
     '-fdump-rtl-btl2'
          '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after
          the two branch target load optimization passes.

     '-fdump-rtl-bypass'
          Dump after jump bypassing and control flow optimizations.

     '-fdump-rtl-combine'
          Dump after the RTL instruction combination pass.

     '-fdump-rtl-compgotos'
          Dump after duplicating the computed gotos.

     '-fdump-rtl-ce1'
     '-fdump-rtl-ce2'
     '-fdump-rtl-ce3'
          '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3'
          enable dumping after the three if conversion passes.

     '-fdump-rtl-cprop_hardreg'
          Dump after hard register copy propagation.

     '-fdump-rtl-csa'
          Dump after combining stack adjustments.

     '-fdump-rtl-cse1'
     '-fdump-rtl-cse2'
          '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after
          the two common subexpression elimination passes.

     '-fdump-rtl-dce'
          Dump after the standalone dead code elimination passes.

     '-fdump-rtl-dbr'
          Dump after delayed branch scheduling.

     '-fdump-rtl-dce1'
     '-fdump-rtl-dce2'
          '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after
          the two dead store elimination passes.

     '-fdump-rtl-eh'
          Dump after finalization of EH handling code.

     '-fdump-rtl-eh_ranges'
          Dump after conversion of EH handling range regions.

     '-fdump-rtl-expand'
          Dump after RTL generation.

     '-fdump-rtl-fwprop1'
     '-fdump-rtl-fwprop2'
          '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping
          after the two forward propagation passes.

     '-fdump-rtl-gcse1'
     '-fdump-rtl-gcse2'
          '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after
          global common subexpression elimination.

     '-fdump-rtl-init-regs'
          Dump after the initialization of the registers.

     '-fdump-rtl-initvals'
          Dump after the computation of the initial value sets.

     '-fdump-rtl-into_cfglayout'
          Dump after converting to cfglayout mode.

     '-fdump-rtl-ira'
          Dump after iterated register allocation.

     '-fdump-rtl-jump'
          Dump after the second jump optimization.

     '-fdump-rtl-loop2'
          '-fdump-rtl-loop2' enables dumping after the rtl loop
          optimization passes.

     '-fdump-rtl-mach'
          Dump after performing the machine dependent reorganization
          pass, if that pass exists.

     '-fdump-rtl-mode_sw'
          Dump after removing redundant mode switches.

     '-fdump-rtl-rnreg'
          Dump after register renumbering.

     '-fdump-rtl-outof_cfglayout'
          Dump after converting from cfglayout mode.

     '-fdump-rtl-peephole2'
          Dump after the peephole pass.

     '-fdump-rtl-postreload'
          Dump after post-reload optimizations.

     '-fdump-rtl-pro_and_epilogue'
          Dump after generating the function prologues and epilogues.

     '-fdump-rtl-sched1'
     '-fdump-rtl-sched2'
          '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping
          after the basic block scheduling passes.

     '-fdump-rtl-ree'
          Dump after sign/zero extension elimination.

     '-fdump-rtl-seqabstr'
          Dump after common sequence discovery.

     '-fdump-rtl-shorten'
          Dump after shortening branches.

     '-fdump-rtl-sibling'
          Dump after sibling call optimizations.

     '-fdump-rtl-split1'
     '-fdump-rtl-split2'
     '-fdump-rtl-split3'
     '-fdump-rtl-split4'
     '-fdump-rtl-split5'
          These options enable dumping after five rounds of instruction
          splitting.

     '-fdump-rtl-sms'
          Dump after modulo scheduling.  This pass is only run on some
          architectures.

     '-fdump-rtl-stack'
          Dump after conversion from GCC's "flat register file"
          registers to the x87's stack-like registers.  This pass is
          only run on x86 variants.

     '-fdump-rtl-subreg1'
     '-fdump-rtl-subreg2'
          '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping
          after the two subreg expansion passes.

     '-fdump-rtl-unshare'
          Dump after all rtl has been unshared.

     '-fdump-rtl-vartrack'
          Dump after variable tracking.

     '-fdump-rtl-vregs'
          Dump after converting virtual registers to hard registers.

     '-fdump-rtl-web'
          Dump after live range splitting.

     '-fdump-rtl-regclass'
     '-fdump-rtl-subregs_of_mode_init'
     '-fdump-rtl-subregs_of_mode_finish'
     '-fdump-rtl-dfinit'
     '-fdump-rtl-dfinish'
          These dumps are defined but always produce empty files.

     '-da'
     '-fdump-rtl-all'
          Produce all the dumps listed above.

     '-dA'
          Annotate the assembler output with miscellaneous debugging
          information.

     '-dD'
          Dump all macro definitions, at the end of preprocessing, in
          addition to normal output.

     '-dH'
          Produce a core dump whenever an error occurs.

     '-dp'
          Annotate the assembler output with a comment indicating which
          pattern and alternative is used.  The length of each
          instruction is also printed.

     '-dP'
          Dump the RTL in the assembler output as a comment before each
          instruction.  Also turns on '-dp' annotation.

     '-dx'
          Just generate RTL for a function instead of compiling it.
          Usually used with '-fdump-rtl-expand'.

'-fdump-noaddr'
     When doing debugging dumps, suppress address output.  This makes it
     more feasible to use diff on debugging dumps for compiler
     invocations with different compiler binaries and/or different text
     / bss / data / heap / stack / dso start locations.

'-freport-bug'
     Collect and dump debug information into temporary file if ICE in
     C/C++ compiler occured.

'-fdump-unnumbered'
     When doing debugging dumps, suppress instruction numbers and
     address output.  This makes it more feasible to use diff on
     debugging dumps for compiler invocations with different options, in
     particular with and without '-g'.

'-fdump-unnumbered-links'
     When doing debugging dumps (see '-d' option above), suppress
     instruction numbers for the links to the previous and next
     instructions in a sequence.

'-fdump-translation-unit (C++ only)'
'-fdump-translation-unit-OPTIONS (C++ only)'
     Dump a representation of the tree structure for the entire
     translation unit to a file.  The file name is made by appending
     '.tu' to the source file name, and the file is created in the same
     directory as the output file.  If the '-OPTIONS' form is used,
     OPTIONS controls the details of the dump as described for the
     '-fdump-tree' options.

'-fdump-class-hierarchy (C++ only)'
'-fdump-class-hierarchy-OPTIONS (C++ only)'
     Dump a representation of each class's hierarchy and virtual
     function table layout to a file.  The file name is made by
     appending '.class' to the source file name, and the file is created
     in the same directory as the output file.  If the '-OPTIONS' form
     is used, OPTIONS controls the details of the dump as described for
     the '-fdump-tree' options.

'-fdump-ipa-SWITCH'
     Control the dumping at various stages of inter-procedural analysis
     language tree to a file.  The file name is generated by appending a
     switch specific suffix to the source file name, and the file is
     created in the same directory as the output file.  The following
     dumps are possible:

     'all'
          Enables all inter-procedural analysis dumps.

     'cgraph'
          Dumps information about call-graph optimization, unused
          function removal, and inlining decisions.

     'inline'
          Dump after function inlining.

'-fdump-passes'
     Dump the list of optimization passes that are turned on and off by
     the current command-line options.

'-fdump-statistics-OPTION'
     Enable and control dumping of pass statistics in a separate file.
     The file name is generated by appending a suffix ending in
     '.statistics' to the source file name, and the file is created in
     the same directory as the output file.  If the '-OPTION' form is
     used, '-stats' causes counters to be summed over the whole
     compilation unit while '-details' dumps every event as the passes
     generate them.  The default with no option is to sum counters for
     each function compiled.

'-fdump-tree-SWITCH'
'-fdump-tree-SWITCH-OPTIONS'
'-fdump-tree-SWITCH-OPTIONS=FILENAME'
     Control the dumping at various stages of processing the
     intermediate language tree to a file.  The file name is generated
     by appending a switch-specific suffix to the source file name, and
     the file is created in the same directory as the output file.  In
     case of '=FILENAME' option, the dump is output on the given file
     instead of the auto named dump files.  If the '-OPTIONS' form is
     used, OPTIONS is a list of '-' separated options which control the
     details of the dump.  Not all options are applicable to all dumps;
     those that are not meaningful are ignored.  The following options
     are available

     'address'
          Print the address of each node.  Usually this is not
          meaningful as it changes according to the environment and
          source file.  Its primary use is for tying up a dump file with
          a debug environment.
     'asmname'
          If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use
          that in the dump instead of 'DECL_NAME'.  Its primary use is
          ease of use working backward from mangled names in the
          assembly file.
     'slim'
          When dumping front-end intermediate representations, inhibit
          dumping of members of a scope or body of a function merely
          because that scope has been reached.  Only dump such items
          when they are directly reachable by some other path.

          When dumping pretty-printed trees, this option inhibits
          dumping the bodies of control structures.

          When dumping RTL, print the RTL in slim (condensed) form
          instead of the default LISP-like representation.
     'raw'
          Print a raw representation of the tree.  By default, trees are
          pretty-printed into a C-like representation.
     'details'
          Enable more detailed dumps (not honored by every dump option).
          Also include information from the optimization passes.
     'stats'
          Enable dumping various statistics about the pass (not honored
          by every dump option).
     'blocks'
          Enable showing basic block boundaries (disabled in raw dumps).
     'graph'
          For each of the other indicated dump files
          ('-fdump-rtl-PASS'), dump a representation of the control flow
          graph suitable for viewing with GraphViz to
          'FILE.PASSID.PASS.dot'.  Each function in the file is
          pretty-printed as a subgraph, so that GraphViz can render them
          all in a single plot.

          This option currently only works for RTL dumps, and the RTL is
          always dumped in slim form.
     'vops'
          Enable showing virtual operands for every statement.
     'lineno'
          Enable showing line numbers for statements.
     'uid'
          Enable showing the unique ID ('DECL_UID') for each variable.
     'verbose'
          Enable showing the tree dump for each statement.
     'eh'
          Enable showing the EH region number holding each statement.
     'scev'
          Enable showing scalar evolution analysis details.
     'optimized'
          Enable showing optimization information (only available in
          certain passes).
     'missed'
          Enable showing missed optimization information (only available
          in certain passes).
     'note'
          Enable other detailed optimization information (only available
          in certain passes).
     '=FILENAME'
          Instead of an auto named dump file, output into the given file
          name.  The file names 'stdout' and 'stderr' are treated
          specially and are considered already open standard streams.
          For example,

               gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
                    -fdump-tree-pre=stderr file.c

          outputs vectorizer dump into 'foo.dump', while the PRE dump is
          output on to 'stderr'.  If two conflicting dump filenames are
          given for the same pass, then the latter option overrides the
          earlier one.

     'all'
          Turn on all options, except 'raw', 'slim', 'verbose' and
          'lineno'.

     'optall'
          Turn on all optimization options, i.e., 'optimized', 'missed',
          and 'note'.

     The following tree dumps are possible:

     'original'
          Dump before any tree based optimization, to 'FILE.original'.

     'optimized'
          Dump after all tree based optimization, to 'FILE.optimized'.

     'gimple'
          Dump each function before and after the gimplification pass to
          a file.  The file name is made by appending '.gimple' to the
          source file name.

     'cfg'
          Dump the control flow graph of each function to a file.  The
          file name is made by appending '.cfg' to the source file name.

     'ch'
          Dump each function after copying loop headers.  The file name
          is made by appending '.ch' to the source file name.

     'ssa'
          Dump SSA related information to a file.  The file name is made
          by appending '.ssa' to the source file name.

     'alias'
          Dump aliasing information for each function.  The file name is
          made by appending '.alias' to the source file name.

     'ccp'
          Dump each function after CCP.  The file name is made by
          appending '.ccp' to the source file name.

     'storeccp'
          Dump each function after STORE-CCP.  The file name is made by
          appending '.storeccp' to the source file name.

     'pre'
          Dump trees after partial redundancy elimination.  The file
          name is made by appending '.pre' to the source file name.

     'fre'
          Dump trees after full redundancy elimination.  The file name
          is made by appending '.fre' to the source file name.

     'copyprop'
          Dump trees after copy propagation.  The file name is made by
          appending '.copyprop' to the source file name.

     'store_copyprop'
          Dump trees after store copy-propagation.  The file name is
          made by appending '.store_copyprop' to the source file name.

     'dce'
          Dump each function after dead code elimination.  The file name
          is made by appending '.dce' to the source file name.

     'sra'
          Dump each function after performing scalar replacement of
          aggregates.  The file name is made by appending '.sra' to the
          source file name.

     'sink'
          Dump each function after performing code sinking.  The file
          name is made by appending '.sink' to the source file name.

     'dom'
          Dump each function after applying dominator tree
          optimizations.  The file name is made by appending '.dom' to
          the source file name.

     'dse'
          Dump each function after applying dead store elimination.  The
          file name is made by appending '.dse' to the source file name.

     'phiopt'
          Dump each function after optimizing PHI nodes into
          straightline code.  The file name is made by appending
          '.phiopt' to the source file name.

     'forwprop'
          Dump each function after forward propagating single use
          variables.  The file name is made by appending '.forwprop' to
          the source file name.

     'copyrename'
          Dump each function after applying the copy rename
          optimization.  The file name is made by appending
          '.copyrename' to the source file name.

     'nrv'
          Dump each function after applying the named return value
          optimization on generic trees.  The file name is made by
          appending '.nrv' to the source file name.

     'vect'
          Dump each function after applying vectorization of loops.  The
          file name is made by appending '.vect' to the source file
          name.

     'slp'
          Dump each function after applying vectorization of basic
          blocks.  The file name is made by appending '.slp' to the
          source file name.

     'vrp'
          Dump each function after Value Range Propagation (VRP). The
          file name is made by appending '.vrp' to the source file name.

     'all'
          Enable all the available tree dumps with the flags provided in
          this option.

'-fopt-info'
'-fopt-info-OPTIONS'
'-fopt-info-OPTIONS=FILENAME'
     Controls optimization dumps from various optimization passes.  If
     the '-OPTIONS' form is used, OPTIONS is a list of '-' separated
     option keywords to select the dump details and optimizations.

     The OPTIONS can be divided into two groups: options describing the
     verbosity of the dump, and options describing which optimizations
     should be included.  The options from both the groups can be freely
     mixed as they are non-overlapping.  However, in case of any
     conflicts, the later options override the earlier options on the
     command line.

     The following options control the dump verbosity:

     'optimized'
          Print information when an optimization is successfully
          applied.  It is up to a pass to decide which information is
          relevant.  For example, the vectorizer passes print the source
          location of loops which are successfully vectorized.
     'missed'
          Print information about missed optimizations.  Individual
          passes control which information to include in the output.
     'note'
          Print verbose information about optimizations, such as certain
          transformations, more detailed messages about decisions etc.
     'all'
          Print detailed optimization information.  This includes
          'optimized', 'missed', and 'note'.

     One or more of the following option keywords can be used to
     describe a group of optimizations:

     'ipa'
          Enable dumps from all interprocedural optimizations.
     'loop'
          Enable dumps from all loop optimizations.
     'inline'
          Enable dumps from all inlining optimizations.
     'vec'
          Enable dumps from all vectorization optimizations.
     'optall'
          Enable dumps from all optimizations.  This is a superset of
          the optimization groups listed above.

     If OPTIONS is omitted, it defaults to 'optimized-optall', which
     means to dump all info about successful optimizations from all the
     passes.

     If the FILENAME is provided, then the dumps from all the applicable
     optimizations are concatenated into the FILENAME.  Otherwise the
     dump is output onto 'stderr'.  Though multiple '-fopt-info' options
     are accepted, only one of them can include a FILENAME.  If other
     filenames are provided then all but the first such option are
     ignored.

     Note that the output FILENAME is overwritten in case of multiple
     translation units.  If a combined output from multiple translation
     units is desired, 'stderr' should be used instead.

     In the following example, the optimization info is output to
     'stderr':

          gcc -O3 -fopt-info

     This example:
          gcc -O3 -fopt-info-missed=missed.all

     outputs missed optimization report from all the passes into
     'missed.all', and this one:

          gcc -O2 -ftree-vectorize -fopt-info-vec-missed

     prints information about missed optimization opportunities from
     vectorization passes on 'stderr'.  Note that
     '-fopt-info-vec-missed' is equivalent to '-fopt-info-missed-vec'.

     As another example,
          gcc -O3 -fopt-info-inline-optimized-missed=inline.txt

     outputs information about missed optimizations as well as optimized
     locations from all the inlining passes into 'inline.txt'.

     Finally, consider:

          gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt

     Here the two output filenames 'vec.miss' and 'loop.opt' are in
     conflict since only one output file is allowed.  In this case, only
     the first option takes effect and the subsequent options are
     ignored.  Thus only 'vec.miss' is produced which contains dumps
     from the vectorizer about missed opportunities.

'-frandom-seed=NUMBER'
     This option provides a seed that GCC uses in place of random
     numbers in generating certain symbol names that have to be
     different in every compiled file.  It is also used to place unique
     stamps in coverage data files and the object files that produce
     them.  You can use the '-frandom-seed' option to produce
     reproducibly identical object files.

     The NUMBER should be different for every file you compile.

'-fsched-verbose=N'
     On targets that use instruction scheduling, this option controls
     the amount of debugging output the scheduler prints.  This
     information is written to standard error, unless
     '-fdump-rtl-sched1' or '-fdump-rtl-sched2' is specified, in which
     case it is output to the usual dump listing file, '.sched1' or
     '.sched2' respectively.  However for N greater than nine, the
     output is always printed to standard error.

     For N greater than zero, '-fsched-verbose' outputs the same
     information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'.  For N
     greater than one, it also output basic block probabilities,
     detailed ready list information and unit/insn info.  For N greater
     than two, it includes RTL at abort point, control-flow and regions
     info.  And for N over four, '-fsched-verbose' also includes
     dependence info.

'-save-temps'
'-save-temps=cwd'
     Store the usual "temporary" intermediate files permanently; place
     them in the current directory and name them based on the source
     file.  Thus, compiling 'foo.c' with '-c -save-temps' produces files
     'foo.i' and 'foo.s', as well as 'foo.o'.  This creates a
     preprocessed 'foo.i' output file even though the compiler now
     normally uses an integrated preprocessor.

     When used in combination with the '-x' command-line option,
     '-save-temps' is sensible enough to avoid over writing an input
     source file with the same extension as an intermediate file.  The
     corresponding intermediate file may be obtained by renaming the
     source file before using '-save-temps'.

     If you invoke GCC in parallel, compiling several different source
     files that share a common base name in different subdirectories or
     the same source file compiled for multiple output destinations, it
     is likely that the different parallel compilers will interfere with
     each other, and overwrite the temporary files.  For instance:

          gcc -save-temps -o outdir1/foo.o indir1/foo.c&
          gcc -save-temps -o outdir2/foo.o indir2/foo.c&

     may result in 'foo.i' and 'foo.o' being written to simultaneously
     by both compilers.

'-save-temps=obj'
     Store the usual "temporary" intermediate files permanently.  If the
     '-o' option is used, the temporary files are based on the object
     file.  If the '-o' option is not used, the '-save-temps=obj' switch
     behaves like '-save-temps'.

     For example:

          gcc -save-temps=obj -c foo.c
          gcc -save-temps=obj -c bar.c -o dir/xbar.o
          gcc -save-temps=obj foobar.c -o dir2/yfoobar

     creates 'foo.i', 'foo.s', 'dir/xbar.i', 'dir/xbar.s',
     'dir2/yfoobar.i', 'dir2/yfoobar.s', and 'dir2/yfoobar.o'.

'-time[=FILE]'
     Report the CPU time taken by each subprocess in the compilation
     sequence.  For C source files, this is the compiler proper and
     assembler (plus the linker if linking is done).

     Without the specification of an output file, the output looks like
     this:

          # cc1 0.12 0.01
          # as 0.00 0.01

     The first number on each line is the "user time", that is time
     spent executing the program itself.  The second number is "system
     time", time spent executing operating system routines on behalf of
     the program.  Both numbers are in seconds.

     With the specification of an output file, the output is appended to
     the named file, and it looks like this:

          0.12 0.01 cc1 OPTIONS
          0.00 0.01 as OPTIONS

     The "user time" and the "system time" are moved before the program
     name, and the options passed to the program are displayed, so that
     one can later tell what file was being compiled, and with which
     options.

'-fvar-tracking'
     Run variable tracking pass.  It computes where variables are stored
     at each position in code.  Better debugging information is then
     generated (if the debugging information format supports this
     information).

     It is enabled by default when compiling with optimization ('-Os',
     '-O', '-O2', ...), debugging information ('-g') and the debug info
     format supports it.

'-fvar-tracking-assignments'
     Annotate assignments to user variables early in the compilation and
     attempt to carry the annotations over throughout the compilation
     all the way to the end, in an attempt to improve debug information
     while optimizing.  Use of '-gdwarf-4' is recommended along with it.

     It can be enabled even if var-tracking is disabled, in which case
     annotations are created and maintained, but discarded at the end.
     By default, this flag is enabled together with '-fvar-tracking',
     except when selective scheduling is enabled.

'-fvar-tracking-assignments-toggle'
     Toggle '-fvar-tracking-assignments', in the same way that
     '-gtoggle' toggles '-g'.

'-print-file-name=LIBRARY'
     Print the full absolute name of the library file LIBRARY that would
     be used when linking--and don't do anything else.  With this
     option, GCC does not compile or link anything; it just prints the
     file name.

'-print-multi-directory'
     Print the directory name corresponding to the multilib selected by
     any other switches present in the command line.  This directory is
     supposed to exist in 'GCC_EXEC_PREFIX'.

'-print-multi-lib'
     Print the mapping from multilib directory names to compiler
     switches that enable them.  The directory name is separated from
     the switches by ';', and each switch starts with an '@' instead of
     the '-', without spaces between multiple switches.  This is
     supposed to ease shell processing.

'-print-multi-os-directory'
     Print the path to OS libraries for the selected multilib, relative
     to some 'lib' subdirectory.  If OS libraries are present in the
     'lib' subdirectory and no multilibs are used, this is usually just
     '.', if OS libraries are present in 'libSUFFIX' sibling directories
     this prints e.g. '../lib64', '../lib' or '../lib32', or if OS
     libraries are present in 'lib/SUBDIR' subdirectories it prints e.g.
     'amd64', 'sparcv9' or 'ev6'.

'-print-multiarch'
     Print the path to OS libraries for the selected multiarch, relative
     to some 'lib' subdirectory.

'-print-prog-name=PROGRAM'
     Like '-print-file-name', but searches for a program such as 'cpp'.

'-print-libgcc-file-name'
     Same as '-print-file-name=libgcc.a'.

     This is useful when you use '-nostdlib' or '-nodefaultlibs' but you
     do want to link with 'libgcc.a'.  You can do:

          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`

'-print-search-dirs'
     Print the name of the configured installation directory and a list
     of program and library directories 'gcc' searches--and don't do
     anything else.

     This is useful when 'gcc' prints the error message 'installation
     problem, cannot exec cpp0: No such file or directory'.  To resolve
     this you either need to put 'cpp0' and the other compiler
     components where 'gcc' expects to find them, or you can set the
     environment variable 'GCC_EXEC_PREFIX' to the directory where you
     installed them.  Don't forget the trailing '/'.  *Note Environment
     Variables::.

'-print-sysroot'
     Print the target sysroot directory that is used during compilation.
     This is the target sysroot specified either at configure time or
     using the '--sysroot' option, possibly with an extra suffix that
     depends on compilation options.  If no target sysroot is specified,
     the option prints nothing.

'-print-sysroot-headers-suffix'
     Print the suffix added to the target sysroot when searching for
     headers, or give an error if the compiler is not configured with
     such a suffix--and don't do anything else.

'-dumpmachine'
     Print the compiler's target machine (for example,
     'i686-pc-linux-gnu')--and don't do anything else.

'-dumpversion'
     Print the compiler version (for example, '3.0')--and don't do
     anything else.

'-dumpspecs'
     Print the compiler's built-in specs--and don't do anything else.
     (This is used when GCC itself is being built.)  *Note Spec Files::.

'-fno-eliminate-unused-debug-types'
     Normally, when producing DWARF 2 output, GCC avoids producing debug
     symbol output for types that are nowhere used in the source file
     being compiled.  Sometimes it is useful to have GCC emit debugging
     information for all types declared in a compilation unit,
     regardless of whether or not they are actually used in that
     compilation unit, for example if, in the debugger, you want to cast
     a value to a type that is not actually used in your program (but is
     declared).  More often, however, this results in a significant
     amount of wasted space.


File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC

3.10 Options That Control Optimization
======================================

These options control various sorts of optimizations.

 Without any optimization option, the compiler's goal is to reduce the
cost of compilation and to make debugging produce the expected results.
Statements are independent: if you stop the program with a breakpoint
between statements, you can then assign a new value to any variable or
change the program counter to any other statement in the function and
get exactly the results you expect from the source code.

 Turning on optimization flags makes the compiler attempt to improve the
performance and/or code size at the expense of compilation time and
possibly the ability to debug the program.

 The compiler performs optimization based on the knowledge it has of the
program.  Compiling multiple files at once to a single output file mode
allows the compiler to use information gained from all of the files when
compiling each of them.

 Not all optimizations are controlled directly by a flag.  Only
optimizations that have a flag are listed in this section.

 Most optimizations are only enabled if an '-O' level is set on the
command line.  Otherwise they are disabled, even if individual
optimization flags are specified.

 Depending on the target and how GCC was configured, a slightly
different set of optimizations may be enabled at each '-O' level than
those listed here.  You can invoke GCC with '-Q --help=optimizers' to
find out the exact set of optimizations that are enabled at each level.
*Note Overall Options::, for examples.

'-O'
'-O1'
     Optimize.  Optimizing compilation takes somewhat more time, and a
     lot more memory for a large function.

     With '-O', the compiler tries to reduce code size and execution
     time, without performing any optimizations that take a great deal
     of compilation time.

     '-O' turns on the following optimization flags:
          -fauto-inc-dec
          -fbranch-count-reg
          -fcombine-stack-adjustments
          -fcompare-elim
          -fcprop-registers
          -fdce
          -fdefer-pop
          -fdelayed-branch
          -fdse
          -fforward-propagate
          -fguess-branch-probability
          -fif-conversion2
          -fif-conversion
          -finline-functions-called-once
          -fipa-pure-const
          -fipa-profile
          -fipa-reference
          -fmerge-constants
          -fmove-loop-invariants
          -fshrink-wrap
          -fsplit-wide-types
          -ftree-bit-ccp
          -ftree-ccp
          -fssa-phiopt
          -ftree-ch
          -ftree-copy-prop
          -ftree-copyrename
          -ftree-dce
          -ftree-dominator-opts
          -ftree-dse
          -ftree-forwprop
          -ftree-fre
          -ftree-phiprop
          -ftree-sink
          -ftree-slsr
          -ftree-sra
          -ftree-pta
          -ftree-ter
          -funit-at-a-time

     '-O' also turns on '-fomit-frame-pointer' on machines where doing
     so does not interfere with debugging.

'-O2'
     Optimize even more.  GCC performs nearly all supported
     optimizations that do not involve a space-speed tradeoff.  As
     compared to '-O', this option increases both compilation time and
     the performance of the generated code.

     '-O2' turns on all optimization flags specified by '-O'.  It also
     turns on the following optimization flags:
          -fthread-jumps
          -falign-functions  -falign-jumps
          -falign-loops  -falign-labels
          -fcaller-saves
          -fcrossjumping
          -fcse-follow-jumps  -fcse-skip-blocks
          -fdelete-null-pointer-checks
          -fdevirtualize -fdevirtualize-speculatively
          -fexpensive-optimizations
          -fgcse  -fgcse-lm
          -fhoist-adjacent-loads
          -finline-small-functions
          -findirect-inlining
          -fipa-cp
          -fipa-cp-alignment
          -fipa-sra
          -fipa-icf
          -fisolate-erroneous-paths-dereference
          -flra-remat
          -foptimize-sibling-calls
          -foptimize-strlen
          -fpartial-inlining
          -fpeephole2
          -freorder-blocks -freorder-blocks-and-partition -freorder-functions
          -frerun-cse-after-loop
          -fsched-interblock  -fsched-spec
          -fschedule-insns  -fschedule-insns2
          -fstrict-aliasing -fstrict-overflow
          -ftree-builtin-call-dce
          -ftree-switch-conversion -ftree-tail-merge
          -ftree-pre
          -ftree-vrp
          -fipa-ra

     Please note the warning under '-fgcse' about invoking '-O2' on
     programs that use computed gotos.

'-O3'
     Optimize yet more.  '-O3' turns on all optimizations specified by
     '-O2' and also turns on the '-finline-functions',
     '-funswitch-loops', '-fpredictive-commoning',
     '-fgcse-after-reload', '-ftree-loop-vectorize',
     '-ftree-loop-distribute-patterns', '-ftree-slp-vectorize',
     '-fvect-cost-model', '-ftree-partial-pre' and '-fipa-cp-clone'
     options.

'-O0'
     Reduce compilation time and make debugging produce the expected
     results.  This is the default.

'-Os'
     Optimize for size.  '-Os' enables all '-O2' optimizations that do
     not typically increase code size.  It also performs further
     optimizations designed to reduce code size.

     '-Os' disables the following optimization flags:
          -falign-functions  -falign-jumps  -falign-loops
          -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
          -fprefetch-loop-arrays

'-Ofast'
     Disregard strict standards compliance.  '-Ofast' enables all '-O3'
     optimizations.  It also enables optimizations that are not valid
     for all standard-compliant programs.  It turns on '-ffast-math' and
     the Fortran-specific '-fno-protect-parens' and '-fstack-arrays'.

'-Og'
     Optimize debugging experience.  '-Og' enables optimizations that do
     not interfere with debugging.  It should be the optimization level
     of choice for the standard edit-compile-debug cycle, offering a
     reasonable level of optimization while maintaining fast compilation
     and a good debugging experience.

     If you use multiple '-O' options, with or without level numbers,
     the last such option is the one that is effective.

 Options of the form '-fFLAG' specify machine-independent flags.  Most
flags have both positive and negative forms; the negative form of
'-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
listed--the one you typically use.  You can figure out the other form by
either removing 'no-' or adding it.

 The following options control specific optimizations.  They are either
activated by '-O' options or are related to ones that are.  You can use
the following flags in the rare cases when "fine-tuning" of
optimizations to be performed is desired.

'-fno-defer-pop'
     Always pop the arguments to each function call as soon as that
     function returns.  For machines that must pop arguments after a
     function call, the compiler normally lets arguments accumulate on
     the stack for several function calls and pops them all at once.

     Disabled at levels '-O', '-O2', '-O3', '-Os'.

'-fforward-propagate'
     Perform a forward propagation pass on RTL.  The pass tries to
     combine two instructions and checks if the result can be
     simplified.  If loop unrolling is active, two passes are performed
     and the second is scheduled after loop unrolling.

     This option is enabled by default at optimization levels '-O',
     '-O2', '-O3', '-Os'.

'-ffp-contract=STYLE'
     '-ffp-contract=off' disables floating-point expression contraction.
     '-ffp-contract=fast' enables floating-point expression contraction
     such as forming of fused multiply-add operations if the target has
     native support for them.  '-ffp-contract=on' enables floating-point
     expression contraction if allowed by the language standard.  This
     is currently not implemented and treated equal to
     '-ffp-contract=off'.

     The default is '-ffp-contract=fast'.

'-fomit-frame-pointer'
     Don't keep the frame pointer in a register for functions that don't
     need one.  This avoids the instructions to save, set up and restore
     frame pointers; it also makes an extra register available in many
     functions.  *It also makes debugging impossible on some machines.*

     On some machines, such as the VAX, this flag has no effect, because
     the standard calling sequence automatically handles the frame
     pointer and nothing is saved by pretending it doesn't exist.  The
     machine-description macro 'FRAME_POINTER_REQUIRED' controls whether
     a target machine supports this flag.  *Note Register Usage:
     (gccint)Registers.

     The default setting (when not optimizing for size) for 32-bit
     GNU/Linux x86 and 32-bit Darwin x86 targets is
     '-fomit-frame-pointer'.  You can configure GCC with the
     '--enable-frame-pointer' configure option to change the default.

     Enabled at levels '-O', '-O2', '-O3', '-Os'.

'-foptimize-sibling-calls'
     Optimize sibling and tail recursive calls.

     Enabled at levels '-O2', '-O3', '-Os'.

'-foptimize-strlen'
     Optimize various standard C string functions (e.g.  'strlen',
     'strchr' or 'strcpy') and their '_FORTIFY_SOURCE' counterparts into
     faster alternatives.

     Enabled at levels '-O2', '-O3'.

'-fno-inline'
     Do not expand any functions inline apart from those marked with the
     'always_inline' attribute.  This is the default when not
     optimizing.

     Single functions can be exempted from inlining by marking them with
     the 'noinline' attribute.

'-finline-small-functions'
     Integrate functions into their callers when their body is smaller
     than expected function call code (so overall size of program gets
     smaller).  The compiler heuristically decides which functions are
     simple enough to be worth integrating in this way.  This inlining
     applies to all functions, even those not declared inline.

     Enabled at level '-O2'.

'-findirect-inlining'
     Inline also indirect calls that are discovered to be known at
     compile time thanks to previous inlining.  This option has any
     effect only when inlining itself is turned on by the
     '-finline-functions' or '-finline-small-functions' options.

     Enabled at level '-O2'.

'-finline-functions'
     Consider all functions for inlining, even if they are not declared
     inline.  The compiler heuristically decides which functions are
     worth integrating in this way.

     If all calls to a given function are integrated, and the function
     is declared 'static', then the function is normally not output as
     assembler code in its own right.

     Enabled at level '-O3'.

'-finline-functions-called-once'
     Consider all 'static' functions called once for inlining into their
     caller even if they are not marked 'inline'.  If a call to a given
     function is integrated, then the function is not output as
     assembler code in its own right.

     Enabled at levels '-O1', '-O2', '-O3' and '-Os'.

'-fearly-inlining'
     Inline functions marked by 'always_inline' and functions whose body
     seems smaller than the function call overhead early before doing
     '-fprofile-generate' instrumentation and real inlining pass.  Doing
     so makes profiling significantly cheaper and usually inlining
     faster on programs having large chains of nested wrapper functions.

     Enabled by default.

'-fipa-sra'
     Perform interprocedural scalar replacement of aggregates, removal
     of unused parameters and replacement of parameters passed by
     reference by parameters passed by value.

     Enabled at levels '-O2', '-O3' and '-Os'.

'-finline-limit=N'
     By default, GCC limits the size of functions that can be inlined.
     This flag allows coarse control of this limit.  N is the size of
     functions that can be inlined in number of pseudo instructions.

     Inlining is actually controlled by a number of parameters, which
     may be specified individually by using '--param NAME=VALUE'.  The
     '-finline-limit=N' option sets some of these parameters as follows:

     'max-inline-insns-single'
          is set to N/2.
     'max-inline-insns-auto'
          is set to N/2.

     See below for a documentation of the individual parameters
     controlling inlining and for the defaults of these parameters.

     _Note:_ there may be no value to '-finline-limit' that results in
     default behavior.

     _Note:_ pseudo instruction represents, in this particular context,
     an abstract measurement of function's size.  In no way does it
     represent a count of assembly instructions and as such its exact
     meaning might change from one release to an another.

'-fno-keep-inline-dllexport'
     This is a more fine-grained version of '-fkeep-inline-functions',
     which applies only to functions that are declared using the
     'dllexport' attribute or declspec (*Note Declaring Attributes of
     Functions: Function Attributes.)

'-fkeep-inline-functions'
     In C, emit 'static' functions that are declared 'inline' into the
     object file, even if the function has been inlined into all of its
     callers.  This switch does not affect functions using the 'extern
     inline' extension in GNU C90.  In C++, emit any and all inline
     functions into the object file.

'-fkeep-static-consts'
     Emit variables declared 'static const' when optimization isn't
     turned on, even if the variables aren't referenced.

     GCC enables this option by default.  If you want to force the
     compiler to check if a variable is referenced, regardless of
     whether or not optimization is turned on, use the
     '-fno-keep-static-consts' option.

'-fmerge-constants'
     Attempt to merge identical constants (string constants and
     floating-point constants) across compilation units.

     This option is the default for optimized compilation if the
     assembler and linker support it.  Use '-fno-merge-constants' to
     inhibit this behavior.

     Enabled at levels '-O', '-O2', '-O3', '-Os'.

'-fmerge-all-constants'
     Attempt to merge identical constants and identical variables.

     This option implies '-fmerge-constants'.  In addition to
     '-fmerge-constants' this considers e.g. even constant initialized
     arrays or initialized constant variables with integral or
     floating-point types.  Languages like C or C++ require each
     variable, including multiple instances of the same variable in
     recursive calls, to have distinct locations, so using this option
     results in non-conforming behavior.

'-fmodulo-sched'
     Perform swing modulo scheduling immediately before the first
     scheduling pass.  This pass looks at innermost loops and reorders
     their instructions by overlapping different iterations.

'-fmodulo-sched-allow-regmoves'
     Perform more aggressive SMS-based modulo scheduling with register
     moves allowed.  By setting this flag certain anti-dependences edges
     are deleted, which triggers the generation of reg-moves based on
     the life-range analysis.  This option is effective only with
     '-fmodulo-sched' enabled.

'-fno-branch-count-reg'
     Do not use "decrement and branch" instructions on a count register,
     but instead generate a sequence of instructions that decrement a
     register, compare it against zero, then branch based upon the
     result.  This option is only meaningful on architectures that
     support such instructions, which include x86, PowerPC, IA-64 and
     S/390.

     Enabled by default at '-O1' and higher.

     The default is '-fbranch-count-reg'.

'-fno-function-cse'
     Do not put function addresses in registers; make each instruction
     that calls a constant function contain the function's address
     explicitly.

     This option results in less efficient code, but some strange hacks
     that alter the assembler output may be confused by the
     optimizations performed when this option is not used.

     The default is '-ffunction-cse'

'-fno-zero-initialized-in-bss'
     If the target supports a BSS section, GCC by default puts variables
     that are initialized to zero into BSS.  This can save space in the
     resulting code.

     This option turns off this behavior because some programs
     explicitly rely on variables going to the data section--e.g., so
     that the resulting executable can find the beginning of that
     section and/or make assumptions based on that.

     The default is '-fzero-initialized-in-bss'.

'-fthread-jumps'
     Perform optimizations that check to see if a jump branches to a
     location where another comparison subsumed by the first is found.
     If so, the first branch is redirected to either the destination of
     the second branch or a point immediately following it, depending on
     whether the condition is known to be true or false.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fsplit-wide-types'
     When using a type that occupies multiple registers, such as 'long
     long' on a 32-bit system, split the registers apart and allocate
     them independently.  This normally generates better code for those
     types, but may make debugging more difficult.

     Enabled at levels '-O', '-O2', '-O3', '-Os'.

'-fcse-follow-jumps'
     In common subexpression elimination (CSE), scan through jump
     instructions when the target of the jump is not reached by any
     other path.  For example, when CSE encounters an 'if' statement
     with an 'else' clause, CSE follows the jump when the condition
     tested is false.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fcse-skip-blocks'
     This is similar to '-fcse-follow-jumps', but causes CSE to follow
     jumps that conditionally skip over blocks.  When CSE encounters a
     simple 'if' statement with no else clause, '-fcse-skip-blocks'
     causes CSE to follow the jump around the body of the 'if'.

     Enabled at levels '-O2', '-O3', '-Os'.

'-frerun-cse-after-loop'
     Re-run common subexpression elimination after loop optimizations
     are performed.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fgcse'
     Perform a global common subexpression elimination pass.  This pass
     also performs global constant and copy propagation.

     _Note:_ When compiling a program using computed gotos, a GCC
     extension, you may get better run-time performance if you disable
     the global common subexpression elimination pass by adding
     '-fno-gcse' to the command line.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fgcse-lm'
     When '-fgcse-lm' is enabled, global common subexpression
     elimination attempts to move loads that are only killed by stores
     into themselves.  This allows a loop containing a load/store
     sequence to be changed to a load outside the loop, and a copy/store
     within the loop.

     Enabled by default when '-fgcse' is enabled.

'-fgcse-sm'
     When '-fgcse-sm' is enabled, a store motion pass is run after
     global common subexpression elimination.  This pass attempts to
     move stores out of loops.  When used in conjunction with
     '-fgcse-lm', loops containing a load/store sequence can be changed
     to a load before the loop and a store after the loop.

     Not enabled at any optimization level.

'-fgcse-las'
     When '-fgcse-las' is enabled, the global common subexpression
     elimination pass eliminates redundant loads that come after stores
     to the same memory location (both partial and full redundancies).

     Not enabled at any optimization level.

'-fgcse-after-reload'
     When '-fgcse-after-reload' is enabled, a redundant load elimination
     pass is performed after reload.  The purpose of this pass is to
     clean up redundant spilling.

'-faggressive-loop-optimizations'
     This option tells the loop optimizer to use language constraints to
     derive bounds for the number of iterations of a loop.  This assumes
     that loop code does not invoke undefined behavior by for example
     causing signed integer overflows or out-of-bound array accesses.
     The bounds for the number of iterations of a loop are used to guide
     loop unrolling and peeling and loop exit test optimizations.  This
     option is enabled by default.

'-funsafe-loop-optimizations'
     This option tells the loop optimizer to assume that loop indices do
     not overflow, and that loops with nontrivial exit condition are not
     infinite.  This enables a wider range of loop optimizations even if
     the loop optimizer itself cannot prove that these assumptions are
     valid.  If you use '-Wunsafe-loop-optimizations', the compiler
     warns you if it finds this kind of loop.

'-fcrossjumping'
     Perform cross-jumping transformation.  This transformation unifies
     equivalent code and saves code size.  The resulting code may or may
     not perform better than without cross-jumping.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fauto-inc-dec'
     Combine increments or decrements of addresses with memory accesses.
     This pass is always skipped on architectures that do not have
     instructions to support this.  Enabled by default at '-O' and
     higher on architectures that support this.

'-fdce'
     Perform dead code elimination (DCE) on RTL.  Enabled by default at
     '-O' and higher.

'-fdse'
     Perform dead store elimination (DSE) on RTL.  Enabled by default at
     '-O' and higher.

'-fif-conversion'
     Attempt to transform conditional jumps into branch-less
     equivalents.  This includes use of conditional moves, min, max, set
     flags and abs instructions, and some tricks doable by standard
     arithmetics.  The use of conditional execution on chips where it is
     available is controlled by '-fif-conversion2'.

     Enabled at levels '-O', '-O2', '-O3', '-Os'.

'-fif-conversion2'
     Use conditional execution (where available) to transform
     conditional jumps into branch-less equivalents.

     Enabled at levels '-O', '-O2', '-O3', '-Os'.

'-fdeclone-ctor-dtor'
     The C++ ABI requires multiple entry points for constructors and
     destructors: one for a base subobject, one for a complete object,
     and one for a virtual destructor that calls operator delete
     afterwards.  For a hierarchy with virtual bases, the base and
     complete variants are clones, which means two copies of the
     function.  With this option, the base and complete variants are
     changed to be thunks that call a common implementation.

     Enabled by '-Os'.

'-fdelete-null-pointer-checks'
     Assume that programs cannot safely dereference null pointers, and
     that no code or data element resides there.  This enables simple
     constant folding optimizations at all optimization levels.  In
     addition, other optimization passes in GCC use this flag to control
     global dataflow analyses that eliminate useless checks for null
     pointers; these assume that if a pointer is checked after it has
     already been dereferenced, it cannot be null.

     Note however that in some environments this assumption is not true.
     Use '-fno-delete-null-pointer-checks' to disable this optimization
     for programs that depend on that behavior.

     Some targets, especially embedded ones, disable this option at all
     levels.  Otherwise it is enabled at all levels: '-O0', '-O1',
     '-O2', '-O3', '-Os'.  Passes that use the information are enabled
     independently at different optimization levels.

'-fdevirtualize'
     Attempt to convert calls to virtual functions to direct calls.
     This is done both within a procedure and interprocedurally as part
     of indirect inlining ('-findirect-inlining') and interprocedural
     constant propagation ('-fipa-cp').  Enabled at levels '-O2', '-O3',
     '-Os'.

'-fdevirtualize-speculatively'
     Attempt to convert calls to virtual functions to speculative direct
     calls.  Based on the analysis of the type inheritance graph,
     determine for a given call the set of likely targets.  If the set
     is small, preferably of size 1, change the call into a conditional
     deciding between direct and indirect calls.  The speculative calls
     enable more optimizations, such as inlining.  When they seem
     useless after further optimization, they are converted back into
     original form.

'-fdevirtualize-at-ltrans'
     Stream extra information needed for aggressive devirtualization
     when running the link-time optimizer in local transformation mode.
     This option enables more devirtualization but significantly
     increases the size of streamed data.  For this reason it is
     disabled by default.

'-fexpensive-optimizations'
     Perform a number of minor optimizations that are relatively
     expensive.

     Enabled at levels '-O2', '-O3', '-Os'.

'-free'
     Attempt to remove redundant extension instructions.  This is
     especially helpful for the x86-64 architecture, which implicitly
     zero-extends in 64-bit registers after writing to their lower
     32-bit half.

     Enabled for Alpha, AArch64 and x86 at levels '-O2', '-O3', '-Os'.

'-fno-lifetime-dse'
     In C++ the value of an object is only affected by changes within
     its lifetime: when the constructor begins, the object has an
     indeterminate value, and any changes during the lifetime of the
     object are dead when the object is destroyed.  Normally dead store
     elimination will take advantage of this; if your code relies on the
     value of the object storage persisting beyond the lifetime of the
     object, you can use this flag to disable this optimization.

'-flive-range-shrinkage'
     Attempt to decrease register pressure through register live range
     shrinkage.  This is helpful for fast processors with small or
     moderate size register sets.

'-fira-algorithm=ALGORITHM'
     Use the specified coloring algorithm for the integrated register
     allocator.  The ALGORITHM argument can be 'priority', which
     specifies Chow's priority coloring, or 'CB', which specifies
     Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not
     implemented for all architectures, but for those targets that do
     support it, it is the default because it generates better code.

'-fira-region=REGION'
     Use specified regions for the integrated register allocator.  The
     REGION argument should be one of the following:

     'all'
          Use all loops as register allocation regions.  This can give
          the best results for machines with a small and/or irregular
          register set.

     'mixed'
          Use all loops except for loops with small register pressure as
          the regions.  This value usually gives the best results in
          most cases and for most architectures, and is enabled by
          default when compiling with optimization for speed ('-O',
          '-O2', ...).

     'one'
          Use all functions as a single region.  This typically results
          in the smallest code size, and is enabled by default for '-Os'
          or '-O0'.

'-fira-hoist-pressure'
     Use IRA to evaluate register pressure in the code hoisting pass for
     decisions to hoist expressions.  This option usually results in
     smaller code, but it can slow the compiler down.

     This option is enabled at level '-Os' for all targets.

'-fira-loop-pressure'
     Use IRA to evaluate register pressure in loops for decisions to
     move loop invariants.  This option usually results in generation of
     faster and smaller code on machines with large register files (>=
     32 registers), but it can slow the compiler down.

     This option is enabled at level '-O3' for some targets.

'-fno-ira-share-save-slots'
     Disable sharing of stack slots used for saving call-used hard
     registers living through a call.  Each hard register gets a
     separate stack slot, and as a result function stack frames are
     larger.

'-fno-ira-share-spill-slots'
     Disable sharing of stack slots allocated for pseudo-registers.
     Each pseudo-register that does not get a hard register gets a
     separate stack slot, and as a result function stack frames are
     larger.

'-fira-verbose=N'
     Control the verbosity of the dump file for the integrated register
     allocator.  The default value is 5.  If the value N is greater or
     equal to 10, the dump output is sent to stderr using the same
     format as N minus 10.

'-flra-remat'
     Enable CFG-sensitive rematerialization in LRA. Instead of loading
     values of spilled pseudos, LRA tries to rematerialize (recalculate)
     values if it is profitable.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fdelayed-branch'
     If supported for the target machine, attempt to reorder
     instructions to exploit instruction slots available after delayed
     branch instructions.

     Enabled at levels '-O', '-O2', '-O3', '-Os'.

'-fschedule-insns'
     If supported for the target machine, attempt to reorder
     instructions to eliminate execution stalls due to required data
     being unavailable.  This helps machines that have slow floating
     point or memory load instructions by allowing other instructions to
     be issued until the result of the load or floating-point
     instruction is required.

     Enabled at levels '-O2', '-O3'.

'-fschedule-insns2'
     Similar to '-fschedule-insns', but requests an additional pass of
     instruction scheduling after register allocation has been done.
     This is especially useful on machines with a relatively small
     number of registers and where memory load instructions take more
     than one cycle.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fno-sched-interblock'
     Don't schedule instructions across basic blocks.  This is normally
     enabled by default when scheduling before register allocation, i.e.
     with '-fschedule-insns' or at '-O2' or higher.

'-fno-sched-spec'
     Don't allow speculative motion of non-load instructions.  This is
     normally enabled by default when scheduling before register
     allocation, i.e. with '-fschedule-insns' or at '-O2' or higher.

'-fsched-pressure'
     Enable register pressure sensitive insn scheduling before register
     allocation.  This only makes sense when scheduling before register
     allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or
     higher.  Usage of this option can improve the generated code and
     decrease its size by preventing register pressure increase above
     the number of available hard registers and subsequent spills in
     register allocation.

'-fsched-spec-load'
     Allow speculative motion of some load instructions.  This only
     makes sense when scheduling before register allocation, i.e. with
     '-fschedule-insns' or at '-O2' or higher.

'-fsched-spec-load-dangerous'
     Allow speculative motion of more load instructions.  This only
     makes sense when scheduling before register allocation, i.e. with
     '-fschedule-insns' or at '-O2' or higher.

'-fsched-stalled-insns'
'-fsched-stalled-insns=N'
     Define how many insns (if any) can be moved prematurely from the
     queue of stalled insns into the ready list during the second
     scheduling pass.  '-fno-sched-stalled-insns' means that no insns
     are moved prematurely, '-fsched-stalled-insns=0' means there is no
     limit on how many queued insns can be moved prematurely.
     '-fsched-stalled-insns' without a value is equivalent to
     '-fsched-stalled-insns=1'.

'-fsched-stalled-insns-dep'
'-fsched-stalled-insns-dep=N'
     Define how many insn groups (cycles) are examined for a dependency
     on a stalled insn that is a candidate for premature removal from
     the queue of stalled insns.  This has an effect only during the
     second scheduling pass, and only if '-fsched-stalled-insns' is
     used.  '-fno-sched-stalled-insns-dep' is equivalent to
     '-fsched-stalled-insns-dep=0'.  '-fsched-stalled-insns-dep' without
     a value is equivalent to '-fsched-stalled-insns-dep=1'.

'-fsched2-use-superblocks'
     When scheduling after register allocation, use superblock
     scheduling.  This allows motion across basic block boundaries,
     resulting in faster schedules.  This option is experimental, as not
     all machine descriptions used by GCC model the CPU closely enough
     to avoid unreliable results from the algorithm.

     This only makes sense when scheduling after register allocation,
     i.e. with '-fschedule-insns2' or at '-O2' or higher.

'-fsched-group-heuristic'
     Enable the group heuristic in the scheduler.  This heuristic favors
     the instruction that belongs to a schedule group.  This is enabled
     by default when scheduling is enabled, i.e. with '-fschedule-insns'
     or '-fschedule-insns2' or at '-O2' or higher.

'-fsched-critical-path-heuristic'
     Enable the critical-path heuristic in the scheduler.  This
     heuristic favors instructions on the critical path.  This is
     enabled by default when scheduling is enabled, i.e. with
     '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher.

'-fsched-spec-insn-heuristic'
     Enable the speculative instruction heuristic in the scheduler.
     This heuristic favors speculative instructions with greater
     dependency weakness.  This is enabled by default when scheduling is
     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
     '-O2' or higher.

'-fsched-rank-heuristic'
     Enable the rank heuristic in the scheduler.  This heuristic favors
     the instruction belonging to a basic block with greater size or
     frequency.  This is enabled by default when scheduling is enabled,
     i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or
     higher.

'-fsched-last-insn-heuristic'
     Enable the last-instruction heuristic in the scheduler.  This
     heuristic favors the instruction that is less dependent on the last
     instruction scheduled.  This is enabled by default when scheduling
     is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or
     at '-O2' or higher.

'-fsched-dep-count-heuristic'
     Enable the dependent-count heuristic in the scheduler.  This
     heuristic favors the instruction that has more instructions
     depending on it.  This is enabled by default when scheduling is
     enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at
     '-O2' or higher.

'-freschedule-modulo-scheduled-loops'
     Modulo scheduling is performed before traditional scheduling.  If a
     loop is modulo scheduled, later scheduling passes may change its
     schedule.  Use this option to control that behavior.

'-fselective-scheduling'
     Schedule instructions using selective scheduling algorithm.
     Selective scheduling runs instead of the first scheduler pass.

'-fselective-scheduling2'
     Schedule instructions using selective scheduling algorithm.
     Selective scheduling runs instead of the second scheduler pass.

'-fsel-sched-pipelining'
     Enable software pipelining of innermost loops during selective
     scheduling.  This option has no effect unless one of
     '-fselective-scheduling' or '-fselective-scheduling2' is turned on.

'-fsel-sched-pipelining-outer-loops'
     When pipelining loops during selective scheduling, also pipeline
     outer loops.  This option has no effect unless
     '-fsel-sched-pipelining' is turned on.

'-fsemantic-interposition'
     Some object formats, like ELF, allow interposing of symbols by the
     dynamic linker.  This means that for symbols exported from the DSO,
     the compiler cannot perform interprocedural propagation, inlining
     and other optimizations in anticipation that the function or
     variable in question may change.  While this feature is useful, for
     example, to rewrite memory allocation functions by a debugging
     implementation, it is expensive in the terms of code quality.  With
     '-fno-semantic-interposition' the compiler assumes that if
     interposition happens for functions the overwriting function will
     have precisely the same semantics (and side effects).  Similarly if
     interposition happens for variables, the constructor of the
     variable will be the same.  The flag has no effect for functions
     explicitly declared inline (where it is never allowed for
     interposition to change semantics) and for symbols explicitly
     declared weak.

'-fshrink-wrap'
     Emit function prologues only before parts of the function that need
     it, rather than at the top of the function.  This flag is enabled
     by default at '-O' and higher.

'-fcaller-saves'
     Enable allocation of values to registers that are clobbered by
     function calls, by emitting extra instructions to save and restore
     the registers around such calls.  Such allocation is done only when
     it seems to result in better code.

     This option is always enabled by default on certain machines,
     usually those which have no call-preserved registers to use
     instead.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fcombine-stack-adjustments'
     Tracks stack adjustments (pushes and pops) and stack memory
     references and then tries to find ways to combine them.

     Enabled by default at '-O1' and higher.

'-fipa-ra'
     Use caller save registers for allocation if those registers are not
     used by any called function.  In that case it is not necessary to
     save and restore them around calls.  This is only possible if
     called functions are part of same compilation unit as current
     function and they are compiled before it.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fconserve-stack'
     Attempt to minimize stack usage.  The compiler attempts to use less
     stack space, even if that makes the program slower.  This option
     implies setting the 'large-stack-frame' parameter to 100 and the
     'large-stack-frame-growth' parameter to 400.

'-ftree-reassoc'
     Perform reassociation on trees.  This flag is enabled by default at
     '-O' and higher.

'-ftree-pre'
     Perform partial redundancy elimination (PRE) on trees.  This flag
     is enabled by default at '-O2' and '-O3'.

'-ftree-partial-pre'
     Make partial redundancy elimination (PRE) more aggressive.  This
     flag is enabled by default at '-O3'.

'-ftree-forwprop'
     Perform forward propagation on trees.  This flag is enabled by
     default at '-O' and higher.

'-ftree-fre'
     Perform full redundancy elimination (FRE) on trees.  The difference
     between FRE and PRE is that FRE only considers expressions that are
     computed on all paths leading to the redundant computation.  This
     analysis is faster than PRE, though it exposes fewer redundancies.
     This flag is enabled by default at '-O' and higher.

'-ftree-phiprop'
     Perform hoisting of loads from conditional pointers on trees.  This
     pass is enabled by default at '-O' and higher.

'-fhoist-adjacent-loads'
     Speculatively hoist loads from both branches of an if-then-else if
     the loads are from adjacent locations in the same structure and the
     target architecture has a conditional move instruction.  This flag
     is enabled by default at '-O2' and higher.

'-ftree-copy-prop'
     Perform copy propagation on trees.  This pass eliminates
     unnecessary copy operations.  This flag is enabled by default at
     '-O' and higher.

'-fipa-pure-const'
     Discover which functions are pure or constant.  Enabled by default
     at '-O' and higher.

'-fipa-reference'
     Discover which static variables do not escape the compilation unit.
     Enabled by default at '-O' and higher.

'-fipa-pta'
     Perform interprocedural pointer analysis and interprocedural
     modification and reference analysis.  This option can cause
     excessive memory and compile-time usage on large compilation units.
     It is not enabled by default at any optimization level.

'-fipa-profile'
     Perform interprocedural profile propagation.  The functions called
     only from cold functions are marked as cold.  Also functions
     executed once (such as 'cold', 'noreturn', static constructors or
     destructors) are identified.  Cold functions and loop less parts of
     functions executed once are then optimized for size.  Enabled by
     default at '-O' and higher.

'-fipa-cp'
     Perform interprocedural constant propagation.  This optimization
     analyzes the program to determine when values passed to functions
     are constants and then optimizes accordingly.  This optimization
     can substantially increase performance if the application has
     constants passed to functions.  This flag is enabled by default at
     '-O2', '-Os' and '-O3'.

'-fipa-cp-clone'
     Perform function cloning to make interprocedural constant
     propagation stronger.  When enabled, interprocedural constant
     propagation performs function cloning when externally visible
     function can be called with constant arguments.  Because this
     optimization can create multiple copies of functions, it may
     significantly increase code size (see '--param
     ipcp-unit-growth=VALUE').  This flag is enabled by default at
     '-O3'.

'-fipa-cp-alignment'
     When enabled, this optimization propagates alignment of function
     parameters to support better vectorization and string operations.

     This flag is enabled by default at '-O2' and '-Os'.  It requires
     that '-fipa-cp' is enabled.

'-fipa-icf'
     Perform Identical Code Folding for functions and read-only
     variables.  The optimization reduces code size and may disturb
     unwind stacks by replacing a function by equivalent one with a
     different name.  The optimization works more effectively with link
     time optimization enabled.

     Nevertheless the behavior is similar to Gold Linker ICF
     optimization, GCC ICF works on different levels and thus the
     optimizations are not same - there are equivalences that are found
     only by GCC and equivalences found only by Gold.

     This flag is enabled by default at '-O2' and '-Os'.

'-fisolate-erroneous-paths-dereference'
     Detect paths that trigger erroneous or undefined behavior due to
     dereferencing a null pointer.  Isolate those paths from the main
     control flow and turn the statement with erroneous or undefined
     behavior into a trap.  This flag is enabled by default at '-O2' and
     higher.

'-fisolate-erroneous-paths-attribute'
     Detect paths that trigger erroneous or undefined behavior due a
     null value being used in a way forbidden by a 'returns_nonnull' or
     'nonnull' attribute.  Isolate those paths from the main control
     flow and turn the statement with erroneous or undefined behavior
     into a trap.  This is not currently enabled, but may be enabled by
     '-O2' in the future.

'-ftree-sink'
     Perform forward store motion on trees.  This flag is enabled by
     default at '-O' and higher.

'-ftree-bit-ccp'
     Perform sparse conditional bit constant propagation on trees and
     propagate pointer alignment information.  This pass only operates
     on local scalar variables and is enabled by default at '-O' and
     higher.  It requires that '-ftree-ccp' is enabled.

'-ftree-ccp'
     Perform sparse conditional constant propagation (CCP) on trees.
     This pass only operates on local scalar variables and is enabled by
     default at '-O' and higher.

'-fssa-phiopt'
     Perform pattern matching on SSA PHI nodes to optimize conditional
     code.  This pass is enabled by default at '-O' and higher.

'-ftree-switch-conversion'
     Perform conversion of simple initializations in a switch to
     initializations from a scalar array.  This flag is enabled by
     default at '-O2' and higher.

'-ftree-tail-merge'
     Look for identical code sequences.  When found, replace one with a
     jump to the other.  This optimization is known as tail merging or
     cross jumping.  This flag is enabled by default at '-O2' and
     higher.  The compilation time in this pass can be limited using
     'max-tail-merge-comparisons' parameter and
     'max-tail-merge-iterations' parameter.

'-ftree-dce'
     Perform dead code elimination (DCE) on trees.  This flag is enabled
     by default at '-O' and higher.

'-ftree-builtin-call-dce'
     Perform conditional dead code elimination (DCE) for calls to
     built-in functions that may set 'errno' but are otherwise
     side-effect free.  This flag is enabled by default at '-O2' and
     higher if '-Os' is not also specified.

'-ftree-dominator-opts'
     Perform a variety of simple scalar cleanups (constant/copy
     propagation, redundancy elimination, range propagation and
     expression simplification) based on a dominator tree traversal.
     This also performs jump threading (to reduce jumps to jumps).  This
     flag is enabled by default at '-O' and higher.

'-ftree-dse'
     Perform dead store elimination (DSE) on trees.  A dead store is a
     store into a memory location that is later overwritten by another
     store without any intervening loads.  In this case the earlier
     store can be deleted.  This flag is enabled by default at '-O' and
     higher.

'-ftree-ch'
     Perform loop header copying on trees.  This is beneficial since it
     increases effectiveness of code motion optimizations.  It also
     saves one jump.  This flag is enabled by default at '-O' and
     higher.  It is not enabled for '-Os', since it usually increases
     code size.

'-ftree-loop-optimize'
     Perform loop optimizations on trees.  This flag is enabled by
     default at '-O' and higher.

'-ftree-loop-linear'
     Perform loop interchange transformations on tree.  Same as
     '-floop-interchange'.  To use this code transformation, GCC has to
     be configured with '--with-isl' to enable the Graphite loop
     transformation infrastructure.

'-floop-interchange'
     Perform loop interchange transformations on loops.  Interchanging
     two nested loops switches the inner and outer loops.  For example,
     given a loop like:
          DO J = 1, M
            DO I = 1, N
              A(J, I) = A(J, I) * C
            ENDDO
          ENDDO
     loop interchange transforms the loop as if it were written:
          DO I = 1, N
            DO J = 1, M
              A(J, I) = A(J, I) * C
            ENDDO
          ENDDO
     which can be beneficial when 'N' is larger than the caches, because
     in Fortran, the elements of an array are stored in memory
     contiguously by column, and the original loop iterates over rows,
     potentially creating at each access a cache miss.  This
     optimization applies to all the languages supported by GCC and is
     not limited to Fortran.  To use this code transformation, GCC has
     to be configured with '--with-isl' to enable the Graphite loop
     transformation infrastructure.

'-floop-strip-mine'
     Perform loop strip mining transformations on loops.  Strip mining
     splits a loop into two nested loops.  The outer loop has strides
     equal to the strip size and the inner loop has strides of the
     original loop within a strip.  The strip length can be changed
     using the 'loop-block-tile-size' parameter.  For example, given a
     loop like:
          DO I = 1, N
            A(I) = A(I) + C
          ENDDO
     loop strip mining transforms the loop as if it were written:
          DO II = 1, N, 51
            DO I = II, min (II + 50, N)
              A(I) = A(I) + C
            ENDDO
          ENDDO
     This optimization applies to all the languages supported by GCC and
     is not limited to Fortran.  To use this code transformation, GCC
     has to be configured with '--with-isl' to enable the Graphite loop
     transformation infrastructure.

'-floop-block'
     Perform loop blocking transformations on loops.  Blocking strip
     mines each loop in the loop nest such that the memory accesses of
     the element loops fit inside caches.  The strip length can be
     changed using the 'loop-block-tile-size' parameter.  For example,
     given a loop like:
          DO I = 1, N
            DO J = 1, M
              A(J, I) = B(I) + C(J)
            ENDDO
          ENDDO
     loop blocking transforms the loop as if it were written:
          DO II = 1, N, 51
            DO JJ = 1, M, 51
              DO I = II, min (II + 50, N)
                DO J = JJ, min (JJ + 50, M)
                  A(J, I) = B(I) + C(J)
                ENDDO
              ENDDO
            ENDDO
          ENDDO
     which can be beneficial when 'M' is larger than the caches, because
     the innermost loop iterates over a smaller amount of data which can
     be kept in the caches.  This optimization applies to all the
     languages supported by GCC and is not limited to Fortran.  To use
     this code transformation, GCC has to be configured with
     '--with-isl' to enable the Graphite loop transformation
     infrastructure.

'-fgraphite-identity'
     Enable the identity transformation for graphite.  For every SCoP we
     generate the polyhedral representation and transform it back to
     gimple.  Using '-fgraphite-identity' we can check the costs or
     benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some
     minimal optimizations are also performed by the code generator ISL,
     like index splitting and dead code elimination in loops.

'-floop-nest-optimize'
     Enable the ISL based loop nest optimizer.  This is a generic loop
     nest optimizer based on the Pluto optimization algorithms.  It
     calculates a loop structure optimized for data-locality and
     parallelism.  This option is experimental.

'-floop-unroll-and-jam'
     Enable unroll and jam for the ISL based loop nest optimizer.  The
     unroll factor can be changed using the 'loop-unroll-jam-size'
     parameter.  The unrolled dimension (counting from the most inner
     one) can be changed using the 'loop-unroll-jam-depth' parameter.  .

'-floop-parallelize-all'
     Use the Graphite data dependence analysis to identify loops that
     can be parallelized.  Parallelize all the loops that can be
     analyzed to not contain loop carried dependences without checking
     that it is profitable to parallelize the loops.

'-fcheck-data-deps'
     Compare the results of several data dependence analyzers.  This
     option is used for debugging the data dependence analyzers.

'-ftree-loop-if-convert'
     Attempt to transform conditional jumps in the innermost loops to
     branch-less equivalents.  The intent is to remove control-flow from
     the innermost loops in order to improve the ability of the
     vectorization pass to handle these loops.  This is enabled by
     default if vectorization is enabled.

'-ftree-loop-if-convert-stores'
     Attempt to also if-convert conditional jumps containing memory
     writes.  This transformation can be unsafe for multi-threaded
     programs as it transforms conditional memory writes into
     unconditional memory writes.  For example,
          for (i = 0; i < N; i++)
            if (cond)
              A[i] = expr;
     is transformed to
          for (i = 0; i < N; i++)
            A[i] = cond ? expr : A[i];
     potentially producing data races.

'-ftree-loop-distribution'
     Perform loop distribution.  This flag can improve cache performance
     on big loop bodies and allow further loop optimizations, like
     parallelization or vectorization, to take place.  For example, the
     loop
          DO I = 1, N
            A(I) = B(I) + C
            D(I) = E(I) * F
          ENDDO
     is transformed to
          DO I = 1, N
             A(I) = B(I) + C
          ENDDO
          DO I = 1, N
             D(I) = E(I) * F
          ENDDO

'-ftree-loop-distribute-patterns'
     Perform loop distribution of patterns that can be code generated
     with calls to a library.  This flag is enabled by default at '-O3'.

     This pass distributes the initialization loops and generates a call
     to memset zero.  For example, the loop
          DO I = 1, N
            A(I) = 0
            B(I) = A(I) + I
          ENDDO
     is transformed to
          DO I = 1, N
             A(I) = 0
          ENDDO
          DO I = 1, N
             B(I) = A(I) + I
          ENDDO
     and the initialization loop is transformed into a call to memset
     zero.

'-ftree-loop-im'
     Perform loop invariant motion on trees.  This pass moves only
     invariants that are hard to handle at RTL level (function calls,
     operations that expand to nontrivial sequences of insns).  With
     '-funswitch-loops' it also moves operands of conditions that are
     invariant out of the loop, so that we can use just trivial
     invariantness analysis in loop unswitching.  The pass also includes
     store motion.

'-ftree-loop-ivcanon'
     Create a canonical counter for number of iterations in loops for
     which determining number of iterations requires complicated
     analysis.  Later optimizations then may determine the number
     easily.  Useful especially in connection with unrolling.

'-fivopts'
     Perform induction variable optimizations (strength reduction,
     induction variable merging and induction variable elimination) on
     trees.

'-ftree-parallelize-loops=n'
     Parallelize loops, i.e., split their iteration space to run in n
     threads.  This is only possible for loops whose iterations are
     independent and can be arbitrarily reordered.  The optimization is
     only profitable on multiprocessor machines, for loops that are
     CPU-intensive, rather than constrained e.g. by memory bandwidth.
     This option implies '-pthread', and thus is only supported on
     targets that have support for '-pthread'.

'-ftree-pta'
     Perform function-local points-to analysis on trees.  This flag is
     enabled by default at '-O' and higher.

'-ftree-sra'
     Perform scalar replacement of aggregates.  This pass replaces
     structure references with scalars to prevent committing structures
     to memory too early.  This flag is enabled by default at '-O' and
     higher.

'-ftree-copyrename'
     Perform copy renaming on trees.  This pass attempts to rename
     compiler temporaries to other variables at copy locations, usually
     resulting in variable names which more closely resemble the
     original variables.  This flag is enabled by default at '-O' and
     higher.

'-ftree-coalesce-inlined-vars'
     Tell the copyrename pass (see '-ftree-copyrename') to attempt to
     combine small user-defined variables too, but only if they are
     inlined from other functions.  It is a more limited form of
     '-ftree-coalesce-vars'.  This may harm debug information of such
     inlined variables, but it keeps variables of the inlined-into
     function apart from each other, such that they are more likely to
     contain the expected values in a debugging session.

'-ftree-coalesce-vars'
     Tell the copyrename pass (see '-ftree-copyrename') to attempt to
     combine small user-defined variables too, instead of just compiler
     temporaries.  This may severely limit the ability to debug an
     optimized program compiled with '-fno-var-tracking-assignments'.
     In the negated form, this flag prevents SSA coalescing of user
     variables, including inlined ones.  This option is enabled by
     default.

'-ftree-ter'
     Perform temporary expression replacement during the SSA->normal
     phase.  Single use/single def temporaries are replaced at their use
     location with their defining expression.  This results in
     non-GIMPLE code, but gives the expanders much more complex trees to
     work on resulting in better RTL generation.  This is enabled by
     default at '-O' and higher.

'-ftree-slsr'
     Perform straight-line strength reduction on trees.  This recognizes
     related expressions involving multiplications and replaces them by
     less expensive calculations when possible.  This is enabled by
     default at '-O' and higher.

'-ftree-vectorize'
     Perform vectorization on trees.  This flag enables
     '-ftree-loop-vectorize' and '-ftree-slp-vectorize' if not
     explicitly specified.

'-ftree-loop-vectorize'
     Perform loop vectorization on trees.  This flag is enabled by
     default at '-O3' and when '-ftree-vectorize' is enabled.

'-ftree-slp-vectorize'
     Perform basic block vectorization on trees.  This flag is enabled
     by default at '-O3' and when '-ftree-vectorize' is enabled.

'-fvect-cost-model=MODEL'
     Alter the cost model used for vectorization.  The MODEL argument
     should be one of 'unlimited', 'dynamic' or 'cheap'.  With the
     'unlimited' model the vectorized code-path is assumed to be
     profitable while with the 'dynamic' model a runtime check guards
     the vectorized code-path to enable it only for iteration counts
     that will likely execute faster than when executing the original
     scalar loop.  The 'cheap' model disables vectorization of loops
     where doing so would be cost prohibitive for example due to
     required runtime checks for data dependence or alignment but
     otherwise is equal to the 'dynamic' model.  The default cost model
     depends on other optimization flags and is either 'dynamic' or
     'cheap'.

'-fsimd-cost-model=MODEL'
     Alter the cost model used for vectorization of loops marked with
     the OpenMP or Cilk Plus simd directive.  The MODEL argument should
     be one of 'unlimited', 'dynamic', 'cheap'.  All values of MODEL
     have the same meaning as described in '-fvect-cost-model' and by
     default a cost model defined with '-fvect-cost-model' is used.

'-ftree-vrp'
     Perform Value Range Propagation on trees.  This is similar to the
     constant propagation pass, but instead of values, ranges of values
     are propagated.  This allows the optimizers to remove unnecessary
     range checks like array bound checks and null pointer checks.  This
     is enabled by default at '-O2' and higher.  Null pointer check
     elimination is only done if '-fdelete-null-pointer-checks' is
     enabled.

'-fsplit-ivs-in-unroller'
     Enables expression of values of induction variables in later
     iterations of the unrolled loop using the value in the first
     iteration.  This breaks long dependency chains, thus improving
     efficiency of the scheduling passes.

     A combination of '-fweb' and CSE is often sufficient to obtain the
     same effect.  However, that is not reliable in cases where the loop
     body is more complicated than a single basic block.  It also does
     not work at all on some architectures due to restrictions in the
     CSE pass.

     This optimization is enabled by default.

'-fvariable-expansion-in-unroller'
     With this option, the compiler creates multiple copies of some
     local variables when unrolling a loop, which can result in superior
     code.

'-fpartial-inlining'
     Inline parts of functions.  This option has any effect only when
     inlining itself is turned on by the '-finline-functions' or
     '-finline-small-functions' options.

     Enabled at level '-O2'.

'-fpredictive-commoning'
     Perform predictive commoning optimization, i.e., reusing
     computations (especially memory loads and stores) performed in
     previous iterations of loops.

     This option is enabled at level '-O3'.

'-fprefetch-loop-arrays'
     If supported by the target machine, generate instructions to
     prefetch memory to improve the performance of loops that access
     large arrays.

     This option may generate better or worse code; results are highly
     dependent on the structure of loops within the source code.

     Disabled at level '-Os'.

'-fno-peephole'
'-fno-peephole2'
     Disable any machine-specific peephole optimizations.  The
     difference between '-fno-peephole' and '-fno-peephole2' is in how
     they are implemented in the compiler; some targets use one, some
     use the other, a few use both.

     '-fpeephole' is enabled by default.  '-fpeephole2' enabled at
     levels '-O2', '-O3', '-Os'.

'-fno-guess-branch-probability'
     Do not guess branch probabilities using heuristics.

     GCC uses heuristics to guess branch probabilities if they are not
     provided by profiling feedback ('-fprofile-arcs').  These
     heuristics are based on the control flow graph.  If some branch
     probabilities are specified by '__builtin_expect', then the
     heuristics are used to guess branch probabilities for the rest of
     the control flow graph, taking the '__builtin_expect' info into
     account.  The interactions between the heuristics and
     '__builtin_expect' can be complex, and in some cases, it may be
     useful to disable the heuristics so that the effects of
     '__builtin_expect' are easier to understand.

     The default is '-fguess-branch-probability' at levels '-O', '-O2',
     '-O3', '-Os'.

'-freorder-blocks'
     Reorder basic blocks in the compiled function in order to reduce
     number of taken branches and improve code locality.

     Enabled at levels '-O2', '-O3'.

'-freorder-blocks-and-partition'
     In addition to reordering basic blocks in the compiled function, in
     order to reduce number of taken branches, partitions hot and cold
     basic blocks into separate sections of the assembly and .o files,
     to improve paging and cache locality performance.

     This optimization is automatically turned off in the presence of
     exception handling, for linkonce sections, for functions with a
     user-defined section attribute and on any architecture that does
     not support named sections.

     Enabled for x86 at levels '-O2', '-O3'.

'-freorder-functions'
     Reorder functions in the object file in order to improve code
     locality.  This is implemented by using special subsections
     '.text.hot' for most frequently executed functions and
     '.text.unlikely' for unlikely executed functions.  Reordering is
     done by the linker so object file format must support named
     sections and linker must place them in a reasonable way.

     Also profile feedback must be available to make this option
     effective.  See '-fprofile-arcs' for details.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fstrict-aliasing'
     Allow the compiler to assume the strictest aliasing rules
     applicable to the language being compiled.  For C (and C++), this
     activates optimizations based on the type of expressions.  In
     particular, an object of one type is assumed never to reside at the
     same address as an object of a different type, unless the types are
     almost the same.  For example, an 'unsigned int' can alias an
     'int', but not a 'void*' or a 'double'.  A character type may alias
     any other type.

     Pay special attention to code like this:
          union a_union {
            int i;
            double d;
          };

          int f() {
            union a_union t;
            t.d = 3.0;
            return t.i;
          }
     The practice of reading from a different union member than the one
     most recently written to (called "type-punning") is common.  Even
     with '-fstrict-aliasing', type-punning is allowed, provided the
     memory is accessed through the union type.  So, the code above
     works as expected.  *Note Structures unions enumerations and
     bit-fields implementation::.  However, this code might not:
          int f() {
            union a_union t;
            int* ip;
            t.d = 3.0;
            ip = &t.i;
            return *ip;
          }

     Similarly, access by taking the address, casting the resulting
     pointer and dereferencing the result has undefined behavior, even
     if the cast uses a union type, e.g.:
          int f() {
            double d = 3.0;
            return ((union a_union *) &d)->i;
          }

     The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3',
     '-Os'.

'-fstrict-overflow'
     Allow the compiler to assume strict signed overflow rules,
     depending on the language being compiled.  For C (and C++) this
     means that overflow when doing arithmetic with signed numbers is
     undefined, which means that the compiler may assume that it does
     not happen.  This permits various optimizations.  For example, the
     compiler assumes that an expression like 'i + 10 > i' is always
     true for signed 'i'.  This assumption is only valid if signed
     overflow is undefined, as the expression is false if 'i + 10'
     overflows when using twos complement arithmetic.  When this option
     is in effect any attempt to determine whether an operation on
     signed numbers overflows must be written carefully to not actually
     involve overflow.

     This option also allows the compiler to assume strict pointer
     semantics: given a pointer to an object, if adding an offset to
     that pointer does not produce a pointer to the same object, the
     addition is undefined.  This permits the compiler to conclude that
     'p + u > p' is always true for a pointer 'p' and unsigned integer
     'u'.  This assumption is only valid because pointer wraparound is
     undefined, as the expression is false if 'p + u' overflows using
     twos complement arithmetic.

     See also the '-fwrapv' option.  Using '-fwrapv' means that integer
     signed overflow is fully defined: it wraps.  When '-fwrapv' is
     used, there is no difference between '-fstrict-overflow' and
     '-fno-strict-overflow' for integers.  With '-fwrapv' certain types
     of overflow are permitted.  For example, if the compiler gets an
     overflow when doing arithmetic on constants, the overflowed value
     can still be used with '-fwrapv', but not otherwise.

     The '-fstrict-overflow' option is enabled at levels '-O2', '-O3',
     '-Os'.

'-falign-functions'
'-falign-functions=N'
     Align the start of functions to the next power-of-two greater than
     N, skipping up to N bytes.  For instance, '-falign-functions=32'
     aligns functions to the next 32-byte boundary, but
     '-falign-functions=24' aligns to the next 32-byte boundary only if
     this can be done by skipping 23 bytes or less.

     '-fno-align-functions' and '-falign-functions=1' are equivalent and
     mean that functions are not aligned.

     Some assemblers only support this flag when N is a power of two; in
     that case, it is rounded up.

     If N is not specified or is zero, use a machine-dependent default.

     Enabled at levels '-O2', '-O3'.

'-falign-labels'
'-falign-labels=N'
     Align all branch targets to a power-of-two boundary, skipping up to
     N bytes like '-falign-functions'.  This option can easily make code
     slower, because it must insert dummy operations for when the branch
     target is reached in the usual flow of the code.

     '-fno-align-labels' and '-falign-labels=1' are equivalent and mean
     that labels are not aligned.

     If '-falign-loops' or '-falign-jumps' are applicable and are
     greater than this value, then their values are used instead.

     If N is not specified or is zero, use a machine-dependent default
     which is very likely to be '1', meaning no alignment.

     Enabled at levels '-O2', '-O3'.

'-falign-loops'
'-falign-loops=N'
     Align loops to a power-of-two boundary, skipping up to N bytes like
     '-falign-functions'.  If the loops are executed many times, this
     makes up for any execution of the dummy operations.

     '-fno-align-loops' and '-falign-loops=1' are equivalent and mean
     that loops are not aligned.

     If N is not specified or is zero, use a machine-dependent default.

     Enabled at levels '-O2', '-O3'.

'-falign-jumps'
'-falign-jumps=N'
     Align branch targets to a power-of-two boundary, for branch targets
     where the targets can only be reached by jumping, skipping up to N
     bytes like '-falign-functions'.  In this case, no dummy operations
     need be executed.

     '-fno-align-jumps' and '-falign-jumps=1' are equivalent and mean
     that loops are not aligned.

     If N is not specified or is zero, use a machine-dependent default.

     Enabled at levels '-O2', '-O3'.

'-funit-at-a-time'
     This option is left for compatibility reasons.  '-funit-at-a-time'
     has no effect, while '-fno-unit-at-a-time' implies
     '-fno-toplevel-reorder' and '-fno-section-anchors'.

     Enabled by default.

'-fno-toplevel-reorder'
     Do not reorder top-level functions, variables, and 'asm'
     statements.  Output them in the same order that they appear in the
     input file.  When this option is used, unreferenced static
     variables are not removed.  This option is intended to support
     existing code that relies on a particular ordering.  For new code,
     it is better to use attributes when possible.

     Enabled at level '-O0'.  When disabled explicitly, it also implies
     '-fno-section-anchors', which is otherwise enabled at '-O0' on some
     targets.

'-fweb'
     Constructs webs as commonly used for register allocation purposes
     and assign each web individual pseudo register.  This allows the
     register allocation pass to operate on pseudos directly, but also
     strengthens several other optimization passes, such as CSE, loop
     optimizer and trivial dead code remover.  It can, however, make
     debugging impossible, since variables no longer stay in a "home
     register".

     Enabled by default with '-funroll-loops'.

'-fwhole-program'
     Assume that the current compilation unit represents the whole
     program being compiled.  All public functions and variables with
     the exception of 'main' and those merged by attribute
     'externally_visible' become static functions and in effect are
     optimized more aggressively by interprocedural optimizers.

     This option should not be used in combination with '-flto'.
     Instead relying on a linker plugin should provide safer and more
     precise information.

'-flto[=N]'
     This option runs the standard link-time optimizer.  When invoked
     with source code, it generates GIMPLE (one of GCC's internal
     representations) and writes it to special ELF sections in the
     object file.  When the object files are linked together, all the
     function bodies are read from these ELF sections and instantiated
     as if they had been part of the same translation unit.

     To use the link-time optimizer, '-flto' and optimization options
     should be specified at compile time and during the final link.  For
     example:

          gcc -c -O2 -flto foo.c
          gcc -c -O2 -flto bar.c
          gcc -o myprog -flto -O2 foo.o bar.o

     The first two invocations to GCC save a bytecode representation of
     GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'.  The
     final invocation reads the GIMPLE bytecode from 'foo.o' and
     'bar.o', merges the two files into a single internal image, and
     compiles the result as usual.  Since both 'foo.o' and 'bar.o' are
     merged into a single image, this causes all the interprocedural
     analyses and optimizations in GCC to work across the two files as
     if they were a single one.  This means, for example, that the
     inliner is able to inline functions in 'bar.o' into functions in
     'foo.o' and vice-versa.

     Another (simpler) way to enable link-time optimization is:

          gcc -o myprog -flto -O2 foo.c bar.c

     The above generates bytecode for 'foo.c' and 'bar.c', merges them
     together into a single GIMPLE representation and optimizes them as
     usual to produce 'myprog'.

     The only important thing to keep in mind is that to enable
     link-time optimizations you need to use the GCC driver to perform
     the link-step.  GCC then automatically performs link-time
     optimization if any of the objects involved were compiled with the
     '-flto' command-line option.  You generally should specify the
     optimization options to be used for link-time optimization though
     GCC tries to be clever at guessing an optimization level to use
     from the options used at compile-time if you fail to specify one at
     link-time.  You can always override the automatic decision to do
     link-time optimization at link-time by passing '-fno-lto' to the
     link command.

     To make whole program optimization effective, it is necessary to
     make certain whole program assumptions.  The compiler needs to know
     what functions and variables can be accessed by libraries and
     runtime outside of the link-time optimized unit.  When supported by
     the linker, the linker plugin (see '-fuse-linker-plugin') passes
     information to the compiler about used and externally visible
     symbols.  When the linker plugin is not available,
     '-fwhole-program' should be used to allow the compiler to make
     these assumptions, which leads to more aggressive optimization
     decisions.

     When '-fuse-linker-plugin' is not enabled then, when a file is
     compiled with '-flto', the generated object file is larger than a
     regular object file because it contains GIMPLE bytecodes and the
     usual final code (see '-ffat-lto-objects'.  This means that object
     files with LTO information can be linked as normal object files; if
     '-fno-lto' is passed to the linker, no interprocedural
     optimizations are applied.  Note that when '-fno-fat-lto-objects'
     is enabled the compile-stage is faster but you cannot perform a
     regular, non-LTO link on them.

     Additionally, the optimization flags used to compile individual
     files are not necessarily related to those used at link time.  For
     instance,

          gcc -c -O0 -ffat-lto-objects -flto foo.c
          gcc -c -O0 -ffat-lto-objects -flto bar.c
          gcc -o myprog -O3 foo.o bar.o

     This produces individual object files with unoptimized assembler
     code, but the resulting binary 'myprog' is optimized at '-O3'.  If,
     instead, the final binary is generated with '-fno-lto', then
     'myprog' is not optimized.

     When producing the final binary, GCC only applies link-time
     optimizations to those files that contain bytecode.  Therefore, you
     can mix and match object files and libraries with GIMPLE bytecodes
     and final object code.  GCC automatically selects which files to
     optimize in LTO mode and which files to link without further
     processing.

     There are some code generation flags preserved by GCC when
     generating bytecodes, as they need to be used during the final link
     stage.  Generally options specified at link-time override those
     specified at compile-time.

     If you do not specify an optimization level option '-O' at
     link-time then GCC computes one based on the optimization levels
     used when compiling the object files.  The highest optimization
     level wins here.

     Currently, the following options and their setting are take from
     the first object file that explicitely specified it: '-fPIC',
     '-fpic', '-fpie', '-fcommon', '-fexceptions',
     '-fnon-call-exceptions', '-fgnu-tm' and all the '-m' target flags.

     Certain ABI changing flags are required to match in all
     compilation-units and trying to override this at link-time with a
     conflicting value is ignored.  This includes options such as
     '-freg-struct-return' and '-fpcc-struct-return'.

     Other options such as '-ffp-contract', '-fno-strict-overflow',
     '-fwrapv', '-fno-trapv' or '-fno-strict-aliasing' are passed
     through to the link stage and merged conservatively for conflicting
     translation units.  Specifically '-fno-strict-overflow', '-fwrapv'
     and '-fno-trapv' take precedence and for example
     '-ffp-contract=off' takes precedence over '-ffp-contract=fast'.
     You can override them at linke-time.

     It is recommended that you compile all the files participating in
     the same link with the same options and also specify those options
     at link time.

     If LTO encounters objects with C linkage declared with incompatible
     types in separate translation units to be linked together
     (undefined behavior according to ISO C99 6.2.7), a non-fatal
     diagnostic may be issued.  The behavior is still undefined at run
     time.  Similar diagnostics may be raised for other languages.

     Another feature of LTO is that it is possible to apply
     interprocedural optimizations on files written in different
     languages:

          gcc -c -flto foo.c
          g++ -c -flto bar.cc
          gfortran -c -flto baz.f90
          g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

     Notice that the final link is done with 'g++' to get the C++
     runtime libraries and '-lgfortran' is added to get the Fortran
     runtime libraries.  In general, when mixing languages in LTO mode,
     you should use the same link command options as when mixing
     languages in a regular (non-LTO) compilation.

     If object files containing GIMPLE bytecode are stored in a library
     archive, say 'libfoo.a', it is possible to extract and use them in
     an LTO link if you are using a linker with plugin support.  To
     create static libraries suitable for LTO, use 'gcc-ar' and
     'gcc-ranlib' instead of 'ar' and 'ranlib'; to show the symbols of
     object files with GIMPLE bytecode, use 'gcc-nm'.  Those commands
     require that 'ar', 'ranlib' and 'nm' have been compiled with plugin
     support.  At link time, use the the flag '-fuse-linker-plugin' to
     ensure that the library participates in the LTO optimization
     process:

          gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo

     With the linker plugin enabled, the linker extracts the needed
     GIMPLE files from 'libfoo.a' and passes them on to the running GCC
     to make them part of the aggregated GIMPLE image to be optimized.

     If you are not using a linker with plugin support and/or do not
     enable the linker plugin, then the objects inside 'libfoo.a' are
     extracted and linked as usual, but they do not participate in the
     LTO optimization process.  In order to make a static library
     suitable for both LTO optimization and usual linkage, compile its
     object files with '-flto' '-ffat-lto-objects'.

     Link-time optimizations do not require the presence of the whole
     program to operate.  If the program does not require any symbols to
     be exported, it is possible to combine '-flto' and
     '-fwhole-program' to allow the interprocedural optimizers to use
     more aggressive assumptions which may lead to improved optimization
     opportunities.  Use of '-fwhole-program' is not needed when linker
     plugin is active (see '-fuse-linker-plugin').

     The current implementation of LTO makes no attempt to generate
     bytecode that is portable between different types of hosts.  The
     bytecode files are versioned and there is a strict version check,
     so bytecode files generated in one version of GCC do not work with
     an older or newer version of GCC.

     Link-time optimization does not work well with generation of
     debugging information.  Combining '-flto' with '-g' is currently
     experimental and expected to produce unexpected results.

     If you specify the optional N, the optimization and code generation
     done at link time is executed in parallel using N parallel jobs by
     utilizing an installed 'make' program.  The environment variable
     'MAKE' may be used to override the program used.  The default value
     for N is 1.

     You can also specify '-flto=jobserver' to use GNU make's job server
     mode to determine the number of parallel jobs.  This is useful when
     the Makefile calling GCC is already executing in parallel.  You
     must prepend a '+' to the command recipe in the parent Makefile for
     this to work.  This option likely only works if 'MAKE' is GNU make.

'-flto-partition=ALG'
     Specify the partitioning algorithm used by the link-time optimizer.
     The value is either '1to1' to specify a partitioning mirroring the
     original source files or 'balanced' to specify partitioning into
     equally sized chunks (whenever possible) or 'max' to create new
     partition for every symbol where possible.  Specifying 'none' as an
     algorithm disables partitioning and streaming completely.  The
     default value is 'balanced'.  While '1to1' can be used as an
     workaround for various code ordering issues, the 'max' partitioning
     is intended for internal testing only.  The value 'one' specifies
     that exactly one partition should be used while the value 'none'
     bypasses partitioning and executes the link-time optimization step
     directly from the WPA phase.

'-flto-odr-type-merging'
     Enable streaming of mangled types names of C++ types and their
     unification at linktime.  This increases size of LTO object files,
     but enable diagnostics about One Definition Rule violations.

'-flto-compression-level=N'
     This option specifies the level of compression used for
     intermediate language written to LTO object files, and is only
     meaningful in conjunction with LTO mode ('-flto').  Valid values
     are 0 (no compression) to 9 (maximum compression).  Values outside
     this range are clamped to either 0 or 9.  If the option is not
     given, a default balanced compression setting is used.

'-flto-report'
     Prints a report with internal details on the workings of the
     link-time optimizer.  The contents of this report vary from version
     to version.  It is meant to be useful to GCC developers when
     processing object files in LTO mode (via '-flto').

     Disabled by default.

'-flto-report-wpa'
     Like '-flto-report', but only print for the WPA phase of Link Time
     Optimization.

'-fuse-linker-plugin'
     Enables the use of a linker plugin during link-time optimization.
     This option relies on plugin support in the linker, which is
     available in gold or in GNU ld 2.21 or newer.

     This option enables the extraction of object files with GIMPLE
     bytecode out of library archives.  This improves the quality of
     optimization by exposing more code to the link-time optimizer.
     This information specifies what symbols can be accessed externally
     (by non-LTO object or during dynamic linking).  Resulting code
     quality improvements on binaries (and shared libraries that use
     hidden visibility) are similar to '-fwhole-program'.  See '-flto'
     for a description of the effect of this flag and how to use it.

     This option is enabled by default when LTO support in GCC is
     enabled and GCC was configured for use with a linker supporting
     plugins (GNU ld 2.21 or newer or gold).

'-ffat-lto-objects'
     Fat LTO objects are object files that contain both the intermediate
     language and the object code.  This makes them usable for both LTO
     linking and normal linking.  This option is effective only when
     compiling with '-flto' and is ignored at link time.

     '-fno-fat-lto-objects' improves compilation time over plain LTO,
     but requires the complete toolchain to be aware of LTO. It requires
     a linker with linker plugin support for basic functionality.
     Additionally, 'nm', 'ar' and 'ranlib' need to support linker
     plugins to allow a full-featured build environment (capable of
     building static libraries etc).  GCC provides the 'gcc-ar',
     'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these
     tools.  With non fat LTO makefiles need to be modified to use them.

     The default is '-fno-fat-lto-objects' on targets with linker plugin
     support.

'-fcompare-elim'
     After register allocation and post-register allocation instruction
     splitting, identify arithmetic instructions that compute processor
     flags similar to a comparison operation based on that arithmetic.
     If possible, eliminate the explicit comparison operation.

     This pass only applies to certain targets that cannot explicitly
     represent the comparison operation before register allocation is
     complete.

     Enabled at levels '-O', '-O2', '-O3', '-Os'.

'-fcprop-registers'
     After register allocation and post-register allocation instruction
     splitting, perform a copy-propagation pass to try to reduce
     scheduling dependencies and occasionally eliminate the copy.

     Enabled at levels '-O', '-O2', '-O3', '-Os'.

'-fprofile-correction'
     Profiles collected using an instrumented binary for multi-threaded
     programs may be inconsistent due to missed counter updates.  When
     this option is specified, GCC uses heuristics to correct or smooth
     out such inconsistencies.  By default, GCC emits an error message
     when an inconsistent profile is detected.

'-fprofile-dir=PATH'

     Set the directory to search for the profile data files in to PATH.
     This option affects only the profile data generated by
     '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used
     by '-fprofile-use' and '-fbranch-probabilities' and its related
     options.  Both absolute and relative paths can be used.  By
     default, GCC uses the current directory as PATH, thus the profile
     data file appears in the same directory as the object file.

'-fprofile-generate'
'-fprofile-generate=PATH'

     Enable options usually used for instrumenting application to
     produce profile useful for later recompilation with profile
     feedback based optimization.  You must use '-fprofile-generate'
     both when compiling and when linking your program.

     The following options are enabled: '-fprofile-arcs',
     '-fprofile-values', '-fvpt'.

     If PATH is specified, GCC looks at the PATH to find the profile
     feedback data files.  See '-fprofile-dir'.

'-fprofile-use'
'-fprofile-use=PATH'
     Enable profile feedback-directed optimizations, and the following
     optimizations which are generally profitable only with profile
     feedback available: '-fbranch-probabilities', '-fvpt',
     '-funroll-loops', '-fpeel-loops', '-ftracer', '-ftree-vectorize',
     and 'ftree-loop-distribute-patterns'.

     By default, GCC emits an error message if the feedback profiles do
     not match the source code.  This error can be turned into a warning
     by using '-Wcoverage-mismatch'.  Note this may result in poorly
     optimized code.

     If PATH is specified, GCC looks at the PATH to find the profile
     feedback data files.  See '-fprofile-dir'.

'-fauto-profile'
'-fauto-profile=PATH'
     Enable sampling-based feedback-directed optimizations, and the
     following optimizations which are generally profitable only with
     profile feedback available: '-fbranch-probabilities', '-fvpt',
     '-funroll-loops', '-fpeel-loops', '-ftracer', '-ftree-vectorize',
     '-finline-functions', '-fipa-cp', '-fipa-cp-clone',
     '-fpredictive-commoning', '-funswitch-loops',
     '-fgcse-after-reload', and '-ftree-loop-distribute-patterns'.

     PATH is the name of a file containing AutoFDO profile information.
     If omitted, it defaults to 'fbdata.afdo' in the current directory.

     Producing an AutoFDO profile data file requires running your
     program with the 'perf' utility on a supported GNU/Linux target
     system.  For more information, see <https://perf.wiki.kernel.org/>.

     E.g.
          perf record -e br_inst_retired:near_taken -b -o perf.data \
              -- your_program

     Then use the 'create_gcov' tool to convert the raw profile data to
     a format that can be used by GCC.  You must also supply the
     unstripped binary for your program to this tool.  See
     <https://github.com/google/autofdo>.

     E.g.
          create_gcov --binary=your_program.unstripped --profile=perf.data \
              --gcov=profile.afdo

 The following options control compiler behavior regarding
floating-point arithmetic.  These options trade off between speed and
correctness.  All must be specifically enabled.

'-ffloat-store'
     Do not store floating-point variables in registers, and inhibit
     other options that might change whether a floating-point value is
     taken from a register or memory.

     This option prevents undesirable excess precision on machines such
     as the 68000 where the floating registers (of the 68881) keep more
     precision than a 'double' is supposed to have.  Similarly for the
     x86 architecture.  For most programs, the excess precision does
     only good, but a few programs rely on the precise definition of
     IEEE floating point.  Use '-ffloat-store' for such programs, after
     modifying them to store all pertinent intermediate computations
     into variables.

'-fexcess-precision=STYLE'
     This option allows further control over excess precision on
     machines where floating-point registers have more precision than
     the IEEE 'float' and 'double' types and the processor does not
     support operations rounding to those types.  By default,
     '-fexcess-precision=fast' is in effect; this means that operations
     are carried out in the precision of the registers and that it is
     unpredictable when rounding to the types specified in the source
     code takes place.  When compiling C, if
     '-fexcess-precision=standard' is specified then excess precision
     follows the rules specified in ISO C99; in particular, both casts
     and assignments cause values to be rounded to their semantic types
     (whereas '-ffloat-store' only affects assignments).  This option is
     enabled by default for C if a strict conformance option such as
     '-std=c99' is used.

     '-fexcess-precision=standard' is not implemented for languages
     other than C, and has no effect if '-funsafe-math-optimizations' or
     '-ffast-math' is specified.  On the x86, it also has no effect if
     '-mfpmath=sse' or '-mfpmath=sse+387' is specified; in the former
     case, IEEE semantics apply without excess precision, and in the
     latter, rounding is unpredictable.

'-ffast-math'
     Sets the options '-fno-math-errno', '-funsafe-math-optimizations',
     '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans'
     and '-fcx-limited-range'.

     This option causes the preprocessor macro '__FAST_MATH__' to be
     defined.

     This option is not turned on by any '-O' option besides '-Ofast'
     since it can result in incorrect output for programs that depend on
     an exact implementation of IEEE or ISO rules/specifications for
     math functions.  It may, however, yield faster code for programs
     that do not require the guarantees of these specifications.

'-fno-math-errno'
     Do not set 'errno' after calling math functions that are executed
     with a single instruction, e.g., 'sqrt'.  A program that relies on
     IEEE exceptions for math error handling may want to use this flag
     for speed while maintaining IEEE arithmetic compatibility.

     This option is not turned on by any '-O' option since it can result
     in incorrect output for programs that depend on an exact
     implementation of IEEE or ISO rules/specifications for math
     functions.  It may, however, yield faster code for programs that do
     not require the guarantees of these specifications.

     The default is '-fmath-errno'.

     On Darwin systems, the math library never sets 'errno'.  There is
     therefore no reason for the compiler to consider the possibility
     that it might, and '-fno-math-errno' is the default.

'-funsafe-math-optimizations'

     Allow optimizations for floating-point arithmetic that (a) assume
     that arguments and results are valid and (b) may violate IEEE or
     ANSI standards.  When used at link-time, it may include libraries
     or startup files that change the default FPU control word or other
     similar optimizations.

     This option is not turned on by any '-O' option since it can result
     in incorrect output for programs that depend on an exact
     implementation of IEEE or ISO rules/specifications for math
     functions.  It may, however, yield faster code for programs that do
     not require the guarantees of these specifications.  Enables
     '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and
     '-freciprocal-math'.

     The default is '-fno-unsafe-math-optimizations'.

'-fassociative-math'

     Allow re-association of operands in series of floating-point
     operations.  This violates the ISO C and C++ language standard by
     possibly changing computation result.  NOTE: re-ordering may change
     the sign of zero as well as ignore NaNs and inhibit or create
     underflow or overflow (and thus cannot be used on code that relies
     on rounding behavior like '(x + 2**52) - 2**52'.  May also reorder
     floating-point comparisons and thus may not be used when ordered
     comparisons are required.  This option requires that both
     '-fno-signed-zeros' and '-fno-trapping-math' be in effect.
     Moreover, it doesn't make much sense with '-frounding-math'.  For
     Fortran the option is automatically enabled when both
     '-fno-signed-zeros' and '-fno-trapping-math' are in effect.

     The default is '-fno-associative-math'.

'-freciprocal-math'

     Allow the reciprocal of a value to be used instead of dividing by
     the value if this enables optimizations.  For example 'x / y' can
     be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject
     to common subexpression elimination.  Note that this loses
     precision and increases the number of flops operating on the value.

     The default is '-fno-reciprocal-math'.

'-ffinite-math-only'
     Allow optimizations for floating-point arithmetic that assume that
     arguments and results are not NaNs or +-Infs.

     This option is not turned on by any '-O' option since it can result
     in incorrect output for programs that depend on an exact
     implementation of IEEE or ISO rules/specifications for math
     functions.  It may, however, yield faster code for programs that do
     not require the guarantees of these specifications.

     The default is '-fno-finite-math-only'.

'-fno-signed-zeros'
     Allow optimizations for floating-point arithmetic that ignore the
     signedness of zero.  IEEE arithmetic specifies the behavior of
     distinct +0.0 and -0.0 values, which then prohibits simplification
     of expressions such as x+0.0 or 0.0*x (even with
     '-ffinite-math-only').  This option implies that the sign of a zero
     result isn't significant.

     The default is '-fsigned-zeros'.

'-fno-trapping-math'
     Compile code assuming that floating-point operations cannot
     generate user-visible traps.  These traps include division by zero,
     overflow, underflow, inexact result and invalid operation.  This
     option requires that '-fno-signaling-nans' be in effect.  Setting
     this option may allow faster code if one relies on "non-stop" IEEE
     arithmetic, for example.

     This option should never be turned on by any '-O' option since it
     can result in incorrect output for programs that depend on an exact
     implementation of IEEE or ISO rules/specifications for math
     functions.

     The default is '-ftrapping-math'.

'-frounding-math'
     Disable transformations and optimizations that assume default
     floating-point rounding behavior.  This is round-to-zero for all
     floating point to integer conversions, and round-to-nearest for all
     other arithmetic truncations.  This option should be specified for
     programs that change the FP rounding mode dynamically, or that may
     be executed with a non-default rounding mode.  This option disables
     constant folding of floating-point expressions at compile time
     (which may be affected by rounding mode) and arithmetic
     transformations that are unsafe in the presence of sign-dependent
     rounding modes.

     The default is '-fno-rounding-math'.

     This option is experimental and does not currently guarantee to
     disable all GCC optimizations that are affected by rounding mode.
     Future versions of GCC may provide finer control of this setting
     using C99's 'FENV_ACCESS' pragma.  This command-line option will be
     used to specify the default state for 'FENV_ACCESS'.

'-fsignaling-nans'
     Compile code assuming that IEEE signaling NaNs may generate
     user-visible traps during floating-point operations.  Setting this
     option disables optimizations that may change the number of
     exceptions visible with signaling NaNs.  This option implies
     '-ftrapping-math'.

     This option causes the preprocessor macro '__SUPPORT_SNAN__' to be
     defined.

     The default is '-fno-signaling-nans'.

     This option is experimental and does not currently guarantee to
     disable all GCC optimizations that affect signaling NaN behavior.

'-fsingle-precision-constant'
     Treat floating-point constants as single precision instead of
     implicitly converting them to double-precision constants.

'-fcx-limited-range'
     When enabled, this option states that a range reduction step is not
     needed when performing complex division.  Also, there is no
     checking whether the result of a complex multiplication or division
     is 'NaN + I*NaN', with an attempt to rescue the situation in that
     case.  The default is '-fno-cx-limited-range', but is enabled by
     '-ffast-math'.

     This option controls the default setting of the ISO C99
     'CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to all
     languages.

'-fcx-fortran-rules'
     Complex multiplication and division follow Fortran rules.  Range
     reduction is done as part of complex division, but there is no
     checking whether the result of a complex multiplication or division
     is 'NaN + I*NaN', with an attempt to rescue the situation in that
     case.

     The default is '-fno-cx-fortran-rules'.

 The following options control optimizations that may improve
performance, but are not enabled by any '-O' options.  This section
includes experimental options that may produce broken code.

'-fbranch-probabilities'
     After running a program compiled with '-fprofile-arcs' (*note
     Options for Debugging Your Program or 'gcc': Debugging Options.),
     you can compile it a second time using '-fbranch-probabilities', to
     improve optimizations based on the number of times each branch was
     taken.  When a program compiled with '-fprofile-arcs' exits, it
     saves arc execution counts to a file called 'SOURCENAME.gcda' for
     each source file.  The information in this data file is very
     dependent on the structure of the generated code, so you must use
     the same source code and the same optimization options for both
     compilations.

     With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on
     each 'JUMP_INSN' and 'CALL_INSN'.  These can be used to improve
     optimization.  Currently, they are only used in one place: in
     'reorg.c', instead of guessing which path a branch is most likely
     to take, the 'REG_BR_PROB' values are used to exactly determine
     which path is taken more often.

'-fprofile-values'
     If combined with '-fprofile-arcs', it adds code so that some data
     about values of expressions in the program is gathered.

     With '-fbranch-probabilities', it reads back the data gathered from
     profiling values of expressions for usage in optimizations.

     Enabled with '-fprofile-generate' and '-fprofile-use'.

'-fprofile-reorder-functions'
     Function reordering based on profile instrumentation collects first
     time of execution of a function and orders these functions in
     ascending order.

     Enabled with '-fprofile-use'.

'-fvpt'
     If combined with '-fprofile-arcs', this option instructs the
     compiler to add code to gather information about values of
     expressions.

     With '-fbranch-probabilities', it reads back the data gathered and
     actually performs the optimizations based on them.  Currently the
     optimizations include specialization of division operations using
     the knowledge about the value of the denominator.

'-frename-registers'
     Attempt to avoid false dependencies in scheduled code by making use
     of registers left over after register allocation.  This
     optimization most benefits processors with lots of registers.
     Depending on the debug information format adopted by the target,
     however, it can make debugging impossible, since variables no
     longer stay in a "home register".

     Enabled by default with '-funroll-loops' and '-fpeel-loops'.

'-fschedule-fusion'
     Performs a target dependent pass over the instruction stream to
     schedule instructions of same type together because target machine
     can execute them more efficiently if they are adjacent to each
     other in the instruction flow.

     Enabled at levels '-O2', '-O3', '-Os'.

'-ftracer'
     Perform tail duplication to enlarge superblock size.  This
     transformation simplifies the control flow of the function allowing
     other optimizations to do a better job.

     Enabled with '-fprofile-use'.

'-funroll-loops'
     Unroll loops whose number of iterations can be determined at
     compile time or upon entry to the loop.  '-funroll-loops' implies
     '-frerun-cse-after-loop', '-fweb' and '-frename-registers'.  It
     also turns on complete loop peeling (i.e. complete removal of loops
     with a small constant number of iterations).  This option makes
     code larger, and may or may not make it run faster.

     Enabled with '-fprofile-use'.

'-funroll-all-loops'
     Unroll all loops, even if their number of iterations is uncertain
     when the loop is entered.  This usually makes programs run more
     slowly.  '-funroll-all-loops' implies the same options as
     '-funroll-loops'.

'-fpeel-loops'
     Peels loops for which there is enough information that they do not
     roll much (from profile feedback).  It also turns on complete loop
     peeling (i.e. complete removal of loops with small constant number
     of iterations).

     Enabled with '-fprofile-use'.

'-fmove-loop-invariants'
     Enables the loop invariant motion pass in the RTL loop optimizer.
     Enabled at level '-O1'

'-funswitch-loops'
     Move branches with loop invariant conditions out of the loop, with
     duplicates of the loop on both branches (modified according to
     result of the condition).

'-ffunction-sections'
'-fdata-sections'
     Place each function or data item into its own section in the output
     file if the target supports arbitrary sections.  The name of the
     function or the name of the data item determines the section's name
     in the output file.

     Use these options on systems where the linker can perform
     optimizations to improve locality of reference in the instruction
     space.  Most systems using the ELF object format and SPARC
     processors running Solaris 2 have linkers with such optimizations.
     AIX may have these optimizations in the future.

     Only use these options when there are significant benefits from
     doing so.  When you specify these options, the assembler and linker
     create larger object and executable files and are also slower.  You
     cannot use 'gprof' on all systems if you specify this option, and
     you may have problems with debugging if you specify both this
     option and '-g'.

'-fbranch-target-load-optimize'
     Perform branch target register load optimization before prologue /
     epilogue threading.  The use of target registers can typically be
     exposed only during reload, thus hoisting loads out of loops and
     doing inter-block scheduling needs a separate optimization pass.

'-fbranch-target-load-optimize2'
     Perform branch target register load optimization after prologue /
     epilogue threading.

'-fbtr-bb-exclusive'
     When performing branch target register load optimization, don't
     reuse branch target registers within any basic block.

'-fstack-protector'
     Emit extra code to check for buffer overflows, such as stack
     smashing attacks.  This is done by adding a guard variable to
     functions with vulnerable objects.  This includes functions that
     call 'alloca', and functions with buffers larger than 8 bytes.  The
     guards are initialized when a function is entered and then checked
     when the function exits.  If a guard check fails, an error message
     is printed and the program exits.

'-fstack-protector-all'
     Like '-fstack-protector' except that all functions are protected.

'-fstack-protector-strong'
     Like '-fstack-protector' but includes additional functions to be
     protected -- those that have local array definitions, or have
     references to local frame addresses.

'-fstack-protector-explicit'
     Like '-fstack-protector' but only protects those functions which
     have the 'stack_protect' attribute

'-fstdarg-opt'
     Optimize the prologue of variadic argument functions with respect
     to usage of those arguments.

'-fsection-anchors'
     Try to reduce the number of symbolic address calculations by using
     shared "anchor" symbols to address nearby objects.  This
     transformation can help to reduce the number of GOT entries and GOT
     accesses on some targets.

     For example, the implementation of the following function 'foo':

          static int a, b, c;
          int foo (void) { return a + b + c; }

     usually calculates the addresses of all three variables, but if you
     compile it with '-fsection-anchors', it accesses the variables from
     a common anchor point instead.  The effect is similar to the
     following pseudocode (which isn't valid C):

          int foo (void)
          {
            register int *xr = &x;
            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
          }

     Not all targets support this option.

'--param NAME=VALUE'
     In some places, GCC uses various constants to control the amount of
     optimization that is done.  For example, GCC does not inline
     functions that contain more than a certain number of instructions.
     You can control some of these constants on the command line using
     the '--param' option.

     The names of specific parameters, and the meaning of the values,
     are tied to the internals of the compiler, and are subject to
     change without notice in future releases.

     In each case, the VALUE is an integer.  The allowable choices for
     NAME are:

     'predictable-branch-outcome'
          When branch is predicted to be taken with probability lower
          than this threshold (in percent), then it is considered well
          predictable.  The default is 10.

     'max-crossjump-edges'
          The maximum number of incoming edges to consider for
          cross-jumping.  The algorithm used by '-fcrossjumping' is
          O(N^2) in the number of edges incoming to each block.
          Increasing values mean more aggressive optimization, making
          the compilation time increase with probably small improvement
          in executable size.

     'min-crossjump-insns'
          The minimum number of instructions that must be matched at the
          end of two blocks before cross-jumping is performed on them.
          This value is ignored in the case where all instructions in
          the block being cross-jumped from are matched.  The default
          value is 5.

     'max-grow-copy-bb-insns'
          The maximum code size expansion factor when copying basic
          blocks instead of jumping.  The expansion is relative to a
          jump instruction.  The default value is 8.

     'max-goto-duplication-insns'
          The maximum number of instructions to duplicate to a block
          that jumps to a computed goto.  To avoid O(N^2) behavior in a
          number of passes, GCC factors computed gotos early in the
          compilation process, and unfactors them as late as possible.
          Only computed jumps at the end of a basic blocks with no more
          than max-goto-duplication-insns are unfactored.  The default
          value is 8.

     'max-delay-slot-insn-search'
          The maximum number of instructions to consider when looking
          for an instruction to fill a delay slot.  If more than this
          arbitrary number of instructions are searched, the time
          savings from filling the delay slot are minimal, so stop
          searching.  Increasing values mean more aggressive
          optimization, making the compilation time increase with
          probably small improvement in execution time.

     'max-delay-slot-live-search'
          When trying to fill delay slots, the maximum number of
          instructions to consider when searching for a block with valid
          live register information.  Increasing this arbitrarily chosen
          value means more aggressive optimization, increasing the
          compilation time.  This parameter should be removed when the
          delay slot code is rewritten to maintain the control-flow
          graph.

     'max-gcse-memory'
          The approximate maximum amount of memory that can be allocated
          in order to perform the global common subexpression
          elimination optimization.  If more memory than specified is
          required, the optimization is not done.

     'max-gcse-insertion-ratio'
          If the ratio of expression insertions to deletions is larger
          than this value for any expression, then RTL PRE inserts or
          removes the expression and thus leaves partially redundant
          computations in the instruction stream.  The default value is
          20.

     'max-pending-list-length'
          The maximum number of pending dependencies scheduling allows
          before flushing the current state and starting over.  Large
          functions with few branches or calls can create excessively
          large lists which needlessly consume memory and resources.

     'max-modulo-backtrack-attempts'
          The maximum number of backtrack attempts the scheduler should
          make when modulo scheduling a loop.  Larger values can
          exponentially increase compilation time.

     'max-inline-insns-single'
          Several parameters control the tree inliner used in GCC.  This
          number sets the maximum number of instructions (counted in
          GCC's internal representation) in a single function that the
          tree inliner considers for inlining.  This only affects
          functions declared inline and methods implemented in a class
          declaration (C++).  The default value is 400.

     'max-inline-insns-auto'
          When you use '-finline-functions' (included in '-O3'), a lot
          of functions that would otherwise not be considered for
          inlining by the compiler are investigated.  To those
          functions, a different (more restrictive) limit compared to
          functions declared inline can be applied.  The default value
          is 40.

     'inline-min-speedup'
          When estimated performance improvement of caller + callee
          runtime exceeds this threshold (in precent), the function can
          be inlined regardless the limit on '--param
          max-inline-insns-single' and '--param max-inline-insns-auto'.

     'large-function-insns'
          The limit specifying really large functions.  For functions
          larger than this limit after inlining, inlining is constrained
          by '--param large-function-growth'.  This parameter is useful
          primarily to avoid extreme compilation time caused by
          non-linear algorithms used by the back end.  The default value
          is 2700.

     'large-function-growth'
          Specifies maximal growth of large function caused by inlining
          in percents.  The default value is 100 which limits large
          function growth to 2.0 times the original size.

     'large-unit-insns'
          The limit specifying large translation unit.  Growth caused by
          inlining of units larger than this limit is limited by
          '--param inline-unit-growth'.  For small units this might be
          too tight.  For example, consider a unit consisting of
          function A that is inline and B that just calls A three times.
          If B is small relative to A, the growth of unit is 300\% and
          yet such inlining is very sane.  For very large units
          consisting of small inlineable functions, however, the overall
          unit growth limit is needed to avoid exponential explosion of
          code size.  Thus for smaller units, the size is increased to
          '--param large-unit-insns' before applying '--param
          inline-unit-growth'.  The default is 10000.

     'inline-unit-growth'
          Specifies maximal overall growth of the compilation unit
          caused by inlining.  The default value is 20 which limits unit
          growth to 1.2 times the original size.  Cold functions (either
          marked cold via an attribute or by profile feedback) are not
          accounted into the unit size.

     'ipcp-unit-growth'
          Specifies maximal overall growth of the compilation unit
          caused by interprocedural constant propagation.  The default
          value is 10 which limits unit growth to 1.1 times the original
          size.

     'large-stack-frame'
          The limit specifying large stack frames.  While inlining the
          algorithm is trying to not grow past this limit too much.  The
          default value is 256 bytes.

     'large-stack-frame-growth'
          Specifies maximal growth of large stack frames caused by
          inlining in percents.  The default value is 1000 which limits
          large stack frame growth to 11 times the original size.

     'max-inline-insns-recursive'
     'max-inline-insns-recursive-auto'
          Specifies the maximum number of instructions an out-of-line
          copy of a self-recursive inline function can grow into by
          performing recursive inlining.

          '--param max-inline-insns-recursive' applies to functions
          declared inline.  For functions not declared inline, recursive
          inlining happens only when '-finline-functions' (included in
          '-O3') is enabled; '--param max-inline-insns-recursive-auto'
          applies instead.  The default value is 450.

     'max-inline-recursive-depth'
     'max-inline-recursive-depth-auto'
          Specifies the maximum recursion depth used for recursive
          inlining.

          '--param max-inline-recursive-depth' applies to functions
          declared inline.  For functions not declared inline, recursive
          inlining happens only when '-finline-functions' (included in
          '-O3') is enabled; '--param max-inline-recursive-depth-auto'
          applies instead.  The default value is 8.

     'min-inline-recursive-probability'
          Recursive inlining is profitable only for function having deep
          recursion in average and can hurt for function having little
          recursion depth by increasing the prologue size or complexity
          of function body to other optimizers.

          When profile feedback is available (see '-fprofile-generate')
          the actual recursion depth can be guessed from probability
          that function recurses via a given call expression.  This
          parameter limits inlining only to call expressions whose
          probability exceeds the given threshold (in percents).  The
          default value is 10.

     'early-inlining-insns'
          Specify growth that the early inliner can make.  In effect it
          increases the amount of inlining for code having a large
          abstraction penalty.  The default value is 14.

     'max-early-inliner-iterations'
          Limit of iterations of the early inliner.  This basically
          bounds the number of nested indirect calls the early inliner
          can resolve.  Deeper chains are still handled by late
          inlining.

     'comdat-sharing-probability'
          Probability (in percent) that C++ inline function with comdat
          visibility are shared across multiple compilation units.  The
          default value is 20.

     'profile-func-internal-id'
          A parameter to control whether to use function internal id in
          profile database lookup.  If the value is 0, the compiler uses
          an id that is based on function assembler name and filename,
          which makes old profile data more tolerant to source changes
          such as function reordering etc.  The default value is 0.

     'min-vect-loop-bound'
          The minimum number of iterations under which loops are not
          vectorized when '-ftree-vectorize' is used.  The number of
          iterations after vectorization needs to be greater than the
          value specified by this option to allow vectorization.  The
          default value is 0.

     'gcse-cost-distance-ratio'
          Scaling factor in calculation of maximum distance an
          expression can be moved by GCSE optimizations.  This is
          currently supported only in the code hoisting pass.  The
          bigger the ratio, the more aggressive code hoisting is with
          simple expressions, i.e., the expressions that have cost less
          than 'gcse-unrestricted-cost'.  Specifying 0 disables hoisting
          of simple expressions.  The default value is 10.

     'gcse-unrestricted-cost'
          Cost, roughly measured as the cost of a single typical machine
          instruction, at which GCSE optimizations do not constrain the
          distance an expression can travel.  This is currently
          supported only in the code hoisting pass.  The lesser the
          cost, the more aggressive code hoisting is.  Specifying 0
          allows all expressions to travel unrestricted distances.  The
          default value is 3.

     'max-hoist-depth'
          The depth of search in the dominator tree for expressions to
          hoist.  This is used to avoid quadratic behavior in hoisting
          algorithm.  The value of 0 does not limit on the search, but
          may slow down compilation of huge functions.  The default
          value is 30.

     'max-tail-merge-comparisons'
          The maximum amount of similar bbs to compare a bb with.  This
          is used to avoid quadratic behavior in tree tail merging.  The
          default value is 10.

     'max-tail-merge-iterations'
          The maximum amount of iterations of the pass over the
          function.  This is used to limit compilation time in tree tail
          merging.  The default value is 2.

     'max-unrolled-insns'
          The maximum number of instructions that a loop may have to be
          unrolled.  If a loop is unrolled, this parameter also
          determines how many times the loop code is unrolled.

     'max-average-unrolled-insns'
          The maximum number of instructions biased by probabilities of
          their execution that a loop may have to be unrolled.  If a
          loop is unrolled, this parameter also determines how many
          times the loop code is unrolled.

     'max-unroll-times'
          The maximum number of unrollings of a single loop.

     'max-peeled-insns'
          The maximum number of instructions that a loop may have to be
          peeled.  If a loop is peeled, this parameter also determines
          how many times the loop code is peeled.

     'max-peel-times'
          The maximum number of peelings of a single loop.

     'max-peel-branches'
          The maximum number of branches on the hot path through the
          peeled sequence.

     'max-completely-peeled-insns'
          The maximum number of insns of a completely peeled loop.

     'max-completely-peel-times'
          The maximum number of iterations of a loop to be suitable for
          complete peeling.

     'max-completely-peel-loop-nest-depth'
          The maximum depth of a loop nest suitable for complete
          peeling.

     'max-unswitch-insns'
          The maximum number of insns of an unswitched loop.

     'max-unswitch-level'
          The maximum number of branches unswitched in a single loop.

     'lim-expensive'
          The minimum cost of an expensive expression in the loop
          invariant motion.

     'iv-consider-all-candidates-bound'
          Bound on number of candidates for induction variables, below
          which all candidates are considered for each use in induction
          variable optimizations.  If there are more candidates than
          this, only the most relevant ones are considered to avoid
          quadratic time complexity.

     'iv-max-considered-uses'
          The induction variable optimizations give up on loops that
          contain more induction variable uses.

     'iv-always-prune-cand-set-bound'
          If the number of candidates in the set is smaller than this
          value, always try to remove unnecessary ivs from the set when
          adding a new one.

     'scev-max-expr-size'
          Bound on size of expressions used in the scalar evolutions
          analyzer.  Large expressions slow the analyzer.

     'scev-max-expr-complexity'
          Bound on the complexity of the expressions in the scalar
          evolutions analyzer.  Complex expressions slow the analyzer.

     'omega-max-vars'
          The maximum number of variables in an Omega constraint system.
          The default value is 128.

     'omega-max-geqs'
          The maximum number of inequalities in an Omega constraint
          system.  The default value is 256.

     'omega-max-eqs'
          The maximum number of equalities in an Omega constraint
          system.  The default value is 128.

     'omega-max-wild-cards'
          The maximum number of wildcard variables that the Omega solver
          is able to insert.  The default value is 18.

     'omega-hash-table-size'
          The size of the hash table in the Omega solver.  The default
          value is 550.

     'omega-max-keys'
          The maximal number of keys used by the Omega solver.  The
          default value is 500.

     'omega-eliminate-redundant-constraints'
          When set to 1, use expensive methods to eliminate all
          redundant constraints.  The default value is 0.

     'vect-max-version-for-alignment-checks'
          The maximum number of run-time checks that can be performed
          when doing loop versioning for alignment in the vectorizer.

     'vect-max-version-for-alias-checks'
          The maximum number of run-time checks that can be performed
          when doing loop versioning for alias in the vectorizer.

     'vect-max-peeling-for-alignment'
          The maximum number of loop peels to enhance access alignment
          for vectorizer.  Value -1 means 'no limit'.

     'max-iterations-to-track'
          The maximum number of iterations of a loop the brute-force
          algorithm for analysis of the number of iterations of the loop
          tries to evaluate.

     'hot-bb-count-ws-permille'
          A basic block profile count is considered hot if it
          contributes to the given permillage (i.e.  0...1000) of the
          entire profiled execution.

     'hot-bb-frequency-fraction'
          Select fraction of the entry block frequency of executions of
          basic block in function given basic block needs to have to be
          considered hot.

     'max-predicted-iterations'
          The maximum number of loop iterations we predict statically.
          This is useful in cases where a function contains a single
          loop with known bound and another loop with unknown bound.
          The known number of iterations is predicted correctly, while
          the unknown number of iterations average to roughly 10.  This
          means that the loop without bounds appears artificially cold
          relative to the other one.

     'builtin-expect-probability'
          Control the probability of the expression having the specified
          value.  This parameter takes a percentage (i.e.  0 ...  100)
          as input.  The default probability of 90 is obtained
          empirically.

     'align-threshold'

          Select fraction of the maximal frequency of executions of a
          basic block in a function to align the basic block.

     'align-loop-iterations'

          A loop expected to iterate at least the selected number of
          iterations is aligned.

     'tracer-dynamic-coverage'
     'tracer-dynamic-coverage-feedback'

          This value is used to limit superblock formation once the
          given percentage of executed instructions is covered.  This
          limits unnecessary code size expansion.

          The 'tracer-dynamic-coverage-feedback' parameter is used only
          when profile feedback is available.  The real profiles (as
          opposed to statically estimated ones) are much less balanced
          allowing the threshold to be larger value.

     'tracer-max-code-growth'
          Stop tail duplication once code growth has reached given
          percentage.  This is a rather artificial limit, as most of the
          duplicates are eliminated later in cross jumping, so it may be
          set to much higher values than is the desired code growth.

     'tracer-min-branch-ratio'

          Stop reverse growth when the reverse probability of best edge
          is less than this threshold (in percent).

     'tracer-min-branch-ratio'
     'tracer-min-branch-ratio-feedback'

          Stop forward growth if the best edge has probability lower
          than this threshold.

          Similarly to 'tracer-dynamic-coverage' two values are present,
          one for compilation for profile feedback and one for
          compilation without.  The value for compilation with profile
          feedback needs to be more conservative (higher) in order to
          make tracer effective.

     'max-cse-path-length'

          The maximum number of basic blocks on path that CSE considers.
          The default is 10.

     'max-cse-insns'
          The maximum number of instructions CSE processes before
          flushing.  The default is 1000.

     'ggc-min-expand'

          GCC uses a garbage collector to manage its own memory
          allocation.  This parameter specifies the minimum percentage
          by which the garbage collector's heap should be allowed to
          expand between collections.  Tuning this may improve
          compilation speed; it has no effect on code generation.

          The default is 30% + 70% * (RAM/1GB) with an upper bound of
          100% when RAM >= 1GB.  If 'getrlimit' is available, the notion
          of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or
          'RLIMIT_AS'.  If GCC is not able to calculate RAM on a
          particular platform, the lower bound of 30% is used.  Setting
          this parameter and 'ggc-min-heapsize' to zero causes a full
          collection to occur at every opportunity.  This is extremely
          slow, but can be useful for debugging.

     'ggc-min-heapsize'

          Minimum size of the garbage collector's heap before it begins
          bothering to collect garbage.  The first collection occurs
          after the heap expands by 'ggc-min-expand'% beyond
          'ggc-min-heapsize'.  Again, tuning this may improve
          compilation speed, and has no effect on code generation.

          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
          that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
          exceeded, but with a lower bound of 4096 (four megabytes) and
          an upper bound of 131072 (128 megabytes).  If GCC is not able
          to calculate RAM on a particular platform, the lower bound is
          used.  Setting this parameter very large effectively disables
          garbage collection.  Setting this parameter and
          'ggc-min-expand' to zero causes a full collection to occur at
          every opportunity.

     'max-reload-search-insns'
          The maximum number of instruction reload should look backward
          for equivalent register.  Increasing values mean more
          aggressive optimization, making the compilation time increase
          with probably slightly better performance.  The default value
          is 100.

     'max-cselib-memory-locations'
          The maximum number of memory locations cselib should take into
          account.  Increasing values mean more aggressive optimization,
          making the compilation time increase with probably slightly
          better performance.  The default value is 500.

     'reorder-blocks-duplicate'
     'reorder-blocks-duplicate-feedback'

          Used by the basic block reordering pass to decide whether to
          use unconditional branch or duplicate the code on its
          destination.  Code is duplicated when its estimated size is
          smaller than this value multiplied by the estimated size of
          unconditional jump in the hot spots of the program.

          The 'reorder-block-duplicate-feedback' parameter is used only
          when profile feedback is available.  It may be set to higher
          values than 'reorder-block-duplicate' since information about
          the hot spots is more accurate.

     'max-sched-ready-insns'
          The maximum number of instructions ready to be issued the
          scheduler should consider at any given time during the first
          scheduling pass.  Increasing values mean more thorough
          searches, making the compilation time increase with probably
          little benefit.  The default value is 100.

     'max-sched-region-blocks'
          The maximum number of blocks in a region to be considered for
          interblock scheduling.  The default value is 10.

     'max-pipeline-region-blocks'
          The maximum number of blocks in a region to be considered for
          pipelining in the selective scheduler.  The default value is
          15.

     'max-sched-region-insns'
          The maximum number of insns in a region to be considered for
          interblock scheduling.  The default value is 100.

     'max-pipeline-region-insns'
          The maximum number of insns in a region to be considered for
          pipelining in the selective scheduler.  The default value is
          200.

     'min-spec-prob'
          The minimum probability (in percents) of reaching a source
          block for interblock speculative scheduling.  The default
          value is 40.

     'max-sched-extend-regions-iters'
          The maximum number of iterations through CFG to extend
          regions.  A value of 0 (the default) disables region
          extensions.

     'max-sched-insn-conflict-delay'
          The maximum conflict delay for an insn to be considered for
          speculative motion.  The default value is 3.

     'sched-spec-prob-cutoff'
          The minimal probability of speculation success (in percents),
          so that speculative insns are scheduled.  The default value is
          40.

     'sched-spec-state-edge-prob-cutoff'
          The minimum probability an edge must have for the scheduler to
          save its state across it.  The default value is 10.

     'sched-mem-true-dep-cost'
          Minimal distance (in CPU cycles) between store and load
          targeting same memory locations.  The default value is 1.

     'selsched-max-lookahead'
          The maximum size of the lookahead window of selective
          scheduling.  It is a depth of search for available
          instructions.  The default value is 50.

     'selsched-max-sched-times'
          The maximum number of times that an instruction is scheduled
          during selective scheduling.  This is the limit on the number
          of iterations through which the instruction may be pipelined.
          The default value is 2.

     'selsched-max-insns-to-rename'
          The maximum number of best instructions in the ready list that
          are considered for renaming in the selective scheduler.  The
          default value is 2.

     'sms-min-sc'
          The minimum value of stage count that swing modulo scheduler
          generates.  The default value is 2.

     'max-last-value-rtl'
          The maximum size measured as number of RTLs that can be
          recorded in an expression in combiner for a pseudo register as
          last known value of that register.  The default is 10000.

     'max-combine-insns'
          The maximum number of instructions the RTL combiner tries to
          combine.  The default value is 2 at '-Og' and 4 otherwise.

     'integer-share-limit'
          Small integer constants can use a shared data structure,
          reducing the compiler's memory usage and increasing its speed.
          This sets the maximum value of a shared integer constant.  The
          default value is 256.

     'ssp-buffer-size'
          The minimum size of buffers (i.e. arrays) that receive stack
          smashing protection when '-fstack-protection' is used.

     'min-size-for-stack-sharing'
          The minimum size of variables taking part in stack slot
          sharing when not optimizing.  The default value is 32.

     'max-jump-thread-duplication-stmts'
          Maximum number of statements allowed in a block that needs to
          be duplicated when threading jumps.

     'max-fields-for-field-sensitive'
          Maximum number of fields in a structure treated in a field
          sensitive manner during pointer analysis.  The default is zero
          for '-O0' and '-O1', and 100 for '-Os', '-O2', and '-O3'.

     'prefetch-latency'
          Estimate on average number of instructions that are executed
          before prefetch finishes.  The distance prefetched ahead is
          proportional to this constant.  Increasing this number may
          also lead to less streams being prefetched (see
          'simultaneous-prefetches').

     'simultaneous-prefetches'
          Maximum number of prefetches that can run at the same time.

     'l1-cache-line-size'
          The size of cache line in L1 cache, in bytes.

     'l1-cache-size'
          The size of L1 cache, in kilobytes.

     'l2-cache-size'
          The size of L2 cache, in kilobytes.

     'min-insn-to-prefetch-ratio'
          The minimum ratio between the number of instructions and the
          number of prefetches to enable prefetching in a loop.

     'prefetch-min-insn-to-mem-ratio'
          The minimum ratio between the number of instructions and the
          number of memory references to enable prefetching in a loop.

     'use-canonical-types'
          Whether the compiler should use the "canonical" type system.
          By default, this should always be 1, which uses a more
          efficient internal mechanism for comparing types in C++ and
          Objective-C++.  However, if bugs in the canonical type system
          are causing compilation failures, set this value to 0 to
          disable canonical types.

     'switch-conversion-max-branch-ratio'
          Switch initialization conversion refuses to create arrays that
          are bigger than 'switch-conversion-max-branch-ratio' times the
          number of branches in the switch.

     'max-partial-antic-length'
          Maximum length of the partial antic set computed during the
          tree partial redundancy elimination optimization
          ('-ftree-pre') when optimizing at '-O3' and above.  For some
          sorts of source code the enhanced partial redundancy
          elimination optimization can run away, consuming all of the
          memory available on the host machine.  This parameter sets a
          limit on the length of the sets that are computed, which
          prevents the runaway behavior.  Setting a value of 0 for this
          parameter allows an unlimited set length.

     'sccvn-max-scc-size'
          Maximum size of a strongly connected component (SCC) during
          SCCVN processing.  If this limit is hit, SCCVN processing for
          the whole function is not done and optimizations depending on
          it are disabled.  The default maximum SCC size is 10000.

     'sccvn-max-alias-queries-per-access'
          Maximum number of alias-oracle queries we perform when looking
          for redundancies for loads and stores.  If this limit is hit
          the search is aborted and the load or store is not considered
          redundant.  The number of queries is algorithmically limited
          to the number of stores on all paths from the load to the
          function entry.  The default maxmimum number of queries is
          1000.

     'ira-max-loops-num'
          IRA uses regional register allocation by default.  If a
          function contains more loops than the number given by this
          parameter, only at most the given number of the most
          frequently-executed loops form regions for regional register
          allocation.  The default value of the parameter is 100.

     'ira-max-conflict-table-size'
          Although IRA uses a sophisticated algorithm to compress the
          conflict table, the table can still require excessive amounts
          of memory for huge functions.  If the conflict table for a
          function could be more than the size in MB given by this
          parameter, the register allocator instead uses a faster,
          simpler, and lower-quality algorithm that does not require
          building a pseudo-register conflict table.  The default value
          of the parameter is 2000.

     'ira-loop-reserved-regs'
          IRA can be used to evaluate more accurate register pressure in
          loops for decisions to move loop invariants (see '-O3').  The
          number of available registers reserved for some other purposes
          is given by this parameter.  The default value of the
          parameter is 2, which is the minimal number of registers
          needed by typical instructions.  This value is the best found
          from numerous experiments.

     'lra-inheritance-ebb-probability-cutoff'
          LRA tries to reuse values reloaded in registers in subsequent
          insns.  This optimization is called inheritance.  EBB is used
          as a region to do this optimization.  The parameter defines a
          minimal fall-through edge probability in percentage used to
          add BB to inheritance EBB in LRA. The default value of the
          parameter is 40.  The value was chosen from numerous runs of
          SPEC2000 on x86-64.

     'loop-invariant-max-bbs-in-loop'
          Loop invariant motion can be very expensive, both in
          compilation time and in amount of needed compile-time memory,
          with very large loops.  Loops with more basic blocks than this
          parameter won't have loop invariant motion optimization
          performed on them.  The default value of the parameter is 1000
          for '-O1' and 10000 for '-O2' and above.

     'loop-max-datarefs-for-datadeps'
          Building data dapendencies is expensive for very large loops.
          This parameter limits the number of data references in loops
          that are considered for data dependence analysis.  These large
          loops are no handled by the optimizations using loop data
          dependencies.  The default value is 1000.

     'max-vartrack-size'
          Sets a maximum number of hash table slots to use during
          variable tracking dataflow analysis of any function.  If this
          limit is exceeded with variable tracking at assignments
          enabled, analysis for that function is retried without it,
          after removing all debug insns from the function.  If the
          limit is exceeded even without debug insns, var tracking
          analysis is completely disabled for the function.  Setting the
          parameter to zero makes it unlimited.

     'max-vartrack-expr-depth'
          Sets a maximum number of recursion levels when attempting to
          map variable names or debug temporaries to value expressions.
          This trades compilation time for more complete debug
          information.  If this is set too low, value expressions that
          are available and could be represented in debug information
          may end up not being used; setting this higher may enable the
          compiler to find more complex debug expressions, but compile
          time and memory use may grow.  The default is 12.

     'min-nondebug-insn-uid'
          Use uids starting at this parameter for nondebug insns.  The
          range below the parameter is reserved exclusively for debug
          insns created by '-fvar-tracking-assignments', but debug insns
          may get (non-overlapping) uids above it if the reserved range
          is exhausted.

     'ipa-sra-ptr-growth-factor'
          IPA-SRA replaces a pointer to an aggregate with one or more
          new parameters only when their cumulative size is less or
          equal to 'ipa-sra-ptr-growth-factor' times the size of the
          original pointer parameter.

     'sra-max-scalarization-size-Ospeed'
     'sra-max-scalarization-size-Osize'
          The two Scalar Reduction of Aggregates passes (SRA and
          IPA-SRA) aim to replace scalar parts of aggregates with uses
          of independent scalar variables.  These parameters control the
          maximum size, in storage units, of aggregate which is
          considered for replacement when compiling for speed
          ('sra-max-scalarization-size-Ospeed') or size
          ('sra-max-scalarization-size-Osize') respectively.

     'tm-max-aggregate-size'
          When making copies of thread-local variables in a transaction,
          this parameter specifies the size in bytes after which
          variables are saved with the logging functions as opposed to
          save/restore code sequence pairs.  This option only applies
          when using '-fgnu-tm'.

     'graphite-max-nb-scop-params'
          To avoid exponential effects in the Graphite loop transforms,
          the number of parameters in a Static Control Part (SCoP) is
          bounded.  The default value is 10 parameters.  A variable
          whose value is unknown at compilation time and defined outside
          a SCoP is a parameter of the SCoP.

     'graphite-max-bbs-per-function'
          To avoid exponential effects in the detection of SCoPs, the
          size of the functions analyzed by Graphite is bounded.  The
          default value is 100 basic blocks.

     'loop-block-tile-size'
          Loop blocking or strip mining transforms, enabled with
          '-floop-block' or '-floop-strip-mine', strip mine each loop in
          the loop nest by a given number of iterations.  The strip
          length can be changed using the 'loop-block-tile-size'
          parameter.  The default value is 51 iterations.

     'loop-unroll-jam-size'
          Specify the unroll factor for the '-floop-unroll-and-jam'
          option.  The default value is 4.

     'loop-unroll-jam-depth'
          Specify the dimension to be unrolled (counting from the most
          inner loop) for the '-floop-unroll-and-jam'.  The default
          value is 2.

     'ipa-cp-value-list-size'
          IPA-CP attempts to track all possible values and types passed
          to a function's parameter in order to propagate them and
          perform devirtualization.  'ipa-cp-value-list-size' is the
          maximum number of values and types it stores per one formal
          parameter of a function.

     'ipa-cp-eval-threshold'
          IPA-CP calculates its own score of cloning profitability
          heuristics and performs those cloning opportunities with
          scores that exceed 'ipa-cp-eval-threshold'.

     'ipa-cp-recursion-penalty'
          Percentage penalty the recursive functions will receive when
          they are evaluated for cloning.

     'ipa-cp-single-call-penalty'
          Percentage penalty functions containg a single call to another
          function will receive when they are evaluated for cloning.

     'ipa-max-agg-items'
          IPA-CP is also capable to propagate a number of scalar values
          passed in an aggregate.  'ipa-max-agg-items' controls the
          maximum number of such values per one parameter.

     'ipa-cp-loop-hint-bonus'
          When IPA-CP determines that a cloning candidate would make the
          number of iterations of a loop known, it adds a bonus of
          'ipa-cp-loop-hint-bonus' to the profitability score of the
          candidate.

     'ipa-cp-array-index-hint-bonus'
          When IPA-CP determines that a cloning candidate would make the
          index of an array access known, it adds a bonus of
          'ipa-cp-array-index-hint-bonus' to the profitability score of
          the candidate.

     'ipa-max-aa-steps'
          During its analysis of function bodies, IPA-CP employs alias
          analysis in order to track values pointed to by function
          parameters.  In order not spend too much time analyzing huge
          functions, it gives up and consider all memory clobbered after
          examining 'ipa-max-aa-steps' statements modifying memory.

     'lto-partitions'
          Specify desired number of partitions produced during WHOPR
          compilation.  The number of partitions should exceed the
          number of CPUs used for compilation.  The default value is 32.

     'lto-minpartition'
          Size of minimal partition for WHOPR (in estimated
          instructions).  This prevents expenses of splitting very small
          programs into too many partitions.

     'cxx-max-namespaces-for-diagnostic-help'
          The maximum number of namespaces to consult for suggestions
          when C++ name lookup fails for an identifier.  The default is
          1000.

     'sink-frequency-threshold'
          The maximum relative execution frequency (in percents) of the
          target block relative to a statement's original block to allow
          statement sinking of a statement.  Larger numbers result in
          more aggressive statement sinking.  The default value is 75.
          A small positive adjustment is applied for statements with
          memory operands as those are even more profitable so sink.

     'max-stores-to-sink'
          The maximum number of conditional stores paires that can be
          sunk.  Set to 0 if either vectorization ('-ftree-vectorize')
          or if-conversion ('-ftree-loop-if-convert') is disabled.  The
          default is 2.

     'allow-store-data-races'
          Allow optimizers to introduce new data races on stores.  Set
          to 1 to allow, otherwise to 0.  This option is enabled by
          default at optimization level '-Ofast'.

     'case-values-threshold'
          The smallest number of different values for which it is best
          to use a jump-table instead of a tree of conditional branches.
          If the value is 0, use the default for the machine.  The
          default is 0.

     'tree-reassoc-width'
          Set the maximum number of instructions executed in parallel in
          reassociated tree.  This parameter overrides target dependent
          heuristics used by default if has non zero value.

     'sched-pressure-algorithm'
          Choose between the two available implementations of
          '-fsched-pressure'.  Algorithm 1 is the original
          implementation and is the more likely to prevent instructions
          from being reordered.  Algorithm 2 was designed to be a
          compromise between the relatively conservative approach taken
          by algorithm 1 and the rather aggressive approach taken by the
          default scheduler.  It relies more heavily on having a regular
          register file and accurate register pressure classes.  See
          'haifa-sched.c' in the GCC sources for more details.

          The default choice depends on the target.

     'max-slsr-cand-scan'
          Set the maximum number of existing candidates that are
          considered when seeking a basis for a new straight-line
          strength reduction candidate.

     'asan-globals'
          Enable buffer overflow detection for global objects.  This
          kind of protection is enabled by default if you are using
          '-fsanitize=address' option.  To disable global objects
          protection use '--param asan-globals=0'.

     'asan-stack'
          Enable buffer overflow detection for stack objects.  This kind
          of protection is enabled by default when
          using'-fsanitize=address'.  To disable stack protection use
          '--param asan-stack=0' option.

     'asan-instrument-reads'
          Enable buffer overflow detection for memory reads.  This kind
          of protection is enabled by default when using
          '-fsanitize=address'.  To disable memory reads protection use
          '--param asan-instrument-reads=0'.

     'asan-instrument-writes'
          Enable buffer overflow detection for memory writes.  This kind
          of protection is enabled by default when using
          '-fsanitize=address'.  To disable memory writes protection use
          '--param asan-instrument-writes=0' option.

     'asan-memintrin'
          Enable detection for built-in functions.  This kind of
          protection is enabled by default when using
          '-fsanitize=address'.  To disable built-in functions
          protection use '--param asan-memintrin=0'.

     'asan-use-after-return'
          Enable detection of use-after-return.  This kind of protection
          is enabled by default when using '-fsanitize=address' option.
          To disable use-after-return detection use '--param
          asan-use-after-return=0'.

     'asan-instrumentation-with-call-threshold'
          If number of memory accesses in function being instrumented is
          greater or equal to this number, use callbacks instead of
          inline checks.  E.g.  to disable inline code use '--param
          asan-instrumentation-with-call-threshold=0'.

     'chkp-max-ctor-size'
          Static constructors generated by Pointer Bounds Checker may
          become very large and significantly increase compile time at
          optimization level '-O1' and higher.  This parameter is a
          maximum nubmer of statements in a single generated
          constructor.  Default value is 5000.

     'max-fsm-thread-path-insns'
          Maximum number of instructions to copy when duplicating blocks
          on a finite state automaton jump thread path.  The default is
          100.

     'max-fsm-thread-length'
          Maximum number of basic blocks on a finite state automaton
          jump thread path.  The default is 10.

     'max-fsm-thread-paths'
          Maximum number of new jump thread paths to create for a finite
          state automaton.  The default is 50.


File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC

3.11 Options Controlling the Preprocessor
=========================================

These options control the C preprocessor, which is run on each C source
file before actual compilation.

 If you use the '-E' option, nothing is done except preprocessing.  Some
of these options make sense only together with '-E' because they cause
the preprocessor output to be unsuitable for actual compilation.

'-Wp,OPTION'
     You can use '-Wp,OPTION' to bypass the compiler driver and pass
     OPTION directly through to the preprocessor.  If OPTION contains
     commas, it is split into multiple options at the commas.  However,
     many options are modified, translated or interpreted by the
     compiler driver before being passed to the preprocessor, and '-Wp'
     forcibly bypasses this phase.  The preprocessor's direct interface
     is undocumented and subject to change, so whenever possible you
     should avoid using '-Wp' and let the driver handle the options
     instead.

'-Xpreprocessor OPTION'
     Pass OPTION as an option to the preprocessor.  You can use this to
     supply system-specific preprocessor options that GCC does not
     recognize.

     If you want to pass an option that takes an argument, you must use
     '-Xpreprocessor' twice, once for the option and once for the
     argument.

'-no-integrated-cpp'
     Perform preprocessing as a separate pass before compilation.  By
     default, GCC performs preprocessing as an integrated part of input
     tokenization and parsing.  If this option is provided, the
     appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for
     C, C++, and Objective-C, respectively) is instead invoked twice,
     once for preprocessing only and once for actual compilation of the
     preprocessed input.  This option may be useful in conjunction with
     the '-B' or '-wrapper' options to specify an alternate preprocessor
     or perform additional processing of the program source between
     normal preprocessing and compilation.

'-D NAME'
     Predefine NAME as a macro, with definition '1'.

'-D NAME=DEFINITION'
     The contents of DEFINITION are tokenized and processed as if they
     appeared during translation phase three in a '#define' directive.
     In particular, the definition will be truncated by embedded newline
     characters.

     If you are invoking the preprocessor from a shell or shell-like
     program you may need to use the shell's quoting syntax to protect
     characters such as spaces that have a meaning in the shell syntax.

     If you wish to define a function-like macro on the command line,
     write its argument list with surrounding parentheses before the
     equals sign (if any).  Parentheses are meaningful to most shells,
     so you will need to quote the option.  With 'sh' and 'csh',
     '-D'NAME(ARGS...)=DEFINITION'' works.

     '-D' and '-U' options are processed in the order they are given on
     the command line.  All '-imacros FILE' and '-include FILE' options
     are processed after all '-D' and '-U' options.

'-U NAME'
     Cancel any previous definition of NAME, either built in or provided
     with a '-D' option.

'-undef'
     Do not predefine any system-specific or GCC-specific macros.  The
     standard predefined macros remain defined.

'-I DIR'
     Add the directory DIR to the list of directories to be searched for
     header files.  Directories named by '-I' are searched before the
     standard system include directories.  If the directory DIR is a
     standard system include directory, the option is ignored to ensure
     that the default search order for system directories and the
     special treatment of system headers are not defeated .  If DIR
     begins with '=', then the '=' will be replaced by the sysroot
     prefix; see '--sysroot' and '-isysroot'.

'-o FILE'
     Write output to FILE.  This is the same as specifying FILE as the
     second non-option argument to 'cpp'.  'gcc' has a different
     interpretation of a second non-option argument, so you must use
     '-o' to specify the output file.

'-Wall'
     Turns on all optional warnings which are desirable for normal code.
     At present this is '-Wcomment', '-Wtrigraphs', '-Wmultichar' and a
     warning about integer promotion causing a change of sign in '#if'
     expressions.  Note that many of the preprocessor's warnings are on
     by default and have no options to control them.

'-Wcomment'
'-Wcomments'
     Warn whenever a comment-start sequence '/*' appears in a '/*'
     comment, or whenever a backslash-newline appears in a '//' comment.
     (Both forms have the same effect.)

'-Wtrigraphs'
     Most trigraphs in comments cannot affect the meaning of the
     program.  However, a trigraph that would form an escaped newline
     ('??/' at the end of a line) can, by changing where the comment
     begins or ends.  Therefore, only trigraphs that would form escaped
     newlines produce warnings inside a comment.

     This option is implied by '-Wall'.  If '-Wall' is not given, this
     option is still enabled unless trigraphs are enabled.  To get
     trigraph conversion without warnings, but get the other '-Wall'
     warnings, use '-trigraphs -Wall -Wno-trigraphs'.

'-Wtraditional'
     Warn about certain constructs that behave differently in
     traditional and ISO C.  Also warn about ISO C constructs that have
     no traditional C equivalent, and problematic constructs which
     should be avoided.

'-Wundef'
     Warn whenever an identifier which is not a macro is encountered in
     an '#if' directive, outside of 'defined'.  Such identifiers are
     replaced with zero.

'-Wunused-macros'
     Warn about macros defined in the main file that are unused.  A
     macro is "used" if it is expanded or tested for existence at least
     once.  The preprocessor will also warn if the macro has not been
     used at the time it is redefined or undefined.

     Built-in macros, macros defined on the command line, and macros
     defined in include files are not warned about.

     _Note:_ If a macro is actually used, but only used in skipped
     conditional blocks, then CPP will report it as unused.  To avoid
     the warning in such a case, you might improve the scope of the
     macro's definition by, for example, moving it into the first
     skipped block.  Alternatively, you could provide a dummy use with
     something like:

          #if defined the_macro_causing_the_warning
          #endif

'-Wendif-labels'
     Warn whenever an '#else' or an '#endif' are followed by text.  This
     usually happens in code of the form

          #if FOO
          ...
          #else FOO
          ...
          #endif FOO

     The second and third 'FOO' should be in comments, but often are not
     in older programs.  This warning is on by default.

'-Werror'
     Make all warnings into hard errors.  Source code which triggers
     warnings will be rejected.

'-Wsystem-headers'
     Issue warnings for code in system headers.  These are normally
     unhelpful in finding bugs in your own code, therefore suppressed.
     If you are responsible for the system library, you may want to see
     them.

'-w'
     Suppress all warnings, including those which GNU CPP issues by
     default.

'-pedantic'
     Issue all the mandatory diagnostics listed in the C standard.  Some
     of them are left out by default, since they trigger frequently on
     harmless code.

'-pedantic-errors'
     Issue all the mandatory diagnostics, and make all mandatory
     diagnostics into errors.  This includes mandatory diagnostics that
     GCC issues without '-pedantic' but treats as warnings.

'-M'
     Instead of outputting the result of preprocessing, output a rule
     suitable for 'make' describing the dependencies of the main source
     file.  The preprocessor outputs one 'make' rule containing the
     object file name for that source file, a colon, and the names of
     all the included files, including those coming from '-include' or
     '-imacros' command-line options.

     Unless specified explicitly (with '-MT' or '-MQ'), the object file
     name consists of the name of the source file with any suffix
     replaced with object file suffix and with any leading directory
     parts removed.  If there are many included files then the rule is
     split into several lines using '\'-newline.  The rule has no
     commands.

     This option does not suppress the preprocessor's debug output, such
     as '-dM'.  To avoid mixing such debug output with the dependency
     rules you should explicitly specify the dependency output file with
     '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT'
     (*note Environment Variables::).  Debug output will still be sent
     to the regular output stream as normal.

     Passing '-M' to the driver implies '-E', and suppresses warnings
     with an implicit '-w'.

'-MM'
     Like '-M' but do not mention header files that are found in system
     header directories, nor header files that are included, directly or
     indirectly, from such a header.

     This implies that the choice of angle brackets or double quotes in
     an '#include' directive does not in itself determine whether that
     header will appear in '-MM' dependency output.  This is a slight
     change in semantics from GCC versions 3.0 and earlier.

'-MF FILE'
     When used with '-M' or '-MM', specifies a file to write the
     dependencies to.  If no '-MF' switch is given the preprocessor
     sends the rules to the same place it would have sent preprocessed
     output.

     When used with the driver options '-MD' or '-MMD', '-MF' overrides
     the default dependency output file.

'-MG'
     In conjunction with an option such as '-M' requesting dependency
     generation, '-MG' assumes missing header files are generated files
     and adds them to the dependency list without raising an error.  The
     dependency filename is taken directly from the '#include' directive
     without prepending any path.  '-MG' also suppresses preprocessed
     output, as a missing header file renders this useless.

     This feature is used in automatic updating of makefiles.

'-MP'
     This option instructs CPP to add a phony target for each dependency
     other than the main file, causing each to depend on nothing.  These
     dummy rules work around errors 'make' gives if you remove header
     files without updating the 'Makefile' to match.

     This is typical output:

          test.o: test.c test.h

          test.h:

'-MT TARGET'

     Change the target of the rule emitted by dependency generation.  By
     default CPP takes the name of the main input file, deletes any
     directory components and any file suffix such as '.c', and appends
     the platform's usual object suffix.  The result is the target.

     An '-MT' option will set the target to be exactly the string you
     specify.  If you want multiple targets, you can specify them as a
     single argument to '-MT', or use multiple '-MT' options.

     For example, '-MT '$(objpfx)foo.o'' might give

          $(objpfx)foo.o: foo.c

'-MQ TARGET'

     Same as '-MT', but it quotes any characters which are special to
     Make.  '-MQ '$(objpfx)foo.o'' gives

          $$(objpfx)foo.o: foo.c

     The default target is automatically quoted, as if it were given
     with '-MQ'.

'-MD'
     '-MD' is equivalent to '-M -MF FILE', except that '-E' is not
     implied.  The driver determines FILE based on whether an '-o'
     option is given.  If it is, the driver uses its argument but with a
     suffix of '.d', otherwise it takes the name of the input file,
     removes any directory components and suffix, and applies a '.d'
     suffix.

     If '-MD' is used in conjunction with '-E', any '-o' switch is
     understood to specify the dependency output file (*note -MF:
     dashMF.), but if used without '-E', each '-o' is understood to
     specify a target object file.

     Since '-E' is not implied, '-MD' can be used to generate a
     dependency output file as a side-effect of the compilation process.

'-MMD'
     Like '-MD' except mention only user header files, not system header
     files.

'-fpch-deps'
     When using precompiled headers (*note Precompiled Headers::), this
     flag will cause the dependency-output flags to also list the files
     from the precompiled header's dependencies.  If not specified only
     the precompiled header would be listed and not the files that were
     used to create it because those files are not consulted when a
     precompiled header is used.

'-fpch-preprocess'
     This option allows use of a precompiled header (*note Precompiled
     Headers::) together with '-E'.  It inserts a special '#pragma',
     '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the
     place where the precompiled header was found, and its FILENAME.
     When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and
     loads the PCH.

     This option is off by default, because the resulting preprocessed
     output is only really suitable as input to GCC.  It is switched on
     by '-save-temps'.

     You should not write this '#pragma' in your own code, but it is
     safe to edit the filename if the PCH file is available in a
     different location.  The filename may be absolute or it may be
     relative to GCC's current directory.

'-x c'
'-x c++'
'-x objective-c'
'-x assembler-with-cpp'
     Specify the source language: C, C++, Objective-C, or assembly.
     This has nothing to do with standards conformance or extensions; it
     merely selects which base syntax to expect.  If you give none of
     these options, cpp will deduce the language from the extension of
     the source file: '.c', '.cc', '.m', or '.S'.  Some other common
     extensions for C++ and assembly are also recognized.  If cpp does
     not recognize the extension, it will treat the file as C; this is
     the most generic mode.

     _Note:_ Previous versions of cpp accepted a '-lang' option which
     selected both the language and the standards conformance level.
     This option has been removed, because it conflicts with the '-l'
     option.

'-std=STANDARD'
'-ansi'
     Specify the standard to which the code should conform.  Currently
     CPP knows about C and C++ standards; others may be added in the
     future.

     STANDARD may be one of:
     'c90'
     'c89'
     'iso9899:1990'
          The ISO C standard from 1990.  'c90' is the customary
          shorthand for this version of the standard.

          The '-ansi' option is equivalent to '-std=c90'.

     'iso9899:199409'
          The 1990 C standard, as amended in 1994.

     'iso9899:1999'
     'c99'
     'iso9899:199x'
     'c9x'
          The revised ISO C standard, published in December 1999.
          Before publication, this was known as C9X.

     'iso9899:2011'
     'c11'
     'c1x'
          The revised ISO C standard, published in December 2011.
          Before publication, this was known as C1X.

     'gnu90'
     'gnu89'
          The 1990 C standard plus GNU extensions.  This is the default.

     'gnu99'
     'gnu9x'
          The 1999 C standard plus GNU extensions.

     'gnu11'
     'gnu1x'
          The 2011 C standard plus GNU extensions.

     'c++98'
          The 1998 ISO C++ standard plus amendments.

     'gnu++98'
          The same as '-std=c++98' plus GNU extensions.  This is the
          default for C++ code.

'-I-'
     Split the include path.  Any directories specified with '-I'
     options before '-I-' are searched only for headers requested with
     '#include "FILE"'; they are not searched for '#include <FILE>'.  If
     additional directories are specified with '-I' options after the
     '-I-', those directories are searched for all '#include'
     directives.

     In addition, '-I-' inhibits the use of the directory of the current
     file directory as the first search directory for '#include "FILE"'.
     This option has been deprecated.

'-nostdinc'
     Do not search the standard system directories for header files.
     Only the directories you have specified with '-I' options (and the
     directory of the current file, if appropriate) are searched.

'-nostdinc++'
     Do not search for header files in the C++-specific standard
     directories, but do still search the other standard directories.
     (This option is used when building the C++ library.)

'-include FILE'
     Process FILE as if '#include "file"' appeared as the first line of
     the primary source file.  However, the first directory searched for
     FILE is the preprocessor's working directory _instead of_ the
     directory containing the main source file.  If not found there, it
     is searched for in the remainder of the '#include "..."' search
     chain as normal.

     If multiple '-include' options are given, the files are included in
     the order they appear on the command line.

'-imacros FILE'
     Exactly like '-include', except that any output produced by
     scanning FILE is thrown away.  Macros it defines remain defined.
     This allows you to acquire all the macros from a header without
     also processing its declarations.

     All files specified by '-imacros' are processed before all files
     specified by '-include'.

'-idirafter DIR'
     Search DIR for header files, but do it _after_ all directories
     specified with '-I' and the standard system directories have been
     exhausted.  DIR is treated as a system include directory.  If DIR
     begins with '=', then the '=' will be replaced by the sysroot
     prefix; see '--sysroot' and '-isysroot'.

'-iprefix PREFIX'
     Specify PREFIX as the prefix for subsequent '-iwithprefix' options.
     If the prefix represents a directory, you should include the final
     '/'.

'-iwithprefix DIR'
'-iwithprefixbefore DIR'
     Append DIR to the prefix specified previously with '-iprefix', and
     add the resulting directory to the include search path.
     '-iwithprefixbefore' puts it in the same place '-I' would;
     '-iwithprefix' puts it where '-idirafter' would.

'-isysroot DIR'
     This option is like the '--sysroot' option, but applies only to
     header files (except for Darwin targets, where it applies to both
     header files and libraries).  See the '--sysroot' option for more
     information.

'-imultilib DIR'
     Use DIR as a subdirectory of the directory containing
     target-specific C++ headers.

'-isystem DIR'
     Search DIR for header files, after all directories specified by
     '-I' but before the standard system directories.  Mark it as a
     system directory, so that it gets the same special treatment as is
     applied to the standard system directories.  If DIR begins with
     '=', then the '=' will be replaced by the sysroot prefix; see
     '--sysroot' and '-isysroot'.

'-iquote DIR'
     Search DIR only for header files requested with '#include "FILE"';
     they are not searched for '#include <FILE>', before all directories
     specified by '-I' and before the standard system directories.  If
     DIR begins with '=', then the '=' will be replaced by the sysroot
     prefix; see '--sysroot' and '-isysroot'.

'-fdirectives-only'
     When preprocessing, handle directives, but do not expand macros.

     The option's behavior depends on the '-E' and '-fpreprocessed'
     options.

     With '-E', preprocessing is limited to the handling of directives
     such as '#define', '#ifdef', and '#error'.  Other preprocessor
     operations, such as macro expansion and trigraph conversion are not
     performed.  In addition, the '-dD' option is implicitly enabled.

     With '-fpreprocessed', predefinition of command line and most
     builtin macros is disabled.  Macros such as '__LINE__', which are
     contextually dependent, are handled normally.  This enables
     compilation of files previously preprocessed with '-E
     -fdirectives-only'.

     With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed'
     take precedence.  This enables full preprocessing of files
     previously preprocessed with '-E -fdirectives-only'.

'-fdollars-in-identifiers'
     Accept '$' in identifiers.

'-fextended-identifiers'
     Accept universal character names in identifiers.  This option is
     enabled by default for C99 (and later C standard versions) and C++.

'-fno-canonical-system-headers'
     When preprocessing, do not shorten system header paths with
     canonicalization.

'-fpreprocessed'
     Indicate to the preprocessor that the input file has already been
     preprocessed.  This suppresses things like macro expansion,
     trigraph conversion, escaped newline splicing, and processing of
     most directives.  The preprocessor still recognizes and removes
     comments, so that you can pass a file preprocessed with '-C' to the
     compiler without problems.  In this mode the integrated
     preprocessor is little more than a tokenizer for the front ends.

     '-fpreprocessed' is implicit if the input file has one of the
     extensions '.i', '.ii' or '.mi'.  These are the extensions that GCC
     uses for preprocessed files created by '-save-temps'.

'-ftabstop=WIDTH'
     Set the distance between tab stops.  This helps the preprocessor
     report correct column numbers in warnings or errors, even if tabs
     appear on the line.  If the value is less than 1 or greater than
     100, the option is ignored.  The default is 8.

'-fdebug-cpp'
     This option is only useful for debugging GCC. When used with '-E',
     dumps debugging information about location maps.  Every token in
     the output is preceded by the dump of the map its location belongs
     to.  The dump of the map holding the location of a token would be:
          {'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}

     When used without '-E', this option has no effect.

'-ftrack-macro-expansion[=LEVEL]'
     Track locations of tokens across macro expansions.  This allows the
     compiler to emit diagnostic about the current macro expansion stack
     when a compilation error occurs in a macro expansion.  Using this
     option makes the preprocessor and the compiler consume more memory.
     The LEVEL parameter can be used to choose the level of precision of
     token location tracking thus decreasing the memory consumption if
     necessary.  Value '0' of LEVEL de-activates this option just as if
     no '-ftrack-macro-expansion' was present on the command line.
     Value '1' tracks tokens locations in a degraded mode for the sake
     of minimal memory overhead.  In this mode all tokens resulting from
     the expansion of an argument of a function-like macro have the same
     location.  Value '2' tracks tokens locations completely.  This
     value is the most memory hungry.  When this option is given no
     argument, the default parameter value is '2'.

     Note that '-ftrack-macro-expansion=2' is activated by default.

'-fexec-charset=CHARSET'
     Set the execution character set, used for string and character
     constants.  The default is UTF-8.  CHARSET can be any encoding
     supported by the system's 'iconv' library routine.

'-fwide-exec-charset=CHARSET'
     Set the wide execution character set, used for wide string and
     character constants.  The default is UTF-32 or UTF-16, whichever
     corresponds to the width of 'wchar_t'.  As with '-fexec-charset',
     CHARSET can be any encoding supported by the system's 'iconv'
     library routine; however, you will have problems with encodings
     that do not fit exactly in 'wchar_t'.

'-finput-charset=CHARSET'
     Set the input character set, used for translation from the
     character set of the input file to the source character set used by
     GCC.  If the locale does not specify, or GCC cannot get this
     information from the locale, the default is UTF-8.  This can be
     overridden by either the locale or this command-line option.
     Currently the command-line option takes precedence if there's a
     conflict.  CHARSET can be any encoding supported by the system's
     'iconv' library routine.

'-fworking-directory'
     Enable generation of linemarkers in the preprocessor output that
     will let the compiler know the current working directory at the
     time of preprocessing.  When this option is enabled, the
     preprocessor will emit, after the initial linemarker, a second
     linemarker with the current working directory followed by two
     slashes.  GCC will use this directory, when it's present in the
     preprocessed input, as the directory emitted as the current working
     directory in some debugging information formats.  This option is
     implicitly enabled if debugging information is enabled, but this
     can be inhibited with the negated form '-fno-working-directory'.
     If the '-P' flag is present in the command line, this option has no
     effect, since no '#line' directives are emitted whatsoever.

'-fno-show-column'
     Do not print column numbers in diagnostics.  This may be necessary
     if diagnostics are being scanned by a program that does not
     understand the column numbers, such as 'dejagnu'.

'-A PREDICATE=ANSWER'
     Make an assertion with the predicate PREDICATE and answer ANSWER.
     This form is preferred to the older form '-A PREDICATE(ANSWER)',
     which is still supported, because it does not use shell special
     characters.

'-A -PREDICATE=ANSWER'
     Cancel an assertion with the predicate PREDICATE and answer ANSWER.

'-dCHARS'
     CHARS is a sequence of one or more of the following characters, and
     must not be preceded by a space.  Other characters are interpreted
     by the compiler proper, or reserved for future versions of GCC, and
     so are silently ignored.  If you specify characters whose behavior
     conflicts, the result is undefined.

     'M'
          Instead of the normal output, generate a list of '#define'
          directives for all the macros defined during the execution of
          the preprocessor, including predefined macros.  This gives you
          a way of finding out what is predefined in your version of the
          preprocessor.  Assuming you have no file 'foo.h', the command

               touch foo.h; cpp -dM foo.h

          will show all the predefined macros.

          If you use '-dM' without the '-E' option, '-dM' is interpreted
          as a synonym for '-fdump-rtl-mach'.  *Note (gcc)Debugging
          Options::.

     'D'
          Like 'M' except in two respects: it does _not_ include the
          predefined macros, and it outputs _both_ the '#define'
          directives and the result of preprocessing.  Both kinds of
          output go to the standard output file.

     'N'
          Like 'D', but emit only the macro names, not their expansions.

     'I'
          Output '#include' directives in addition to the result of
          preprocessing.

     'U'
          Like 'D' except that only macros that are expanded, or whose
          definedness is tested in preprocessor directives, are output;
          the output is delayed until the use or test of the macro; and
          '#undef' directives are also output for macros tested but
          undefined at the time.

'-P'
     Inhibit generation of linemarkers in the output from the
     preprocessor.  This might be useful when running the preprocessor
     on something that is not C code, and will be sent to a program
     which might be confused by the linemarkers.

'-C'
     Do not discard comments.  All comments are passed through to the
     output file, except for comments in processed directives, which are
     deleted along with the directive.

     You should be prepared for side effects when using '-C'; it causes
     the preprocessor to treat comments as tokens in their own right.
     For example, comments appearing at the start of what would be a
     directive line have the effect of turning that line into an
     ordinary source line, since the first token on the line is no
     longer a '#'.

'-CC'
     Do not discard comments, including during macro expansion.  This is
     like '-C', except that comments contained within macros are also
     passed through to the output file where the macro is expanded.

     In addition to the side-effects of the '-C' option, the '-CC'
     option causes all C++-style comments inside a macro to be converted
     to C-style comments.  This is to prevent later use of that macro
     from inadvertently commenting out the remainder of the source line.

     The '-CC' option is generally used to support lint comments.

'-traditional-cpp'
     Try to imitate the behavior of old-fashioned C preprocessors, as
     opposed to ISO C preprocessors.

'-trigraphs'
     Process trigraph sequences.  These are three-character sequences,
     all starting with '??', that are defined by ISO C to stand for
     single characters.  For example, '??/' stands for '\', so ''??/n''
     is a character constant for a newline.  By default, GCC ignores
     trigraphs, but in standard-conforming modes it converts them.  See
     the '-std' and '-ansi' options.

     The nine trigraphs and their replacements are

          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
          Replacement:      [    ]    {    }    #    \    ^    |    ~

'-remap'
     Enable special code to work around file systems which only permit
     very short file names, such as MS-DOS.

'--help'
'--target-help'
     Print text describing all the command-line options instead of
     preprocessing anything.

'-v'
     Verbose mode.  Print out GNU CPP's version number at the beginning
     of execution, and report the final form of the include path.

'-H'
     Print the name of each header file used, in addition to other
     normal activities.  Each name is indented to show how deep in the
     '#include' stack it is.  Precompiled header files are also printed,
     even if they are found to be invalid; an invalid precompiled header
     file is printed with '...x' and a valid one with '...!' .

'-version'
'--version'
     Print out GNU CPP's version number.  With one dash, proceed to
     preprocess as normal.  With two dashes, exit immediately.


File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC

3.12 Passing Options to the Assembler
=====================================

You can pass options to the assembler.

'-Wa,OPTION'
     Pass OPTION as an option to the assembler.  If OPTION contains
     commas, it is split into multiple options at the commas.

'-Xassembler OPTION'
     Pass OPTION as an option to the assembler.  You can use this to
     supply system-specific assembler options that GCC does not
     recognize.

     If you want to pass an option that takes an argument, you must use
     '-Xassembler' twice, once for the option and once for the argument.


File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC

3.13 Options for Linking
========================

These options come into play when the compiler links object files into
an executable output file.  They are meaningless if the compiler is not
doing a link step.

'OBJECT-FILE-NAME'
     A file name that does not end in a special recognized suffix is
     considered to name an object file or library.  (Object files are
     distinguished from libraries by the linker according to the file
     contents.)  If linking is done, these object files are used as
     input to the linker.

'-c'
'-S'
'-E'
     If any of these options is used, then the linker is not run, and
     object file names should not be used as arguments.  *Note Overall
     Options::.

'-fuse-ld=bfd'
     Use the 'bfd' linker instead of the default linker.

'-fuse-ld=gold'
     Use the 'gold' linker instead of the default linker.

'-lLIBRARY'
'-l LIBRARY'
     Search the library named LIBRARY when linking.  (The second
     alternative with the library as a separate argument is only for
     POSIX compliance and is not recommended.)

     It makes a difference where in the command you write this option;
     the linker searches and processes libraries and object files in the
     order they are specified.  Thus, 'foo.o -lz bar.o' searches library
     'z' after file 'foo.o' but before 'bar.o'.  If 'bar.o' refers to
     functions in 'z', those functions may not be loaded.

     The linker searches a standard list of directories for the library,
     which is actually a file named 'libLIBRARY.a'.  The linker then
     uses this file as if it had been specified precisely by name.

     The directories searched include several standard system
     directories plus any that you specify with '-L'.

     Normally the files found this way are library files--archive files
     whose members are object files.  The linker handles an archive file
     by scanning through it for members which define symbols that have
     so far been referenced but not defined.  But if the file that is
     found is an ordinary object file, it is linked in the usual
     fashion.  The only difference between using an '-l' option and
     specifying a file name is that '-l' surrounds LIBRARY with 'lib'
     and '.a' and searches several directories.

'-lobjc'
     You need this special case of the '-l' option in order to link an
     Objective-C or Objective-C++ program.

'-nostartfiles'
     Do not use the standard system startup files when linking.  The
     standard system libraries are used normally, unless '-nostdlib' or
     '-nodefaultlibs' is used.

'-nodefaultlibs'
     Do not use the standard system libraries when linking.  Only the
     libraries you specify are passed to the linker, and options
     specifying linkage of the system libraries, such as
     '-static-libgcc' or '-shared-libgcc', are ignored.  The standard
     startup files are used normally, unless '-nostartfiles' is used.

     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
     'memmove'.  These entries are usually resolved by entries in libc.
     These entry points should be supplied through some other mechanism
     when this option is specified.

'-nostdlib'
     Do not use the standard system startup files or libraries when
     linking.  No startup files and only the libraries you specify are
     passed to the linker, and options specifying linkage of the system
     libraries, such as '-static-libgcc' or '-shared-libgcc', are
     ignored.

     The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and
     'memmove'.  These entries are usually resolved by entries in libc.
     These entry points should be supplied through some other mechanism
     when this option is specified.

     One of the standard libraries bypassed by '-nostdlib' and
     '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines
     which GCC uses to overcome shortcomings of particular machines, or
     special needs for some languages.  (*Note Interfacing to GCC
     Output: (gccint)Interface, for more discussion of 'libgcc.a'.)  In
     most cases, you need 'libgcc.a' even when you want to avoid other
     standard libraries.  In other words, when you specify '-nostdlib'
     or '-nodefaultlibs' you should usually specify '-lgcc' as well.
     This ensures that you have no unresolved references to internal GCC
     library subroutines.  (An example of such an internal subroutine is
     '__main', used to ensure C++ constructors are called; *note
     'collect2': (gccint)Collect2.)

'-pie'
     Produce a position independent executable on targets that support
     it.  For predictable results, you must also specify the same set of
     options used for compilation ('-fpie', '-fPIE', or model
     suboptions) when you specify this linker option.

'-rdynamic'
     Pass the flag '-export-dynamic' to the ELF linker, on targets that
     support it.  This instructs the linker to add all symbols, not only
     used ones, to the dynamic symbol table.  This option is needed for
     some uses of 'dlopen' or to allow obtaining backtraces from within
     a program.

'-s'
     Remove all symbol table and relocation information from the
     executable.

'-static'
     On systems that support dynamic linking, this prevents linking with
     the shared libraries.  On other systems, this option has no effect.

'-shared'
     Produce a shared object which can then be linked with other objects
     to form an executable.  Not all systems support this option.  For
     predictable results, you must also specify the same set of options
     used for compilation ('-fpic', '-fPIC', or model suboptions) when
     you specify this linker option.(1)

'-shared-libgcc'
'-static-libgcc'
     On systems that provide 'libgcc' as a shared library, these options
     force the use of either the shared or static version, respectively.
     If no shared version of 'libgcc' was built when the compiler was
     configured, these options have no effect.

     There are several situations in which an application should use the
     shared 'libgcc' instead of the static version.  The most common of
     these is when the application wishes to throw and catch exceptions
     across different shared libraries.  In that case, each of the
     libraries as well as the application itself should use the shared
     'libgcc'.

     Therefore, the G++ and GCJ drivers automatically add
     '-shared-libgcc' whenever you build a shared library or a main
     executable, because C++ and Java programs typically use exceptions,
     so this is the right thing to do.

     If, instead, you use the GCC driver to create shared libraries, you
     may find that they are not always linked with the shared 'libgcc'.
     If GCC finds, at its configuration time, that you have a non-GNU
     linker or a GNU linker that does not support option
     '--eh-frame-hdr', it links the shared version of 'libgcc' into
     shared libraries by default.  Otherwise, it takes advantage of the
     linker and optimizes away the linking with the shared version of
     'libgcc', linking with the static version of libgcc by default.
     This allows exceptions to propagate through such shared libraries,
     without incurring relocation costs at library load time.

     However, if a library or main executable is supposed to throw or
     catch exceptions, you must link it using the G++ or GCJ driver, as
     appropriate for the languages used in the program, or using the
     option '-shared-libgcc', such that it is linked with the shared
     'libgcc'.

'-static-libasan'
     When the '-fsanitize=address' option is used to link a program, the
     GCC driver automatically links against 'libasan'.  If 'libasan' is
     available as a shared library, and the '-static' option is not
     used, then this links against the shared version of 'libasan'.  The
     '-static-libasan' option directs the GCC driver to link 'libasan'
     statically, without necessarily linking other libraries statically.

'-static-libtsan'
     When the '-fsanitize=thread' option is used to link a program, the
     GCC driver automatically links against 'libtsan'.  If 'libtsan' is
     available as a shared library, and the '-static' option is not
     used, then this links against the shared version of 'libtsan'.  The
     '-static-libtsan' option directs the GCC driver to link 'libtsan'
     statically, without necessarily linking other libraries statically.

'-static-liblsan'
     When the '-fsanitize=leak' option is used to link a program, the
     GCC driver automatically links against 'liblsan'.  If 'liblsan' is
     available as a shared library, and the '-static' option is not
     used, then this links against the shared version of 'liblsan'.  The
     '-static-liblsan' option directs the GCC driver to link 'liblsan'
     statically, without necessarily linking other libraries statically.

'-static-libubsan'
     When the '-fsanitize=undefined' option is used to link a program,
     the GCC driver automatically links against 'libubsan'.  If
     'libubsan' is available as a shared library, and the '-static'
     option is not used, then this links against the shared version of
     'libubsan'.  The '-static-libubsan' option directs the GCC driver
     to link 'libubsan' statically, without necessarily linking other
     libraries statically.

'-static-libmpx'
     When the '-fcheck-pointer bounds' and '-mmpx' options are used to
     link a program, the GCC driver automatically links against
     'libmpx'.  If 'libmpx' is available as a shared library, and the
     '-static' option is not used, then this links against the shared
     version of 'libmpx'.  The '-static-libmpx' option directs the GCC
     driver to link 'libmpx' statically, without necessarily linking
     other libraries statically.

'-static-libmpxwrappers'
     When the '-fcheck-pointer bounds' and '-mmpx' options are used to
     link a program without also using '-fno-chkp-use-wrappers', the GCC
     driver automatically links against 'libmpxwrappers'.  If
     'libmpxwrappers' is available as a shared library, and the
     '-static' option is not used, then this links against the shared
     version of 'libmpxwrappers'.  The '-static-libmpxwrappers' option
     directs the GCC driver to link 'libmpxwrappers' statically, without
     necessarily linking other libraries statically.

'-static-libstdc++'
     When the 'g++' program is used to link a C++ program, it normally
     automatically links against 'libstdc++'.  If 'libstdc++' is
     available as a shared library, and the '-static' option is not
     used, then this links against the shared version of 'libstdc++'.
     That is normally fine.  However, it is sometimes useful to freeze
     the version of 'libstdc++' used by the program without going all
     the way to a fully static link.  The '-static-libstdc++' option
     directs the 'g++' driver to link 'libstdc++' statically, without
     necessarily linking other libraries statically.

'-symbolic'
     Bind references to global symbols when building a shared object.
     Warn about any unresolved references (unless overridden by the link
     editor option '-Xlinker -z -Xlinker defs').  Only a few systems
     support this option.

'-T SCRIPT'
     Use SCRIPT as the linker script.  This option is supported by most
     systems using the GNU linker.  On some targets, such as bare-board
     targets without an operating system, the '-T' option may be
     required when linking to avoid references to undefined symbols.

'-Xlinker OPTION'
     Pass OPTION as an option to the linker.  You can use this to supply
     system-specific linker options that GCC does not recognize.

     If you want to pass an option that takes a separate argument, you
     must use '-Xlinker' twice, once for the option and once for the
     argument.  For example, to pass '-assert definitions', you must
     write '-Xlinker -assert -Xlinker definitions'.  It does not work to
     write '-Xlinker "-assert definitions"', because this passes the
     entire string as a single argument, which is not what the linker
     expects.

     When using the GNU linker, it is usually more convenient to pass
     arguments to linker options using the 'OPTION=VALUE' syntax than as
     separate arguments.  For example, you can specify '-Xlinker
     -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'.
     Other linkers may not support this syntax for command-line options.

'-Wl,OPTION'
     Pass OPTION as an option to the linker.  If OPTION contains commas,
     it is split into multiple options at the commas.  You can use this
     syntax to pass an argument to the option.  For example,
     '-Wl,-Map,output.map' passes '-Map output.map' to the linker.  When
     using the GNU linker, you can also get the same effect with
     '-Wl,-Map=output.map'.

'-u SYMBOL'
     Pretend the symbol SYMBOL is undefined, to force linking of library
     modules to define it.  You can use '-u' multiple times with
     different symbols to force loading of additional library modules.

'-z KEYWORD'
     '-z' is passed directly on to the linker along with the keyword
     KEYWORD.  See the section in the documentation of your linker for
     permitted values and their meanings.

   ---------- Footnotes ----------

   (1) On some systems, 'gcc -shared' needs to build supplementary stub
code for constructors to work.  On multi-libbed systems, 'gcc -shared'
must select the correct support libraries to link against.  Failing to
supply the correct flags may lead to subtle defects.  Supplying them in
cases where they are not necessary is innocuous.


File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC

3.14 Options for Directory Search
=================================

These options specify directories to search for header files, for
libraries and for parts of the compiler:

'-IDIR'
     Add the directory DIR to the head of the list of directories to be
     searched for header files.  This can be used to override a system
     header file, substituting your own version, since these directories
     are searched before the system header file directories.  However,
     you should not use this option to add directories that contain
     vendor-supplied system header files (use '-isystem' for that).  If
     you use more than one '-I' option, the directories are scanned in
     left-to-right order; the standard system directories come after.

     If a standard system include directory, or a directory specified
     with '-isystem', is also specified with '-I', the '-I' option is
     ignored.  The directory is still searched but as a system directory
     at its normal position in the system include chain.  This is to
     ensure that GCC's procedure to fix buggy system headers and the
     ordering for the 'include_next' directive are not inadvertently
     changed.  If you really need to change the search order for system
     directories, use the '-nostdinc' and/or '-isystem' options.

'-iplugindir=DIR'
     Set the directory to search for plugins that are passed by
     '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'.  This option is
     not meant to be used by the user, but only passed by the driver.

'-iquoteDIR'
     Add the directory DIR to the head of the list of directories to be
     searched for header files only for the case of '#include "FILE"';
     they are not searched for '#include <FILE>', otherwise just like
     '-I'.

'-LDIR'
     Add directory DIR to the list of directories to be searched for
     '-l'.

'-BPREFIX'
     This option specifies where to find the executables, libraries,
     include files, and data files of the compiler itself.

     The compiler driver program runs one or more of the subprograms
     'cpp', 'cc1', 'as' and 'ld'.  It tries PREFIX as a prefix for each
     program it tries to run, both with and without 'MACHINE/VERSION/'
     (*note Target Options::).

     For each subprogram to be run, the compiler driver first tries the
     '-B' prefix, if any.  If that name is not found, or if '-B' is not
     specified, the driver tries two standard prefixes, '/usr/lib/gcc/'
     and '/usr/local/lib/gcc/'.  If neither of those results in a file
     name that is found, the unmodified program name is searched for
     using the directories specified in your 'PATH' environment
     variable.

     The compiler checks to see if the path provided by '-B' refers to a
     directory, and if necessary it adds a directory separator character
     at the end of the path.

     '-B' prefixes that effectively specify directory names also apply
     to libraries in the linker, because the compiler translates these
     options into '-L' options for the linker.  They also apply to
     include files in the preprocessor, because the compiler translates
     these options into '-isystem' options for the preprocessor.  In
     this case, the compiler appends 'include' to the prefix.

     The runtime support file 'libgcc.a' can also be searched for using
     the '-B' prefix, if needed.  If it is not found there, the two
     standard prefixes above are tried, and that is all.  The file is
     left out of the link if it is not found by those means.

     Another way to specify a prefix much like the '-B' prefix is to use
     the environment variable 'GCC_EXEC_PREFIX'.  *Note Environment
     Variables::.

     As a special kludge, if the path provided by '-B' is
     '[dir/]stageN/', where N is a number in the range 0 to 9, then it
     is replaced by '[dir/]include'.  This is to help with
     boot-strapping the compiler.

'-specs=FILE'
     Process FILE after the compiler reads in the standard 'specs' file,
     in order to override the defaults which the 'gcc' driver program
     uses when determining what switches to pass to 'cc1', 'cc1plus',
     'as', 'ld', etc.  More than one '-specs=FILE' can be specified on
     the command line, and they are processed in order, from left to
     right.

'--sysroot=DIR'
     Use DIR as the logical root directory for headers and libraries.
     For example, if the compiler normally searches for headers in
     '/usr/include' and libraries in '/usr/lib', it instead searches
     'DIR/usr/include' and 'DIR/usr/lib'.

     If you use both this option and the '-isysroot' option, then the
     '--sysroot' option applies to libraries, but the '-isysroot' option
     applies to header files.

     The GNU linker (beginning with version 2.16) has the necessary
     support for this option.  If your linker does not support this
     option, the header file aspect of '--sysroot' still works, but the
     library aspect does not.

'--no-sysroot-suffix'
     For some targets, a suffix is added to the root directory specified
     with '--sysroot', depending on the other options used, so that
     headers may for example be found in 'DIR/SUFFIX/usr/include'
     instead of 'DIR/usr/include'.  This option disables the addition of
     such a suffix.

'-I-'
     This option has been deprecated.  Please use '-iquote' instead for
     '-I' directories before the '-I-' and remove the '-I-' option.  Any
     directories you specify with '-I' options before the '-I-' option
     are searched only for the case of '#include "FILE"'; they are not
     searched for '#include <FILE>'.

     If additional directories are specified with '-I' options after the
     '-I-' option, these directories are searched for all '#include'
     directives.  (Ordinarily _all_ '-I' directories are used this way.)

     In addition, the '-I-' option inhibits the use of the current
     directory (where the current input file came from) as the first
     search directory for '#include "FILE"'.  There is no way to
     override this effect of '-I-'.  With '-I.' you can specify
     searching the directory that is current when the compiler is
     invoked.  That is not exactly the same as what the preprocessor
     does by default, but it is often satisfactory.

     '-I-' does not inhibit the use of the standard system directories
     for header files.  Thus, '-I-' and '-nostdinc' are independent.


File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC

3.15 Specifying Subprocesses and the Switches to Pass to Them
=============================================================

'gcc' is a driver program.  It performs its job by invoking a sequence
of other programs to do the work of compiling, assembling and linking.
GCC interprets its command-line parameters and uses these to deduce
which programs it should invoke, and which command-line options it ought
to place on their command lines.  This behavior is controlled by "spec
strings".  In most cases there is one spec string for each program that
GCC can invoke, but a few programs have multiple spec strings to control
their behavior.  The spec strings built into GCC can be overridden by
using the '-specs=' command-line switch to specify a spec file.

 "Spec files" are plaintext files that are used to construct spec
strings.  They consist of a sequence of directives separated by blank
lines.  The type of directive is determined by the first non-whitespace
character on the line, which can be one of the following:

'%COMMAND'
     Issues a COMMAND to the spec file processor.  The commands that can
     appear here are:

     '%include <FILE>'
          Search for FILE and insert its text at the current point in
          the specs file.

     '%include_noerr <FILE>'
          Just like '%include', but do not generate an error message if
          the include file cannot be found.

     '%rename OLD_NAME NEW_NAME'
          Rename the spec string OLD_NAME to NEW_NAME.

'*[SPEC_NAME]:'
     This tells the compiler to create, override or delete the named
     spec string.  All lines after this directive up to the next
     directive or blank line are considered to be the text for the spec
     string.  If this results in an empty string then the spec is
     deleted.  (Or, if the spec did not exist, then nothing happens.)
     Otherwise, if the spec does not currently exist a new spec is
     created.  If the spec does exist then its contents are overridden
     by the text of this directive, unless the first character of that
     text is the '+' character, in which case the text is appended to
     the spec.

'[SUFFIX]:'
     Creates a new '[SUFFIX] spec' pair.  All lines after this directive
     and up to the next directive or blank line are considered to make
     up the spec string for the indicated suffix.  When the compiler
     encounters an input file with the named suffix, it processes the
     spec string in order to work out how to compile that file.  For
     example:

          .ZZ:
          z-compile -input %i

     This says that any input file whose name ends in '.ZZ' should be
     passed to the program 'z-compile', which should be invoked with the
     command-line switch '-input' and with the result of performing the
     '%i' substitution.  (See below.)

     As an alternative to providing a spec string, the text following a
     suffix directive can be one of the following:

     '@LANGUAGE'
          This says that the suffix is an alias for a known LANGUAGE.
          This is similar to using the '-x' command-line switch to GCC
          to specify a language explicitly.  For example:

               .ZZ:
               @c++

          Says that .ZZ files are, in fact, C++ source files.

     '#NAME'
          This causes an error messages saying:

               NAME compiler not installed on this system.

     GCC already has an extensive list of suffixes built into it.  This
     directive adds an entry to the end of the list of suffixes, but
     since the list is searched from the end backwards, it is
     effectively possible to override earlier entries using this
     technique.

 GCC has the following spec strings built into it.  Spec files can
override these strings or create their own.  Note that individual
targets can also add their own spec strings to this list.

     asm          Options to pass to the assembler
     asm_final    Options to pass to the assembler post-processor
     cpp          Options to pass to the C preprocessor
     cc1          Options to pass to the C compiler
     cc1plus      Options to pass to the C++ compiler
     endfile      Object files to include at the end of the link
     link         Options to pass to the linker
     lib          Libraries to include on the command line to the linker
     libgcc       Decides which GCC support library to pass to the linker
     linker       Sets the name of the linker
     predefines   Defines to be passed to the C preprocessor
     signed_char  Defines to pass to CPP to say whether char is signed
                  by default
     startfile    Object files to include at the start of the link

 Here is a small example of a spec file:

     %rename lib                 old_lib

     *lib:
     --start-group -lgcc -lc -leval1 --end-group %(old_lib)

 This example renames the spec called 'lib' to 'old_lib' and then
overrides the previous definition of 'lib' with a new one.  The new
definition adds in some extra command-line options before including the
text of the old definition.

 "Spec strings" are a list of command-line options to be passed to their
corresponding program.  In addition, the spec strings can contain
'%'-prefixed sequences to substitute variable text or to conditionally
insert text into the command line.  Using these constructs it is
possible to generate quite complex command lines.

 Here is a table of all defined '%'-sequences for spec strings.  Note
that spaces are not generated automatically around the results of
expanding these sequences.  Therefore you can concatenate them together
or combine them with constant text in a single argument.

'%%'
     Substitute one '%' into the program name or argument.

'%i'
     Substitute the name of the input file being processed.

'%b'
     Substitute the basename of the input file being processed.  This is
     the substring up to (and not including) the last period and not
     including the directory.

'%B'
     This is the same as '%b', but include the file suffix (text after
     the last period).

'%d'
     Marks the argument containing or following the '%d' as a temporary
     file name, so that that file is deleted if GCC exits successfully.
     Unlike '%g', this contributes no text to the argument.

'%gSUFFIX'
     Substitute a file name that has suffix SUFFIX and is chosen once
     per compilation, and mark the argument in the same way as '%d'.  To
     reduce exposure to denial-of-service attacks, the file name is now
     chosen in a way that is hard to predict even when previously chosen
     file names are known.  For example, '%g.s ... %g.o ... %g.s' might
     turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX matches the
     regexp '[.A-Za-z]*' or the special string '%O', which is treated
     exactly as if '%O' had been preprocessed.  Previously, '%g' was
     simply substituted with a file name chosen once per compilation,
     without regard to any appended suffix (which was therefore treated
     just like ordinary text), making such attacks more likely to
     succeed.

'%uSUFFIX'
     Like '%g', but generates a new temporary file name each time it
     appears instead of once per compilation.

'%USUFFIX'
     Substitutes the last file name generated with '%uSUFFIX',
     generating a new one if there is no such last file name.  In the
     absence of any '%uSUFFIX', this is just like '%gSUFFIX', except
     they don't share the same suffix _space_, so '%g.s ... %U.s ...
     %g.s ... %U.s' involves the generation of two distinct file names,
     one for each '%g.s' and another for each '%U.s'.  Previously, '%U'
     was simply substituted with a file name chosen for the previous
     '%u', without regard to any appended suffix.

'%jSUFFIX'
     Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is
     writable, and if '-save-temps' is not used; otherwise, substitute
     the name of a temporary file, just like '%u'.  This temporary file
     is not meant for communication between processes, but rather as a
     junk disposal mechanism.

'%|SUFFIX'
'%mSUFFIX'
     Like '%g', except if '-pipe' is in effect.  In that case '%|'
     substitutes a single dash and '%m' substitutes nothing at all.
     These are the two most common ways to instruct a program that it
     should read from standard input or write to standard output.  If
     you need something more elaborate you can use an '%{pipe:'X'}'
     construct: see for example 'f/lang-specs.h'.

'%.SUFFIX'
     Substitutes .SUFFIX for the suffixes of a matched switch's args
     when it is subsequently output with '%*'.  SUFFIX is terminated by
     the next space or %.

'%w'
     Marks the argument containing or following the '%w' as the
     designated output file of this compilation.  This puts the argument
     into the sequence of arguments that '%o' substitutes.

'%o'
     Substitutes the names of all the output files, with spaces
     automatically placed around them.  You should write spaces around
     the '%o' as well or the results are undefined.  '%o' is for use in
     the specs for running the linker.  Input files whose names have no
     recognized suffix are not compiled at all, but they are included
     among the output files, so they are linked.

'%O'
     Substitutes the suffix for object files.  Note that this is handled
     specially when it immediately follows '%g, %u, or %U', because of
     the need for those to form complete file names.  The handling is
     such that '%O' is treated exactly as if it had already been
     substituted, except that '%g, %u, and %U' do not currently support
     additional SUFFIX characters following '%O' as they do following,
     for example, '.o'.

'%p'
     Substitutes the standard macro predefinitions for the current
     target machine.  Use this when running 'cpp'.

'%P'
     Like '%p', but puts '__' before and after the name of each
     predefined macro, except for macros that start with '__' or with
     '_L', where L is an uppercase letter.  This is for ISO C.

'%I'
     Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'),
     '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from
     'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary.

'%s'
     Current argument is the name of a library or startup file of some
     sort.  Search for that file in a standard list of directories and
     substitute the full name found.  The current working directory is
     included in the list of directories scanned.

'%T'
     Current argument is the name of a linker script.  Search for that
     file in the current list of directories to scan for libraries.  If
     the file is located insert a '--script' option into the command
     line followed by the full path name found.  If the file is not
     found then generate an error message.  Note: the current working
     directory is not searched.

'%eSTR'
     Print STR as an error message.  STR is terminated by a newline.
     Use this when inconsistent options are detected.

'%(NAME)'
     Substitute the contents of spec string NAME at this point.

'%x{OPTION}'
     Accumulate an option for '%X'.

'%X'
     Output the accumulated linker options specified by '-Wl' or a '%x'
     spec string.

'%Y'
     Output the accumulated assembler options specified by '-Wa'.

'%Z'
     Output the accumulated preprocessor options specified by '-Wp'.

'%a'
     Process the 'asm' spec.  This is used to compute the switches to be
     passed to the assembler.

'%A'
     Process the 'asm_final' spec.  This is a spec string for passing
     switches to an assembler post-processor, if such a program is
     needed.

'%l'
     Process the 'link' spec.  This is the spec for computing the
     command line passed to the linker.  Typically it makes use of the
     '%L %G %S %D and %E' sequences.

'%D'
     Dump out a '-L' option for each directory that GCC believes might
     contain startup files.  If the target supports multilibs then the
     current multilib directory is prepended to each of these paths.

'%L'
     Process the 'lib' spec.  This is a spec string for deciding which
     libraries are included on the command line to the linker.

'%G'
     Process the 'libgcc' spec.  This is a spec string for deciding
     which GCC support library is included on the command line to the
     linker.

'%S'
     Process the 'startfile' spec.  This is a spec for deciding which
     object files are the first ones passed to the linker.  Typically
     this might be a file named 'crt0.o'.

'%E'
     Process the 'endfile' spec.  This is a spec string that specifies
     the last object files that are passed to the linker.

'%C'
     Process the 'cpp' spec.  This is used to construct the arguments to
     be passed to the C preprocessor.

'%1'
     Process the 'cc1' spec.  This is used to construct the options to
     be passed to the actual C compiler ('cc1').

'%2'
     Process the 'cc1plus' spec.  This is used to construct the options
     to be passed to the actual C++ compiler ('cc1plus').

'%*'
     Substitute the variable part of a matched option.  See below.  Note
     that each comma in the substituted string is replaced by a single
     space.

'%<S'
     Remove all occurrences of '-S' from the command line.  Note--this
     command is position dependent.  '%' commands in the spec string
     before this one see '-S', '%' commands in the spec string after
     this one do not.

'%:FUNCTION(ARGS)'
     Call the named function FUNCTION, passing it ARGS.  ARGS is first
     processed as a nested spec string, then split into an argument
     vector in the usual fashion.  The function returns a string which
     is processed as if it had appeared literally as part of the current
     spec.

     The following built-in spec functions are provided:

     'getenv'
          The 'getenv' spec function takes two arguments: an environment
          variable name and a string.  If the environment variable is
          not defined, a fatal error is issued.  Otherwise, the return
          value is the value of the environment variable concatenated
          with the string.  For example, if 'TOPDIR' is defined as
          '/path/to/top', then:

               %:getenv(TOPDIR /include)

          expands to '/path/to/top/include'.

     'if-exists'
          The 'if-exists' spec function takes one argument, an absolute
          pathname to a file.  If the file exists, 'if-exists' returns
          the pathname.  Here is a small example of its usage:

               *startfile:
               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s

     'if-exists-else'
          The 'if-exists-else' spec function is similar to the
          'if-exists' spec function, except that it takes two arguments.
          The first argument is an absolute pathname to a file.  If the
          file exists, 'if-exists-else' returns the pathname.  If it
          does not exist, it returns the second argument.  This way,
          'if-exists-else' can be used to select one file or another,
          based on the existence of the first.  Here is a small example
          of its usage:

               *startfile:
               crt0%O%s %:if-exists(crti%O%s) \
               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)

     'replace-outfile'
          The 'replace-outfile' spec function takes two arguments.  It
          looks for the first argument in the outfiles array and
          replaces it with the second argument.  Here is a small example
          of its usage:

               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}

     'remove-outfile'
          The 'remove-outfile' spec function takes one argument.  It
          looks for the first argument in the outfiles array and removes
          it.  Here is a small example its usage:

               %:remove-outfile(-lm)

     'pass-through-libs'
          The 'pass-through-libs' spec function takes any number of
          arguments.  It finds any '-l' options and any non-options
          ending in '.a' (which it assumes are the names of linker input
          library archive files) and returns a result containing all the
          found arguments each prepended by '-plugin-opt=-pass-through='
          and joined by spaces.  This list is intended to be passed to
          the LTO linker plugin.

               %:pass-through-libs(%G %L %G)

     'print-asm-header'
          The 'print-asm-header' function takes no arguments and simply
          prints a banner like:

               Assembler options
               =================

               Use "-Wa,OPTION" to pass "OPTION" to the assembler.

          It is used to separate compiler options from assembler options
          in the '--target-help' output.

'%{S}'
     Substitutes the '-S' switch, if that switch is given to GCC.  If
     that switch is not specified, this substitutes nothing.  Note that
     the leading dash is omitted when specifying this option, and it is
     automatically inserted if the substitution is performed.  Thus the
     spec string '%{foo}' matches the command-line option '-foo' and
     outputs the command-line option '-foo'.

'%W{S}'
     Like %{'S'} but mark last argument supplied within as a file to be
     deleted on failure.

'%{S*}'
     Substitutes all the switches specified to GCC whose names start
     with '-S', but which also take an argument.  This is used for
     switches like '-o', '-D', '-I', etc.  GCC considers '-o foo' as
     being one switch whose name starts with 'o'.  %{o*} substitutes
     this text, including the space.  Thus two arguments are generated.

'%{S*&T*}'
     Like %{'S'*}, but preserve order of 'S' and 'T' options (the order
     of 'S' and 'T' in the spec is not significant).  There can be any
     number of ampersand-separated variables; for each the wild card is
     optional.  Useful for CPP as '%{D*&U*&A*}'.

'%{S:X}'
     Substitutes 'X', if the '-S' switch is given to GCC.

'%{!S:X}'
     Substitutes 'X', if the '-S' switch is _not_ given to GCC.

'%{S*:X}'
     Substitutes 'X' if one or more switches whose names start with '-S'
     are specified to GCC.  Normally 'X' is substituted only once, no
     matter how many such switches appeared.  However, if '%*' appears
     somewhere in 'X', then 'X' is substituted once for each matching
     switch, with the '%*' replaced by the part of that switch matching
     the '*'.

     If '%*' appears as the last part of a spec sequence then a space is
     added after the end of the last substitution.  If there is more
     text in the sequence, however, then a space is not generated.  This
     allows the '%*' substitution to be used as part of a larger string.
     For example, a spec string like this:

          %{mcu=*:--script=%*/memory.ld}

     when matching an option like '-mcu=newchip' produces:

          --script=newchip/memory.ld

'%{.S:X}'
     Substitutes 'X', if processing a file with suffix 'S'.

'%{!.S:X}'
     Substitutes 'X', if _not_ processing a file with suffix 'S'.

'%{,S:X}'
     Substitutes 'X', if processing a file for language 'S'.

'%{!,S:X}'
     Substitutes 'X', if not processing a file for language 'S'.

'%{S|P:X}'
     Substitutes 'X' if either '-S' or '-P' is given to GCC.  This may
     be combined with '!', '.', ',', and '*' sequences as well, although
     they have a stronger binding than the '|'.  If '%*' appears in 'X',
     all of the alternatives must be starred, and only the first
     matching alternative is substituted.

     For example, a spec string like this:

          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}

     outputs the following command-line options from the following input
     command-line options:

          fred.c        -foo -baz
          jim.d         -bar -boggle
          -d fred.c     -foo -baz -boggle
          -d jim.d      -bar -baz -boggle

'%{S:X; T:Y; :D}'

     If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to
     GCC, substitutes 'Y'; else substitutes 'D'.  There can be as many
     clauses as you need.  This may be combined with '.', ',', '!', '|',
     and '*' as needed.

 The conditional text 'X' in a %{'S':'X'} or similar construct may
contain other nested '%' constructs or spaces, or even newlines.  They
are processed as usual, as described above.  Trailing white space in 'X'
is ignored.  White space may also appear anywhere on the left side of
the colon in these constructs, except between '.' or '*' and the
corresponding word.

 The '-O', '-f', '-m', and '-W' switches are handled specifically in
these constructs.  If another value of '-O' or the negated form of a
'-f', '-m', or '-W' switch is found later in the command line, the
earlier switch value is ignored, except with {'S'*} where 'S' is just
one letter, which passes all matching options.

 The character '|' at the beginning of the predicate text is used to
indicate that a command should be piped to the following command, but
only if '-pipe' is specified.

 It is built into GCC which switches take arguments and which do not.
(You might think it would be useful to generalize this to allow each
compiler's spec to say which switches take arguments.  But this cannot
be done in a consistent fashion.  GCC cannot even decide which input
files have been specified without knowing which switches take arguments,
and it must know which input files to compile in order to tell which
compilers to run).

 GCC also knows implicitly that arguments starting in '-l' are to be
treated as compiler output files, and passed to the linker in their
proper position among the other output files.


File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC

3.16 Specifying Target Machine and Compiler Version
===================================================

The usual way to run GCC is to run the executable called 'gcc', or
'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a
version other than the one that was installed last.


File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC

3.17 Hardware Models and Configurations
=======================================

Each target machine types can have its own special options, starting
with '-m', to choose among various hardware models or
configurations--for example, 68010 vs 68020, floating coprocessor or
none.  A single installed version of the compiler can compile for any
model or configuration, according to the options specified.

 Some configurations of the compiler also support additional special
options, usually for compatibility with other compilers on the same
platform.

* Menu:

* AArch64 Options::
* Adapteva Epiphany Options::
* ARC Options::
* ARM Options::
* AVR Options::
* Blackfin Options::
* C6X Options::
* CRIS Options::
* CR16 Options::
* Darwin Options::
* DEC Alpha Options::
* FR30 Options::
* FRV Options::
* GNU/Linux Options::
* H8/300 Options::
* HPPA Options::
* IA-64 Options::
* LM32 Options::
* M32C Options::
* M32R/D Options::
* M680x0 Options::
* MCore Options::
* MeP Options::
* MicroBlaze Options::
* MIPS Options::
* MMIX Options::
* MN10300 Options::
* Moxie Options::
* MSP430 Options::
* NDS32 Options::
* Nios II Options::
* Nvidia PTX Options::
* PDP-11 Options::
* picoChip Options::
* PowerPC Options::
* RL78 Options::
* RS/6000 and PowerPC Options::
* RX Options::
* S/390 and zSeries Options::
* Score Options::
* SH Options::
* Solaris 2 Options::
* SPARC Options::
* SPU Options::
* System V Options::
* TILE-Gx Options::
* TILEPro Options::
* V850 Options::
* VAX Options::
* Visium Options::
* VMS Options::
* VxWorks Options::
* x86 Options::
* x86 Windows Options::
* Xstormy16 Options::
* Xtensa Options::
* zSeries Options::


File: gcc.info,  Node: AArch64 Options,  Next: Adapteva Epiphany Options,  Up: Submodel Options

3.17.1 AArch64 Options
----------------------

These options are defined for AArch64 implementations:

'-mabi=NAME'
     Generate code for the specified data model.  Permissible values are
     'ilp32' for SysV-like data model where int, long int and pointer
     are 32-bit, and 'lp64' for SysV-like data model where int is
     32-bit, but long int and pointer are 64-bit.

     The default depends on the specific target configuration.  Note
     that the LP64 and ILP32 ABIs are not link-compatible; you must
     compile your entire program with the same ABI, and link with a
     compatible set of libraries.

'-mbig-endian'
     Generate big-endian code.  This is the default when GCC is
     configured for an 'aarch64_be-*-*' target.

'-mgeneral-regs-only'
     Generate code which uses only the general registers.

'-mlittle-endian'
     Generate little-endian code.  This is the default when GCC is
     configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target.

'-mcmodel=tiny'
     Generate code for the tiny code model.  The program and its
     statically defined symbols must be within 1GB of each other.
     Pointers are 64 bits.  Programs can be statically or dynamically
     linked.  This model is not fully implemented and mostly treated as
     'small'.

'-mcmodel=small'
     Generate code for the small code model.  The program and its
     statically defined symbols must be within 4GB of each other.
     Pointers are 64 bits.  Programs can be statically or dynamically
     linked.  This is the default code model.

'-mcmodel=large'
     Generate code for the large code model.  This makes no assumptions
     about addresses and sizes of sections.  Pointers are 64 bits.
     Programs can be statically linked only.

'-mstrict-align'
     Do not assume that unaligned memory references are handled by the
     system.

'-momit-leaf-frame-pointer'
'-mno-omit-leaf-frame-pointer'
     Omit or keep the frame pointer in leaf functions.  The former
     behaviour is the default.

'-mtls-dialect=desc'
     Use TLS descriptors as the thread-local storage mechanism for
     dynamic accesses of TLS variables.  This is the default.

'-mtls-dialect=traditional'
     Use traditional TLS as the thread-local storage mechanism for
     dynamic accesses of TLS variables.

'-mfix-cortex-a53-835769'
'-mno-fix-cortex-a53-835769'
     Enable or disable the workaround for the ARM Cortex-A53 erratum
     number 835769.  This involves inserting a NOP instruction between
     memory instructions and 64-bit integer multiply-accumulate
     instructions.

'-mfix-cortex-a53-843419'
'-mno-fix-cortex-a53-843419'
     Enable or disable the workaround for the ARM Cortex-A53 erratum
     number 843419.  This erratum workaround is made at link time and
     this will only pass the corresponding flag to the linker.

'-march=NAME'
     Specify the name of the target architecture, optionally suffixed by
     one or more feature modifiers.  This option has the form
     '-march=ARCH{+[no]FEATURE}*', where the only permissible value for
     ARCH is 'armv8-a'.  The permissible values for FEATURE are
     documented in the sub-section below.

     Where conflicting feature modifiers are specified, the right-most
     feature is used.

     GCC uses this name to determine what kind of instructions it can
     emit when generating assembly code.

     Where '-march' is specified without either of '-mtune' or '-mcpu'
     also being specified, the code is tuned to perform well across a
     range of target processors implementing the target architecture.

'-mtune=NAME'
     Specify the name of the target processor for which GCC should tune
     the performance of the code.  Permissible values for this option
     are: 'generic', 'cortex-a53', 'cortex-a57', 'cortex-a72',
     'exynos-m1', 'thunderx', 'xgene1'.

     Additionally, this option can specify that GCC should tune the
     performance of the code for a big.LITTLE system.  Permissible
     values for this option are: 'cortex-a57.cortex-a53',
     'cortex-a72.cortex-a53'.

     Where none of '-mtune=', '-mcpu=' or '-march=' are specified, the
     code is tuned to perform well across a range of target processors.

     This option cannot be suffixed by feature modifiers.

'-mcpu=NAME'
     Specify the name of the target processor, optionally suffixed by
     one or more feature modifiers.  This option has the form
     '-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU
     are the same as those available for '-mtune'.

     The permissible values for FEATURE are documented in the
     sub-section below.

     Where conflicting feature modifiers are specified, the right-most
     feature is used.

     GCC uses this name to determine what kind of instructions it can
     emit when generating assembly code (as if by '-march') and to
     determine the target processor for which to tune for performance
     (as if by '-mtune').  Where this option is used in conjunction with
     '-march' or '-mtune', those options take precedence over the
     appropriate part of this option.

3.17.1.1 '-march' and '-mcpu' Feature Modifiers
...............................................

Feature modifiers used with '-march' and '-mcpu' can be one the
following:

'crc'
     Enable CRC extension.
'crypto'
     Enable Crypto extension.  This implies Advanced SIMD is enabled.
'fp'
     Enable floating-point instructions.
'simd'
     Enable Advanced SIMD instructions.  This implies floating-point
     instructions are enabled.  This is the default for all current
     possible values for options '-march' and '-mcpu='.


File: gcc.info,  Node: Adapteva Epiphany Options,  Next: ARC Options,  Prev: AArch64 Options,  Up: Submodel Options

3.17.2 Adapteva Epiphany Options
--------------------------------

These '-m' options are defined for Adapteva Epiphany:

'-mhalf-reg-file'
     Don't allocate any register in the range 'r32'...'r63'.  That
     allows code to run on hardware variants that lack these registers.

'-mprefer-short-insn-regs'
     Preferrentially allocate registers that allow short instruction
     generation.  This can result in increased instruction count, so
     this may either reduce or increase overall code size.

'-mbranch-cost=NUM'
     Set the cost of branches to roughly NUM "simple" instructions.
     This cost is only a heuristic and is not guaranteed to produce
     consistent results across releases.

'-mcmove'
     Enable the generation of conditional moves.

'-mnops=NUM'
     Emit NUM NOPs before every other generated instruction.

'-mno-soft-cmpsf'
     For single-precision floating-point comparisons, emit an 'fsub'
     instruction and test the flags.  This is faster than a software
     comparison, but can get incorrect results in the presence of NaNs,
     or when two different small numbers are compared such that their
     difference is calculated as zero.  The default is '-msoft-cmpsf',
     which uses slower, but IEEE-compliant, software comparisons.

'-mstack-offset=NUM'
     Set the offset between the top of the stack and the stack pointer.
     E.g., a value of 8 means that the eight bytes in the range
     'sp+0...sp+7' can be used by leaf functions without stack
     allocation.  Values other than '8' or '16' are untested and
     unlikely to work.  Note also that this option changes the ABI;
     compiling a program with a different stack offset than the
     libraries have been compiled with generally does not work.  This
     option can be useful if you want to evaluate if a different stack
     offset would give you better code, but to actually use a different
     stack offset to build working programs, it is recommended to
     configure the toolchain with the appropriate
     '--with-stack-offset=NUM' option.

'-mno-round-nearest'
     Make the scheduler assume that the rounding mode has been set to
     truncating.  The default is '-mround-nearest'.

'-mlong-calls'
     If not otherwise specified by an attribute, assume all calls might
     be beyond the offset range of the 'b' / 'bl' instructions, and
     therefore load the function address into a register before
     performing a (otherwise direct) call.  This is the default.

'-mshort-calls'
     If not otherwise specified by an attribute, assume all direct calls
     are in the range of the 'b' / 'bl' instructions, so use these
     instructions for direct calls.  The default is '-mlong-calls'.

'-msmall16'
     Assume addresses can be loaded as 16-bit unsigned values.  This
     does not apply to function addresses for which '-mlong-calls'
     semantics are in effect.

'-mfp-mode=MODE'
     Set the prevailing mode of the floating-point unit.  This
     determines the floating-point mode that is provided and expected at
     function call and return time.  Making this mode match the mode you
     predominantly need at function start can make your programs smaller
     and faster by avoiding unnecessary mode switches.

     MODE can be set to one the following values:

     'caller'
          Any mode at function entry is valid, and retained or restored
          when the function returns, and when it calls other functions.
          This mode is useful for compiling libraries or other
          compilation units you might want to incorporate into different
          programs with different prevailing FPU modes, and the
          convenience of being able to use a single object file
          outweighs the size and speed overhead for any extra mode
          switching that might be needed, compared with what would be
          needed with a more specific choice of prevailing FPU mode.

     'truncate'
          This is the mode used for floating-point calculations with
          truncating (i.e. round towards zero) rounding mode.  That
          includes conversion from floating point to integer.

     'round-nearest'
          This is the mode used for floating-point calculations with
          round-to-nearest-or-even rounding mode.

     'int'
          This is the mode used to perform integer calculations in the
          FPU, e.g. integer multiply, or integer
          multiply-and-accumulate.

     The default is '-mfp-mode=caller'

'-mnosplit-lohi'
'-mno-postinc'
'-mno-postmodify'
     Code generation tweaks that disable, respectively, splitting of
     32-bit loads, generation of post-increment addresses, and
     generation of post-modify addresses.  The defaults are
     'msplit-lohi', '-mpost-inc', and '-mpost-modify'.

'-mnovect-double'
     Change the preferred SIMD mode to SImode.  The default is
     '-mvect-double', which uses DImode as preferred SIMD mode.

'-max-vect-align=NUM'
     The maximum alignment for SIMD vector mode types.  NUM may be 4 or
     8.  The default is 8.  Note that this is an ABI change, even though
     many library function interfaces are unaffected if they don't use
     SIMD vector modes in places that affect size and/or alignment of
     relevant types.

'-msplit-vecmove-early'
     Split vector moves into single word moves before reload.  In theory
     this can give better register allocation, but so far the reverse
     seems to be generally the case.

'-m1reg-REG'
     Specify a register to hold the constant -1, which makes loading
     small negative constants and certain bitmasks faster.  Allowable
     values for REG are 'r43' and 'r63', which specify use of that
     register as a fixed register, and 'none', which means that no
     register is used for this purpose.  The default is '-m1reg-none'.


File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Prev: Adapteva Epiphany Options,  Up: Submodel Options

3.17.3 ARC Options
------------------

The following options control the architecture variant for which code is
being compiled:

'-mbarrel-shifter'
     Generate instructions supported by barrel shifter.  This is the
     default unless '-mcpu=ARC601' is in effect.

'-mcpu=CPU'
     Set architecture type, register usage, and instruction scheduling
     parameters for CPU.  There are also shortcut alias options
     available for backward compatibility and convenience.  Supported
     values for CPU are

     'ARC600'
          Compile for ARC600.  Aliases: '-mA6', '-mARC600'.

     'ARC601'
          Compile for ARC601.  Alias: '-mARC601'.

     'ARC700'
          Compile for ARC700.  Aliases: '-mA7', '-mARC700'.  This is the
          default when configured with '--with-cpu=arc700'.

'-mdpfp'
'-mdpfp-compact'
     FPX: Generate Double Precision FPX instructions, tuned for the
     compact implementation.

'-mdpfp-fast'
     FPX: Generate Double Precision FPX instructions, tuned for the fast
     implementation.

'-mno-dpfp-lrsr'
     Disable LR and SR instructions from using FPX extension aux
     registers.

'-mea'
     Generate Extended arithmetic instructions.  Currently only 'divaw',
     'adds', 'subs', and 'sat16' are supported.  This is always enabled
     for '-mcpu=ARC700'.

'-mno-mpy'
     Do not generate mpy instructions for ARC700.

'-mmul32x16'
     Generate 32x16 bit multiply and mac instructions.

'-mmul64'
     Generate mul64 and mulu64 instructions.  Only valid for
     '-mcpu=ARC600'.

'-mnorm'
     Generate norm instruction.  This is the default if '-mcpu=ARC700'
     is in effect.

'-mspfp'
'-mspfp-compact'
     FPX: Generate Single Precision FPX instructions, tuned for the
     compact implementation.

'-mspfp-fast'
     FPX: Generate Single Precision FPX instructions, tuned for the fast
     implementation.

'-msimd'
     Enable generation of ARC SIMD instructions via target-specific
     builtins.  Only valid for '-mcpu=ARC700'.

'-msoft-float'
     This option ignored; it is provided for compatibility purposes
     only.  Software floating point code is emitted by default, and this
     default can overridden by FPX options; 'mspfp', 'mspfp-compact', or
     'mspfp-fast' for single precision, and 'mdpfp', 'mdpfp-compact', or
     'mdpfp-fast' for double precision.

'-mswap'
     Generate swap instructions.

 The following options are passed through to the assembler, and also
define preprocessor macro symbols.

'-mdsp-packa'
     Passed down to the assembler to enable the DSP Pack A extensions.
     Also sets the preprocessor symbol '__Xdsp_packa'.

'-mdvbf'
     Passed down to the assembler to enable the dual viterbi butterfly
     extension.  Also sets the preprocessor symbol '__Xdvbf'.

'-mlock'
     Passed down to the assembler to enable the Locked Load/Store
     Conditional extension.  Also sets the preprocessor symbol
     '__Xlock'.

'-mmac-d16'
     Passed down to the assembler.  Also sets the preprocessor symbol
     '__Xxmac_d16'.

'-mmac-24'
     Passed down to the assembler.  Also sets the preprocessor symbol
     '__Xxmac_24'.

'-mrtsc'
     Passed down to the assembler to enable the 64-bit Time-Stamp
     Counter extension instruction.  Also sets the preprocessor symbol
     '__Xrtsc'.

'-mswape'
     Passed down to the assembler to enable the swap byte ordering
     extension instruction.  Also sets the preprocessor symbol
     '__Xswape'.

'-mtelephony'
     Passed down to the assembler to enable dual and single operand
     instructions for telephony.  Also sets the preprocessor symbol
     '__Xtelephony'.

'-mxy'
     Passed down to the assembler to enable the XY Memory extension.
     Also sets the preprocessor symbol '__Xxy'.

 The following options control how the assembly code is annotated:

'-misize'
     Annotate assembler instructions with estimated addresses.

'-mannotate-align'
     Explain what alignment considerations lead to the decision to make
     an instruction short or long.

 The following options are passed through to the linker:

'-marclinux'
     Passed through to the linker, to specify use of the 'arclinux'
     emulation.  This option is enabled by default in tool chains built
     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
     profiling is not requested.

'-marclinux_prof'
     Passed through to the linker, to specify use of the 'arclinux_prof'
     emulation.  This option is enabled by default in tool chains built
     for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when
     profiling is requested.

 The following options control the semantics of generated code:

'-mepilogue-cfi'
     Enable generation of call frame information for epilogues.

'-mno-epilogue-cfi'
     Disable generation of call frame information for epilogues.

'-mlong-calls'
     Generate call insns as register indirect calls, thus providing
     access to the full 32-bit address range.

'-mmedium-calls'
     Don't use less than 25 bit addressing range for calls, which is the
     offset available for an unconditional branch-and-link instruction.
     Conditional execution of function calls is suppressed, to allow use
     of the 25-bit range, rather than the 21-bit range with conditional
     branch-and-link.  This is the default for tool chains built for 'arc-linux-uclibc'
     and 'arceb-linux-uclibc' targets.

'-mno-sdata'
     Do not generate sdata references.  This is the default for tool
     chains built for 'arc-linux-uclibc' and 'arceb-linux-uclibc'
     targets.

'-mucb-mcount'
     Instrument with mcount calls as used in UCB code.  I.e.  do the
     counting in the callee, not the caller.  By default ARC
     instrumentation counts in the caller.

'-mvolatile-cache'
     Use ordinarily cached memory accesses for volatile references.
     This is the default.

'-mno-volatile-cache'
     Enable cache bypass for volatile references.

 The following options fine tune code generation:
'-malign-call'
     Do alignment optimizations for call instructions.

'-mauto-modify-reg'
     Enable the use of pre/post modify with register displacement.

'-mbbit-peephole'
     Enable bbit peephole2.

'-mno-brcc'
     This option disables a target-specific pass in 'arc_reorg' to
     generate 'BRcc' instructions.  It has no effect on 'BRcc'
     generation driven by the combiner pass.

'-mcase-vector-pcrel'
     Use pc-relative switch case tables - this enables case table
     shortening.  This is the default for '-Os'.

'-mcompact-casesi'
     Enable compact casesi pattern.  This is the default for '-Os'.

'-mno-cond-exec'
     Disable ARCompact specific pass to generate conditional execution
     instructions.  Due to delay slot scheduling and interactions
     between operand numbers, literal sizes, instruction lengths, and
     the support for conditional execution, the target-independent pass
     to generate conditional execution is often lacking, so the ARC port
     has kept a special pass around that tries to find more conditional
     execution generating opportunities after register allocation,
     branch shortening, and delay slot scheduling have been done.  This
     pass generally, but not always, improves performance and code size,
     at the cost of extra compilation time, which is why there is an
     option to switch it off.  If you have a problem with call
     instructions exceeding their allowable offset range because they
     are conditionalized, you should consider using '-mmedium-calls'
     instead.

'-mearly-cbranchsi'
     Enable pre-reload use of the cbranchsi pattern.

'-mexpand-adddi'
     Expand 'adddi3' and 'subdi3' at rtl generation time into 'add.f',
     'adc' etc.

'-mindexed-loads'
     Enable the use of indexed loads.  This can be problematic because
     some optimizers then assume that indexed stores exist, which is not
     the case.

'-mlra'
     Enable Local Register Allocation.  This is still experimental for
     ARC, so by default the compiler uses standard reload (i.e.
     '-mno-lra').

'-mlra-priority-none'
     Don't indicate any priority for target registers.

'-mlra-priority-compact'
     Indicate target register priority for r0..r3 / r12..r15.

'-mlra-priority-noncompact'
     Reduce target regsiter priority for r0..r3 / r12..r15.

'-mno-millicode'
     When optimizing for size (using '-Os'), prologues and epilogues
     that have to save or restore a large number of registers are often
     shortened by using call to a special function in libgcc; this is
     referred to as a _millicode_ call.  As these calls can pose
     performance issues, and/or cause linking issues when linking in a
     nonstandard way, this option is provided to turn off millicode call
     generation.

'-mmixed-code'
     Tweak register allocation to help 16-bit instruction generation.
     This generally has the effect of decreasing the average instruction
     size while increasing the instruction count.

'-mq-class'
     Enable 'q' instruction alternatives.  This is the default for
     '-Os'.

'-mRcq'
     Enable Rcq constraint handling - most short code generation depends
     on this.  This is the default.

'-mRcw'
     Enable Rcw constraint handling - ccfsm condexec mostly depends on
     this.  This is the default.

'-msize-level=LEVEL'
     Fine-tune size optimization with regards to instruction lengths and
     alignment.  The recognized values for LEVEL are:
     '0'
          No size optimization.  This level is deprecated and treated
          like '1'.

     '1'
          Short instructions are used opportunistically.

     '2'
          In addition, alignment of loops and of code after barriers are
          dropped.

     '3'
          In addition, optional data alignment is dropped, and the
          option 'Os' is enabled.

     This defaults to '3' when '-Os' is in effect.  Otherwise, the
     behavior when this is not set is equivalent to level '1'.

'-mtune=CPU'
     Set instruction scheduling parameters for CPU, overriding any
     implied by '-mcpu='.

     Supported values for CPU are

     'ARC600'
          Tune for ARC600 cpu.

     'ARC601'
          Tune for ARC601 cpu.

     'ARC700'
          Tune for ARC700 cpu with standard multiplier block.

     'ARC700-xmac'
          Tune for ARC700 cpu with XMAC block.

     'ARC725D'
          Tune for ARC725D cpu.

     'ARC750D'
          Tune for ARC750D cpu.

'-mmultcost=NUM'
     Cost to assume for a multiply instruction, with '4' being equal to
     a normal instruction.

'-munalign-prob-threshold=PROBABILITY'
     Set probability threshold for unaligning branches.  When tuning for
     'ARC700' and optimizing for speed, branches without filled delay
     slot are preferably emitted unaligned and long, unless profiling
     indicates that the probability for the branch to be taken is below
     PROBABILITY.  *Note Cross-profiling::.  The default is
     (REG_BR_PROB_BASE/2), i.e. 5000.

 The following options are maintained for backward compatibility, but
are now deprecated and will be removed in a future release:

'-margonaut'
     Obsolete FPX.

'-mbig-endian'
'-EB'
     Compile code for big endian targets.  Use of these options is now
     deprecated.  Users wanting big-endian code, should use the 'arceb-elf32'
     and 'arceb-linux-uclibc' targets when building the tool chain, for
     which big-endian is the default.

'-mlittle-endian'
'-EL'
     Compile code for little endian targets.  Use of these options is
     now deprecated.  Users wanting little-endian code should use the 'arc-elf32'
     and 'arc-linux-uclibc' targets when building the tool chain, for
     which little-endian is the default.

'-mbarrel_shifter'
     Replaced by '-mbarrel-shifter'.

'-mdpfp_compact'
     Replaced by '-mdpfp-compact'.

'-mdpfp_fast'
     Replaced by '-mdpfp-fast'.

'-mdsp_packa'
     Replaced by '-mdsp-packa'.

'-mEA'
     Replaced by '-mea'.

'-mmac_24'
     Replaced by '-mmac-24'.

'-mmac_d16'
     Replaced by '-mmac-d16'.

'-mspfp_compact'
     Replaced by '-mspfp-compact'.

'-mspfp_fast'
     Replaced by '-mspfp-fast'.

'-mtune=CPU'
     Values 'arc600', 'arc601', 'arc700' and 'arc700-xmac' for CPU are
     replaced by 'ARC600', 'ARC601', 'ARC700' and 'ARC700-xmac'
     respectively

'-multcost=NUM'
     Replaced by '-mmultcost'.


File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options

3.17.4 ARM Options
------------------

These '-m' options are defined for the ARM port:

'-mabi=NAME'
     Generate code for the specified ABI.  Permissible values are:
     'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'.

'-mapcs-frame'
     Generate a stack frame that is compliant with the ARM Procedure
     Call Standard for all functions, even if this is not strictly
     necessary for correct execution of the code.  Specifying
     '-fomit-frame-pointer' with this option causes the stack frames not
     to be generated for leaf functions.  The default is
     '-mno-apcs-frame'.  This option is deprecated.

'-mapcs'
     This is a synonym for '-mapcs-frame' and is deprecated.

'-mthumb-interwork'
     Generate code that supports calling between the ARM and Thumb
     instruction sets.  Without this option, on pre-v5 architectures,
     the two instruction sets cannot be reliably used inside one
     program.  The default is '-mno-thumb-interwork', since slightly
     larger code is generated when '-mthumb-interwork' is specified.  In
     AAPCS configurations this option is meaningless.

'-mno-sched-prolog'
     Prevent the reordering of instructions in the function prologue, or
     the merging of those instruction with the instructions in the
     function's body.  This means that all functions start with a
     recognizable set of instructions (or in fact one of a choice from a
     small set of different function prologues), and this information
     can be used to locate the start of functions inside an executable
     piece of code.  The default is '-msched-prolog'.

'-mfloat-abi=NAME'
     Specifies which floating-point ABI to use.  Permissible values are:
     'soft', 'softfp' and 'hard'.

     Specifying 'soft' causes GCC to generate output containing library
     calls for floating-point operations.  'softfp' allows the
     generation of code using hardware floating-point instructions, but
     still uses the soft-float calling conventions.  'hard' allows
     generation of floating-point instructions and uses FPU-specific
     calling conventions.

     The default depends on the specific target configuration.  Note
     that the hard-float and soft-float ABIs are not link-compatible;
     you must compile your entire program with the same ABI, and link
     with a compatible set of libraries.

'-mlittle-endian'
     Generate code for a processor running in little-endian mode.  This
     is the default for all standard configurations.

'-mbig-endian'
     Generate code for a processor running in big-endian mode; the
     default is to compile code for a little-endian processor.

'-march=NAME'
     This specifies the name of the target ARM architecture.  GCC uses
     this name to determine what kind of instructions it can emit when
     generating assembly code.  This option can be used in conjunction
     with or instead of the '-mcpu=' option.  Permissible names are:
     'armv2', 'armv2a', 'armv3', 'armv3m', 'armv4', 'armv4t', 'armv5',
     'armv5t', 'armv5e', 'armv5te', 'armv6', 'armv6j', 'armv6t2',
     'armv6z', 'armv6zk', 'armv6-m', 'armv7', 'armv7-a', 'armv7-r',
     'armv7-m', 'armv7e-m', 'armv7ve', 'armv8-a', 'armv8-a+crc',
     'iwmmxt', 'iwmmxt2', 'ep9312'.

     '-march=armv7ve' is the armv7-a architecture with virtualization
     extensions.

     '-march=armv8-a+crc' enables code generation for the ARMv8-A
     architecture together with the optional CRC32 extensions.

     '-march=native' causes the compiler to auto-detect the architecture
     of the build computer.  At present, this feature is only supported
     on GNU/Linux, and not all architectures are recognized.  If the
     auto-detect is unsuccessful the option has no effect.

'-mtune=NAME'
     This option specifies the name of the target ARM processor for
     which GCC should tune the performance of the code.  For some ARM
     implementations better performance can be obtained by using this
     option.  Permissible names are: 'arm2', 'arm250', 'arm3', 'arm6',
     'arm60', 'arm600', 'arm610', 'arm620', 'arm7', 'arm7m', 'arm7d',
     'arm7dm', 'arm7di', 'arm7dmi', 'arm70', 'arm700', 'arm700i',
     'arm710', 'arm710c', 'arm7100', 'arm720', 'arm7500', 'arm7500fe',
     'arm7tdmi', 'arm7tdmi-s', 'arm710t', 'arm720t', 'arm740t',
     'strongarm', 'strongarm110', 'strongarm1100', 'strongarm1110',
     'arm8', 'arm810', 'arm9', 'arm9e', 'arm920', 'arm920t', 'arm922t',
     'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm926ej-s', 'arm940t',
     'arm9tdmi', 'arm10tdmi', 'arm1020t', 'arm1026ej-s', 'arm10e',
     'arm1020e', 'arm1022e', 'arm1136j-s', 'arm1136jf-s', 'mpcore',
     'mpcorenovfp', 'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s',
     'arm1176jzf-s', 'cortex-a5', 'cortex-a7', 'cortex-a8', 'cortex-a9',
     'cortex-a12', 'cortex-a15', 'cortex-a53', 'cortex-a57',
     'cortex-a72', 'cortex-r4', 'cortex-r4f', 'cortex-r5', 'cortex-r7',
     'cortex-m7', 'cortex-m4', 'cortex-m3', 'cortex-m1', 'cortex-m0',
     'cortex-m0plus', 'cortex-m1.small-multiply',
     'cortex-m0.small-multiply', 'cortex-m0plus.small-multiply',
     'exynos-m1', 'marvell-pj4', 'xscale', 'iwmmxt', 'iwmmxt2',
     'ep9312', 'fa526', 'fa626', 'fa606te', 'fa626te', 'fmp626',
     'fa726te', 'xgene1'.

     Additionally, this option can specify that GCC should tune the
     performance of the code for a big.LITTLE system.  Permissible names
     are: 'cortex-a15.cortex-a7', 'cortex-a57.cortex-a53',
     'cortex-a72.cortex-a53'.

     '-mtune=generic-ARCH' specifies that GCC should tune the
     performance for a blend of processors within architecture ARCH.
     The aim is to generate code that run well on the current most
     popular processors, balancing between optimizations that benefit
     some CPUs in the range, and avoiding performance pitfalls of other
     CPUs.  The effects of this option may change in future GCC versions
     as CPU models come and go.

     '-mtune=native' causes the compiler to auto-detect the CPU of the
     build computer.  At present, this feature is only supported on
     GNU/Linux, and not all architectures are recognized.  If the
     auto-detect is unsuccessful the option has no effect.

'-mcpu=NAME'
     This specifies the name of the target ARM processor.  GCC uses this
     name to derive the name of the target ARM architecture (as if
     specified by '-march') and the ARM processor type for which to tune
     for performance (as if specified by '-mtune').  Where this option
     is used in conjunction with '-march' or '-mtune', those options
     take precedence over the appropriate part of this option.

     Permissible names for this option are the same as those for
     '-mtune'.

     '-mcpu=generic-ARCH' is also permissible, and is equivalent to
     '-march=ARCH -mtune=generic-ARCH'.  See '-mtune' for more
     information.

     '-mcpu=native' causes the compiler to auto-detect the CPU of the
     build computer.  At present, this feature is only supported on
     GNU/Linux, and not all architectures are recognized.  If the
     auto-detect is unsuccessful the option has no effect.

'-mfpu=NAME'
     This specifies what floating-point hardware (or hardware emulation)
     is available on the target.  Permissible names are: 'vfp', 'vfpv3',
     'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16', 'vfpv3xd',
     'vfpv3xd-fp16', 'neon', 'neon-fp16', 'vfpv4', 'vfpv4-d16',
     'fpv4-sp-d16', 'neon-vfpv4', 'fpv5-d16', 'fpv5-sp-d16', 'fp-armv8',
     'neon-fp-armv8', and 'crypto-neon-fp-armv8'.

     If '-msoft-float' is specified this specifies the format of
     floating-point values.

     If the selected floating-point hardware includes the NEON extension
     (e.g.  '-mfpu'='neon'), note that floating-point operations are not
     generated by GCC's auto-vectorization pass unless
     '-funsafe-math-optimizations' is also specified.  This is because
     NEON hardware does not fully implement the IEEE 754 standard for
     floating-point arithmetic (in particular denormal values are
     treated as zero), so the use of NEON instructions may lead to a
     loss of precision.

'-mfp16-format=NAME'
     Specify the format of the '__fp16' half-precision floating-point
     type.  Permissible names are 'none', 'ieee', and 'alternative'; the
     default is 'none', in which case the '__fp16' type is not defined.
     *Note Half-Precision::, for more information.

'-mstructure-size-boundary=N'
     The sizes of all structures and unions are rounded up to a multiple
     of the number of bits set by this option.  Permissible values are
     8, 32 and 64.  The default value varies for different toolchains.
     For the COFF targeted toolchain the default value is 8.  A value of
     64 is only allowed if the underlying ABI supports it.

     Specifying a larger number can produce faster, more efficient code,
     but can also increase the size of the program.  Different values
     are potentially incompatible.  Code compiled with one value cannot
     necessarily expect to work with code or libraries compiled with
     another value, if they exchange information using structures or
     unions.

'-mabort-on-noreturn'
     Generate a call to the function 'abort' at the end of a 'noreturn'
     function.  It is executed if the function tries to return.

'-mlong-calls'
'-mno-long-calls'
     Tells the compiler to perform function calls by first loading the
     address of the function into a register and then performing a
     subroutine call on this register.  This switch is needed if the
     target function lies outside of the 64-megabyte addressing range of
     the offset-based version of subroutine call instruction.

     Even if this switch is enabled, not all function calls are turned
     into long calls.  The heuristic is that static functions, functions
     that have the 'short_call' attribute, functions that are inside the
     scope of a '#pragma no_long_calls' directive, and functions whose
     definitions have already been compiled within the current
     compilation unit are not turned into long calls.  The exceptions to
     this rule are that weak function definitions, functions with the
     'long_call' attribute or the 'section' attribute, and functions
     that are within the scope of a '#pragma long_calls' directive are
     always turned into long calls.

     This feature is not enabled by default.  Specifying
     '-mno-long-calls' restores the default behavior, as does placing
     the function calls within the scope of a '#pragma long_calls_off'
     directive.  Note these switches have no effect on how the compiler
     generates code to handle function calls via function pointers.

'-msingle-pic-base'
     Treat the register used for PIC addressing as read-only, rather
     than loading it in the prologue for each function.  The runtime
     system is responsible for initializing this register with an
     appropriate value before execution begins.

'-mpic-register=REG'
     Specify the register to be used for PIC addressing.  For standard
     PIC base case, the default is any suitable register determined by
     compiler.  For single PIC base case, the default is 'R9' if target
     is EABI based or stack-checking is enabled, otherwise the default
     is 'R10'.

'-mpic-data-is-text-relative'
     Assume that each data segments are relative to text segment at load
     time.  Therefore, it permits addressing data using PC-relative
     operations.  This option is on by default for targets other than
     VxWorks RTP.

'-mpoke-function-name'
     Write the name of each function into the text section, directly
     preceding the function prologue.  The generated code is similar to
     this:

               t0
                   .ascii "arm_poke_function_name", 0
                   .align
               t1
                   .word 0xff000000 + (t1 - t0)
               arm_poke_function_name
                   mov     ip, sp
                   stmfd   sp!, {fp, ip, lr, pc}
                   sub     fp, ip, #4

     When performing a stack backtrace, code can inspect the value of
     'pc' stored at 'fp + 0'.  If the trace function then looks at
     location 'pc - 12' and the top 8 bits are set, then we know that
     there is a function name embedded immediately preceding this
     location and has length '((pc[-3]) & 0xff000000)'.

'-mthumb'
'-marm'

     Select between generating code that executes in ARM and Thumb
     states.  The default for most configurations is to generate code
     that executes in ARM state, but the default can be changed by
     configuring GCC with the '--with-mode='STATE configure option.

'-mtpcs-frame'
     Generate a stack frame that is compliant with the Thumb Procedure
     Call Standard for all non-leaf functions.  (A leaf function is one
     that does not call any other functions.)  The default is
     '-mno-tpcs-frame'.

'-mtpcs-leaf-frame'
     Generate a stack frame that is compliant with the Thumb Procedure
     Call Standard for all leaf functions.  (A leaf function is one that
     does not call any other functions.)  The default is
     '-mno-apcs-leaf-frame'.

'-mcallee-super-interworking'
     Gives all externally visible functions in the file being compiled
     an ARM instruction set header which switches to Thumb mode before
     executing the rest of the function.  This allows these functions to
     be called from non-interworking code.  This option is not valid in
     AAPCS configurations because interworking is enabled by default.

'-mcaller-super-interworking'
     Allows calls via function pointers (including virtual functions) to
     execute correctly regardless of whether the target code has been
     compiled for interworking or not.  There is a small overhead in the
     cost of executing a function pointer if this option is enabled.
     This option is not valid in AAPCS configurations because
     interworking is enabled by default.

'-mtp=NAME'
     Specify the access model for the thread local storage pointer.  The
     valid models are 'soft', which generates calls to
     '__aeabi_read_tp', 'cp15', which fetches the thread pointer from
     'cp15' directly (supported in the arm6k architecture), and 'auto',
     which uses the best available method for the selected processor.
     The default setting is 'auto'.

'-mtls-dialect=DIALECT'
     Specify the dialect to use for accessing thread local storage.  Two
     DIALECTs are supported--'gnu' and 'gnu2'.  The 'gnu' dialect
     selects the original GNU scheme for supporting local and global
     dynamic TLS models.  The 'gnu2' dialect selects the GNU descriptor
     scheme, which provides better performance for shared libraries.
     The GNU descriptor scheme is compatible with the original scheme,
     but does require new assembler, linker and library support.
     Initial and local exec TLS models are unaffected by this option and
     always use the original scheme.

'-mword-relocations'
     Only generate absolute relocations on word-sized values (i.e.
     R_ARM_ABS32).  This is enabled by default on targets (uClinux,
     SymbianOS) where the runtime loader imposes this restriction, and
     when '-fpic' or '-fPIC' is specified.

'-mfix-cortex-m3-ldrd'
     Some Cortex-M3 cores can cause data corruption when 'ldrd'
     instructions with overlapping destination and base registers are
     used.  This option avoids generating these instructions.  This
     option is enabled by default when '-mcpu=cortex-m3' is specified.

'-munaligned-access'
'-mno-unaligned-access'
     Enables (or disables) reading and writing of 16- and 32- bit values
     from addresses that are not 16- or 32- bit aligned.  By default
     unaligned access is disabled for all pre-ARMv6 and all ARMv6-M
     architectures, and enabled for all other architectures.  If
     unaligned access is not enabled then words in packed data
     structures are accessed a byte at a time.

     The ARM attribute 'Tag_CPU_unaligned_access' is set in the
     generated object file to either true or false, depending upon the
     setting of this option.  If unaligned access is enabled then the
     preprocessor symbol '__ARM_FEATURE_UNALIGNED' is also defined.

'-mneon-for-64bits'
     Enables using Neon to handle scalar 64-bits operations.  This is
     disabled by default since the cost of moving data from core
     registers to Neon is high.

'-mslow-flash-data'
     Assume loading data from flash is slower than fetching instruction.
     Therefore literal load is minimized for better performance.  This
     option is only supported when compiling for ARMv7 M-profile and off
     by default.

'-masm-syntax-unified'
     Assume inline assembler is using unified asm syntax.  The default
     is currently off which implies divided syntax.  Currently this
     option is available only for Thumb1 and has no effect on ARM state
     and Thumb2.  However, this may change in future releases of GCC.
     Divided syntax should be considered deprecated.

'-mrestrict-it'
     Restricts generation of IT blocks to conform to the rules of ARMv8.
     IT blocks can only contain a single 16-bit instruction from a
     select set of instructions.  This option is on by default for ARMv8
     Thumb mode.

'-mprint-tune-info'
     Print CPU tuning information as comment in assembler file.  This is
     an option used only for regression testing of the compiler and not
     intended for ordinary use in compiling code.  This option is
     disabled by default.


File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options

3.17.5 AVR Options
------------------

These options are defined for AVR implementations:

'-mmcu=MCU'
     Specify Atmel AVR instruction set architectures (ISA) or MCU type.

     The default for this option is 'avr2'.

     GCC supports the following AVR devices and ISAs:

     'avr2'
          "Classic" devices with up to 8 KiB of program memory.
          MCU = 'attiny22', 'attiny26', 'at90c8534', 'at90s2313',
          'at90s2323', 'at90s2333', 'at90s2343', 'at90s4414',
          'at90s4433', 'at90s4434', 'at90s8515', 'at90s8535'.

     'avr25'
          "Classic" devices with up to 8 KiB of program memory and with
          the 'MOVW' instruction.
          MCU = 'ata5272', 'ata6616c', 'attiny13', 'attiny13a',
          'attiny2313', 'attiny2313a', 'attiny24', 'attiny24a',
          'attiny25', 'attiny261', 'attiny261a', 'attiny43u',
          'attiny4313', 'attiny44', 'attiny44a', 'attiny441',
          'attiny45', 'attiny461', 'attiny461a', 'attiny48',
          'attiny828', 'attiny84', 'attiny84a', 'attiny841', 'attiny85',
          'attiny861', 'attiny861a', 'attiny87', 'attiny88',
          'at86rf401'.

     'avr3'
          "Classic" devices with 16 KiB up to 64 KiB of program memory.
          MCU = 'at43usb355', 'at76c711'.

     'avr31'
          "Classic" devices with 128 KiB of program memory.
          MCU = 'atmega103', 'at43usb320'.

     'avr35'
          "Classic" devices with 16 KiB up to 64 KiB of program memory
          and with the 'MOVW' instruction.
          MCU = 'ata5505', 'ata6617c', 'ata664251', 'atmega16u2',
          'atmega32u2', 'atmega8u2', 'attiny1634', 'attiny167',
          'at90usb162', 'at90usb82'.

     'avr4'
          "Enhanced" devices with up to 8 KiB of program memory.
          MCU = 'ata6285', 'ata6286', 'ata6289', 'ata6612c', 'atmega48',
          'atmega48a', 'atmega48p', 'atmega48pa', 'atmega8', 'atmega8a',
          'atmega8hva', 'atmega8515', 'atmega8535', 'atmega88',
          'atmega88a', 'atmega88p', 'atmega88pa', 'at90pwm1',
          'at90pwm2', 'at90pwm2b', 'at90pwm3', 'at90pwm3b', 'at90pwm81'.

     'avr5'
          "Enhanced" devices with 16 KiB up to 64 KiB of program memory.

          MCU = 'ata5702m322', 'ata5782', 'ata5790', 'ata5790n',
          'ata5795', 'ata5831', 'ata6613c', 'ata6614q', 'atmega16',
          'atmega16a', 'atmega16hva', 'atmega16hva2', 'atmega16hvb',
          'atmega16hvbrevb', 'atmega16m1', 'atmega16u4', 'atmega161',
          'atmega162', 'atmega163', 'atmega164a', 'atmega164p',
          'atmega164pa', 'atmega165', 'atmega165a', 'atmega165p',
          'atmega165pa', 'atmega168', 'atmega168a', 'atmega168p',
          'atmega168pa', 'atmega169', 'atmega169a', 'atmega169p',
          'atmega169pa', 'atmega32', 'atmega32a', 'atmega32c1',
          'atmega32hvb', 'atmega32hvbrevb', 'atmega32m1', 'atmega32u4',
          'atmega32u6', 'atmega323', 'atmega324a', 'atmega324p',
          'atmega324pa', 'atmega325', 'atmega325a', 'atmega325p',
          'atmega325pa', 'atmega3250', 'atmega3250a', 'atmega3250p',
          'atmega3250pa', 'atmega328', 'atmega328p', 'atmega329',
          'atmega329a', 'atmega329p', 'atmega329pa', 'atmega3290',
          'atmega3290a', 'atmega3290p', 'atmega3290pa', 'atmega406',
          'atmega64', 'atmega64a', 'atmega64c1', 'atmega64hve',
          'atmega64hve2', 'atmega64m1', 'atmega64rfr2', 'atmega640',
          'atmega644', 'atmega644a', 'atmega644p', 'atmega644pa',
          'atmega644rfr2', 'atmega645', 'atmega645a', 'atmega645p',
          'atmega6450', 'atmega6450a', 'atmega6450p', 'atmega649',
          'atmega649a', 'atmega649p', 'atmega6490', 'atmega6490a',
          'atmega6490p', 'at90can32', 'at90can64', 'at90pwm161',
          'at90pwm216', 'at90pwm316', 'at90scr100', 'at90usb646',
          'at90usb647', 'at94k', 'm3000'.

     'avr51'
          "Enhanced" devices with 128 KiB of program memory.
          MCU = 'atmega128', 'atmega128a', 'atmega128rfa1',
          'atmega128rfr2', 'atmega1280', 'atmega1281', 'atmega1284',
          'atmega1284p', 'atmega1284rfr2', 'at90can128', 'at90usb1286',
          'at90usb1287'.

     'avr6'
          "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB
          of program memory.
          MCU = 'atmega256rfr2', 'atmega2560', 'atmega2561',
          'atmega2564rfr2'.

     'avrxmega2'
          "XMEGA" devices with more than 8 KiB and up to 64 KiB of
          program memory.
          MCU = 'atxmega16a4', 'atxmega16a4u', 'atxmega16c4',
          'atxmega16d4', 'atxmega16e5', 'atxmega32a4', 'atxmega32a4u',
          'atxmega32c3', 'atxmega32c4', 'atxmega32d3', 'atxmega32d4',
          'atxmega32e5', 'atxmega8e5'.

     'avrxmega4'
          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
          program memory.
          MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u',
          'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3',
          'atxmega64d4'.

     'avrxmega5'
          "XMEGA" devices with more than 64 KiB and up to 128 KiB of
          program memory and more than 64 KiB of RAM.
          MCU = 'atxmega64a1', 'atxmega64a1u'.

     'avrxmega6'
          "XMEGA" devices with more than 128 KiB of program memory.
          MCU = 'atxmega128a3', 'atxmega128a3u', 'atxmega128b1',
          'atxmega128b3', 'atxmega128c3', 'atxmega128d3',
          'atxmega128d4', 'atxmega192a3', 'atxmega192a3u',
          'atxmega192c3', 'atxmega192d3', 'atxmega256a3',
          'atxmega256a3b', 'atxmega256a3bu', 'atxmega256a3u',
          'atxmega256c3', 'atxmega256d3', 'atxmega384c3',
          'atxmega384d3'.

     'avrxmega7'
          "XMEGA" devices with more than 128 KiB of program memory and
          more than 64 KiB of RAM.
          MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'.

     'avrtiny'
          "TINY" Tiny core devices with 512 B up to 4 KiB of program
          memory.
          MCU = 'attiny10', 'attiny20', 'attiny4', 'attiny40',
          'attiny5', 'attiny9'.

     'avr1'
          This ISA is implemented by the minimal AVR core and supported
          for assembler only.
          MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28',
          'at90s1200'.

'-maccumulate-args'
     Accumulate outgoing function arguments and acquire/release the
     needed stack space for outgoing function arguments once in function
     prologue/epilogue.  Without this option, outgoing arguments are
     pushed before calling a function and popped afterwards.

     Popping the arguments after the function call can be expensive on
     AVR so that accumulating the stack space might lead to smaller
     executables because arguments need not to be removed from the stack
     after such a function call.

     This option can lead to reduced code size for functions that
     perform several calls to functions that get their arguments on the
     stack like calls to printf-like functions.

'-mbranch-cost=COST'
     Set the branch costs for conditional branch instructions to COST.
     Reasonable values for COST are small, non-negative integers.  The
     default branch cost is 0.

'-mcall-prologues'
     Functions prologues/epilogues are expanded as calls to appropriate
     subroutines.  Code size is smaller.

'-mint8'
     Assume 'int' to be 8-bit integer.  This affects the sizes of all
     types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes,
     and 'long long' is 4 bytes.  Please note that this option does not
     conform to the C standards, but it results in smaller code size.

'-mn-flash=NUM'
     Assume that the flash memory has a size of NUM times 64 KiB.

'-mno-interrupts'
     Generated code is not compatible with hardware interrupts.  Code
     size is smaller.

'-mrelax'
     Try to replace 'CALL' resp. 'JMP' instruction by the shorter
     'RCALL' resp. 'RJMP' instruction if applicable.  Setting '-mrelax'
     just adds the '--mlink-relax' option to the assembler's command
     line and the '--relax' option to the linker's command line.

     Jump relaxing is performed by the linker because jump offsets are
     not known before code is located.  Therefore, the assembler code
     generated by the compiler is the same, but the instructions in the
     executable may differ from instructions in the assembler code.

     Relaxing must be turned on if linker stubs are needed, see the
     section on 'EIND' and linker stubs below.

'-mrmw'
     Assume that the device supports the Read-Modify-Write instructions
     'XCH', 'LAC', 'LAS' and 'LAT'.

'-msp8'
     Treat the stack pointer register as an 8-bit register, i.e. assume
     the high byte of the stack pointer is zero.  In general, you don't
     need to set this option by hand.

     This option is used internally by the compiler to select and build
     multilibs for architectures 'avr2' and 'avr25'.  These
     architectures mix devices with and without 'SPH'.  For any setting
     other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver adds
     or removes this option from the compiler proper's command line,
     because the compiler then knows if the device or architecture has
     an 8-bit stack pointer and thus no 'SPH' register or not.

'-mstrict-X'
     Use address register 'X' in a way proposed by the hardware.  This
     means that 'X' is only used in indirect, post-increment or
     pre-decrement addressing.

     Without this option, the 'X' register may be used in the same way
     as 'Y' or 'Z' which then is emulated by additional instructions.
     For example, loading a value with 'X+const' addressing with a small
     non-negative 'const < 64' to a register RN is performed as

          adiw r26, const   ; X += const
          ld   RN, X        ; RN = *X
          sbiw r26, const   ; X -= const

'-mtiny-stack'
     Only change the lower 8 bits of the stack pointer.

'-nodevicelib'
     Don't link against AVR-LibC's device specific library 'libdev.a'.

'-Waddr-space-convert'
     Warn about conversions between address spaces in the case where the
     resulting address space is not contained in the incoming address
     space.

3.17.5.1 'EIND' and Devices with More Than 128 Ki Bytes of Flash
................................................................

Pointers in the implementation are 16 bits wide.  The address of a
function or label is represented as word address so that indirect jumps
and calls can target any code address in the range of 64 Ki words.

 In order to facilitate indirect jump on devices with more than 128 Ki
bytes of program memory space, there is a special function register
called 'EIND' that serves as most significant part of the target address
when 'EICALL' or 'EIJMP' instructions are used.

 Indirect jumps and calls on these devices are handled as follows by the
compiler and are subject to some limitations:

   * The compiler never sets 'EIND'.

   * The compiler uses 'EIND' implicitely in 'EICALL'/'EIJMP'
     instructions or might read 'EIND' directly in order to emulate an
     indirect call/jump by means of a 'RET' instruction.

   * The compiler assumes that 'EIND' never changes during the startup
     code or during the application.  In particular, 'EIND' is not
     saved/restored in function or interrupt service routine
     prologue/epilogue.

   * For indirect calls to functions and computed goto, the linker
     generates _stubs_.  Stubs are jump pads sometimes also called
     _trampolines_.  Thus, the indirect call/jump jumps to such a stub.
     The stub contains a direct jump to the desired address.

   * Linker relaxation must be turned on so that the linker generates
     the stubs correctly in all situations.  See the compiler option
     '-mrelax' and the linker option '--relax'.  There are corner cases
     where the linker is supposed to generate stubs but aborts without
     relaxation and without a helpful error message.

   * The default linker script is arranged for code with 'EIND = 0'.  If
     code is supposed to work for a setup with 'EIND != 0', a custom
     linker script has to be used in order to place the sections whose
     name start with '.trampolines' into the segment where 'EIND' points
     to.

   * The startup code from libgcc never sets 'EIND'.  Notice that
     startup code is a blend of code from libgcc and AVR-LibC. For the
     impact of AVR-LibC on 'EIND', see the
     AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/).

   * It is legitimate for user-specific startup code to set up 'EIND'
     early, for example by means of initialization code located in
     section '.init3'.  Such code runs prior to general startup code
     that initializes RAM and calls constructors, but after the bit of
     startup code from AVR-LibC that sets 'EIND' to the segment where
     the vector table is located.
          #include <avr/io.h>

          static void
          __attribute__((section(".init3"),naked,used,no_instrument_function))
          init3_set_eind (void)
          {
            __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
                            "out %i0,r24" :: "n" (&EIND) : "r24","memory");
          }

     The '__trampolines_start' symbol is defined in the linker script.

   * Stubs are generated automatically by the linker if the following
     two conditions are met:

        - The address of a label is taken by means of the 'gs' modifier
          (short for _generate stubs_) like so:
               LDI r24, lo8(gs(FUNC))
               LDI r25, hi8(gs(FUNC))
        - The final location of that label is in a code segment
          _outside_ the segment where the stubs are located.

   * The compiler emits such 'gs' modifiers for code labels in the
     following situations:
        - Taking address of a function or code label.
        - Computed goto.
        - If prologue-save function is used, see '-mcall-prologues'
          command-line option.
        - Switch/case dispatch tables.  If you do not want such dispatch
          tables you can specify the '-fno-jump-tables' command-line
          option.
        - C and C++ constructors/destructors called during
          startup/shutdown.
        - If the tools hit a 'gs()' modifier explained above.

   * Jumping to non-symbolic addresses like so is _not_ supported:

          int main (void)
          {
              /* Call function at word address 0x2 */
              return ((int(*)(void)) 0x2)();
          }

     Instead, a stub has to be set up, i.e. the function has to be
     called through a symbol ('func_4' in the example):

          int main (void)
          {
              extern int func_4 (void);

              /* Call function at byte address 0x4 */
              return func_4();
          }

     and the application be linked with '-Wl,--defsym,func_4=0x4'.
     Alternatively, 'func_4' can be defined in the linker script.

3.17.5.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers
.........................................................................................

Some AVR devices support memories larger than the 64 KiB range that can
be accessed with 16-bit pointers.  To access memory locations outside
this 64 KiB range, the contentent of a 'RAMP' register is used as high
part of the address: The 'X', 'Y', 'Z' address register is concatenated
with the 'RAMPX', 'RAMPY', 'RAMPZ' special function register,
respectively, to get a wide address.  Similarly, 'RAMPD' is used
together with direct addressing.

   * The startup code initializes the 'RAMP' special function registers
     with zero.

   * If a *note named address space: AVR Named Address Spaces. other
     than generic or '__flash' is used, then 'RAMPZ' is set as needed
     before the operation.

   * If the device supports RAM larger than 64 KiB and the compiler
     needs to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is
     reset to zero after the operation.

   * If the device comes with a specific 'RAMP' register, the ISR
     prologue/epilogue saves/restores that SFR and initializes it with
     zero in case the ISR code might (implicitly) use it.

   * RAM larger than 64 KiB is not supported by GCC for AVR targets.  If
     you use inline assembler to read from locations outside the 16-bit
     address range and change one of the 'RAMP' registers, you must
     reset it to zero after the access.

3.17.5.3 AVR Built-in Macros
............................

GCC defines several built-in macros so that the user code can test for
the presence or absence of features.  Almost any of the following
built-in macros are deduced from device capabilities and thus triggered
by the '-mmcu=' command-line option.

 For even more AVR-specific built-in macros see *note AVR Named Address
Spaces:: and *note AVR Built-in Functions::.

'__AVR_ARCH__'
     Build-in macro that resolves to a decimal number that identifies
     the architecture and depends on the '-mmcu=MCU' option.  Possible
     values are:

     '2', '25', '3', '31', '35', '4', '5', '51', '6'

     for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5',
     'avr51', 'avr6',

     respectively and

     '100', '102', '104', '105', '106', '107'

     for MCU='avrtiny', 'avrxmega2', 'avrxmega4', 'avrxmega5',
     'avrxmega6', 'avrxmega7', respectively.  If MCU specifies a device,
     this built-in macro is set accordingly.  For example, with
     '-mmcu=atmega8' the macro is defined to '4'.

'__AVR_DEVICE__'
     Setting '-mmcu=DEVICE' defines this built-in macro which reflects
     the device's name.  For example, '-mmcu=atmega8' defines the
     built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines
     '__AVR_ATtiny261A__', etc.

     The built-in macros' names follow the scheme '__AVR_DEVICE__' where
     DEVICE is the device name as from the AVR user manual.  The
     difference between DEVICE in the built-in macro and DEVICE in
     '-mmcu=DEVICE' is that the latter is always lowercase.

     If DEVICE is not a device but only a core architecture like
     'avr51', this macro is not defined.

'__AVR_DEVICE_NAME__'
     Setting '-mmcu=DEVICE' defines this built-in macro to the device's
     name.  For example, with '-mmcu=atmega8' the macro is defined to
     'atmega8'.

     If DEVICE is not a device but only a core architecture like
     'avr51', this macro is not defined.

'__AVR_XMEGA__'
     The device / architecture belongs to the XMEGA family of devices.

'__AVR_HAVE_ELPM__'
     The device has the the 'ELPM' instruction.

'__AVR_HAVE_ELPMX__'
     The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions.

'__AVR_HAVE_MOVW__'
     The device has the 'MOVW' instruction to perform 16-bit
     register-register moves.

'__AVR_HAVE_LPMX__'
     The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions.

'__AVR_HAVE_MUL__'
     The device has a hardware multiplier.

'__AVR_HAVE_JMP_CALL__'
     The device has the 'JMP' and 'CALL' instructions.  This is the case
     for devices with at least 16 KiB of program memory.

'__AVR_HAVE_EIJMP_EICALL__'
'__AVR_3_BYTE_PC__'
     The device has the 'EIJMP' and 'EICALL' instructions.  This is the
     case for devices with more than 128 KiB of program memory.  This
     also means that the program counter (PC) is 3 bytes wide.

'__AVR_2_BYTE_PC__'
     The program counter (PC) is 2 bytes wide.  This is the case for
     devices with up to 128 KiB of program memory.

'__AVR_HAVE_8BIT_SP__'
'__AVR_HAVE_16BIT_SP__'
     The stack pointer (SP) register is treated as 8-bit respectively
     16-bit register by the compiler.  The definition of these macros is
     affected by '-mtiny-stack'.

'__AVR_HAVE_SPH__'
'__AVR_SP8__'
     The device has the SPH (high part of stack pointer) special
     function register or has an 8-bit stack pointer, respectively.  The
     definition of these macros is affected by '-mmcu=' and in the cases
     of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'.

'__AVR_HAVE_RAMPD__'
'__AVR_HAVE_RAMPX__'
'__AVR_HAVE_RAMPY__'
'__AVR_HAVE_RAMPZ__'
     The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special
     function register, respectively.

'__NO_INTERRUPTS__'
     This macro reflects the '-mno-interrupts' command-line option.

'__AVR_ERRATA_SKIP__'
'__AVR_ERRATA_SKIP_JMP_CALL__'
     Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
     instructions because of a hardware erratum.  Skip instructions are
     'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'.  The second macro is
     only defined if '__AVR_HAVE_JMP_CALL__' is also set.

'__AVR_ISA_RMW__'
     The device has Read-Modify-Write instructions (XCH, LAC, LAS and
     LAT).

'__AVR_SFR_OFFSET__=OFFSET'
     Instructions that can address I/O special function registers
     directly like 'IN', 'OUT', 'SBI', etc. may use a different address
     as if addressed by an instruction to access RAM like 'LD' or 'STS'.
     This offset depends on the device architecture and has to be
     subtracted from the RAM address in order to get the respective
     I/O address.

'__WITH_AVRLIBC__'
     The compiler is configured to be used together with AVR-Libc.  See
     the '--with-avrlibc' configure option.


File: gcc.info,  Node: Blackfin Options,  Next: C6X Options,  Prev: AVR Options,  Up: Submodel Options

3.17.6 Blackfin Options
-----------------------

'-mcpu=CPU[-SIREVISION]'
     Specifies the name of the target Blackfin processor.  Currently,
     CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522',
     'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532',
     'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542',
     'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m',
     'bf548m', 'bf549m', 'bf561', 'bf592'.

     The optional SIREVISION specifies the silicon revision of the
     target Blackfin processor.  Any workarounds available for the
     targeted silicon revision are enabled.  If SIREVISION is 'none', no
     workarounds are enabled.  If SIREVISION is 'any', all workarounds
     for the targeted processor are enabled.  The '__SILICON_REVISION__'
     macro is defined to two hexadecimal digits representing the major
     and minor numbers in the silicon revision.  If SIREVISION is
     'none', the '__SILICON_REVISION__' is not defined.  If SIREVISION
     is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'.  If
     this optional SIREVISION is not used, GCC assumes the latest known
     silicon revision of the targeted Blackfin processor.

     GCC defines a preprocessor macro for the specified CPU.  For the
     'bfin-elf' toolchain, this option causes the hardware BSP provided
     by libgloss to be linked in if '-msim' is not given.

     Without this option, 'bf532' is used as the processor by default.

     Note that support for 'bf561' is incomplete.  For 'bf561', only the
     preprocessor macro is defined.

'-msim'
     Specifies that the program will be run on the simulator.  This
     causes the simulator BSP provided by libgloss to be linked in.
     This option has effect only for 'bfin-elf' toolchain.  Certain
     other options, such as '-mid-shared-library' and '-mfdpic', imply
     '-msim'.

'-momit-leaf-frame-pointer'
     Don't keep the frame pointer in a register for leaf functions.
     This avoids the instructions to save, set up and restore frame
     pointers and makes an extra register available in leaf functions.
     The option '-fomit-frame-pointer' removes the frame pointer for all
     functions, which might make debugging harder.

'-mspecld-anomaly'
     When enabled, the compiler ensures that the generated code does not
     contain speculative loads after jump instructions.  If this option
     is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined.

'-mno-specld-anomaly'
     Don't generate extra code to prevent speculative loads from
     occurring.

'-mcsync-anomaly'
     When enabled, the compiler ensures that the generated code does not
     contain CSYNC or SSYNC instructions too soon after conditional
     branches.  If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS'
     is defined.

'-mno-csync-anomaly'
     Don't generate extra code to prevent CSYNC or SSYNC instructions
     from occurring too soon after a conditional branch.

'-mlow-64k'
     When enabled, the compiler is free to take advantage of the
     knowledge that the entire program fits into the low 64k of memory.

'-mno-low-64k'
     Assume that the program is arbitrarily large.  This is the default.

'-mstack-check-l1'
     Do stack checking using information placed into L1 scratchpad
     memory by the uClinux kernel.

'-mid-shared-library'
     Generate code that supports shared libraries via the library ID
     method.  This allows for execute in place and shared libraries in
     an environment without virtual memory management.  This option
     implies '-fPIC'.  With a 'bfin-elf' target, this option implies
     '-msim'.

'-mno-id-shared-library'
     Generate code that doesn't assume ID-based shared libraries are
     being used.  This is the default.

'-mleaf-id-shared-library'
     Generate code that supports shared libraries via the library ID
     method, but assumes that this library or executable won't link
     against any other ID shared libraries.  That allows the compiler to
     use faster code for jumps and calls.

'-mno-leaf-id-shared-library'
     Do not assume that the code being compiled won't link against any
     ID shared libraries.  Slower code is generated for jump and call
     insns.

'-mshared-library-id=n'
     Specifies the identification number of the ID-based shared library
     being compiled.  Specifying a value of 0 generates more compact
     code; specifying other values forces the allocation of that number
     to the current library but is no more space- or time-efficient than
     omitting this option.

'-msep-data'
     Generate code that allows the data segment to be located in a
     different area of memory from the text segment.  This allows for
     execute in place in an environment without virtual memory
     management by eliminating relocations against the text section.

'-mno-sep-data'
     Generate code that assumes that the data segment follows the text
     segment.  This is the default.

'-mlong-calls'
'-mno-long-calls'
     Tells the compiler to perform function calls by first loading the
     address of the function into a register and then performing a
     subroutine call on this register.  This switch is needed if the
     target function lies outside of the 24-bit addressing range of the
     offset-based version of subroutine call instruction.

     This feature is not enabled by default.  Specifying
     '-mno-long-calls' restores the default behavior.  Note these
     switches have no effect on how the compiler generates code to
     handle function calls via function pointers.

'-mfast-fp'
     Link with the fast floating-point library.  This library relaxes
     some of the IEEE floating-point standard's rules for checking
     inputs against Not-a-Number (NAN), in the interest of performance.

'-minline-plt'
     Enable inlining of PLT entries in function calls to functions that
     are not known to bind locally.  It has no effect without '-mfdpic'.

'-mmulticore'
     Build a standalone application for multicore Blackfin processors.
     This option causes proper start files and link scripts supporting
     multicore to be used, and defines the macro '__BFIN_MULTICORE'.  It
     can only be used with '-mcpu=bf561[-SIREVISION]'.

     This option can be used with '-mcorea' or '-mcoreb', which selects
     the one-application-per-core programming model.  Without '-mcorea'
     or '-mcoreb', the single-application/dual-core programming model is
     used.  In this model, the main function of Core B should be named
     as 'coreb_main'.

     If this option is not used, the single-core application programming
     model is used.

'-mcorea'
     Build a standalone application for Core A of BF561 when using the
     one-application-per-core programming model.  Proper start files and
     link scripts are used to support Core A, and the macro
     '__BFIN_COREA' is defined.  This option can only be used in
     conjunction with '-mmulticore'.

'-mcoreb'
     Build a standalone application for Core B of BF561 when using the
     one-application-per-core programming model.  Proper start files and
     link scripts are used to support Core B, and the macro
     '__BFIN_COREB' is defined.  When this option is used, 'coreb_main'
     should be used instead of 'main'.  This option can only be used in
     conjunction with '-mmulticore'.

'-msdram'
     Build a standalone application for SDRAM. Proper start files and
     link scripts are used to put the application into SDRAM, and the
     macro '__BFIN_SDRAM' is defined.  The loader should initialize
     SDRAM before loading the application.

'-micplb'
     Assume that ICPLBs are enabled at run time.  This has an effect on
     certain anomaly workarounds.  For Linux targets, the default is to
     assume ICPLBs are enabled; for standalone applications the default
     is off.


File: gcc.info,  Node: C6X Options,  Next: CRIS Options,  Prev: Blackfin Options,  Up: Submodel Options

3.17.7 C6X Options
------------------

'-march=NAME'
     This specifies the name of the target architecture.  GCC uses this
     name to determine what kind of instructions it can emit when
     generating assembly code.  Permissible names are: 'c62x', 'c64x',
     'c64x+', 'c67x', 'c67x+', 'c674x'.

'-mbig-endian'
     Generate code for a big-endian target.

'-mlittle-endian'
     Generate code for a little-endian target.  This is the default.

'-msim'
     Choose startup files and linker script suitable for the simulator.

'-msdata=default'
     Put small global and static data in the '.neardata' section, which
     is pointed to by register 'B14'.  Put small uninitialized global
     and static data in the '.bss' section, which is adjacent to the
     '.neardata' section.  Put small read-only data into the '.rodata'
     section.  The corresponding sections used for large pieces of data
     are '.fardata', '.far' and '.const'.

'-msdata=all'
     Put all data, not just small objects, into the sections reserved
     for small data, and use addressing relative to the 'B14' register
     to access them.

'-msdata=none'
     Make no use of the sections reserved for small data, and use
     absolute addresses to access all data.  Put all initialized global
     and static data in the '.fardata' section, and all uninitialized
     data in the '.far' section.  Put all constant data into the
     '.const' section.


File: gcc.info,  Node: CRIS Options,  Next: CR16 Options,  Prev: C6X Options,  Up: Submodel Options

3.17.8 CRIS Options
-------------------

These options are defined specifically for the CRIS ports.

'-march=ARCHITECTURE-TYPE'
'-mcpu=ARCHITECTURE-TYPE'
     Generate code for the specified architecture.  The choices for
     ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively
     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is 'v0' except for
     cris-axis-linux-gnu, where the default is 'v10'.

'-mtune=ARCHITECTURE-TYPE'
     Tune to ARCHITECTURE-TYPE everything applicable about the generated
     code, except for the ABI and the set of available instructions.
     The choices for ARCHITECTURE-TYPE are the same as for
     '-march=ARCHITECTURE-TYPE'.

'-mmax-stack-frame=N'
     Warn when the stack frame of a function exceeds N bytes.

'-metrax4'
'-metrax100'
     The options '-metrax4' and '-metrax100' are synonyms for
     '-march=v3' and '-march=v8' respectively.

'-mmul-bug-workaround'
'-mno-mul-bug-workaround'
     Work around a bug in the 'muls' and 'mulu' instructions for CPU
     models where it applies.  This option is active by default.

'-mpdebug'
     Enable CRIS-specific verbose debug-related information in the
     assembly code.  This option also has the effect of turning off the
     '#NO_APP' formatted-code indicator to the assembler at the
     beginning of the assembly file.

'-mcc-init'
     Do not use condition-code results from previous instruction; always
     emit compare and test instructions before use of condition codes.

'-mno-side-effects'
     Do not emit instructions with side effects in addressing modes
     other than post-increment.

'-mstack-align'
'-mno-stack-align'
'-mdata-align'
'-mno-data-align'
'-mconst-align'
'-mno-const-align'
     These options ('no-' options) arrange (eliminate arrangements) for
     the stack frame, individual data and constants to be aligned for
     the maximum single data access size for the chosen CPU model.  The
     default is to arrange for 32-bit alignment.  ABI details such as
     structure layout are not affected by these options.

'-m32-bit'
'-m16-bit'
'-m8-bit'
     Similar to the stack- data- and const-align options above, these
     options arrange for stack frame, writable data and constants to all
     be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
     alignment.

'-mno-prologue-epilogue'
'-mprologue-epilogue'
     With '-mno-prologue-epilogue', the normal function prologue and
     epilogue which set up the stack frame are omitted and no return
     instructions or return sequences are generated in the code.  Use
     this option only together with visual inspection of the compiled
     code: no warnings or errors are generated when call-saved registers
     must be saved, or storage for local variables needs to be
     allocated.

'-mno-gotplt'
'-mgotplt'
     With '-fpic' and '-fPIC', don't generate (do generate) instruction
     sequences that load addresses for functions from the PLT part of
     the GOT rather than (traditional on other architectures) calls to
     the PLT.  The default is '-mgotplt'.

'-melf'
     Legacy no-op option only recognized with the cris-axis-elf and
     cris-axis-linux-gnu targets.

'-mlinux'
     Legacy no-op option only recognized with the cris-axis-linux-gnu
     target.

'-sim'
     This option, recognized for the cris-axis-elf, arranges to link
     with input-output functions from a simulator library.  Code,
     initialized data and zero-initialized data are allocated
     consecutively.

'-sim2'
     Like '-sim', but pass linker options to locate initialized data at
     0x40000000 and zero-initialized data at 0x80000000.


File: gcc.info,  Node: CR16 Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options

3.17.9 CR16 Options
-------------------

These options are defined specifically for the CR16 ports.

'-mmac'
     Enable the use of multiply-accumulate instructions.  Disabled by
     default.

'-mcr16cplus'
'-mcr16c'
     Generate code for CR16C or CR16C+ architecture.  CR16C+
     architecture is default.

'-msim'
     Links the library libsim.a which is in compatible with simulator.
     Applicable to ELF compiler only.

'-mint32'
     Choose integer type as 32-bit wide.

'-mbit-ops'
     Generates 'sbit'/'cbit' instructions for bit manipulations.

'-mdata-model=MODEL'
     Choose a data model.  The choices for MODEL are 'near', 'far' or
     'medium'.  'medium' is default.  However, 'far' is not valid with
     '-mcr16c', as the CR16C architecture does not support the far data
     model.


File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CR16 Options,  Up: Submodel Options

3.17.10 Darwin Options
----------------------

These options are defined for all architectures running the Darwin
operating system.

 FSF GCC on Darwin does not create "fat" object files; it creates an
object file for the single architecture that GCC was built to target.
Apple's GCC on Darwin does create "fat" files if multiple '-arch'
options are used; it does so by running the compiler or linker multiple
times and joining the results together with 'lipo'.

 The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686')
is determined by the flags that specify the ISA that GCC is targeting,
like '-mcpu' or '-march'.  The '-force_cpusubtype_ALL' option can be
used to override this.

 The Darwin tools vary in their behavior when presented with an ISA
mismatch.  The assembler, 'as', only permits instructions to be used
that are valid for the subtype of the file it is generating, so you
cannot put 64-bit instructions in a 'ppc750' object file.  The linker
for shared libraries, '/usr/bin/libtool', fails and prints an error if
asked to create a shared library with a less restrictive subtype than
its input files (for instance, trying to put a 'ppc970' object file in a
'ppc7400' library).  The linker for executables, 'ld', quietly gives the
executable the most restrictive subtype of any of its input files.

'-FDIR'
     Add the framework directory DIR to the head of the list of
     directories to be searched for header files.  These directories are
     interleaved with those specified by '-I' options and are scanned in
     a left-to-right order.

     A framework directory is a directory with frameworks in it.  A
     framework is a directory with a 'Headers' and/or 'PrivateHeaders'
     directory contained directly in it that ends in '.framework'.  The
     name of a framework is the name of this directory excluding the
     '.framework'.  Headers associated with the framework are found in
     one of those two directories, with 'Headers' being searched first.
     A subframework is a framework directory that is in a framework's
     'Frameworks' directory.  Includes of subframework headers can only
     appear in a header of a framework that contains the subframework,
     or in a sibling subframework header.  Two subframeworks are
     siblings if they occur in the same framework.  A subframework
     should not have the same name as a framework; a warning is issued
     if this is violated.  Currently a subframework cannot have
     subframeworks; in the future, the mechanism may be extended to
     support this.  The standard frameworks can be found in
     '/System/Library/Frameworks' and '/Library/Frameworks'.  An example
     include looks like '#include <Framework/header.h>', where
     'Framework' denotes the name of the framework and 'header.h' is
     found in the 'PrivateHeaders' or 'Headers' directory.

'-iframeworkDIR'
     Like '-F' except the directory is a treated as a system directory.
     The main difference between this '-iframework' and '-F' is that
     with '-iframework' the compiler does not warn about constructs
     contained within header files found via DIR.  This option is valid
     only for the C family of languages.

'-gused'
     Emit debugging information for symbols that are used.  For stabs
     debugging format, this enables '-feliminate-unused-debug-symbols'.
     This is by default ON.

'-gfull'
     Emit debugging information for all symbols and types.

'-mmacosx-version-min=VERSION'
     The earliest version of MacOS X that this executable will run on is
     VERSION.  Typical values of VERSION include '10.1', '10.2', and
     '10.3.9'.

     If the compiler was built to use the system's headers by default,
     then the default for this option is the system version on which the
     compiler is running, otherwise the default is to make choices that
     are compatible with as many systems and code bases as possible.

'-mkernel'
     Enable kernel development mode.  The '-mkernel' option sets
     '-static', '-fno-common', '-fno-use-cxa-atexit', '-fno-exceptions',
     '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and
     '-fno-rtti' where applicable.  This mode also sets '-mno-altivec',
     '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC
     targets.

'-mone-byte-bool'
     Override the defaults for 'bool' so that 'sizeof(bool)==1'.  By
     default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and
     '1' when compiling for Darwin/x86, so this option has no effect on
     x86.

     *Warning:* The '-mone-byte-bool' switch causes GCC to generate code
     that is not binary compatible with code generated without that
     switch.  Using this switch may require recompiling all other
     modules in a program, including system libraries.  Use this switch
     to conform to a non-default data model.

'-mfix-and-continue'
'-ffix-and-continue'
'-findirect-data'
     Generate code suitable for fast turnaround development, such as to
     allow GDB to dynamically load '.o' files into already-running
     programs.  '-findirect-data' and '-ffix-and-continue' are provided
     for backwards compatibility.

'-all_load'
     Loads all members of static archive libraries.  See man ld(1) for
     more information.

'-arch_errors_fatal'
     Cause the errors having to do with files that have the wrong
     architecture to be fatal.

'-bind_at_load'
     Causes the output file to be marked such that the dynamic linker
     will bind all undefined references when the file is loaded or
     launched.

'-bundle'
     Produce a Mach-o bundle format file.  See man ld(1) for more
     information.

'-bundle_loader EXECUTABLE'
     This option specifies the EXECUTABLE that will load the build
     output file being linked.  See man ld(1) for more information.

'-dynamiclib'
     When passed this option, GCC produces a dynamic library instead of
     an executable when linking, using the Darwin 'libtool' command.

'-force_cpusubtype_ALL'
     This causes GCC's output file to have the 'ALL' subtype, instead of
     one controlled by the '-mcpu' or '-march' option.

'-allowable_client CLIENT_NAME'
'-client_name'
'-compatibility_version'
'-current_version'
'-dead_strip'
'-dependency-file'
'-dylib_file'
'-dylinker_install_name'
'-dynamic'
'-exported_symbols_list'
'-filelist'
'-flat_namespace'
'-force_flat_namespace'
'-headerpad_max_install_names'
'-image_base'
'-init'
'-install_name'
'-keep_private_externs'
'-multi_module'
'-multiply_defined'
'-multiply_defined_unused'
'-noall_load'
'-no_dead_strip_inits_and_terms'
'-nofixprebinding'
'-nomultidefs'
'-noprebind'
'-noseglinkedit'
'-pagezero_size'
'-prebind'
'-prebind_all_twolevel_modules'
'-private_bundle'
'-read_only_relocs'
'-sectalign'
'-sectobjectsymbols'
'-whyload'
'-seg1addr'
'-sectcreate'
'-sectobjectsymbols'
'-sectorder'
'-segaddr'
'-segs_read_only_addr'
'-segs_read_write_addr'
'-seg_addr_table'
'-seg_addr_table_filename'
'-seglinkedit'
'-segprot'
'-segs_read_only_addr'
'-segs_read_write_addr'
'-single_module'
'-static'
'-sub_library'
'-sub_umbrella'
'-twolevel_namespace'
'-umbrella'
'-undefined'
'-unexported_symbols_list'
'-weak_reference_mismatches'
'-whatsloaded'
     These options are passed to the Darwin linker.  The Darwin linker
     man page describes them in detail.


File: gcc.info,  Node: DEC Alpha Options,  Next: FR30 Options,  Prev: Darwin Options,  Up: Submodel Options

3.17.11 DEC Alpha Options
-------------------------

These '-m' options are defined for the DEC Alpha implementations:

'-mno-soft-float'
'-msoft-float'
     Use (do not use) the hardware floating-point instructions for
     floating-point operations.  When '-msoft-float' is specified,
     functions in 'libgcc.a' are used to perform floating-point
     operations.  Unless they are replaced by routines that emulate the
     floating-point operations, or compiled in such a way as to call
     such emulations routines, these routines issue floating-point
     operations.  If you are compiling for an Alpha without
     floating-point operations, you must ensure that the library is
     built so as not to call them.

     Note that Alpha implementations without floating-point operations
     are required to have floating-point registers.

'-mfp-reg'
'-mno-fp-regs'
     Generate code that uses (does not use) the floating-point register
     set.  '-mno-fp-regs' implies '-msoft-float'.  If the floating-point
     register set is not used, floating-point operands are passed in
     integer registers as if they were integers and floating-point
     results are passed in '$0' instead of '$f0'.  This is a
     non-standard calling sequence, so any function with a
     floating-point argument or return value called by code compiled
     with '-mno-fp-regs' must also be compiled with that option.

     A typical use of this option is building a kernel that does not
     use, and hence need not save and restore, any floating-point
     registers.

'-mieee'
     The Alpha architecture implements floating-point hardware optimized
     for maximum performance.  It is mostly compliant with the IEEE
     floating-point standard.  However, for full compliance, software
     assistance is required.  This option generates code fully
     IEEE-compliant code _except_ that the INEXACT-FLAG is not
     maintained (see below).  If this option is turned on, the
     preprocessor macro '_IEEE_FP' is defined during compilation.  The
     resulting code is less efficient but is able to correctly support
     denormalized numbers and exceptional IEEE values such as
     not-a-number and plus/minus infinity.  Other Alpha compilers call
     this option '-ieee_with_no_inexact'.

'-mieee-with-inexact'
     This is like '-mieee' except the generated code also maintains the
     IEEE INEXACT-FLAG.  Turning on this option causes the generated
     code to implement fully-compliant IEEE math.  In addition to
     '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro.
     On some Alpha implementations the resulting code may execute
     significantly slower than the code generated by default.  Since
     there is very little code that depends on the INEXACT-FLAG, you
     should normally not specify this option.  Other Alpha compilers
     call this option '-ieee_with_inexact'.

'-mfp-trap-mode=TRAP-MODE'
     This option controls what floating-point related traps are enabled.
     Other Alpha compilers call this option '-fptm TRAP-MODE'.  The trap
     mode can be set to one of four values:

     'n'
          This is the default (normal) setting.  The only traps that are
          enabled are the ones that cannot be disabled in software
          (e.g., division by zero trap).

     'u'
          In addition to the traps enabled by 'n', underflow traps are
          enabled as well.

     'su'
          Like 'u', but the instructions are marked to be safe for
          software completion (see Alpha architecture manual for
          details).

     'sui'
          Like 'su', but inexact traps are enabled as well.

'-mfp-rounding-mode=ROUNDING-MODE'
     Selects the IEEE rounding mode.  Other Alpha compilers call this
     option '-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:

     'n'
          Normal IEEE rounding mode.  Floating-point numbers are rounded
          towards the nearest machine number or towards the even machine
          number in case of a tie.

     'm'
          Round towards minus infinity.

     'c'
          Chopped rounding mode.  Floating-point numbers are rounded
          towards zero.

     'd'
          Dynamic rounding mode.  A field in the floating-point control
          register (FPCR, see Alpha architecture reference manual)
          controls the rounding mode in effect.  The C library
          initializes this register for rounding towards plus infinity.
          Thus, unless your program modifies the FPCR, 'd' corresponds
          to round towards plus infinity.

'-mtrap-precision=TRAP-PRECISION'
     In the Alpha architecture, floating-point traps are imprecise.
     This means without software assistance it is impossible to recover
     from a floating trap and program execution normally needs to be
     terminated.  GCC can generate code that can assist operating system
     trap handlers in determining the exact location that caused a
     floating-point trap.  Depending on the requirements of an
     application, different levels of precisions can be selected:

     'p'
          Program precision.  This option is the default and means a
          trap handler can only identify which program caused a
          floating-point exception.

     'f'
          Function precision.  The trap handler can determine the
          function that caused a floating-point exception.

     'i'
          Instruction precision.  The trap handler can determine the
          exact instruction that caused a floating-point exception.

     Other Alpha compilers provide the equivalent options called
     '-scope_safe' and '-resumption_safe'.

'-mieee-conformant'
     This option marks the generated code as IEEE conformant.  You must
     not use this option unless you also specify '-mtrap-precision=i'
     and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'.  Its only
     effect is to emit the line '.eflag 48' in the function prologue of
     the generated assembly file.

'-mbuild-constants'
     Normally GCC examines a 32- or 64-bit integer constant to see if it
     can construct it from smaller constants in two or three
     instructions.  If it cannot, it outputs the constant as a literal
     and generates code to load it from the data segment at run time.

     Use this option to require GCC to construct _all_ integer constants
     using code, even if it takes more instructions (the maximum is
     six).

     You typically use this option to build a shared library dynamic
     loader.  Itself a shared library, it must relocate itself in memory
     before it can find the variables and constants in its own data
     segment.

'-mbwx'
'-mno-bwx'
'-mcix'
'-mno-cix'
'-mfix'
'-mno-fix'
'-mmax'
'-mno-max'
     Indicate whether GCC should generate code to use the optional BWX,
     CIX, FIX and MAX instruction sets.  The default is to use the
     instruction sets supported by the CPU type specified via '-mcpu='
     option or that of the CPU on which GCC was built if none is
     specified.

'-mfloat-vax'
'-mfloat-ieee'
     Generate code that uses (does not use) VAX F and G floating-point
     arithmetic instead of IEEE single and double precision.

'-mexplicit-relocs'
'-mno-explicit-relocs'
     Older Alpha assemblers provided no way to generate symbol
     relocations except via assembler macros.  Use of these macros does
     not allow optimal instruction scheduling.  GNU binutils as of
     version 2.12 supports a new syntax that allows the compiler to
     explicitly mark which relocations should apply to which
     instructions.  This option is mostly useful for debugging, as GCC
     detects the capabilities of the assembler when it is built and sets
     the default accordingly.

'-msmall-data'
'-mlarge-data'
     When '-mexplicit-relocs' is in effect, static data is accessed via
     "gp-relative" relocations.  When '-msmall-data' is used, objects 8
     bytes long or smaller are placed in a "small data area" (the
     '.sdata' and '.sbss' sections) and are accessed via 16-bit
     relocations off of the '$gp' register.  This limits the size of the
     small data area to 64KB, but allows the variables to be directly
     accessed via a single instruction.

     The default is '-mlarge-data'.  With this option the data area is
     limited to just below 2GB.  Programs that require more than 2GB of
     data must use 'malloc' or 'mmap' to allocate the data in the heap
     instead of in the program's data segment.

     When generating code for shared libraries, '-fpic' implies
     '-msmall-data' and '-fPIC' implies '-mlarge-data'.

'-msmall-text'
'-mlarge-text'
     When '-msmall-text' is used, the compiler assumes that the code of
     the entire program (or shared library) fits in 4MB, and is thus
     reachable with a branch instruction.  When '-msmall-data' is used,
     the compiler can assume that all local symbols share the same '$gp'
     value, and thus reduce the number of instructions required for a
     function call from 4 to 1.

     The default is '-mlarge-text'.

'-mcpu=CPU_TYPE'
     Set the instruction set and instruction scheduling parameters for
     machine type CPU_TYPE.  You can specify either the 'EV' style name
     or the corresponding chip number.  GCC supports scheduling
     parameters for the EV4, EV5 and EV6 family of processors and
     chooses the default values for the instruction set from the
     processor you specify.  If you do not specify a processor type, GCC
     defaults to the processor on which the compiler was built.

     Supported values for CPU_TYPE are

     'ev4'
     'ev45'
     '21064'
          Schedules as an EV4 and has no instruction set extensions.

     'ev5'
     '21164'
          Schedules as an EV5 and has no instruction set extensions.

     'ev56'
     '21164a'
          Schedules as an EV5 and supports the BWX extension.

     'pca56'
     '21164pc'
     '21164PC'
          Schedules as an EV5 and supports the BWX and MAX extensions.

     'ev6'
     '21264'
          Schedules as an EV6 and supports the BWX, FIX, and MAX
          extensions.

     'ev67'
     '21264a'
          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
          extensions.

     Native toolchains also support the value 'native', which selects
     the best architecture option for the host processor.
     '-mcpu=native' has no effect if GCC does not recognize the
     processor.

'-mtune=CPU_TYPE'
     Set only the instruction scheduling parameters for machine type
     CPU_TYPE.  The instruction set is not changed.

     Native toolchains also support the value 'native', which selects
     the best architecture option for the host processor.
     '-mtune=native' has no effect if GCC does not recognize the
     processor.

'-mmemory-latency=TIME'
     Sets the latency the scheduler should assume for typical memory
     references as seen by the application.  This number is highly
     dependent on the memory access patterns used by the application and
     the size of the external cache on the machine.

     Valid options for TIME are

     'NUMBER'
          A decimal number representing clock cycles.

     'L1'
     'L2'
     'L3'
     'main'
          The compiler contains estimates of the number of clock cycles
          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
          (also called Dcache, Scache, and Bcache), as well as to main
          memory.  Note that L3 is only valid for EV5.


File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options

3.17.12 FR30 Options
--------------------

These options are defined specifically for the FR30 port.

'-msmall-model'
     Use the small address space model.  This can produce smaller code,
     but it does assume that all symbolic values and addresses fit into
     a 20-bit range.

'-mno-lsim'
     Assume that runtime support has been provided and so there is no
     need to include the simulator library ('libsim.a') on the linker
     command line.


File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: FR30 Options,  Up: Submodel Options

3.17.13 FRV Options
-------------------

'-mgpr-32'

     Only use the first 32 general-purpose registers.

'-mgpr-64'

     Use all 64 general-purpose registers.

'-mfpr-32'

     Use only the first 32 floating-point registers.

'-mfpr-64'

     Use all 64 floating-point registers.

'-mhard-float'

     Use hardware instructions for floating-point operations.

'-msoft-float'

     Use library routines for floating-point operations.

'-malloc-cc'

     Dynamically allocate condition code registers.

'-mfixed-cc'

     Do not try to dynamically allocate condition code registers, only
     use 'icc0' and 'fcc0'.

'-mdword'

     Change ABI to use double word insns.

'-mno-dword'

     Do not use double word instructions.

'-mdouble'

     Use floating-point double instructions.

'-mno-double'

     Do not use floating-point double instructions.

'-mmedia'

     Use media instructions.

'-mno-media'

     Do not use media instructions.

'-mmuladd'

     Use multiply and add/subtract instructions.

'-mno-muladd'

     Do not use multiply and add/subtract instructions.

'-mfdpic'

     Select the FDPIC ABI, which uses function descriptors to represent
     pointers to functions.  Without any PIC/PIE-related options, it
     implies '-fPIE'.  With '-fpic' or '-fpie', it assumes GOT entries
     and small data are within a 12-bit range from the GOT base address;
     with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits.
     With a 'bfin-elf' target, this option implies '-msim'.

'-minline-plt'

     Enable inlining of PLT entries in function calls to functions that
     are not known to bind locally.  It has no effect without '-mfdpic'.
     It's enabled by default if optimizing for speed and compiling for
     shared libraries (i.e., '-fPIC' or '-fpic'), or when an
     optimization option such as '-O3' or above is present in the
     command line.

'-mTLS'

     Assume a large TLS segment when generating thread-local code.

'-mtls'

     Do not assume a large TLS segment when generating thread-local
     code.

'-mgprel-ro'

     Enable the use of 'GPREL' relocations in the FDPIC ABI for data
     that is known to be in read-only sections.  It's enabled by
     default, except for '-fpic' or '-fpie': even though it may help
     make the global offset table smaller, it trades 1 instruction for
     4.  With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of
     which may be shared by multiple symbols, and it avoids the need for
     a GOT entry for the referenced symbol, so it's more likely to be a
     win.  If it is not, '-mno-gprel-ro' can be used to disable it.

'-multilib-library-pic'

     Link with the (library, not FD) pic libraries.  It's implied by
     '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without
     '-mfdpic'.  You should never have to use it explicitly.

'-mlinked-fp'

     Follow the EABI requirement of always creating a frame pointer
     whenever a stack frame is allocated.  This option is enabled by
     default and can be disabled with '-mno-linked-fp'.

'-mlong-calls'

     Use indirect addressing to call functions outside the current
     compilation unit.  This allows the functions to be placed anywhere
     within the 32-bit address space.

'-malign-labels'

     Try to align labels to an 8-byte boundary by inserting NOPs into
     the previous packet.  This option only has an effect when VLIW
     packing is enabled.  It doesn't create new packets; it merely adds
     NOPs to existing ones.

'-mlibrary-pic'

     Generate position-independent EABI code.

'-macc-4'

     Use only the first four media accumulator registers.

'-macc-8'

     Use all eight media accumulator registers.

'-mpack'

     Pack VLIW instructions.

'-mno-pack'

     Do not pack VLIW instructions.

'-mno-eflags'

     Do not mark ABI switches in e_flags.

'-mcond-move'

     Enable the use of conditional-move instructions (default).

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-mno-cond-move'

     Disable the use of conditional-move instructions.

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-mscc'

     Enable the use of conditional set instructions (default).

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-mno-scc'

     Disable the use of conditional set instructions.

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-mcond-exec'

     Enable the use of conditional execution (default).

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-mno-cond-exec'

     Disable the use of conditional execution.

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-mvliw-branch'

     Run a pass to pack branches into VLIW instructions (default).

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-mno-vliw-branch'

     Do not run a pass to pack branches into VLIW instructions.

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-mmulti-cond-exec'

     Enable optimization of '&&' and '||' in conditional execution
     (default).

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-mno-multi-cond-exec'

     Disable optimization of '&&' and '||' in conditional execution.

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-mnested-cond-exec'

     Enable nested conditional execution optimizations (default).

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-mno-nested-cond-exec'

     Disable nested conditional execution optimizations.

     This switch is mainly for debugging the compiler and will likely be
     removed in a future version.

'-moptimize-membar'

     This switch removes redundant 'membar' instructions from the
     compiler-generated code.  It is enabled by default.

'-mno-optimize-membar'

     This switch disables the automatic removal of redundant 'membar'
     instructions from the generated code.

'-mtomcat-stats'

     Cause gas to print out tomcat statistics.

'-mcpu=CPU'

     Select the processor type for which to generate code.  Possible
     values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405',
     'fr400', 'fr300' and 'simple'.


File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options

3.17.14 GNU/Linux Options
-------------------------

These '-m' options are defined for GNU/Linux targets:

'-mglibc'
     Use the GNU C library.  This is the default except on
     '*-*-linux-*uclibc*' and '*-*-linux-*android*' targets.

'-muclibc'
     Use uClibc C library.  This is the default on '*-*-linux-*uclibc*'
     targets.

'-mbionic'
     Use Bionic C library.  This is the default on '*-*-linux-*android*'
     targets.

'-mandroid'
     Compile code compatible with Android platform.  This is the default
     on '*-*-linux-*android*' targets.

     When compiling, this option enables '-mbionic', '-fPIC',
     '-fno-exceptions' and '-fno-rtti' by default.  When linking, this
     option makes the GCC driver pass Android-specific options to the
     linker.  Finally, this option causes the preprocessor macro
     '__ANDROID__' to be defined.

'-tno-android-cc'
     Disable compilation effects of '-mandroid', i.e., do not enable
     '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default.

'-tno-android-ld'
     Disable linking effects of '-mandroid', i.e., pass standard Linux
     linking options to the linker.


File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options

3.17.15 H8/300 Options
----------------------

These '-m' options are defined for the H8/300 implementations:

'-mrelax'
     Shorten some address references at link time, when possible; uses
     the linker option '-relax'.  *Note 'ld' and the H8/300: (ld)H8/300,
     for a fuller description.

'-mh'
     Generate code for the H8/300H.

'-ms'
     Generate code for the H8S.

'-mn'
     Generate code for the H8S and H8/300H in the normal mode.  This
     switch must be used either with '-mh' or '-ms'.

'-ms2600'
     Generate code for the H8S/2600.  This switch must be used with
     '-ms'.

'-mexr'
     Extended registers are stored on stack before execution of function
     with monitor attribute.  Default option is '-mexr'.  This option is
     valid only for H8S targets.

'-mno-exr'
     Extended registers are not stored on stack before execution of
     function with monitor attribute.  Default option is '-mno-exr'.
     This option is valid only for H8S targets.

'-mint32'
     Make 'int' data 32 bits by default.

'-malign-300'
     On the H8/300H and H8S, use the same alignment rules as for the
     H8/300.  The default for the H8/300H and H8S is to align longs and
     floats on 4-byte boundaries.  '-malign-300' causes them to be
     aligned on 2-byte boundaries.  This option has no effect on the
     H8/300.


File: gcc.info,  Node: HPPA Options,  Next: IA-64 Options,  Prev: H8/300 Options,  Up: Submodel Options

3.17.16 HPPA Options
--------------------

These '-m' options are defined for the HPPA family of computers:

'-march=ARCHITECTURE-TYPE'
     Generate code for the specified architecture.  The choices for
     ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0'
     for PA 2.0 processors.  Refer to '/usr/lib/sched.models' on an
     HP-UX system to determine the proper architecture option for your
     machine.  Code compiled for lower numbered architectures runs on
     higher numbered architectures, but not the other way around.

'-mpa-risc-1-0'
'-mpa-risc-1-1'
'-mpa-risc-2-0'
     Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0'
     respectively.

'-mjump-in-delay'
     This option is ignored and provided for compatibility purposes
     only.

'-mdisable-fpregs'
     Prevent floating-point registers from being used in any manner.
     This is necessary for compiling kernels that perform lazy context
     switching of floating-point registers.  If you use this option and
     attempt to perform floating-point operations, the compiler aborts.

'-mdisable-indexing'
     Prevent the compiler from using indexing address modes.  This
     avoids some rather obscure problems when compiling MIG generated
     code under MACH.

'-mno-space-regs'
     Generate code that assumes the target has no space registers.  This
     allows GCC to generate faster indirect calls and use unscaled index
     address modes.

     Such code is suitable for level 0 PA systems and kernels.

'-mfast-indirect-calls'
     Generate code that assumes calls never cross space boundaries.
     This allows GCC to emit code that performs faster indirect calls.

     This option does not work in the presence of shared libraries or
     nested functions.

'-mfixed-range=REGISTER-RANGE'
     Generate code treating the given register range as fixed registers.
     A fixed register is one that the register allocator cannot use.
     This is useful when compiling kernel code.  A register range is
     specified as two registers separated by a dash.  Multiple register
     ranges can be specified separated by a comma.

'-mlong-load-store'
     Generate 3-instruction load and store sequences as sometimes
     required by the HP-UX 10 linker.  This is equivalent to the '+k'
     option to the HP compilers.

'-mportable-runtime'
     Use the portable calling conventions proposed by HP for ELF
     systems.

'-mgas'
     Enable the use of assembler directives only GAS understands.

'-mschedule=CPU-TYPE'
     Schedule code according to the constraints for the machine type
     CPU-TYPE.  The choices for CPU-TYPE are '700' '7100', '7100LC',
     '7200', '7300' and '8000'.  Refer to '/usr/lib/sched.models' on an
     HP-UX system to determine the proper scheduling option for your
     machine.  The default scheduling is '8000'.

'-mlinker-opt'
     Enable the optimization pass in the HP-UX linker.  Note this makes
     symbolic debugging impossible.  It also triggers a bug in the HP-UX
     8 and HP-UX 9 linkers in which they give bogus error messages when
     linking some programs.

'-msoft-float'
     Generate output containing library calls for floating point.
     *Warning:* the requisite libraries are not available for all HPPA
     targets.  Normally the facilities of the machine's usual C compiler
     are used, but this cannot be done directly in cross-compilation.
     You must make your own arrangements to provide suitable library
     functions for cross-compilation.

     '-msoft-float' changes the calling convention in the output file;
     therefore, it is only useful if you compile _all_ of a program with
     this option.  In particular, you need to compile 'libgcc.a', the
     library that comes with GCC, with '-msoft-float' in order for this
     to work.

'-msio'
     Generate the predefine, '_SIO', for server IO.  The default is
     '-mwsio'.  This generates the predefines, '__hp9000s700',
     '__hp9000s700__' and '_WSIO', for workstation IO.  These options
     are available under HP-UX and HI-UX.

'-mgnu-ld'
     Use options specific to GNU 'ld'.  This passes '-shared' to 'ld'
     when building a shared library.  It is the default when GCC is
     configured, explicitly or implicitly, with the GNU linker.  This
     option does not affect which 'ld' is called; it only changes what
     parameters are passed to that 'ld'.  The 'ld' that is called is
     determined by the '--with-ld' configure option, GCC's program
     search path, and finally by the user's 'PATH'.  The linker used by
     GCC can be printed using 'which `gcc -print-prog-name=ld`'.  This
     option is only available on the 64-bit HP-UX GCC, i.e. configured
     with 'hppa*64*-*-hpux*'.

'-mhp-ld'
     Use options specific to HP 'ld'.  This passes '-b' to 'ld' when
     building a shared library and passes '+Accept TypeMismatch' to 'ld'
     on all links.  It is the default when GCC is configured, explicitly
     or implicitly, with the HP linker.  This option does not affect
     which 'ld' is called; it only changes what parameters are passed to
     that 'ld'.  The 'ld' that is called is determined by the
     '--with-ld' configure option, GCC's program search path, and
     finally by the user's 'PATH'.  The linker used by GCC can be
     printed using 'which `gcc -print-prog-name=ld`'.  This option is
     only available on the 64-bit HP-UX GCC, i.e. configured with
     'hppa*64*-*-hpux*'.

'-mlong-calls'
     Generate code that uses long call sequences.  This ensures that a
     call is always able to reach linker generated stubs.  The default
     is to generate long calls only when the distance from the call site
     to the beginning of the function or translation unit, as the case
     may be, exceeds a predefined limit set by the branch type being
     used.  The limits for normal calls are 7,600,000 and 240,000 bytes,
     respectively for the PA 2.0 and PA 1.X architectures.  Sibcalls are
     always limited at 240,000 bytes.

     Distances are measured from the beginning of functions when using
     the '-ffunction-sections' option, or when using the '-mgas' and
     '-mno-portable-runtime' options together under HP-UX with the SOM
     linker.

     It is normally not desirable to use this option as it degrades
     performance.  However, it may be useful in large applications,
     particularly when partial linking is used to build the application.

     The types of long calls used depends on the capabilities of the
     assembler and linker, and the type of code being generated.  The
     impact on systems that support long absolute calls, and long pic
     symbol-difference or pc-relative calls should be relatively small.
     However, an indirect call is used on 32-bit ELF systems in pic code
     and it is quite long.

'-munix=UNIX-STD'
     Generate compiler predefines and select a startfile for the
     specified UNIX standard.  The choices for UNIX-STD are '93', '95'
     and '98'.  '93' is supported on all HP-UX versions.  '95' is
     available on HP-UX 10.10 and later.  '98' is available on HP-UX
     11.11 and later.  The default values are '93' for HP-UX 10.00, '95'
     for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and
     later.

     '-munix=93' provides the same predefines as GCC 3.3 and 3.4.
     '-munix=95' provides additional predefines for 'XOPEN_UNIX' and
     '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'.
     '-munix=98' provides additional predefines for '_XOPEN_UNIX',
     '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and
     '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'.

     It is _important_ to note that this option changes the interfaces
     for various library routines.  It also affects the operational
     behavior of the C library.  Thus, _extreme_ care is needed in using
     this option.

     Library code that is intended to operate with more than one UNIX
     standard must test, set and restore the variable
     '__xpg4_extended_mask' as appropriate.  Most GNU software doesn't
     provide this capability.

'-nolibdld'
     Suppress the generation of link options to search libdld.sl when
     the '-static' option is specified on HP-UX 10 and later.

'-static'
     The HP-UX implementation of setlocale in libc has a dependency on
     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
     when the '-static' option is specified, special link options are
     needed to resolve this dependency.

     On HP-UX 10 and later, the GCC driver adds the necessary options to
     link with libdld.sl when the '-static' option is specified.  This
     causes the resulting binary to be dynamic.  On the 64-bit port, the
     linkers generate dynamic binaries by default in any case.  The
     '-nolibdld' option can be used to prevent the GCC driver from
     adding these link options.

'-threads'
     Add support for multithreading with the "dce thread" library under
     HP-UX.  This option sets flags for both the preprocessor and
     linker.


File: gcc.info,  Node: IA-64 Options,  Next: LM32 Options,  Prev: HPPA Options,  Up: Submodel Options

3.17.17 IA-64 Options
---------------------

These are the '-m' options defined for the Intel IA-64 architecture.

'-mbig-endian'
     Generate code for a big-endian target.  This is the default for
     HP-UX.

'-mlittle-endian'
     Generate code for a little-endian target.  This is the default for
     AIX5 and GNU/Linux.

'-mgnu-as'
'-mno-gnu-as'
     Generate (or don't) code for the GNU assembler.  This is the
     default.

'-mgnu-ld'
'-mno-gnu-ld'
     Generate (or don't) code for the GNU linker.  This is the default.

'-mno-pic'
     Generate code that does not use a global pointer register.  The
     result is not position independent code, and violates the IA-64
     ABI.

'-mvolatile-asm-stop'
'-mno-volatile-asm-stop'
     Generate (or don't) a stop bit immediately before and after
     volatile asm statements.

'-mregister-names'
'-mno-register-names'
     Generate (or don't) 'in', 'loc', and 'out' register names for the
     stacked registers.  This may make assembler output more readable.

'-mno-sdata'
'-msdata'
     Disable (or enable) optimizations that use the small data section.
     This may be useful for working around optimizer bugs.

'-mconstant-gp'
     Generate code that uses a single constant global pointer value.
     This is useful when compiling kernel code.

'-mauto-pic'
     Generate code that is self-relocatable.  This implies
     '-mconstant-gp'.  This is useful when compiling firmware code.

'-minline-float-divide-min-latency'
     Generate code for inline divides of floating-point values using the
     minimum latency algorithm.

'-minline-float-divide-max-throughput'
     Generate code for inline divides of floating-point values using the
     maximum throughput algorithm.

'-mno-inline-float-divide'
     Do not generate inline code for divides of floating-point values.

'-minline-int-divide-min-latency'
     Generate code for inline divides of integer values using the
     minimum latency algorithm.

'-minline-int-divide-max-throughput'
     Generate code for inline divides of integer values using the
     maximum throughput algorithm.

'-mno-inline-int-divide'
     Do not generate inline code for divides of integer values.

'-minline-sqrt-min-latency'
     Generate code for inline square roots using the minimum latency
     algorithm.

'-minline-sqrt-max-throughput'
     Generate code for inline square roots using the maximum throughput
     algorithm.

'-mno-inline-sqrt'
     Do not generate inline code for 'sqrt'.

'-mfused-madd'
'-mno-fused-madd'
     Do (don't) generate code that uses the fused multiply/add or
     multiply/subtract instructions.  The default is to use these
     instructions.

'-mno-dwarf2-asm'
'-mdwarf2-asm'
     Don't (or do) generate assembler code for the DWARF 2 line number
     debugging info.  This may be useful when not using the GNU
     assembler.

'-mearly-stop-bits'
'-mno-early-stop-bits'
     Allow stop bits to be placed earlier than immediately preceding the
     instruction that triggered the stop bit.  This can improve
     instruction scheduling, but does not always do so.

'-mfixed-range=REGISTER-RANGE'
     Generate code treating the given register range as fixed registers.
     A fixed register is one that the register allocator cannot use.
     This is useful when compiling kernel code.  A register range is
     specified as two registers separated by a dash.  Multiple register
     ranges can be specified separated by a comma.

'-mtls-size=TLS-SIZE'
     Specify bit size of immediate TLS offsets.  Valid values are 14,
     22, and 64.

'-mtune=CPU-TYPE'
     Tune the instruction scheduling for a particular CPU, Valid values
     are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'.

'-milp32'
'-mlp64'
     Generate code for a 32-bit or 64-bit environment.  The 32-bit
     environment sets int, long and pointer to 32 bits.  The 64-bit
     environment sets int to 32 bits and long and pointer to 64 bits.
     These are HP-UX specific flags.

'-mno-sched-br-data-spec'
'-msched-br-data-spec'
     (Dis/En)able data speculative scheduling before reload.  This
     results in generation of 'ld.a' instructions and the corresponding
     check instructions ('ld.c' / 'chk.a').  The default is 'disable'.

'-msched-ar-data-spec'
'-mno-sched-ar-data-spec'
     (En/Dis)able data speculative scheduling after reload.  This
     results in generation of 'ld.a' instructions and the corresponding
     check instructions ('ld.c' / 'chk.a').  The default is 'enable'.

'-mno-sched-control-spec'
'-msched-control-spec'
     (Dis/En)able control speculative scheduling.  This feature is
     available only during region scheduling (i.e. before reload).  This
     results in generation of the 'ld.s' instructions and the
     corresponding check instructions 'chk.s'.  The default is
     'disable'.

'-msched-br-in-data-spec'
'-mno-sched-br-in-data-spec'
     (En/Dis)able speculative scheduling of the instructions that are
     dependent on the data speculative loads before reload.  This is
     effective only with '-msched-br-data-spec' enabled.  The default is
     'enable'.

'-msched-ar-in-data-spec'
'-mno-sched-ar-in-data-spec'
     (En/Dis)able speculative scheduling of the instructions that are
     dependent on the data speculative loads after reload.  This is
     effective only with '-msched-ar-data-spec' enabled.  The default is
     'enable'.

'-msched-in-control-spec'
'-mno-sched-in-control-spec'
     (En/Dis)able speculative scheduling of the instructions that are
     dependent on the control speculative loads.  This is effective only
     with '-msched-control-spec' enabled.  The default is 'enable'.

'-mno-sched-prefer-non-data-spec-insns'
'-msched-prefer-non-data-spec-insns'
     If enabled, data-speculative instructions are chosen for schedule
     only if there are no other choices at the moment.  This makes the
     use of the data speculation much more conservative.  The default is
     'disable'.

'-mno-sched-prefer-non-control-spec-insns'
'-msched-prefer-non-control-spec-insns'
     If enabled, control-speculative instructions are chosen for
     schedule only if there are no other choices at the moment.  This
     makes the use of the control speculation much more conservative.
     The default is 'disable'.

'-mno-sched-count-spec-in-critical-path'
'-msched-count-spec-in-critical-path'
     If enabled, speculative dependencies are considered during
     computation of the instructions priorities.  This makes the use of
     the speculation a bit more conservative.  The default is 'disable'.

'-msched-spec-ldc'
     Use a simple data speculation check.  This option is on by default.

'-msched-control-spec-ldc'
     Use a simple check for control speculation.  This option is on by
     default.

'-msched-stop-bits-after-every-cycle'
     Place a stop bit after every cycle when scheduling.  This option is
     on by default.

'-msched-fp-mem-deps-zero-cost'
     Assume that floating-point stores and loads are not likely to cause
     a conflict when placed into the same instruction group.  This
     option is disabled by default.

'-msel-sched-dont-check-control-spec'
     Generate checks for control speculation in selective scheduling.
     This flag is disabled by default.

'-msched-max-memory-insns=MAX-INSNS'
     Limit on the number of memory insns per instruction group, giving
     lower priority to subsequent memory insns attempting to schedule in
     the same instruction group.  Frequently useful to prevent cache
     bank conflicts.  The default value is 1.

'-msched-max-memory-insns-hard-limit'
     Makes the limit specified by 'msched-max-memory-insns' a hard
     limit, disallowing more than that number in an instruction group.
     Otherwise, the limit is "soft", meaning that non-memory operations
     are preferred when the limit is reached, but memory operations may
     still be scheduled.


File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64 Options,  Up: Submodel Options

3.17.18 LM32 Options
--------------------

These '-m' options are defined for the LatticeMico32 architecture:

'-mbarrel-shift-enabled'
     Enable barrel-shift instructions.

'-mdivide-enabled'
     Enable divide and modulus instructions.

'-mmultiply-enabled'
     Enable multiply instructions.

'-msign-extend-enabled'
     Enable sign extend instructions.

'-muser-enabled'
     Enable user-defined instructions.


File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: LM32 Options,  Up: Submodel Options

3.17.19 M32C Options
--------------------

'-mcpu=NAME'
     Select the CPU for which code is generated.  NAME may be one of
     'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60)
     series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80
     series.

'-msim'
     Specifies that the program will be run on the simulator.  This
     causes an alternate runtime library to be linked in which supports,
     for example, file I/O.  You must not use this option when
     generating programs that will run on real hardware; you must
     provide your own runtime library for whatever I/O functions are
     needed.

'-memregs=NUMBER'
     Specifies the number of memory-based pseudo-registers GCC uses
     during code generation.  These pseudo-registers are used like real
     registers, so there is a tradeoff between GCC's ability to fit the
     code into available registers, and the performance penalty of using
     memory instead of registers.  Note that all modules in a program
     must be compiled with the same value for this option.  Because of
     that, you must not use this option with GCC's default runtime
     libraries.


File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options

3.17.20 M32R/D Options
----------------------

These '-m' options are defined for Renesas M32R/D architectures:

'-m32r2'
     Generate code for the M32R/2.

'-m32rx'
     Generate code for the M32R/X.

'-m32r'
     Generate code for the M32R.  This is the default.

'-mmodel=small'
     Assume all objects live in the lower 16MB of memory (so that their
     addresses can be loaded with the 'ld24' instruction), and assume
     all subroutines are reachable with the 'bl' instruction.  This is
     the default.

     The addressability of a particular object can be set with the
     'model' attribute.

'-mmodel=medium'
     Assume objects may be anywhere in the 32-bit address space (the
     compiler generates 'seth/add3' instructions to load their
     addresses), and assume all subroutines are reachable with the 'bl'
     instruction.

'-mmodel=large'
     Assume objects may be anywhere in the 32-bit address space (the
     compiler generates 'seth/add3' instructions to load their
     addresses), and assume subroutines may not be reachable with the
     'bl' instruction (the compiler generates the much slower
     'seth/add3/jl' instruction sequence).

'-msdata=none'
     Disable use of the small data area.  Variables are put into one of
     '.data', '.bss', or '.rodata' (unless the 'section' attribute has
     been specified).  This is the default.

     The small data area consists of sections '.sdata' and '.sbss'.
     Objects may be explicitly put in the small data area with the
     'section' attribute using one of these sections.

'-msdata=sdata'
     Put small global and static data in the small data area, but do not
     generate special code to reference them.

'-msdata=use'
     Put small global and static data in the small data area, and
     generate special instructions to reference them.

'-G NUM'
     Put global and static objects less than or equal to NUM bytes into
     the small data or BSS sections instead of the normal data or BSS
     sections.  The default value of NUM is 8.  The '-msdata' option
     must be set to one of 'sdata' or 'use' for this option to have any
     effect.

     All modules should be compiled with the same '-G NUM' value.
     Compiling with different values of NUM may or may not work; if it
     doesn't the linker gives an error message--incorrect code is not
     generated.

'-mdebug'
     Makes the M32R-specific code in the compiler display some
     statistics that might help in debugging programs.

'-malign-loops'
     Align all loops to a 32-byte boundary.

'-mno-align-loops'
     Do not enforce a 32-byte alignment for loops.  This is the default.

'-missue-rate=NUMBER'
     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.

'-mbranch-cost=NUMBER'
     NUMBER can only be 1 or 2.  If it is 1 then branches are preferred
     over conditional code, if it is 2, then the opposite applies.

'-mflush-trap=NUMBER'
     Specifies the trap number to use to flush the cache.  The default
     is 12.  Valid numbers are between 0 and 15 inclusive.

'-mno-flush-trap'
     Specifies that the cache cannot be flushed by using a trap.

'-mflush-func=NAME'
     Specifies the name of the operating system function to call to
     flush the cache.  The default is '_flush_cache', but a function
     call is only used if a trap is not available.

'-mno-flush-func'
     Indicates that there is no OS function for flushing the cache.


File: gcc.info,  Node: M680x0 Options,  Next: MCore Options,  Prev: M32R/D Options,  Up: Submodel Options

3.17.21 M680x0 Options
----------------------

These are the '-m' options defined for M680x0 and ColdFire processors.
The default settings depend on which architecture was selected when the
compiler was configured; the defaults for the most common choices are
given below.

'-march=ARCH'
     Generate code for a specific M680x0 or ColdFire instruction set
     architecture.  Permissible values of ARCH for M680x0 architectures
     are: '68000', '68010', '68020', '68030', '68040', '68060' and
     'cpu32'.  ColdFire architectures are selected according to
     Freescale's ISA classification and the permissible values are:
     'isaa', 'isaaplus', 'isab' and 'isac'.

     GCC defines a macro '__mcfARCH__' whenever it is generating code
     for a ColdFire target.  The ARCH in this macro is one of the
     '-march' arguments given above.

     When used together, '-march' and '-mtune' select code that runs on
     a family of similar processors but that is optimized for a
     particular microarchitecture.

'-mcpu=CPU'
     Generate code for a specific M680x0 or ColdFire processor.  The
     M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040',
     '68060', '68302', '68332' and 'cpu32'.  The ColdFire CPUs are given
     by the table below, which also classifies the CPUs into families:

     *Family*       *'-mcpu' arguments*
     '51'           '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg'
                    '51jm' '51mm' '51qe' '51qm'
     '5206'         '5202' '5204' '5206'
     '5206e'        '5206e'
     '5208'         '5207' '5208'
     '5211a'        '5210a' '5211a'
     '5213'         '5211' '5212' '5213'
     '5216'         '5214' '5216'
     '52235'        '52230' '52231' '52232' '52233' '52234' '52235'
     '5225'         '5224' '5225'
     '52259'        '52252' '52254' '52255' '52256' '52258' '52259'
     '5235'         '5232' '5233' '5234' '5235' '523x'
     '5249'         '5249'
     '5250'         '5250'
     '5271'         '5270' '5271'
     '5272'         '5272'
     '5275'         '5274' '5275'
     '5282'         '5280' '5281' '5282' '528x'
     '53017'        '53011' '53012' '53013' '53014' '53015' '53016' '53017'
     '5307'         '5307'
     '5329'         '5327' '5328' '5329' '532x'
     '5373'         '5372' '5373' '537x'
     '5407'         '5407'
     '5475'         '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480'
                    '5481' '5482' '5483' '5484' '5485'

     '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU.
     Other combinations of '-mcpu' and '-march' are rejected.

     GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is
     selected.  It also defines '__mcf_family_FAMILY', where the value
     of FAMILY is given by the table above.

'-mtune=TUNE'
     Tune the code for a particular microarchitecture within the
     constraints set by '-march' and '-mcpu'.  The M680x0
     microarchitectures are: '68000', '68010', '68020', '68030',
     '68040', '68060' and 'cpu32'.  The ColdFire microarchitectures are:
     'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'.

     You can also use '-mtune=68020-40' for code that needs to run
     relatively well on 68020, 68030 and 68040 targets.
     '-mtune=68020-60' is similar but includes 68060 targets as well.
     These two options select the same tuning decisions as '-m68020-40'
     and '-m68020-60' respectively.

     GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for
     680x0 architecture ARCH.  It also defines 'mcARCH' unless either
     '-ansi' or a non-GNU '-std' option is used.  If GCC is tuning for a
     range of architectures, as selected by '-mtune=68020-40' or
     '-mtune=68020-60', it defines the macros for every architecture in
     the range.

     GCC also defines the macro '__mUARCH__' when tuning for ColdFire
     microarchitecture UARCH, where UARCH is one of the arguments given
     above.

'-m68000'
'-mc68000'
     Generate output for a 68000.  This is the default when the compiler
     is configured for 68000-based systems.  It is equivalent to
     '-march=68000'.

     Use this option for microcontrollers with a 68000 or EC000 core,
     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.

'-m68010'
     Generate output for a 68010.  This is the default when the compiler
     is configured for 68010-based systems.  It is equivalent to
     '-march=68010'.

'-m68020'
'-mc68020'
     Generate output for a 68020.  This is the default when the compiler
     is configured for 68020-based systems.  It is equivalent to
     '-march=68020'.

'-m68030'
     Generate output for a 68030.  This is the default when the compiler
     is configured for 68030-based systems.  It is equivalent to
     '-march=68030'.

'-m68040'
     Generate output for a 68040.  This is the default when the compiler
     is configured for 68040-based systems.  It is equivalent to
     '-march=68040'.

     This option inhibits the use of 68881/68882 instructions that have
     to be emulated by software on the 68040.  Use this option if your
     68040 does not have code to emulate those instructions.

'-m68060'
     Generate output for a 68060.  This is the default when the compiler
     is configured for 68060-based systems.  It is equivalent to
     '-march=68060'.

     This option inhibits the use of 68020 and 68881/68882 instructions
     that have to be emulated by software on the 68060.  Use this option
     if your 68060 does not have code to emulate those instructions.

'-mcpu32'
     Generate output for a CPU32.  This is the default when the compiler
     is configured for CPU32-based systems.  It is equivalent to
     '-march=cpu32'.

     Use this option for microcontrollers with a CPU32 or CPU32+ core,
     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
     68341, 68349 and 68360.

'-m5200'
     Generate output for a 520X ColdFire CPU.  This is the default when
     the compiler is configured for 520X-based systems.  It is
     equivalent to '-mcpu=5206', and is now deprecated in favor of that
     option.

     Use this option for microcontroller with a 5200 core, including the
     MCF5202, MCF5203, MCF5204 and MCF5206.

'-m5206e'
     Generate output for a 5206e ColdFire CPU.  The option is now
     deprecated in favor of the equivalent '-mcpu=5206e'.

'-m528x'
     Generate output for a member of the ColdFire 528X family.  The
     option is now deprecated in favor of the equivalent '-mcpu=528x'.

'-m5307'
     Generate output for a ColdFire 5307 CPU.  The option is now
     deprecated in favor of the equivalent '-mcpu=5307'.

'-m5407'
     Generate output for a ColdFire 5407 CPU.  The option is now
     deprecated in favor of the equivalent '-mcpu=5407'.

'-mcfv4e'
     Generate output for a ColdFire V4e family CPU (e.g. 547x/548x).
     This includes use of hardware floating-point instructions.  The
     option is equivalent to '-mcpu=547x', and is now deprecated in
     favor of that option.

'-m68020-40'
     Generate output for a 68040, without using any of the new
     instructions.  This results in code that can run relatively
     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
     generated code does use the 68881 instructions that are emulated on
     the 68040.

     The option is equivalent to '-march=68020' '-mtune=68020-40'.

'-m68020-60'
     Generate output for a 68060, without using any of the new
     instructions.  This results in code that can run relatively
     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
     generated code does use the 68881 instructions that are emulated on
     the 68060.

     The option is equivalent to '-march=68020' '-mtune=68020-60'.

'-mhard-float'
'-m68881'
     Generate floating-point instructions.  This is the default for
     68020 and above, and for ColdFire devices that have an FPU.  It
     defines the macro '__HAVE_68881__' on M680x0 targets and
     '__mcffpu__' on ColdFire targets.

'-msoft-float'
     Do not generate floating-point instructions; use library calls
     instead.  This is the default for 68000, 68010, and 68832 targets.
     It is also the default for ColdFire devices that have no FPU.

'-mdiv'
'-mno-div'
     Generate (do not generate) ColdFire hardware divide and remainder
     instructions.  If '-march' is used without '-mcpu', the default is
     "on" for ColdFire architectures and "off" for M680x0 architectures.
     Otherwise, the default is taken from the target CPU (either the
     default CPU, or the one specified by '-mcpu').  For example, the
     default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'.

     GCC defines the macro '__mcfhwdiv__' when this option is enabled.

'-mshort'
     Consider type 'int' to be 16 bits wide, like 'short int'.
     Additionally, parameters passed on the stack are also aligned to a
     16-bit boundary even on targets whose API mandates promotion to
     32-bit.

'-mno-short'
     Do not consider type 'int' to be 16 bits wide.  This is the
     default.

'-mnobitfield'
'-mno-bitfield'
     Do not use the bit-field instructions.  The '-m68000', '-mcpu32'
     and '-m5200' options imply '-mnobitfield'.

'-mbitfield'
     Do use the bit-field instructions.  The '-m68020' option implies
     '-mbitfield'.  This is the default if you use a configuration
     designed for a 68020.

'-mrtd'
     Use a different function-calling convention, in which functions
     that take a fixed number of arguments return with the 'rtd'
     instruction, which pops their arguments while returning.  This
     saves one instruction in the caller since there is no need to pop
     the arguments there.

     This calling convention is incompatible with the one normally used
     on Unix, so you cannot use it if you need to call libraries
     compiled with the Unix compiler.

     Also, you must provide function prototypes for all functions that
     take variable numbers of arguments (including 'printf'); otherwise
     incorrect code is generated for calls to those functions.

     In addition, seriously incorrect code results if you call a
     function with too many arguments.  (Normally, extra arguments are
     harmlessly ignored.)

     The 'rtd' instruction is supported by the 68010, 68020, 68030,
     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.

'-mno-rtd'
     Do not use the calling conventions selected by '-mrtd'.  This is
     the default.

'-malign-int'
'-mno-align-int'
     Control whether GCC aligns 'int', 'long', 'long long', 'float',
     'double', and 'long double' variables on a 32-bit boundary
     ('-malign-int') or a 16-bit boundary ('-mno-align-int').  Aligning
     variables on 32-bit boundaries produces code that runs somewhat
     faster on processors with 32-bit busses at the expense of more
     memory.

     *Warning:* if you use the '-malign-int' switch, GCC aligns
     structures containing the above types differently than most
     published application binary interface specifications for the m68k.

'-mpcrel'
     Use the pc-relative addressing mode of the 68000 directly, instead
     of using a global offset table.  At present, this option implies
     '-fpic', allowing at most a 16-bit offset for pc-relative
     addressing.  '-fPIC' is not presently supported with '-mpcrel',
     though this could be supported for 68020 and higher processors.

'-mno-strict-align'
'-mstrict-align'
     Do not (do) assume that unaligned memory references are handled by
     the system.

'-msep-data'
     Generate code that allows the data segment to be located in a
     different area of memory from the text segment.  This allows for
     execute-in-place in an environment without virtual memory
     management.  This option implies '-fPIC'.

'-mno-sep-data'
     Generate code that assumes that the data segment follows the text
     segment.  This is the default.

'-mid-shared-library'
     Generate code that supports shared libraries via the library ID
     method.  This allows for execute-in-place and shared libraries in
     an environment without virtual memory management.  This option
     implies '-fPIC'.

'-mno-id-shared-library'
     Generate code that doesn't assume ID-based shared libraries are
     being used.  This is the default.

'-mshared-library-id=n'
     Specifies the identification number of the ID-based shared library
     being compiled.  Specifying a value of 0 generates more compact
     code; specifying other values forces the allocation of that number
     to the current library, but is no more space- or time-efficient
     than omitting this option.

'-mxgot'
'-mno-xgot'
     When generating position-independent code for ColdFire, generate
     code that works if the GOT has more than 8192 entries.  This code
     is larger and slower than code generated without this option.  On
     M680x0 processors, this option is not needed; '-fPIC' suffices.

     GCC normally uses a single instruction to load values from the GOT.
     While this is relatively efficient, it only works if the GOT is
     smaller than about 64k.  Anything larger causes the linker to
     report an error such as:

          relocation truncated to fit: R_68K_GOT16O foobar

     If this happens, you should recompile your code with '-mxgot'.  It
     should then work with very large GOTs.  However, code generated
     with '-mxgot' is less efficient, since it takes 4 instructions to
     fetch the value of a global symbol.

     Note that some linkers, including newer versions of the GNU linker,
     can create multiple GOTs and sort GOT entries.  If you have such a
     linker, you should only need to use '-mxgot' when compiling a
     single object file that accesses more than 8192 GOT entries.  Very
     few do.

     These options have no effect unless GCC is generating
     position-independent code.


File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M680x0 Options,  Up: Submodel Options

3.17.22 MCore Options
---------------------

These are the '-m' options defined for the Motorola M*Core processors.

'-mhardlit'
'-mno-hardlit'
     Inline constants into the code stream if it can be done in two
     instructions or less.

'-mdiv'
'-mno-div'
     Use the divide instruction.  (Enabled by default).

'-mrelax-immediate'
'-mno-relax-immediate'
     Allow arbitrary-sized immediates in bit operations.

'-mwide-bitfields'
'-mno-wide-bitfields'
     Always treat bit-fields as 'int'-sized.

'-m4byte-functions'
'-mno-4byte-functions'
     Force all functions to be aligned to a 4-byte boundary.

'-mcallgraph-data'
'-mno-callgraph-data'
     Emit callgraph information.

'-mslow-bytes'
'-mno-slow-bytes'
     Prefer word access when reading byte quantities.

'-mlittle-endian'
'-mbig-endian'
     Generate code for a little-endian target.

'-m210'
'-m340'
     Generate code for the 210 processor.

'-mno-lsim'
     Assume that runtime support has been provided and so omit the
     simulator library ('libsim.a)' from the linker command line.

'-mstack-increment=SIZE'
     Set the maximum amount for a single stack increment operation.
     Large values can increase the speed of programs that contain
     functions that need a large amount of stack space, but they can
     also trigger a segmentation fault if the stack is extended too
     much.  The default value is 0x1000.


File: gcc.info,  Node: MeP Options,  Next: MicroBlaze Options,  Prev: MCore Options,  Up: Submodel Options

3.17.23 MeP Options
-------------------

'-mabsdiff'
     Enables the 'abs' instruction, which is the absolute difference
     between two registers.

'-mall-opts'
     Enables all the optional instructions--average, multiply, divide,
     bit operations, leading zero, absolute difference, min/max, clip,
     and saturation.

'-maverage'
     Enables the 'ave' instruction, which computes the average of two
     registers.

'-mbased=N'
     Variables of size N bytes or smaller are placed in the '.based'
     section by default.  Based variables use the '$tp' register as a
     base register, and there is a 128-byte limit to the '.based'
     section.

'-mbitops'
     Enables the bit operation instructions--bit test ('btstm'), set
     ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set
     ('tas').

'-mc=NAME'
     Selects which section constant data is placed in.  NAME may be
     'tiny', 'near', or 'far'.

'-mclip'
     Enables the 'clip' instruction.  Note that '-mclip' is not useful
     unless you also provide '-mminmax'.

'-mconfig=NAME'
     Selects one of the built-in core configurations.  Each MeP chip has
     one or more modules in it; each module has a core CPU and a variety
     of coprocessors, optional instructions, and peripherals.  The
     'MeP-Integrator' tool, not part of GCC, provides these
     configurations through this option; using this option is the same
     as using all the corresponding command-line options.  The default
     configuration is 'default'.

'-mcop'
     Enables the coprocessor instructions.  By default, this is a 32-bit
     coprocessor.  Note that the coprocessor is normally enabled via the
     '-mconfig=' option.

'-mcop32'
     Enables the 32-bit coprocessor's instructions.

'-mcop64'
     Enables the 64-bit coprocessor's instructions.

'-mivc2'
     Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.

'-mdc'
     Causes constant variables to be placed in the '.near' section.

'-mdiv'
     Enables the 'div' and 'divu' instructions.

'-meb'
     Generate big-endian code.

'-mel'
     Generate little-endian code.

'-mio-volatile'
     Tells the compiler that any variable marked with the 'io' attribute
     is to be considered volatile.

'-ml'
     Causes variables to be assigned to the '.far' section by default.

'-mleadz'
     Enables the 'leadz' (leading zero) instruction.

'-mm'
     Causes variables to be assigned to the '.near' section by default.

'-mminmax'
     Enables the 'min' and 'max' instructions.

'-mmult'
     Enables the multiplication and multiply-accumulate instructions.

'-mno-opts'
     Disables all the optional instructions enabled by '-mall-opts'.

'-mrepeat'
     Enables the 'repeat' and 'erepeat' instructions, used for
     low-overhead looping.

'-ms'
     Causes all variables to default to the '.tiny' section.  Note that
     there is a 65536-byte limit to this section.  Accesses to these
     variables use the '%gp' base register.

'-msatur'
     Enables the saturation instructions.  Note that the compiler does
     not currently generate these itself, but this option is included
     for compatibility with other tools, like 'as'.

'-msdram'
     Link the SDRAM-based runtime instead of the default ROM-based
     runtime.

'-msim'
     Link the simulator run-time libraries.

'-msimnovec'
     Link the simulator runtime libraries, excluding built-in support
     for reset and exception vectors and tables.

'-mtf'
     Causes all functions to default to the '.far' section.  Without
     this option, functions default to the '.near' section.

'-mtiny=N'
     Variables that are N bytes or smaller are allocated to the '.tiny'
     section.  These variables use the '$gp' base register.  The default
     for this option is 4, but note that there's a 65536-byte limit to
     the '.tiny' section.


File: gcc.info,  Node: MicroBlaze Options,  Next: MIPS Options,  Prev: MeP Options,  Up: Submodel Options

3.17.24 MicroBlaze Options
--------------------------

'-msoft-float'
     Use software emulation for floating point (default).

'-mhard-float'
     Use hardware floating-point instructions.

'-mmemcpy'
     Do not optimize block moves, use 'memcpy'.

'-mno-clearbss'
     This option is deprecated.  Use '-fno-zero-initialized-in-bss'
     instead.

'-mcpu=CPU-TYPE'
     Use features of, and schedule code for, the given CPU. Supported
     values are in the format 'vX.YY.Z', where X is a major version, YY
     is the minor version, and Z is compatibility code.  Example values
     are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v5.00.b',
     'v6.00.a'.

'-mxl-soft-mul'
     Use software multiply emulation (default).

'-mxl-soft-div'
     Use software emulation for divides (default).

'-mxl-barrel-shift'
     Use the hardware barrel shifter.

'-mxl-pattern-compare'
     Use pattern compare instructions.

'-msmall-divides'
     Use table lookup optimization for small signed integer divisions.

'-mxl-stack-check'
     This option is deprecated.  Use '-fstack-check' instead.

'-mxl-gp-opt'
     Use GP-relative '.sdata'/'.sbss' sections.

'-mxl-multiply-high'
     Use multiply high instructions for high part of 32x32 multiply.

'-mxl-float-convert'
     Use hardware floating-point conversion instructions.

'-mxl-float-sqrt'
     Use hardware floating-point square root instruction.

'-mbig-endian'
     Generate code for a big-endian target.

'-mlittle-endian'
     Generate code for a little-endian target.

'-mxl-reorder'
     Use reorder instructions (swap and byte reversed load/store).

'-mxl-mode-APP-MODEL'
     Select application model APP-MODEL.  Valid models are
     'executable'
          normal executable (default), uses startup code 'crt0.o'.

     'xmdstub'
          for use with Xilinx Microprocessor Debugger (XMD) based
          software intrusive debug agent called xmdstub.  This uses
          startup file 'crt1.o' and sets the start address of the
          program to 0x800.

     'bootstrap'
          for applications that are loaded using a bootloader.  This
          model uses startup file 'crt2.o' which does not contain a
          processor reset vector handler.  This is suitable for
          transferring control on a processor reset to the bootloader
          rather than the application.

     'novectors'
          for applications that do not require any of the MicroBlaze
          vectors.  This option may be useful for applications running
          within a monitoring application.  This model uses 'crt3.o' as
          a startup file.

     Option '-xl-mode-APP-MODEL' is a deprecated alias for
     '-mxl-mode-APP-MODEL'.


File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MicroBlaze Options,  Up: Submodel Options

3.17.25 MIPS Options
--------------------

'-EB'
     Generate big-endian code.

'-EL'
     Generate little-endian code.  This is the default for 'mips*el-*-*'
     configurations.

'-march=ARCH'
     Generate code that runs on ARCH, which can be the name of a generic
     MIPS ISA, or the name of a particular processor.  The ISA names
     are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2',
     'mips32r3', 'mips32r5', 'mips32r6', 'mips64', 'mips64r2',
     'mips64r3', 'mips64r5' and 'mips64r6'.  The processor names are:
     '4kc', '4km', '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc',
     '5kf', '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1',
     '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc',
     '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1',
     '1004kf1_1', 'loongson2e', 'loongson2f', 'loongson3a', 'm4k',
     'm14k', 'm14kc', 'm14ke', 'm14kec', 'octeon', 'octeon+', 'octeon2',
     'octeon3', 'orion', 'p5600', 'r2000', 'r3000', 'r3900', 'r4000',
     'r4400', 'r4600', 'r4650', 'r4700', 'r6000', 'r8000', 'rm7000',
     'rm9000', 'r10000', 'r12000', 'r14000', 'r16000', 'sb1', 'sr71000',
     'vr4100', 'vr4111', 'vr4120', 'vr4130', 'vr4300', 'vr5000',
     'vr5400', 'vr5500', 'xlr' and 'xlp'.  The special value 'from-abi'
     selects the most compatible architecture for the selected ABI (that
     is, 'mips1' for 32-bit ABIs and 'mips3' for 64-bit ABIs).

     The native Linux/GNU toolchain also supports the value 'native',
     which selects the best architecture option for the host processor.
     '-march=native' has no effect if GCC does not recognize the
     processor.

     In processor names, a final '000' can be abbreviated as 'k' (for
     example, '-march=r2k').  Prefixes are optional, and 'vr' may be
     written 'r'.

     Names of the form 'Nf2_1' refer to processors with FPUs clocked at
     half the rate of the core, names of the form 'Nf1_1' refer to
     processors with FPUs clocked at the same rate as the core, and
     names of the form 'Nf3_2' refer to processors with FPUs clocked a
     ratio of 3:2 with respect to the core.  For compatibility reasons,
     'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are
     accepted as synonyms for 'Nf1_1'.

     GCC defines two macros based on the value of this option.  The
     first is '_MIPS_ARCH', which gives the name of target architecture,
     as a string.  The second has the form '_MIPS_ARCH_FOO', where FOO
     is the capitalized value of '_MIPS_ARCH'.  For example,
     '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro
     '_MIPS_ARCH_R2000'.

     Note that the '_MIPS_ARCH' macro uses the processor names given
     above.  In other words, it has the full prefix and does not
     abbreviate '000' as 'k'.  In the case of 'from-abi', the macro
     names the resolved architecture (either '"mips1"' or '"mips3"').
     It names the default architecture when no '-march' option is given.

'-mtune=ARCH'
     Optimize for ARCH.  Among other things, this option controls the
     way instructions are scheduled, and the perceived cost of
     arithmetic operations.  The list of ARCH values is the same as for
     '-march'.

     When this option is not used, GCC optimizes for the processor
     specified by '-march'.  By using '-march' and '-mtune' together, it
     is possible to generate code that runs on a family of processors,
     but optimize the code for one particular member of that family.

     '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO',
     which work in the same way as the '-march' ones described above.

'-mips1'
     Equivalent to '-march=mips1'.

'-mips2'
     Equivalent to '-march=mips2'.

'-mips3'
     Equivalent to '-march=mips3'.

'-mips4'
     Equivalent to '-march=mips4'.

'-mips32'
     Equivalent to '-march=mips32'.

'-mips32r3'
     Equivalent to '-march=mips32r3'.

'-mips32r5'
     Equivalent to '-march=mips32r5'.

'-mips32r6'
     Equivalent to '-march=mips32r6'.

'-mips64'
     Equivalent to '-march=mips64'.

'-mips64r2'
     Equivalent to '-march=mips64r2'.

'-mips64r3'
     Equivalent to '-march=mips64r3'.

'-mips64r5'
     Equivalent to '-march=mips64r5'.

'-mips64r6'
     Equivalent to '-march=mips64r6'.

'-mips16'
'-mno-mips16'
     Generate (do not generate) MIPS16 code.  If GCC is targeting a
     MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE.

     MIPS16 code generation can also be controlled on a per-function
     basis by means of 'mips16' and 'nomips16' attributes.  *Note
     Function Attributes::, for more information.

'-mflip-mips16'
     Generate MIPS16 code on alternating functions.  This option is
     provided for regression testing of mixed MIPS16/non-MIPS16 code
     generation, and is not intended for ordinary use in compiling user
     code.

'-minterlink-compressed'
'-mno-interlink-compressed'
     Require (do not require) that code using the standard
     (uncompressed) MIPS ISA be link-compatible with MIPS16 and
     microMIPS code, and vice versa.

     For example, code using the standard ISA encoding cannot jump
     directly to MIPS16 or microMIPS code; it must either use a call or
     an indirect jump.  '-minterlink-compressed' therefore disables
     direct jumps unless GCC knows that the target of the jump is not
     compressed.

'-minterlink-mips16'
'-mno-interlink-mips16'
     Aliases of '-minterlink-compressed' and
     '-mno-interlink-compressed'.  These options predate the microMIPS
     ASE and are retained for backwards compatibility.

'-mabi=32'
'-mabi=o64'
'-mabi=n32'
'-mabi=64'
'-mabi=eabi'
     Generate code for the given ABI.

     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
     generates 64-bit code when you select a 64-bit architecture, but
     you can use '-mgp32' to get 32-bit code instead.

     For information about the O64 ABI, see
     <http://gcc.gnu.org/projects/mipso64-abi.html>.

     GCC supports a variant of the o32 ABI in which floating-point
     registers are 64 rather than 32 bits wide.  You can select this
     combination with '-mabi=32' '-mfp64'.  This ABI relies on the
     'mthc1' and 'mfhc1' instructions and is therefore only supported
     for MIPS32R2, MIPS32R3 and MIPS32R5 processors.

     The register assignments for arguments and return values remain the
     same, but each scalar value is passed in a single 64-bit register
     rather than a pair of 32-bit registers.  For example, scalar
     floating-point values are returned in '$f0' only, not a '$f0'/'$f1'
     pair.  The set of call-saved registers also remains the same in
     that the even-numbered double-precision registers are saved.

     Two additional variants of the o32 ABI are supported to enable a
     transition from 32-bit to 64-bit registers.  These are FPXX
     ('-mfpxx') and FP64A ('-mfp64' '-mno-odd-spreg').  The FPXX
     extension mandates that all code must execute correctly when run
     using 32-bit or 64-bit registers.  The code can be interlinked with
     either FP32 or FP64, but not both.  The FP64A extension is similar
     to the FP64 extension but forbids the use of odd-numbered
     single-precision registers.  This can be used in conjunction with
     the 'FRE' mode of FPUs in MIPS32R5 processors and allows both FP32
     and FP64A code to interlink and run in the same process without
     changing FPU modes.

'-mabicalls'
'-mno-abicalls'
     Generate (do not generate) code that is suitable for SVR4-style
     dynamic objects.  '-mabicalls' is the default for SVR4-based
     systems.

'-mshared'
'-mno-shared'
     Generate (do not generate) code that is fully position-independent,
     and that can therefore be linked into shared libraries.  This
     option only affects '-mabicalls'.

     All '-mabicalls' code has traditionally been position-independent,
     regardless of options like '-fPIC' and '-fpic'.  However, as an
     extension, the GNU toolchain allows executables to use absolute
     accesses for locally-binding symbols.  It can also use shorter GP
     initialization sequences and generate direct calls to
     locally-defined functions.  This mode is selected by '-mno-shared'.

     '-mno-shared' depends on binutils 2.16 or higher and generates
     objects that can only be linked by the GNU linker.  However, the
     option does not affect the ABI of the final executable; it only
     affects the ABI of relocatable objects.  Using '-mno-shared'
     generally makes executables both smaller and quicker.

     '-mshared' is the default.

'-mplt'
'-mno-plt'
     Assume (do not assume) that the static and dynamic linkers support
     PLTs and copy relocations.  This option only affects '-mno-shared
     -mabicalls'.  For the n64 ABI, this option has no effect without
     '-msym32'.

     You can make '-mplt' the default by configuring GCC with
     '--with-mips-plt'.  The default is '-mno-plt' otherwise.

'-mxgot'
'-mno-xgot'
     Lift (do not lift) the usual restrictions on the size of the global
     offset table.

     GCC normally uses a single instruction to load values from the GOT.
     While this is relatively efficient, it only works if the GOT is
     smaller than about 64k.  Anything larger causes the linker to
     report an error such as:

          relocation truncated to fit: R_MIPS_GOT16 foobar

     If this happens, you should recompile your code with '-mxgot'.
     This works with very large GOTs, although the code is also less
     efficient, since it takes three instructions to fetch the value of
     a global symbol.

     Note that some linkers can create multiple GOTs.  If you have such
     a linker, you should only need to use '-mxgot' when a single object
     file accesses more than 64k's worth of GOT entries.  Very few do.

     These options have no effect unless GCC is generating position
     independent code.

'-mgp32'
     Assume that general-purpose registers are 32 bits wide.

'-mgp64'
     Assume that general-purpose registers are 64 bits wide.

'-mfp32'
     Assume that floating-point registers are 32 bits wide.

'-mfp64'
     Assume that floating-point registers are 64 bits wide.

'-mfpxx'
     Do not assume the width of floating-point registers.

'-mhard-float'
     Use floating-point coprocessor instructions.

'-msoft-float'
     Do not use floating-point coprocessor instructions.  Implement
     floating-point calculations using library calls instead.

'-mno-float'
     Equivalent to '-msoft-float', but additionally asserts that the
     program being compiled does not perform any floating-point
     operations.  This option is presently supported only by some
     bare-metal MIPS configurations, where it may select a special set
     of libraries that lack all floating-point support (including, for
     example, the floating-point 'printf' formats).  If code compiled
     with '-mno-float' accidentally contains floating-point operations,
     it is likely to suffer a link-time or run-time failure.

'-msingle-float'
     Assume that the floating-point coprocessor only supports
     single-precision operations.

'-mdouble-float'
     Assume that the floating-point coprocessor supports
     double-precision operations.  This is the default.

'-modd-spreg'
'-mno-odd-spreg'
     Enable the use of odd-numbered single-precision floating-point
     registers for the o32 ABI. This is the default for processors that
     are known to support these registers.  When using the o32 FPXX ABI,
     '-mno-odd-spreg' is set by default.

'-mabs=2008'
'-mabs=legacy'
     These options control the treatment of the special not-a-number
     (NaN) IEEE 754 floating-point data with the 'abs.fmt' and 'neg.fmt'
     machine instructions.

     By default or when '-mabs=legacy' is used the legacy treatment is
     selected.  In this case these instructions are considered
     arithmetic and avoided where correct operation is required and the
     input operand might be a NaN. A longer sequence of instructions
     that manipulate the sign bit of floating-point datum manually is
     used instead unless the '-ffinite-math-only' option has also been
     specified.

     The '-mabs=2008' option selects the IEEE 754-2008 treatment.  In
     this case these instructions are considered non-arithmetic and
     therefore operating correctly in all cases, including in particular
     where the input operand is a NaN. These instructions are therefore
     always used for the respective operations.

'-mnan=2008'
'-mnan=legacy'
     These options control the encoding of the special not-a-number
     (NaN) IEEE 754 floating-point data.

     The '-mnan=legacy' option selects the legacy encoding.  In this
     case quiet NaNs (qNaNs) are denoted by the first bit of their
     trailing significand field being 0, whereas signalling NaNs (sNaNs)
     are denoted by the first bit of their trailing significand field
     being 1.

     The '-mnan=2008' option selects the IEEE 754-2008 encoding.  In
     this case qNaNs are denoted by the first bit of their trailing
     significand field being 1, whereas sNaNs are denoted by the first
     bit of their trailing significand field being 0.

     The default is '-mnan=legacy' unless GCC has been configured with
     '--with-nan=2008'.

'-mllsc'
'-mno-llsc'
     Use (do not use) 'll', 'sc', and 'sync' instructions to implement
     atomic memory built-in functions.  When neither option is
     specified, GCC uses the instructions if the target architecture
     supports them.

     '-mllsc' is useful if the runtime environment can emulate the
     instructions and '-mno-llsc' can be useful when compiling for
     nonstandard ISAs.  You can make either option the default by
     configuring GCC with '--with-llsc' and '--without-llsc'
     respectively.  '--with-llsc' is the default for some
     configurations; see the installation documentation for details.

'-mdsp'
'-mno-dsp'
     Use (do not use) revision 1 of the MIPS DSP ASE.  *Note MIPS DSP
     Built-in Functions::.  This option defines the preprocessor macro
     '__mips_dsp'.  It also defines '__mips_dsp_rev' to 1.

'-mdspr2'
'-mno-dspr2'
     Use (do not use) revision 2 of the MIPS DSP ASE.  *Note MIPS DSP
     Built-in Functions::.  This option defines the preprocessor macros
     '__mips_dsp' and '__mips_dspr2'.  It also defines '__mips_dsp_rev'
     to 2.

'-msmartmips'
'-mno-smartmips'
     Use (do not use) the MIPS SmartMIPS ASE.

'-mpaired-single'
'-mno-paired-single'
     Use (do not use) paired-single floating-point instructions.  *Note
     MIPS Paired-Single Support::.  This option requires hardware
     floating-point support to be enabled.

'-mdmx'
'-mno-mdmx'
     Use (do not use) MIPS Digital Media Extension instructions.  This
     option can only be used when generating 64-bit code and requires
     hardware floating-point support to be enabled.

'-mips3d'
'-mno-mips3d'
     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
     Functions::.  The option '-mips3d' implies '-mpaired-single'.

'-mmicromips'
'-mno-micromips'
     Generate (do not generate) microMIPS code.

     MicroMIPS code generation can also be controlled on a per-function
     basis by means of 'micromips' and 'nomicromips' attributes.  *Note
     Function Attributes::, for more information.

'-mmt'
'-mno-mt'
     Use (do not use) MT Multithreading instructions.

'-mmcu'
'-mno-mcu'
     Use (do not use) the MIPS MCU ASE instructions.

'-meva'
'-mno-eva'
     Use (do not use) the MIPS Enhanced Virtual Addressing instructions.

'-mvirt'
'-mno-virt'
     Use (do not use) the MIPS Virtualization Application Specific
     instructions.

'-mxpa'
'-mno-xpa'
     Use (do not use) the MIPS eXtended Physical Address (XPA)
     instructions.

'-mlong64'
     Force 'long' types to be 64 bits wide.  See '-mlong32' for an
     explanation of the default and the way that the pointer size is
     determined.

'-mlong32'
     Force 'long', 'int', and pointer types to be 32 bits wide.

     The default size of 'int's, 'long's and pointers depends on the
     ABI.  All the supported ABIs use 32-bit 'int's.  The n64 ABI uses
     64-bit 'long's, as does the 64-bit EABI; the others use 32-bit
     'long's.  Pointers are the same size as 'long's, or the same size
     as integer registers, whichever is smaller.

'-msym32'
'-mno-sym32'
     Assume (do not assume) that all symbols have 32-bit values,
     regardless of the selected ABI.  This option is useful in
     combination with '-mabi=64' and '-mno-abicalls' because it allows
     GCC to generate shorter and faster references to symbolic
     addresses.

'-G NUM'
     Put definitions of externally-visible data in a small data section
     if that data is no bigger than NUM bytes.  GCC can then generate
     more efficient accesses to the data; see '-mgpopt' for details.

     The default '-G' option depends on the configuration.

'-mlocal-sdata'
'-mno-local-sdata'
     Extend (do not extend) the '-G' behavior to local data too, such as
     to static variables in C.  '-mlocal-sdata' is the default for all
     configurations.

     If the linker complains that an application is using too much small
     data, you might want to try rebuilding the less
     performance-critical parts with '-mno-local-sdata'.  You might also
     want to build large libraries with '-mno-local-sdata', so that the
     libraries leave more room for the main program.

'-mextern-sdata'
'-mno-extern-sdata'
     Assume (do not assume) that externally-defined data is in a small
     data section if the size of that data is within the '-G' limit.
     '-mextern-sdata' is the default for all configurations.

     If you compile a module MOD with '-mextern-sdata' '-G NUM'
     '-mgpopt', and MOD references a variable VAR that is no bigger than
     NUM bytes, you must make sure that VAR is placed in a small data
     section.  If VAR is defined by another module, you must either
     compile that module with a high-enough '-G' setting or attach a
     'section' attribute to VAR's definition.  If VAR is common, you
     must link the application with a high-enough '-G' setting.

     The easiest way of satisfying these restrictions is to compile and
     link every module with the same '-G' option.  However, you may wish
     to build a library that supports several different small data
     limits.  You can do this by compiling the library with the highest
     supported '-G' setting and additionally using '-mno-extern-sdata'
     to stop the library from making assumptions about
     externally-defined data.

'-mgpopt'
'-mno-gpopt'
     Use (do not use) GP-relative accesses for symbols that are known to
     be in a small data section; see '-G', '-mlocal-sdata' and
     '-mextern-sdata'.  '-mgpopt' is the default for all configurations.

     '-mno-gpopt' is useful for cases where the '$gp' register might not
     hold the value of '_gp'.  For example, if the code is part of a
     library that might be used in a boot monitor, programs that call
     boot monitor routines pass an unknown value in '$gp'.  (In such
     situations, the boot monitor itself is usually compiled with
     '-G0'.)

     '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'.

'-membedded-data'
'-mno-embedded-data'
     Allocate variables to the read-only data section first if possible,
     then next in the small data section if possible, otherwise in data.
     This gives slightly slower code than the default, but reduces the
     amount of RAM required when executing, and thus may be preferred
     for some embedded systems.

'-muninit-const-in-rodata'
'-mno-uninit-const-in-rodata'
     Put uninitialized 'const' variables in the read-only data section.
     This option is only meaningful in conjunction with
     '-membedded-data'.

'-mcode-readable=SETTING'
     Specify whether GCC may generate code that reads from executable
     sections.  There are three possible settings:

     '-mcode-readable=yes'
          Instructions may freely access executable sections.  This is
          the default setting.

     '-mcode-readable=pcrel'
          MIPS16 PC-relative load instructions can access executable
          sections, but other instructions must not do so.  This option
          is useful on 4KSc and 4KSd processors when the code TLBs have
          the Read Inhibit bit set.  It is also useful on processors
          that can be configured to have a dual instruction/data SRAM
          interface and that, like the M4K, automatically redirect
          PC-relative loads to the instruction RAM.

     '-mcode-readable=no'
          Instructions must not access executable sections.  This option
          can be useful on targets that are configured to have a dual
          instruction/data SRAM interface but that (unlike the M4K) do
          not automatically redirect PC-relative loads to the
          instruction RAM.

'-msplit-addresses'
'-mno-split-addresses'
     Enable (disable) use of the '%hi()' and '%lo()' assembler
     relocation operators.  This option has been superseded by
     '-mexplicit-relocs' but is retained for backwards compatibility.

'-mexplicit-relocs'
'-mno-explicit-relocs'
     Use (do not use) assembler relocation operators when dealing with
     symbolic addresses.  The alternative, selected by
     '-mno-explicit-relocs', is to use assembler macros instead.

     '-mexplicit-relocs' is the default if GCC was configured to use an
     assembler that supports relocation operators.

'-mcheck-zero-division'
'-mno-check-zero-division'
     Trap (do not trap) on integer division by zero.

     The default is '-mcheck-zero-division'.

'-mdivide-traps'
'-mdivide-breaks'
     MIPS systems check for division by zero by generating either a
     conditional trap or a break instruction.  Using traps results in
     smaller code, but is only supported on MIPS II and later.  Also,
     some versions of the Linux kernel have a bug that prevents trap
     from generating the proper signal ('SIGFPE').  Use '-mdivide-traps'
     to allow conditional traps on architectures that support them and
     '-mdivide-breaks' to force the use of breaks.

     The default is usually '-mdivide-traps', but this can be overridden
     at configure time using '--with-divide=breaks'.  Divide-by-zero
     checks can be completely disabled using '-mno-check-zero-division'.

'-mmemcpy'
'-mno-memcpy'
     Force (do not force) the use of 'memcpy' for non-trivial block
     moves.  The default is '-mno-memcpy', which allows GCC to inline
     most constant-sized copies.

'-mlong-calls'
'-mno-long-calls'
     Disable (do not disable) use of the 'jal' instruction.  Calling
     functions using 'jal' is more efficient but requires the caller and
     callee to be in the same 256 megabyte segment.

     This option has no effect on abicalls code.  The default is
     '-mno-long-calls'.

'-mmad'
'-mno-mad'
     Enable (disable) use of the 'mad', 'madu' and 'mul' instructions,
     as provided by the R4650 ISA.

'-mimadd'
'-mno-imadd'
     Enable (disable) use of the 'madd' and 'msub' integer instructions.
     The default is '-mimadd' on architectures that support 'madd' and
     'msub' except for the 74k architecture where it was found to
     generate slower code.

'-mfused-madd'
'-mno-fused-madd'
     Enable (disable) use of the floating-point multiply-accumulate
     instructions, when they are available.  The default is
     '-mfused-madd'.

     On the R8000 CPU when multiply-accumulate instructions are used,
     the intermediate product is calculated to infinite precision and is
     not subject to the FCSR Flush to Zero bit.  This may be undesirable
     in some circumstances.  On other processors the result is
     numerically identical to the equivalent computation using separate
     multiply, add, subtract and negate instructions.

'-nocpp'
     Tell the MIPS assembler to not run its preprocessor over user
     assembler files (with a '.s' suffix) when assembling them.

'-mfix-24k'
'-mno-fix-24k'
     Work around the 24K E48 (lost data on stores during refill) errata.
     The workarounds are implemented by the assembler rather than by
     GCC.

'-mfix-r4000'
'-mno-fix-r4000'
     Work around certain R4000 CPU errata:
        - A double-word or a variable shift may give an incorrect result
          if executed immediately after starting an integer division.
        - A double-word or a variable shift may give an incorrect result
          if executed while an integer multiplication is in progress.
        - An integer division may give an incorrect result if started in
          a delay slot of a taken branch or a jump.

'-mfix-r4400'
'-mno-fix-r4400'
     Work around certain R4400 CPU errata:
        - A double-word or a variable shift may give an incorrect result
          if executed immediately after starting an integer division.

'-mfix-r10000'
'-mno-fix-r10000'
     Work around certain R10000 errata:
        - 'll'/'sc' sequences may not behave atomically on revisions
          prior to 3.0.  They may deadlock on revisions 2.6 and earlier.

     This option can only be used if the target architecture supports
     branch-likely instructions.  '-mfix-r10000' is the default when
     '-march=r10000' is used; '-mno-fix-r10000' is the default
     otherwise.

'-mfix-rm7000'
'-mno-fix-rm7000'
     Work around the RM7000 'dmult'/'dmultu' errata.  The workarounds
     are implemented by the assembler rather than by GCC.

'-mfix-vr4120'
'-mno-fix-vr4120'
     Work around certain VR4120 errata:
        - 'dmultu' does not always produce the correct result.
        - 'div' and 'ddiv' do not always produce the correct result if
          one of the operands is negative.
     The workarounds for the division errata rely on special functions
     in 'libgcc.a'.  At present, these functions are only provided by
     the 'mips64vr*-elf' configurations.

     Other VR4120 errata require a NOP to be inserted between certain
     pairs of instructions.  These errata are handled by the assembler,
     not by GCC itself.

'-mfix-vr4130'
     Work around the VR4130 'mflo'/'mfhi' errata.  The workarounds are
     implemented by the assembler rather than by GCC, although GCC
     avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi',
     'dmacc' and 'dmacchi' instructions are available instead.

'-mfix-sb1'
'-mno-fix-sb1'
     Work around certain SB-1 CPU core errata.  (This flag currently
     works around the SB-1 revision 2 "F1" and "F2" floating-point
     errata.)

'-mr10k-cache-barrier=SETTING'
     Specify whether GCC should insert cache barriers to avoid the
     side-effects of speculation on R10K processors.

     In common with many processors, the R10K tries to predict the
     outcome of a conditional branch and speculatively executes
     instructions from the "taken" branch.  It later aborts these
     instructions if the predicted outcome is wrong.  However, on the
     R10K, even aborted instructions can have side effects.

     This problem only affects kernel stores and, depending on the
     system, kernel loads.  As an example, a speculatively-executed
     store may load the target memory into cache and mark the cache line
     as dirty, even if the store itself is later aborted.  If a DMA
     operation writes to the same area of memory before the "dirty" line
     is flushed, the cached data overwrites the DMA-ed data.  See the
     R10K processor manual for a full description, including other
     potential problems.

     One workaround is to insert cache barrier instructions before every
     memory access that might be speculatively executed and that might
     have side effects even if aborted.  '-mr10k-cache-barrier=SETTING'
     controls GCC's implementation of this workaround.  It assumes that
     aborted accesses to any byte in the following regions does not have
     side effects:

       1. the memory occupied by the current function's stack frame;

       2. the memory occupied by an incoming stack argument;

       3. the memory occupied by an object with a link-time-constant
          address.

     It is the kernel's responsibility to ensure that speculative
     accesses to these regions are indeed safe.

     If the input program contains a function declaration such as:

          void foo (void);

     then the implementation of 'foo' must allow 'j foo' and 'jal foo'
     to be executed speculatively.  GCC honors this restriction for
     functions it compiles itself.  It expects non-GCC functions (such
     as hand-written assembly code) to do the same.

     The option has three forms:

     '-mr10k-cache-barrier=load-store'
          Insert a cache barrier before a load or store that might be
          speculatively executed and that might have side effects even
          if aborted.

     '-mr10k-cache-barrier=store'
          Insert a cache barrier before a store that might be
          speculatively executed and that might have side effects even
          if aborted.

     '-mr10k-cache-barrier=none'
          Disable the insertion of cache barriers.  This is the default
          setting.

'-mflush-func=FUNC'
'-mno-flush-func'
     Specifies the function to call to flush the I and D caches, or to
     not call any such function.  If called, the function must take the
     same arguments as the common '_flush_func', that is, the address of
     the memory range for which the cache is being flushed, the size of
     the memory range, and the number 3 (to flush both caches).  The
     default depends on the target GCC was configured for, but commonly
     is either '_flush_func' or '__cpu_flush'.

'mbranch-cost=NUM'
     Set the cost of branches to roughly NUM "simple" instructions.
     This cost is only a heuristic and is not guaranteed to produce
     consistent results across releases.  A zero cost redundantly
     selects the default, which is based on the '-mtune' setting.

'-mbranch-likely'
'-mno-branch-likely'
     Enable or disable use of Branch Likely instructions, regardless of
     the default for the selected architecture.  By default, Branch
     Likely instructions may be generated if they are supported by the
     selected architecture.  An exception is for the MIPS32 and MIPS64
     architectures and processors that implement those architectures;
     for those, Branch Likely instructions are not be generated by
     default because the MIPS32 and MIPS64 architectures specifically
     deprecate their use.

'-mfp-exceptions'
'-mno-fp-exceptions'
     Specifies whether FP exceptions are enabled.  This affects how FP
     instructions are scheduled for some processors.  The default is
     that FP exceptions are enabled.

     For instance, on the SB-1, if FP exceptions are disabled, and we
     are emitting 64-bit code, then we can use both FP pipes.
     Otherwise, we can only use one FP pipe.

'-mvr4130-align'
'-mno-vr4130-align'
     The VR4130 pipeline is two-way superscalar, but can only issue two
     instructions together if the first one is 8-byte aligned.  When
     this option is enabled, GCC aligns pairs of instructions that it
     thinks should execute in parallel.

     This option only has an effect when optimizing for the VR4130.  It
     normally makes code faster, but at the expense of making it bigger.
     It is enabled by default at optimization level '-O3'.

'-msynci'
'-mno-synci'
     Enable (disable) generation of 'synci' instructions on
     architectures that support it.  The 'synci' instructions (if
     enabled) are generated when '__builtin___clear_cache' is compiled.

     This option defaults to '-mno-synci', but the default can be
     overridden by configuring GCC with '--with-synci'.

     When compiling code for single processor systems, it is generally
     safe to use 'synci'.  However, on many multi-core (SMP) systems, it
     does not invalidate the instruction caches on all cores and may
     lead to undefined behavior.

'-mrelax-pic-calls'
'-mno-relax-pic-calls'
     Try to turn PIC calls that are normally dispatched via register
     '$25' into direct calls.  This is only possible if the linker can
     resolve the destination at link-time and if the destination is
     within range for a direct call.

     '-mrelax-pic-calls' is the default if GCC was configured to use an
     assembler and a linker that support the '.reloc' assembly directive
     and '-mexplicit-relocs' is in effect.  With '-mno-explicit-relocs',
     this optimization can be performed by the assembler and the linker
     alone without help from the compiler.

'-mmcount-ra-address'
'-mno-mcount-ra-address'
     Emit (do not emit) code that allows '_mcount' to modify the calling
     function's return address.  When enabled, this option extends the
     usual '_mcount' interface with a new RA-ADDRESS parameter, which
     has type 'intptr_t *' and is passed in register '$12'.  '_mcount'
     can then modify the return address by doing both of the following:
        * Returning the new address in register '$31'.
        * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is
          nonnull.

     The default is '-mno-mcount-ra-address'.


File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options

3.17.26 MMIX Options
--------------------

These options are defined for the MMIX:

'-mlibfuncs'
'-mno-libfuncs'
     Specify that intrinsic library functions are being compiled,
     passing all values in registers, no matter the size.

'-mepsilon'
'-mno-epsilon'
     Generate floating-point comparison instructions that compare with
     respect to the 'rE' epsilon register.

'-mabi=mmixware'
'-mabi=gnu'
     Generate code that passes function parameters and return values
     that (in the called function) are seen as registers '$0' and up, as
     opposed to the GNU ABI which uses global registers '$231' and up.

'-mzero-extend'
'-mno-zero-extend'
     When reading data from memory in sizes shorter than 64 bits, use
     (do not use) zero-extending load instructions by default, rather
     than sign-extending ones.

'-mknuthdiv'
'-mno-knuthdiv'
     Make the result of a division yielding a remainder have the same
     sign as the divisor.  With the default, '-mno-knuthdiv', the sign
     of the remainder follows the sign of the dividend.  Both methods
     are arithmetically valid, the latter being almost exclusively used.

'-mtoplevel-symbols'
'-mno-toplevel-symbols'
     Prepend (do not prepend) a ':' to all global symbols, so the
     assembly code can be used with the 'PREFIX' assembly directive.

'-melf'
     Generate an executable in the ELF format, rather than the default
     'mmo' format used by the 'mmix' simulator.

'-mbranch-predict'
'-mno-branch-predict'
     Use (do not use) the probable-branch instructions, when static
     branch prediction indicates a probable branch.

'-mbase-addresses'
'-mno-base-addresses'
     Generate (do not generate) code that uses _base addresses_.  Using
     a base address automatically generates a request (handled by the
     assembler and the linker) for a constant to be set up in a global
     register.  The register is used for one or more base address
     requests within the range 0 to 255 from the value held in the
     register.  The generally leads to short and fast code, but the
     number of different data items that can be addressed is limited.
     This means that a program that uses lots of static data may require
     '-mno-base-addresses'.

'-msingle-exit'
'-mno-single-exit'
     Force (do not force) generated code to have a single exit point in
     each function.


File: gcc.info,  Node: MN10300 Options,  Next: Moxie Options,  Prev: MMIX Options,  Up: Submodel Options

3.17.27 MN10300 Options
-----------------------

These '-m' options are defined for Matsushita MN10300 architectures:

'-mmult-bug'
     Generate code to avoid bugs in the multiply instructions for the
     MN10300 processors.  This is the default.

'-mno-mult-bug'
     Do not generate code to avoid bugs in the multiply instructions for
     the MN10300 processors.

'-mam33'
     Generate code using features specific to the AM33 processor.

'-mno-am33'
     Do not generate code using features specific to the AM33 processor.
     This is the default.

'-mam33-2'
     Generate code using features specific to the AM33/2.0 processor.

'-mam34'
     Generate code using features specific to the AM34 processor.

'-mtune=CPU-TYPE'
     Use the timing characteristics of the indicated CPU type when
     scheduling instructions.  This does not change the targeted
     processor type.  The CPU type must be one of 'mn10300', 'am33',
     'am33-2' or 'am34'.

'-mreturn-pointer-on-d0'
     When generating a function that returns a pointer, return the
     pointer in both 'a0' and 'd0'.  Otherwise, the pointer is returned
     only in 'a0', and attempts to call such functions without a
     prototype result in errors.  Note that this option is on by
     default; use '-mno-return-pointer-on-d0' to disable it.

'-mno-crt0'
     Do not link in the C run-time initialization object file.

'-mrelax'
     Indicate to the linker that it should perform a relaxation
     optimization pass to shorten branches, calls and absolute memory
     addresses.  This option only has an effect when used on the command
     line for the final link step.

     This option makes symbolic debugging impossible.

'-mliw'
     Allow the compiler to generate _Long Instruction Word_ instructions
     if the target is the 'AM33' or later.  This is the default.  This
     option defines the preprocessor macro '__LIW__'.

'-mnoliw'
     Do not allow the compiler to generate _Long Instruction Word_
     instructions.  This option defines the preprocessor macro
     '__NO_LIW__'.

'-msetlb'
     Allow the compiler to generate the _SETLB_ and _Lcc_ instructions
     if the target is the 'AM33' or later.  This is the default.  This
     option defines the preprocessor macro '__SETLB__'.

'-mnosetlb'
     Do not allow the compiler to generate _SETLB_ or _Lcc_
     instructions.  This option defines the preprocessor macro
     '__NO_SETLB__'.


File: gcc.info,  Node: Moxie Options,  Next: MSP430 Options,  Prev: MN10300 Options,  Up: Submodel Options

3.17.28 Moxie Options
---------------------

'-meb'
     Generate big-endian code.  This is the default for 'moxie-*-*'
     configurations.

'-mel'
     Generate little-endian code.

'-mmul.x'
     Generate mul.x and umul.x instructions.  This is the default for
     'moxiebox-*-*' configurations.

'-mno-crt0'
     Do not link in the C run-time initialization object file.


File: gcc.info,  Node: MSP430 Options,  Next: NDS32 Options,  Prev: Moxie Options,  Up: Submodel Options

3.17.29 MSP430 Options
----------------------

These options are defined for the MSP430:

'-masm-hex'
     Force assembly output to always use hex constants.  Normally such
     constants are signed decimals, but this option is available for
     testsuite and/or aesthetic purposes.

'-mmcu='
     Select the MCU to target.  This is used to create a C preprocessor
     symbol based upon the MCU name, converted to upper case and pre-
     and post-fixed with '__'.  This in turn is used by the 'msp430.h'
     header file to select an MCU-specific supplementary header file.

     The option also sets the ISA to use.  If the MCU name is one that
     is known to only support the 430 ISA then that is selected,
     otherwise the 430X ISA is selected.  A generic MCU name of 'msp430'
     can also be used to select the 430 ISA. Similarly the generic
     'msp430x' MCU name selects the 430X ISA.

     In addition an MCU-specific linker script is added to the linker
     command line.  The script's name is the name of the MCU with '.ld'
     appended.  Thus specifying '-mmcu=xxx' on the 'gcc' command line
     defines the C preprocessor symbol '__XXX__' and cause the linker to
     search for a script called 'xxx.ld'.

     This option is also passed on to the assembler.

'-mcpu='
     Specifies the ISA to use.  Accepted values are 'msp430', 'msp430x'
     and 'msp430xv2'.  This option is deprecated.  The '-mmcu=' option
     should be used to select the ISA.

'-msim'
     Link to the simulator runtime libraries and linker script.
     Overrides any scripts that would be selected by the '-mmcu='
     option.

'-mlarge'
     Use large-model addressing (20-bit pointers, 32-bit 'size_t').

'-msmall'
     Use small-model addressing (16-bit pointers, 16-bit 'size_t').

'-mrelax'
     This option is passed to the assembler and linker, and allows the
     linker to perform certain optimizations that cannot be done until
     the final link.

'mhwmult='
     Describes the type of hardware multiply supported by the target.
     Accepted values are 'none' for no hardware multiply, '16bit' for
     the original 16-bit-only multiply supported by early MCUs.  '32bit'
     for the 16/32-bit multiply supported by later MCUs and 'f5series'
     for the 16/32-bit multiply supported by F5-series MCUs.  A value of
     'auto' can also be given.  This tells GCC to deduce the hardware
     multiply support based upon the MCU name provided by the '-mmcu'
     option.  If no '-mmcu' option is specified then '32bit' hardware
     multiply support is assumed.  'auto' is the default setting.

     Hardware multiplies are normally performed by calling a library
     routine.  This saves space in the generated code.  When compiling
     at '-O3' or higher however the hardware multiplier is invoked
     inline.  This makes for bigger, but faster code.

     The hardware multiply routines disable interrupts whilst running
     and restore the previous interrupt state when they finish.  This
     makes them safe to use inside interrupt handlers as well as in
     normal code.

'-minrt'
     Enable the use of a minimum runtime environment - no static
     initializers or constructors.  This is intended for
     memory-constrained devices.  The compiler includes special symbols
     in some objects that tell the linker and runtime which code
     fragments are required.


File: gcc.info,  Node: NDS32 Options,  Next: Nios II Options,  Prev: MSP430 Options,  Up: Submodel Options

3.17.30 NDS32 Options
---------------------

These options are defined for NDS32 implementations:

'-mbig-endian'
     Generate code in big-endian mode.

'-mlittle-endian'
     Generate code in little-endian mode.

'-mreduced-regs'
     Use reduced-set registers for register allocation.

'-mfull-regs'
     Use full-set registers for register allocation.

'-mcmov'
     Generate conditional move instructions.

'-mno-cmov'
     Do not generate conditional move instructions.

'-mperf-ext'
     Generate performance extension instructions.

'-mno-perf-ext'
     Do not generate performance extension instructions.

'-mv3push'
     Generate v3 push25/pop25 instructions.

'-mno-v3push'
     Do not generate v3 push25/pop25 instructions.

'-m16-bit'
     Generate 16-bit instructions.

'-mno-16-bit'
     Do not generate 16-bit instructions.

'-misr-vector-size=NUM'
     Specify the size of each interrupt vector, which must be 4 or 16.

'-mcache-block-size=NUM'
     Specify the size of each cache block, which must be a power of 2
     between 4 and 512.

'-march=ARCH'
     Specify the name of the target architecture.

'-mcmodel=CODE-MODEL'
     Set the code model to one of
     'small'
          All the data and read-only data segments must be within 512KB
          addressing space.  The text segment must be within 16MB
          addressing space.
     'medium'
          The data segment must be within 512KB while the read-only data
          segment can be within 4GB addressing space.  The text segment
          should be still within 16MB addressing space.
     'large'
          All the text and data segments can be within 4GB addressing
          space.

'-mctor-dtor'
     Enable constructor/destructor feature.

'-mrelax'
     Guide linker to relax instructions.


File: gcc.info,  Node: Nios II Options,  Next: Nvidia PTX Options,  Prev: NDS32 Options,  Up: Submodel Options

3.17.31 Nios II Options
-----------------------

These are the options defined for the Altera Nios II processor.

'-G NUM'
     Put global and static objects less than or equal to NUM bytes into
     the small data or BSS sections instead of the normal data or BSS
     sections.  The default value of NUM is 8.

'-mgpopt=OPTION'
'-mgpopt'
'-mno-gpopt'
     Generate (do not generate) GP-relative accesses.  The following
     OPTION names are recognized:

     'none'
          Do not generate GP-relative accesses.

     'local'
          Generate GP-relative accesses for small data objects that are
          not external or weak.  Also use GP-relative addressing for
          objects that have been explicitly placed in a small data
          section via a 'section' attribute.

     'global'
          As for 'local', but also generate GP-relative accesses for
          small data objects that are external or weak.  If you use this
          option, you must ensure that all parts of your program
          (including libraries) are compiled with the same '-G' setting.

     'data'
          Generate GP-relative accesses for all data objects in the
          program.  If you use this option, the entire data and BSS
          segments of your program must fit in 64K of memory and you
          must use an appropriate linker script to allocate them within
          the addressible range of the global pointer.

     'all'
          Generate GP-relative addresses for function pointers as well
          as data pointers.  If you use this option, the entire text,
          data, and BSS segments of your program must fit in 64K of
          memory and you must use an appropriate linker script to
          allocate them within the addressible range of the global
          pointer.

     '-mgpopt' is equivalent to '-mgpopt=local', and '-mno-gpopt' is
     equivalent to '-mgpopt=none'.

     The default is '-mgpopt' except when '-fpic' or '-fPIC' is
     specified to generate position-independent code.  Note that the
     Nios II ABI does not permit GP-relative accesses from shared
     libraries.

     You may need to specify '-mno-gpopt' explicitly when building
     programs that include large amounts of small data, including large
     GOT data sections.  In this case, the 16-bit offset for GP-relative
     addressing may not be large enough to allow access to the entire
     small data section.

'-mel'
'-meb'
     Generate little-endian (default) or big-endian (experimental) code,
     respectively.

'-mbypass-cache'
'-mno-bypass-cache'
     Force all load and store instructions to always bypass cache by
     using I/O variants of the instructions.  The default is not to
     bypass the cache.

'-mno-cache-volatile'
'-mcache-volatile'
     Volatile memory access bypass the cache using the I/O variants of
     the load and store instructions.  The default is not to bypass the
     cache.

'-mno-fast-sw-div'
'-mfast-sw-div'
     Do not use table-based fast divide for small numbers.  The default
     is to use the fast divide at '-O3' and above.

'-mno-hw-mul'
'-mhw-mul'
'-mno-hw-mulx'
'-mhw-mulx'
'-mno-hw-div'
'-mhw-div'
     Enable or disable emitting 'mul', 'mulx' and 'div' family of
     instructions by the compiler.  The default is to emit 'mul' and not
     emit 'div' and 'mulx'.

'-mcustom-INSN=N'
'-mno-custom-INSN'
     Each '-mcustom-INSN=N' option enables use of a custom instruction
     with encoding N when generating code that uses INSN.  For example,
     '-mcustom-fadds=253' generates custom instruction 253 for
     single-precision floating-point add operations instead of the
     default behavior of using a library call.

     The following values of INSN are supported.  Except as otherwise
     noted, floating-point operations are expected to be implemented
     with normal IEEE 754 semantics and correspond directly to the C
     operators or the equivalent GCC built-in functions (*note Other
     Builtins::).

     Single-precision floating point:

     'fadds', 'fsubs', 'fdivs', 'fmuls'
          Binary arithmetic operations.

     'fnegs'
          Unary negation.

     'fabss'
          Unary absolute value.

     'fcmpeqs', 'fcmpges', 'fcmpgts', 'fcmples', 'fcmplts', 'fcmpnes'
          Comparison operations.

     'fmins', 'fmaxs'
          Floating-point minimum and maximum.  These instructions are
          only generated if '-ffinite-math-only' is specified.

     'fsqrts'
          Unary square root operation.

     'fcoss', 'fsins', 'ftans', 'fatans', 'fexps', 'flogs'
          Floating-point trigonometric and exponential functions.  These
          instructions are only generated if
          '-funsafe-math-optimizations' is also specified.

     Double-precision floating point:

     'faddd', 'fsubd', 'fdivd', 'fmuld'
          Binary arithmetic operations.

     'fnegd'
          Unary negation.

     'fabsd'
          Unary absolute value.

     'fcmpeqd', 'fcmpged', 'fcmpgtd', 'fcmpled', 'fcmpltd', 'fcmpned'
          Comparison operations.

     'fmind', 'fmaxd'
          Double-precision minimum and maximum.  These instructions are
          only generated if '-ffinite-math-only' is specified.

     'fsqrtd'
          Unary square root operation.

     'fcosd', 'fsind', 'ftand', 'fatand', 'fexpd', 'flogd'
          Double-precision trigonometric and exponential functions.
          These instructions are only generated if
          '-funsafe-math-optimizations' is also specified.

     Conversions:
     'fextsd'
          Conversion from single precision to double precision.

     'ftruncds'
          Conversion from double precision to single precision.

     'fixsi', 'fixsu', 'fixdi', 'fixdu'
          Conversion from floating point to signed or unsigned integer
          types, with truncation towards zero.

     'round'
          Conversion from single-precision floating point to signed
          integer, rounding to the nearest integer and ties away from
          zero.  This corresponds to the '__builtin_lroundf' function
          when '-fno-math-errno' is used.

     'floatis', 'floatus', 'floatid', 'floatud'
          Conversion from signed or unsigned integer types to
          floating-point types.

     In addition, all of the following transfer instructions for
     internal registers X and Y must be provided to use any of the
     double-precision floating-point instructions.  Custom instructions
     taking two double-precision source operands expect the first
     operand in the 64-bit register X. The other operand (or only
     operand of a unary operation) is given to the custom arithmetic
     instruction with the least significant half in source register SRC1
     and the most significant half in SRC2.  A custom instruction that
     returns a double-precision result returns the most significant 32
     bits in the destination register and the other half in 32-bit
     register Y. GCC automatically generates the necessary code
     sequences to write register X and/or read register Y when
     double-precision floating-point instructions are used.

     'fwrx'
          Write SRC1 into the least significant half of X and SRC2 into
          the most significant half of X.

     'fwry'
          Write SRC1 into Y.

     'frdxhi', 'frdxlo'
          Read the most or least (respectively) significant half of X
          and store it in DEST.

     'frdy'
          Read the value of Y and store it into DEST.

     Note that you can gain more local control over generation of Nios
     II custom instructions by using the 'target("custom-INSN=N")' and
     'target("no-custom-INSN")' function attributes (*note Function
     Attributes::) or pragmas (*note Function Specific Option
     Pragmas::).

'-mcustom-fpu-cfg=NAME'

     This option enables a predefined, named set of custom instruction
     encodings (see '-mcustom-INSN' above).  Currently, the following
     sets are defined:

     '-mcustom-fpu-cfg=60-1' is equivalent to:
          -mcustom-fmuls=252
          -mcustom-fadds=253
          -mcustom-fsubs=254
          -fsingle-precision-constant

     '-mcustom-fpu-cfg=60-2' is equivalent to:
          -mcustom-fmuls=252
          -mcustom-fadds=253
          -mcustom-fsubs=254
          -mcustom-fdivs=255
          -fsingle-precision-constant

     '-mcustom-fpu-cfg=72-3' is equivalent to:
          -mcustom-floatus=243
          -mcustom-fixsi=244
          -mcustom-floatis=245
          -mcustom-fcmpgts=246
          -mcustom-fcmples=249
          -mcustom-fcmpeqs=250
          -mcustom-fcmpnes=251
          -mcustom-fmuls=252
          -mcustom-fadds=253
          -mcustom-fsubs=254
          -mcustom-fdivs=255
          -fsingle-precision-constant

     Custom instruction assignments given by individual '-mcustom-INSN='
     options override those given by '-mcustom-fpu-cfg=', regardless of
     the order of the options on the command line.

     Note that you can gain more local control over selection of a FPU
     configuration by using the 'target("custom-fpu-cfg=NAME")' function
     attribute (*note Function Attributes::) or pragma (*note Function
     Specific Option Pragmas::).

 These additional '-m' options are available for the Altera Nios II ELF
(bare-metal) target:

'-mhal'
     Link with HAL BSP. This suppresses linking with the GCC-provided C
     runtime startup and termination code, and is typically used in
     conjunction with '-msys-crt0=' to specify the location of the
     alternate startup code provided by the HAL BSP.

'-msmallc'
     Link with a limited version of the C library, '-lsmallc', rather
     than Newlib.

'-msys-crt0=STARTFILE'
     STARTFILE is the file name of the startfile (crt0) to use when
     linking.  This option is only useful in conjunction with '-mhal'.

'-msys-lib=SYSTEMLIB'
     SYSTEMLIB is the library name of the library that provides
     low-level system calls required by the C library, e.g.  'read' and
     'write'.  This option is typically used to link with a library
     provided by a HAL BSP.


File: gcc.info,  Node: Nvidia PTX Options,  Next: PDP-11 Options,  Prev: Nios II Options,  Up: Submodel Options

3.17.32 Nvidia PTX Options
--------------------------

These options are defined for Nvidia PTX:

'-m32'
'-m64'
     Generate code for 32-bit or 64-bit ABI.

'-mmainkernel'
     Link in code for a __main kernel.  This is for stand-alone instead
     of offloading execution.


File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: Nvidia PTX Options,  Up: Submodel Options

3.17.33 PDP-11 Options
----------------------

These options are defined for the PDP-11:

'-mfpu'
     Use hardware FPP floating point.  This is the default.  (FIS
     floating point on the PDP-11/40 is not supported.)

'-msoft-float'
     Do not use hardware floating point.

'-mac0'
     Return floating-point results in ac0 (fr0 in Unix assembler
     syntax).

'-mno-ac0'
     Return floating-point results in memory.  This is the default.

'-m40'
     Generate code for a PDP-11/40.

'-m45'
     Generate code for a PDP-11/45.  This is the default.

'-m10'
     Generate code for a PDP-11/10.

'-mbcopy-builtin'
     Use inline 'movmemhi' patterns for copying memory.  This is the
     default.

'-mbcopy'
     Do not use inline 'movmemhi' patterns for copying memory.

'-mint16'
'-mno-int32'
     Use 16-bit 'int'.  This is the default.

'-mint32'
'-mno-int16'
     Use 32-bit 'int'.

'-mfloat64'
'-mno-float32'
     Use 64-bit 'float'.  This is the default.

'-mfloat32'
'-mno-float64'
     Use 32-bit 'float'.

'-mabshi'
     Use 'abshi2' pattern.  This is the default.

'-mno-abshi'
     Do not use 'abshi2' pattern.

'-mbranch-expensive'
     Pretend that branches are expensive.  This is for experimenting
     with code generation only.

'-mbranch-cheap'
     Do not pretend that branches are expensive.  This is the default.

'-munix-asm'
     Use Unix assembler syntax.  This is the default when configured for
     'pdp11-*-bsd'.

'-mdec-asm'
     Use DEC assembler syntax.  This is the default when configured for
     any PDP-11 target other than 'pdp11-*-bsd'.


File: gcc.info,  Node: picoChip Options,  Next: PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options

3.17.34 picoChip Options
------------------------

These '-m' options are defined for picoChip implementations:

'-mae=AE_TYPE'
     Set the instruction set, register set, and instruction scheduling
     parameters for array element type AE_TYPE.  Supported values for
     AE_TYPE are 'ANY', 'MUL', and 'MAC'.

     '-mae=ANY' selects a completely generic AE type.  Code generated
     with this option runs on any of the other AE types.  The code is
     not as efficient as it would be if compiled for a specific AE type,
     and some types of operation (e.g., multiplication) do not work
     properly on all types of AE.

     '-mae=MUL' selects a MUL AE type.  This is the most useful AE type
     for compiled code, and is the default.

     '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this
     option may suffer from poor performance of byte (char)
     manipulation, since the DSP AE does not provide hardware support
     for byte load/stores.

'-msymbol-as-address'
     Enable the compiler to directly use a symbol name as an address in
     a load/store instruction, without first loading it into a register.
     Typically, the use of this option generates larger programs, which
     run faster than when the option isn't used.  However, the results
     vary from program to program, so it is left as a user option,
     rather than being permanently enabled.

'-mno-inefficient-warnings'
     Disables warnings about the generation of inefficient code.  These
     warnings can be generated, for example, when compiling code that
     performs byte-level memory operations on the MAC AE type.  The MAC
     AE has no hardware support for byte-level memory operations, so all
     byte load/stores must be synthesized from word load/store
     operations.  This is inefficient and a warning is generated to
     indicate that you should rewrite the code to avoid byte operations,
     or to target an AE type that has the necessary hardware support.
     This option disables these warnings.


File: gcc.info,  Node: PowerPC Options,  Next: RL78 Options,  Prev: picoChip Options,  Up: Submodel Options

3.17.35 PowerPC Options
-----------------------

These are listed under *Note RS/6000 and PowerPC Options::.


File: gcc.info,  Node: RL78 Options,  Next: RS/6000 and PowerPC Options,  Prev: PowerPC Options,  Up: Submodel Options

3.17.36 RL78 Options
--------------------

'-msim'
     Links in additional target libraries to support operation within a
     simulator.

'-mmul=none'
'-mmul=g13'
'-mmul=rl78'
     Specifies the type of hardware multiplication support to be used.
     The default is 'none', which uses software multiplication
     functions.  The 'g13' option is for the hardware multiply/divide
     peripheral only on the RL78/G13 targets.  The 'rl78' option is for
     the standard hardware multiplication defined in the RL78 software
     manual.

'-m64bit-doubles'
'-m32bit-doubles'
     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
     bits ('-m32bit-doubles') in size.  The default is
     '-m32bit-doubles'.


File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: RL78 Options,  Up: Submodel Options

3.17.37 IBM RS/6000 and PowerPC Options
---------------------------------------

These '-m' options are defined for the IBM RS/6000 and PowerPC:
'-mpowerpc-gpopt'
'-mno-powerpc-gpopt'
'-mpowerpc-gfxopt'
'-mno-powerpc-gfxopt'
'-mpowerpc64'
'-mno-powerpc64'
'-mmfcrf'
'-mno-mfcrf'
'-mpopcntb'
'-mno-popcntb'
'-mpopcntd'
'-mno-popcntd'
'-mfprnd'
'-mno-fprnd'
'-mcmpb'
'-mno-cmpb'
'-mmfpgpr'
'-mno-mfpgpr'
'-mhard-dfp'
'-mno-hard-dfp'
     You use these options to specify which instructions are available
     on the processor you are using.  The default value of these options
     is determined when configuring GCC.  Specifying the
     '-mcpu=CPU_TYPE' overrides the specification of these options.  We
     recommend you use the '-mcpu=CPU_TYPE' option rather than the
     options listed above.

     Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC
     architecture instructions in the General Purpose group, including
     floating-point square root.  Specifying '-mpowerpc-gfxopt' allows
     GCC to use the optional PowerPC architecture instructions in the
     Graphics group, including floating-point select.

     The '-mmfcrf' option allows GCC to generate the move from condition
     register field instruction implemented on the POWER4 processor and
     other processors that support the PowerPC V2.01 architecture.  The
     '-mpopcntb' option allows GCC to generate the popcount and
     double-precision FP reciprocal estimate instruction implemented on
     the POWER5 processor and other processors that support the PowerPC
     V2.02 architecture.  The '-mpopcntd' option allows GCC to generate
     the popcount instruction implemented on the POWER7 processor and
     other processors that support the PowerPC V2.06 architecture.  The
     '-mfprnd' option allows GCC to generate the FP round to integer
     instructions implemented on the POWER5+ processor and other
     processors that support the PowerPC V2.03 architecture.  The
     '-mcmpb' option allows GCC to generate the compare bytes
     instruction implemented on the POWER6 processor and other
     processors that support the PowerPC V2.05 architecture.  The
     '-mmfpgpr' option allows GCC to generate the FP move to/from
     general-purpose register instructions implemented on the POWER6X
     processor and other processors that support the extended PowerPC
     V2.05 architecture.  The '-mhard-dfp' option allows GCC to generate
     the decimal floating-point instructions implemented on some POWER
     processors.

     The '-mpowerpc64' option allows GCC to generate the additional
     64-bit instructions that are found in the full PowerPC64
     architecture and to treat GPRs as 64-bit, doubleword quantities.
     GCC defaults to '-mno-powerpc64'.

'-mcpu=CPU_TYPE'
     Set architecture type, register usage, and instruction scheduling
     parameters for machine type CPU_TYPE.  Supported values for
     CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464',
     '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604',
     '604e', '620', '630', '740', '7400', '7450', '750', '801', '821',
     '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc',
     'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan',
     'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x',
     'power7', 'power8', 'powerpc', 'powerpc64', 'powerpc64le', and
     'rs64'.

     '-mcpu=powerpc', '-mcpu=powerpc64', and '-mcpu=powerpc64le' specify
     pure 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
     64-bit little endian PowerPC architecture machine types, with an
     appropriate, generic processor model assumed for scheduling
     purposes.

     The other options specify a specific processor.  Code generated
     under those options runs best on that processor, and may not run at
     all on others.

     The '-mcpu' options automatically enable or disable the following
     options:

          -maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple
          -mpopcntb -mpopcntd  -mpowerpc64
          -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
          -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx
          -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector
          -mquad-memory -mquad-memory-atomic

     The particular options set for any particular CPU varies between
     compiler versions, depending on what setting seems to produce
     optimal code for that CPU; it doesn't necessarily reflect the
     actual hardware's capabilities.  If you wish to set an individual
     option to a particular value, you may specify it after the '-mcpu'
     option, like '-mcpu=970 -mno-altivec'.

     On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled
     or disabled by the '-mcpu' option at present because AIX does not
     have full support for these options.  You may still enable or
     disable them individually if you're sure it'll work in your
     environment.

'-mtune=CPU_TYPE'
     Set the instruction scheduling parameters for machine type
     CPU_TYPE, but do not set the architecture type or register usage,
     as '-mcpu=CPU_TYPE' does.  The same values for CPU_TYPE are used
     for '-mtune' as for '-mcpu'.  If both are specified, the code
     generated uses the architecture and registers set by '-mcpu', but
     the scheduling parameters set by '-mtune'.

'-mcmodel=small'
     Generate PowerPC64 code for the small model: The TOC is limited to
     64k.

'-mcmodel=medium'
     Generate PowerPC64 code for the medium model: The TOC and other
     static data may be up to a total of 4G in size.

'-mcmodel=large'
     Generate PowerPC64 code for the large model: The TOC may be up to
     4G in size.  Other data and code is only limited by the 64-bit
     address space.

'-maltivec'
'-mno-altivec'
     Generate code that uses (does not use) AltiVec instructions, and
     also enable the use of built-in functions that allow more direct
     access to the AltiVec instruction set.  You may also need to set
     '-mabi=altivec' to adjust the current ABI with AltiVec ABI
     enhancements.

     When '-maltivec' is used, rather than '-maltivec=le' or
     '-maltivec=be', the element order for Altivec intrinsics such as
     'vec_splat', 'vec_extract', and 'vec_insert' match array element
     order corresponding to the endianness of the target.  That is,
     element zero identifies the leftmost element in a vector register
     when targeting a big-endian platform, and identifies the rightmost
     element in a vector register when targeting a little-endian
     platform.

'-maltivec=be'
     Generate Altivec instructions using big-endian element order,
     regardless of whether the target is big- or little-endian.  This is
     the default when targeting a big-endian platform.

     The element order is used to interpret element numbers in Altivec
     intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'.
     By default, these match array element order corresponding to the
     endianness for the target.

'-maltivec=le'
     Generate Altivec instructions using little-endian element order,
     regardless of whether the target is big- or little-endian.  This is
     the default when targeting a little-endian platform.  This option
     is currently ignored when targeting a big-endian platform.

     The element order is used to interpret element numbers in Altivec
     intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'.
     By default, these match array element order corresponding to the
     endianness for the target.

'-mvrsave'
'-mno-vrsave'
     Generate VRSAVE instructions when generating AltiVec code.

'-mgen-cell-microcode'
     Generate Cell microcode instructions.

'-mwarn-cell-microcode'
     Warn when a Cell microcode instruction is emitted.  An example of a
     Cell microcode instruction is a variable shift.

'-msecure-plt'
     Generate code that allows 'ld' and 'ld.so' to build executables and
     shared libraries with non-executable '.plt' and '.got' sections.
     This is a PowerPC 32-bit SYSV ABI option.

'-mbss-plt'
     Generate code that uses a BSS '.plt' section that 'ld.so' fills in,
     and requires '.plt' and '.got' sections that are both writable and
     executable.  This is a PowerPC 32-bit SYSV ABI option.

'-misel'
'-mno-isel'
     This switch enables or disables the generation of ISEL
     instructions.

'-misel=YES/NO'
     This switch has been deprecated.  Use '-misel' and '-mno-isel'
     instead.

'-mspe'
'-mno-spe'
     This switch enables or disables the generation of SPE simd
     instructions.

'-mpaired'
'-mno-paired'
     This switch enables or disables the generation of PAIRED simd
     instructions.

'-mspe=YES/NO'
     This option has been deprecated.  Use '-mspe' and '-mno-spe'
     instead.

'-mvsx'
'-mno-vsx'
     Generate code that uses (does not use) vector/scalar (VSX)
     instructions, and also enable the use of built-in functions that
     allow more direct access to the VSX instruction set.

'-mcrypto'
'-mno-crypto'
     Enable the use (disable) of the built-in functions that allow
     direct access to the cryptographic instructions that were added in
     version 2.07 of the PowerPC ISA.

'-mdirect-move'
'-mno-direct-move'
     Generate code that uses (does not use) the instructions to move
     data between the general purpose registers and the vector/scalar
     (VSX) registers that were added in version 2.07 of the PowerPC ISA.

'-mpower8-fusion'
'-mno-power8-fusion'
     Generate code that keeps (does not keeps) some integer operations
     adjacent so that the instructions can be fused together on power8
     and later processors.

'-mpower8-vector'
'-mno-power8-vector'
     Generate code that uses (does not use) the vector and scalar
     instructions that were added in version 2.07 of the PowerPC ISA.
     Also enable the use of built-in functions that allow more direct
     access to the vector instructions.

'-mquad-memory'
'-mno-quad-memory'
     Generate code that uses (does not use) the non-atomic quad word
     memory instructions.  The '-mquad-memory' option requires use of
     64-bit mode.

'-mquad-memory-atomic'
'-mno-quad-memory-atomic'
     Generate code that uses (does not use) the atomic quad word memory
     instructions.  The '-mquad-memory-atomic' option requires use of
     64-bit mode.

'-mupper-regs-df'
'-mno-upper-regs-df'
     Generate code that uses (does not use) the scalar double precision
     instructions that target all 64 registers in the vector/scalar
     floating point register set that were added in version 2.06 of the
     PowerPC ISA. '-mupper-regs-df' is turned on by default if you use
     any of the '-mcpu=power7', '-mcpu=power8', or '-mvsx' options.

'-mupper-regs-sf'
'-mno-upper-regs-sf'
     Generate code that uses (does not use) the scalar single precision
     instructions that target all 64 registers in the vector/scalar
     floating point register set that were added in version 2.07 of the
     PowerPC ISA. '-mupper-regs-sf' is turned on by default if you use
     either of the '-mcpu=power8' or '-mpower8-vector' options.

'-mupper-regs'
'-mno-upper-regs'
     Generate code that uses (does not use) the scalar instructions that
     target all 64 registers in the vector/scalar floating point
     register set, depending on the model of the machine.

     If the '-mno-upper-regs' option is used, it turns off both
     '-mupper-regs-sf' and '-mupper-regs-df' options.

'-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
'-mfloat-gprs'
     This switch enables or disables the generation of floating-point
     operations on the general-purpose registers for architectures that
     support it.

     The argument 'yes' or 'single' enables the use of single-precision
     floating-point operations.

     The argument 'double' enables the use of single and
     double-precision floating-point operations.

     The argument 'no' disables floating-point operations on the
     general-purpose registers.

     This option is currently only available on the MPC854x.

'-m32'
'-m64'
     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
     targets (including GNU/Linux).  The 32-bit environment sets int,
     long and pointer to 32 bits and generates code that runs on any
     PowerPC variant.  The 64-bit environment sets int to 32 bits and
     long and pointer to 64 bits, and generates code for PowerPC64, as
     for '-mpowerpc64'.

'-mfull-toc'
'-mno-fp-in-toc'
'-mno-sum-in-toc'
'-mminimal-toc'
     Modify generation of the TOC (Table Of Contents), which is created
     for every executable file.  The '-mfull-toc' option is selected by
     default.  In that case, GCC allocates at least one TOC entry for
     each unique non-automatic variable reference in your program.  GCC
     also places floating-point constants in the TOC.  However, only
     16,384 entries are available in the TOC.

     If you receive a linker error message that saying you have
     overflowed the available TOC space, you can reduce the amount of
     TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc'
     options.  '-mno-fp-in-toc' prevents GCC from putting floating-point
     constants in the TOC and '-mno-sum-in-toc' forces GCC to generate
     code to calculate the sum of an address and a constant at run time
     instead of putting that sum into the TOC.  You may specify one or
     both of these options.  Each causes GCC to produce very slightly
     slower and larger code at the expense of conserving TOC space.

     If you still run out of space in the TOC even when you specify both
     of these options, specify '-mminimal-toc' instead.  This option
     causes GCC to make only one TOC entry for every file.  When you
     specify this option, GCC produces code that is slower and larger
     but which uses extremely little TOC space.  You may wish to use
     this option only on files that contain less frequently-executed
     code.

'-maix64'
'-maix32'
     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
     64-bit 'long' type, and the infrastructure needed to support them.
     Specifying '-maix64' implies '-mpowerpc64', while '-maix32'
     disables the 64-bit ABI and implies '-mno-powerpc64'.  GCC defaults
     to '-maix32'.

'-mxl-compat'
'-mno-xl-compat'
     Produce code that conforms more closely to IBM XL compiler
     semantics when using AIX-compatible ABI.  Pass floating-point
     arguments to prototyped functions beyond the register save area
     (RSA) on the stack in addition to argument FPRs.  Do not assume
     that most significant double in 128-bit long double value is
     properly rounded when comparing values and converting to double.
     Use XL symbol names for long double support routines.

     The AIX calling convention was extended but not initially
     documented to handle an obscure K&R C case of calling a function
     that takes the address of its arguments with fewer arguments than
     declared.  IBM XL compilers access floating-point arguments that do
     not fit in the RSA from the stack when a subroutine is compiled
     without optimization.  Because always storing floating-point
     arguments on the stack is inefficient and rarely needed, this
     option is not enabled by default and only is necessary when calling
     subroutines compiled by IBM XL compilers without optimization.

'-mpe'
     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
     application written to use message passing with special startup
     code to enable the application to run.  The system must have PE
     installed in the standard location ('/usr/lpp/ppe.poe/'), or the
     'specs' file must be overridden with the '-specs=' option to
     specify the appropriate directory location.  The Parallel
     Environment does not support threads, so the '-mpe' option and the
     '-pthread' option are incompatible.

'-malign-natural'
'-malign-power'
     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
     '-malign-natural' overrides the ABI-defined alignment of larger
     types, such as floating-point doubles, on their natural size-based
     boundary.  The option '-malign-power' instructs GCC to follow the
     ABI-specified alignment rules.  GCC defaults to the standard
     alignment defined in the ABI.

     On 64-bit Darwin, natural alignment is the default, and
     '-malign-power' is not supported.

'-msoft-float'
'-mhard-float'
     Generate code that does not use (uses) the floating-point register
     set.  Software floating-point emulation is provided if you use the
     '-msoft-float' option, and pass the option to GCC when linking.

'-msingle-float'
'-mdouble-float'
     Generate code for single- or double-precision floating-point
     operations.  '-mdouble-float' implies '-msingle-float'.

'-msimple-fpu'
     Do not generate 'sqrt' and 'div' instructions for hardware
     floating-point unit.

'-mfpu=NAME'
     Specify type of floating-point unit.  Valid values for NAME are
     'sp_lite' (equivalent to '-msingle-float -msimple-fpu'), 'dp_lite'
     (equivalent to '-mdouble-float -msimple-fpu'), 'sp_full'
     (equivalent to '-msingle-float'), and 'dp_full' (equivalent to
     '-mdouble-float').

'-mxilinx-fpu'
     Perform optimizations for the floating-point unit on Xilinx PPC
     405/440.

'-mmultiple'
'-mno-multiple'
     Generate code that uses (does not use) the load multiple word
     instructions and the store multiple word instructions.  These
     instructions are generated by default on POWER systems, and not
     generated on PowerPC systems.  Do not use '-mmultiple' on
     little-endian PowerPC systems, since those instructions do not work
     when the processor is in little-endian mode.  The exceptions are
     PPC740 and PPC750 which permit these instructions in little-endian
     mode.

'-mstring'
'-mno-string'
     Generate code that uses (does not use) the load string instructions
     and the store string word instructions to save multiple registers
     and do small block moves.  These instructions are generated by
     default on POWER systems, and not generated on PowerPC systems.  Do
     not use '-mstring' on little-endian PowerPC systems, since those
     instructions do not work when the processor is in little-endian
     mode.  The exceptions are PPC740 and PPC750 which permit these
     instructions in little-endian mode.

'-mupdate'
'-mno-update'
     Generate code that uses (does not use) the load or store
     instructions that update the base register to the address of the
     calculated memory location.  These instructions are generated by
     default.  If you use '-mno-update', there is a small window between
     the time that the stack pointer is updated and the address of the
     previous frame is stored, which means code that walks the stack
     frame across interrupts or signals may get corrupted data.

'-mavoid-indexed-addresses'
'-mno-avoid-indexed-addresses'
     Generate code that tries to avoid (not avoid) the use of indexed
     load or store instructions.  These instructions can incur a
     performance penalty on Power6 processors in certain situations,
     such as when stepping through large arrays that cross a 16M
     boundary.  This option is enabled by default when targeting Power6
     and disabled otherwise.

'-mfused-madd'
'-mno-fused-madd'
     Generate code that uses (does not use) the floating-point multiply
     and accumulate instructions.  These instructions are generated by
     default if hardware floating point is used.  The machine-dependent
     '-mfused-madd' option is now mapped to the machine-independent
     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
     '-ffp-contract=off'.

'-mmulhw'
'-mno-mulhw'
     Generate code that uses (does not use) the half-word multiply and
     multiply-accumulate instructions on the IBM 405, 440, 464 and 476
     processors.  These instructions are generated by default when
     targeting those processors.

'-mdlmzb'
'-mno-dlmzb'
     Generate code that uses (does not use) the string-search 'dlmzb'
     instruction on the IBM 405, 440, 464 and 476 processors.  This
     instruction is generated by default when targeting those
     processors.

'-mno-bit-align'
'-mbit-align'
     On System V.4 and embedded PowerPC systems do not (do) force
     structures and unions that contain bit-fields to be aligned to the
     base type of the bit-field.

     For example, by default a structure containing nothing but 8
     'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary
     and has a size of 4 bytes.  By using '-mno-bit-align', the
     structure is aligned to a 1-byte boundary and is 1 byte in size.

'-mno-strict-align'
'-mstrict-align'
     On System V.4 and embedded PowerPC systems do not (do) assume that
     unaligned memory references are handled by the system.

'-mrelocatable'
'-mno-relocatable'
     Generate code that allows (does not allow) a static executable to
     be relocated to a different address at run time.  A simple embedded
     PowerPC system loader should relocate the entire contents of
     '.got2' and 4-byte locations listed in the '.fixup' section, a
     table of 32-bit addresses generated by this option.  For this to
     work, all objects linked together must be compiled with
     '-mrelocatable' or '-mrelocatable-lib'.  '-mrelocatable' code
     aligns the stack to an 8-byte boundary.

'-mrelocatable-lib'
'-mno-relocatable-lib'
     Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup'
     section to allow static executables to be relocated at run time,
     but '-mrelocatable-lib' does not use the smaller stack alignment of
     '-mrelocatable'.  Objects compiled with '-mrelocatable-lib' may be
     linked with objects compiled with any combination of the
     '-mrelocatable' options.

'-mno-toc'
'-mtoc'
     On System V.4 and embedded PowerPC systems do not (do) assume that
     register 2 contains a pointer to a global area pointing to the
     addresses used in the program.

'-mlittle'
'-mlittle-endian'
     On System V.4 and embedded PowerPC systems compile code for the
     processor in little-endian mode.  The '-mlittle-endian' option is
     the same as '-mlittle'.

'-mbig'
'-mbig-endian'
     On System V.4 and embedded PowerPC systems compile code for the
     processor in big-endian mode.  The '-mbig-endian' option is the
     same as '-mbig'.

'-mdynamic-no-pic'
     On Darwin and Mac OS X systems, compile code so that it is not
     relocatable, but that its external references are relocatable.  The
     resulting code is suitable for applications, but not shared
     libraries.

'-msingle-pic-base'
     Treat the register used for PIC addressing as read-only, rather
     than loading it in the prologue for each function.  The runtime
     system is responsible for initializing this register with an
     appropriate value before execution begins.

'-mprioritize-restricted-insns=PRIORITY'
     This option controls the priority that is assigned to dispatch-slot
     restricted instructions during the second scheduling pass.  The
     argument PRIORITY takes the value '0', '1', or '2' to assign no,
     highest, or second-highest (respectively) priority to dispatch-slot
     restricted instructions.

'-msched-costly-dep=DEPENDENCE_TYPE'
     This option controls which dependences are considered costly by the
     target during instruction scheduling.  The argument DEPENDENCE_TYPE
     takes one of the following values:

     'no'
          No dependence is costly.

     'all'
          All dependences are costly.

     'true_store_to_load'
          A true dependence from store to load is costly.

     'store_to_load'
          Any dependence from store to load is costly.

     NUMBER
          Any dependence for which the latency is greater than or equal
          to NUMBER is costly.

'-minsert-sched-nops=SCHEME'
     This option controls which NOP insertion scheme is used during the
     second scheduling pass.  The argument SCHEME takes one of the
     following values:

     'no'
          Don't insert NOPs.

     'pad'
          Pad with NOPs any dispatch group that has vacant issue slots,
          according to the scheduler's grouping.

     'regroup_exact'
          Insert NOPs to force costly dependent insns into separate
          groups.  Insert exactly as many NOPs as needed to force an
          insn to a new group, according to the estimated processor
          grouping.

     NUMBER
          Insert NOPs to force costly dependent insns into separate
          groups.  Insert NUMBER NOPs to force an insn to a new group.

'-mcall-sysv'
     On System V.4 and embedded PowerPC systems compile code using
     calling conventions that adhere to the March 1995 draft of the
     System V Application Binary Interface, PowerPC processor
     supplement.  This is the default unless you configured GCC using
     'powerpc-*-eabiaix'.

'-mcall-sysv-eabi'
'-mcall-eabi'
     Specify both '-mcall-sysv' and '-meabi' options.

'-mcall-sysv-noeabi'
     Specify both '-mcall-sysv' and '-mno-eabi' options.

'-mcall-aixdesc'
     On System V.4 and embedded PowerPC systems compile code for the AIX
     operating system.

'-mcall-linux'
     On System V.4 and embedded PowerPC systems compile code for the
     Linux-based GNU system.

'-mcall-freebsd'
     On System V.4 and embedded PowerPC systems compile code for the
     FreeBSD operating system.

'-mcall-netbsd'
     On System V.4 and embedded PowerPC systems compile code for the
     NetBSD operating system.

'-mcall-openbsd'
     On System V.4 and embedded PowerPC systems compile code for the
     OpenBSD operating system.

'-maix-struct-return'
     Return all structures in memory (as specified by the AIX ABI).

'-msvr4-struct-return'
     Return structures smaller than 8 bytes in registers (as specified
     by the SVR4 ABI).

'-mabi=ABI-TYPE'
     Extend the current ABI with a particular extension, or remove such
     extension.  Valid values are 'altivec', 'no-altivec', 'spe',
     'no-spe', 'ibmlongdouble', 'ieeelongdouble', 'elfv1', 'elfv2'.

'-mabi=spe'
     Extend the current ABI with SPE ABI extensions.  This does not
     change the default ABI, instead it adds the SPE ABI extensions to
     the current ABI.

'-mabi=no-spe'
     Disable Book-E SPE ABI extensions for the current ABI.

'-mabi=ibmlongdouble'
     Change the current ABI to use IBM extended-precision long double.
     This is a PowerPC 32-bit SYSV ABI option.

'-mabi=ieeelongdouble'
     Change the current ABI to use IEEE extended-precision long double.
     This is a PowerPC 32-bit Linux ABI option.

'-mabi=elfv1'
     Change the current ABI to use the ELFv1 ABI. This is the default
     ABI for big-endian PowerPC 64-bit Linux.  Overriding the default
     ABI requires special system support and is likely to fail in
     spectacular ways.

'-mabi=elfv2'
     Change the current ABI to use the ELFv2 ABI. This is the default
     ABI for little-endian PowerPC 64-bit Linux.  Overriding the default
     ABI requires special system support and is likely to fail in
     spectacular ways.

'-mprototype'
'-mno-prototype'
     On System V.4 and embedded PowerPC systems assume that all calls to
     variable argument functions are properly prototyped.  Otherwise,
     the compiler must insert an instruction before every non-prototyped
     call to set or clear bit 6 of the condition code register ('CR') to
     indicate whether floating-point values are passed in the
     floating-point registers in case the function takes variable
     arguments.  With '-mprototype', only calls to prototyped variable
     argument functions set or clear the bit.

'-msim'
     On embedded PowerPC systems, assume that the startup module is
     called 'sim-crt0.o' and that the standard C libraries are
     'libsim.a' and 'libc.a'.  This is the default for
     'powerpc-*-eabisim' configurations.

'-mmvme'
     On embedded PowerPC systems, assume that the startup module is
     called 'crt0.o' and the standard C libraries are 'libmvme.a' and
     'libc.a'.

'-mads'
     On embedded PowerPC systems, assume that the startup module is
     called 'crt0.o' and the standard C libraries are 'libads.a' and
     'libc.a'.

'-myellowknife'
     On embedded PowerPC systems, assume that the startup module is
     called 'crt0.o' and the standard C libraries are 'libyk.a' and
     'libc.a'.

'-mvxworks'
     On System V.4 and embedded PowerPC systems, specify that you are
     compiling for a VxWorks system.

'-memb'
     On embedded PowerPC systems, set the 'PPC_EMB' bit in the ELF flags
     header to indicate that 'eabi' extended relocations are used.

'-meabi'
'-mno-eabi'
     On System V.4 and embedded PowerPC systems do (do not) adhere to
     the Embedded Applications Binary Interface (EABI), which is a set
     of modifications to the System V.4 specifications.  Selecting
     '-meabi' means that the stack is aligned to an 8-byte boundary, a
     function '__eabi' is called from 'main' to set up the EABI
     environment, and the '-msdata' option can use both 'r2' and 'r13'
     to point to two separate small data areas.  Selecting '-mno-eabi'
     means that the stack is aligned to a 16-byte boundary, no EABI
     initialization function is called from 'main', and the '-msdata'
     option only uses 'r13' to point to a single small data area.  The
     '-meabi' option is on by default if you configured GCC using one of
     the 'powerpc*-*-eabi*' options.

'-msdata=eabi'
     On System V.4 and embedded PowerPC systems, put small initialized
     'const' global and static data in the '.sdata2' section, which is
     pointed to by register 'r2'.  Put small initialized non-'const'
     global and static data in the '.sdata' section, which is pointed to
     by register 'r13'.  Put small uninitialized global and static data
     in the '.sbss' section, which is adjacent to the '.sdata' section.
     The '-msdata=eabi' option is incompatible with the '-mrelocatable'
     option.  The '-msdata=eabi' option also sets the '-memb' option.

'-msdata=sysv'
     On System V.4 and embedded PowerPC systems, put small global and
     static data in the '.sdata' section, which is pointed to by
     register 'r13'.  Put small uninitialized global and static data in
     the '.sbss' section, which is adjacent to the '.sdata' section.
     The '-msdata=sysv' option is incompatible with the '-mrelocatable'
     option.

'-msdata=default'
'-msdata'
     On System V.4 and embedded PowerPC systems, if '-meabi' is used,
     compile code the same as '-msdata=eabi', otherwise compile code the
     same as '-msdata=sysv'.

'-msdata=data'
     On System V.4 and embedded PowerPC systems, put small global data
     in the '.sdata' section.  Put small uninitialized global data in
     the '.sbss' section.  Do not use register 'r13' to address small
     data however.  This is the default behavior unless other '-msdata'
     options are used.

'-msdata=none'
'-mno-sdata'
     On embedded PowerPC systems, put all initialized global and static
     data in the '.data' section, and all uninitialized data in the
     '.bss' section.

'-mblock-move-inline-limit=NUM'
     Inline all block moves (such as calls to 'memcpy' or structure
     copies) less than or equal to NUM bytes.  The minimum value for NUM
     is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets.  The
     default value is target-specific.

'-G NUM'
     On embedded PowerPC systems, put global and static items less than
     or equal to NUM bytes into the small data or BSS sections instead
     of the normal data or BSS section.  By default, NUM is 8.  The '-G
     NUM' switch is also passed to the linker.  All modules should be
     compiled with the same '-G NUM' value.

'-mregnames'
'-mno-regnames'
     On System V.4 and embedded PowerPC systems do (do not) emit
     register names in the assembly language output using symbolic
     forms.

'-mlongcall'
'-mno-longcall'
     By default assume that all calls are far away so that a longer and
     more expensive calling sequence is required.  This is required for
     calls farther than 32 megabytes (33,554,432 bytes) from the current
     location.  A short call is generated if the compiler knows the call
     cannot be that far away.  This setting can be overridden by the
     'shortcall' function attribute, or by '#pragma longcall(0)'.

     Some linkers are capable of detecting out-of-range calls and
     generating glue code on the fly.  On these systems, long calls are
     unnecessary and generate slower code.  As of this writing, the AIX
     linker can do this, as can the GNU linker for PowerPC/64.  It is
     planned to add this feature to the GNU linker for 32-bit PowerPC
     systems as well.

     On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee,
     L42', plus a "branch island" (glue code).  The two target addresses
     represent the callee and the branch island.  The Darwin/PPC linker
     prefers the first address and generates a 'bl callee' if the PPC
     'bl' instruction reaches the callee directly; otherwise, the linker
     generates 'bl L42' to call the branch island.  The branch island is
     appended to the body of the calling function; it computes the full
     32-bit address of the callee and jumps to it.

     On Mach-O (Darwin) systems, this option directs the compiler emit
     to the glue for every direct call, and the Darwin linker decides
     whether to use or discard it.

     In the future, GCC may ignore all longcall specifications when the
     linker is known to generate glue.

'-mtls-markers'
'-mno-tls-markers'
     Mark (do not mark) calls to '__tls_get_addr' with a relocation
     specifying the function argument.  The relocation allows the linker
     to reliably associate function call with argument setup
     instructions for TLS optimization, which in turn allows GCC to
     better schedule the sequence.

'-pthread'
     Adds support for multithreading with the "pthreads" library.  This
     option sets flags for both the preprocessor and linker.

'-mrecip'
'-mno-recip'
     This option enables use of the reciprocal estimate and reciprocal
     square root estimate instructions with additional Newton-Raphson
     steps to increase precision instead of doing a divide or square
     root and divide for floating-point arguments.  You should use the
     '-ffast-math' option when using '-mrecip' (or at least
     '-funsafe-math-optimizations', '-finite-math-only',
     '-freciprocal-math' and '-fno-trapping-math').  Note that while the
     throughput of the sequence is generally higher than the throughput
     of the non-reciprocal instruction, the precision of the sequence
     can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals
     0.99999994) for reciprocal square roots.

'-mrecip=OPT'
     This option controls which reciprocal estimate instructions may be
     used.  OPT is a comma-separated list of options, which may be
     preceded by a '!' to invert the option:

     'all'
          Enable all estimate instructions.

     'default'
          Enable the default instructions, equivalent to '-mrecip'.

     'none'
          Disable all estimate instructions, equivalent to '-mno-recip'.

     'div'
          Enable the reciprocal approximation instructions for both
          single and double precision.

     'divf'
          Enable the single-precision reciprocal approximation
          instructions.

     'divd'
          Enable the double-precision reciprocal approximation
          instructions.

     'rsqrt'
          Enable the reciprocal square root approximation instructions
          for both single and double precision.

     'rsqrtf'
          Enable the single-precision reciprocal square root
          approximation instructions.

     'rsqrtd'
          Enable the double-precision reciprocal square root
          approximation instructions.

     So, for example, '-mrecip=all,!rsqrtd' enables all of the
     reciprocal estimate instructions, except for the 'FRSQRTE',
     'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the
     double-precision reciprocal square root calculations.

'-mrecip-precision'
'-mno-recip-precision'
     Assume (do not assume) that the reciprocal estimate instructions
     provide higher-precision estimates than is mandated by the PowerPC
     ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8'
     automatically selects '-mrecip-precision'.  The double-precision
     square root estimate instructions are not generated by default on
     low-precision machines, since they do not provide an estimate that
     converges after three steps.

'-mveclibabi=TYPE'
     Specifies the ABI type to use for vectorizing intrinsics using an
     external library.  The only type supported at present is 'mass',
     which specifies to use IBM's Mathematical Acceleration Subsystem
     (MASS) libraries for vectorizing intrinsics using external
     libraries.  GCC currently emits calls to 'acosd2', 'acosf4',
     'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4',
     'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4',
     'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2',
     'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4',
     'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4',
     'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4',
     'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2',
     'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and
     'tanhf4' when generating code for power7.  Both '-ftree-vectorize'
     and '-funsafe-math-optimizations' must also be enabled.  The MASS
     libraries must be specified at link time.

'-mfriz'
'-mno-friz'
     Generate (do not generate) the 'friz' instruction when the
     '-funsafe-math-optimizations' option is used to optimize rounding
     of floating-point values to 64-bit integer and back to floating
     point.  The 'friz' instruction does not return the same value if
     the floating-point number is too large to fit in an integer.

'-mpointers-to-nested-functions'
'-mno-pointers-to-nested-functions'
     Generate (do not generate) code to load up the static chain
     register ('r11') when calling through a pointer on AIX and 64-bit
     Linux systems where a function pointer points to a 3-word
     descriptor giving the function address, TOC value to be loaded in
     register 'r2', and static chain value to be loaded in register
     'r11'.  The '-mpointers-to-nested-functions' is on by default.  You
     cannot call through pointers to nested functions or pointers to
     functions compiled in other languages that use the static chain if
     you use '-mno-pointers-to-nested-functions'.

'-msave-toc-indirect'
'-mno-save-toc-indirect'
     Generate (do not generate) code to save the TOC value in the
     reserved stack location in the function prologue if the function
     calls through a pointer on AIX and 64-bit Linux systems.  If the
     TOC value is not saved in the prologue, it is saved just before the
     call through the pointer.  The '-mno-save-toc-indirect' option is
     the default.

'-mcompat-align-parm'
'-mno-compat-align-parm'
     Generate (do not generate) code to pass structure parameters with a
     maximum alignment of 64 bits, for compatibility with older versions
     of GCC.

     Older versions of GCC (prior to 4.9.0) incorrectly did not align a
     structure parameter on a 128-bit boundary when that structure
     contained a member requiring 128-bit alignment.  This is corrected
     in more recent versions of GCC. This option may be used to generate
     code that is compatible with functions compiled with older versions
     of GCC.

     The '-mno-compat-align-parm' option is the default.


File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options

3.17.38 RX Options
------------------

These command-line options are defined for RX targets:

'-m64bit-doubles'
'-m32bit-doubles'
     Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32
     bits ('-m32bit-doubles') in size.  The default is
     '-m32bit-doubles'.  _Note_ RX floating-point hardware only works on
     32-bit values, which is why the default is '-m32bit-doubles'.

'-fpu'
'-nofpu'
     Enables ('-fpu') or disables ('-nofpu') the use of RX
     floating-point hardware.  The default is enabled for the RX600
     series and disabled for the RX200 series.

     Floating-point instructions are only generated for 32-bit
     floating-point values, however, so the FPU hardware is not used for
     doubles if the '-m64bit-doubles' option is used.

     _Note_ If the '-fpu' option is enabled then
     '-funsafe-math-optimizations' is also enabled automatically.  This
     is because the RX FPU instructions are themselves unsafe.

'-mcpu=NAME'
     Selects the type of RX CPU to be targeted.  Currently three types
     are supported, the generic 'RX600' and 'RX200' series hardware and
     the specific 'RX610' CPU. The default is 'RX600'.

     The only difference between 'RX600' and 'RX610' is that the 'RX610'
     does not support the 'MVTIPL' instruction.

     The 'RX200' series does not have a hardware floating-point unit and
     so '-nofpu' is enabled by default when this type is selected.

'-mbig-endian-data'
'-mlittle-endian-data'
     Store data (but not code) in the big-endian format.  The default is
     '-mlittle-endian-data', i.e. to store data in the little-endian
     format.

'-msmall-data-limit=N'
     Specifies the maximum size in bytes of global and static variables
     which can be placed into the small data area.  Using the small data
     area can lead to smaller and faster code, but the size of area is
     limited and it is up to the programmer to ensure that the area does
     not overflow.  Also when the small data area is used one of the
     RX's registers (usually 'r13') is reserved for use pointing to this
     area, so it is no longer available for use by the compiler.  This
     could result in slower and/or larger code if variables are pushed
     onto the stack instead of being held in this register.

     Note, common variables (variables that have not been initialized)
     and constants are not placed into the small data area as they are
     assigned to other sections in the output executable.

     The default value is zero, which disables this feature.  Note, this
     feature is not enabled by default with higher optimization levels
     ('-O2' etc) because of the potentially detrimental effects of
     reserving a register.  It is up to the programmer to experiment and
     discover whether this feature is of benefit to their program.  See
     the description of the '-mpid' option for a description of how the
     actual register to hold the small data area pointer is chosen.

'-msim'
'-mno-sim'
     Use the simulator runtime.  The default is to use the libgloss
     board-specific runtime.

'-mas100-syntax'
'-mno-as100-syntax'
     When generating assembler output use a syntax that is compatible
     with Renesas's AS100 assembler.  This syntax can also be handled by
     the GAS assembler, but it has some restrictions so it is not
     generated by default.

'-mmax-constant-size=N'
     Specifies the maximum size, in bytes, of a constant that can be
     used as an operand in a RX instruction.  Although the RX
     instruction set does allow constants of up to 4 bytes in length to
     be used in instructions, a longer value equates to a longer
     instruction.  Thus in some circumstances it can be beneficial to
     restrict the size of constants that are used in instructions.
     Constants that are too big are instead placed into a constant pool
     and referenced via register indirection.

     The value N can be between 0 and 4.  A value of 0 (the default) or
     4 means that constants of any size are allowed.

'-mrelax'
     Enable linker relaxation.  Linker relaxation is a process whereby
     the linker attempts to reduce the size of a program by finding
     shorter versions of various instructions.  Disabled by default.

'-mint-register=N'
     Specify the number of registers to reserve for fast interrupt
     handler functions.  The value N can be between 0 and 4.  A value of
     1 means that register 'r13' is reserved for the exclusive use of
     fast interrupt handlers.  A value of 2 reserves 'r13' and 'r12'.  A
     value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4
     reserves 'r13' through 'r10'.  A value of 0, the default, does not
     reserve any registers.

'-msave-acc-in-interrupts'
     Specifies that interrupt handler functions should preserve the
     accumulator register.  This is only necessary if normal code might
     use the accumulator register, for example because it performs
     64-bit multiplications.  The default is to ignore the accumulator
     as this makes the interrupt handlers faster.

'-mpid'
'-mno-pid'
     Enables the generation of position independent data.  When enabled
     any access to constant data is done via an offset from a base
     address held in a register.  This allows the location of constant
     data to be determined at run time without requiring the executable
     to be relocated, which is a benefit to embedded applications with
     tight memory constraints.  Data that can be modified is not
     affected by this option.

     Note, using this feature reserves a register, usually 'r13', for
     the constant data base address.  This can result in slower and/or
     larger code, especially in complicated functions.

     The actual register chosen to hold the constant data base address
     depends upon whether the '-msmall-data-limit' and/or the
     '-mint-register' command-line options are enabled.  Starting with
     register 'r13' and proceeding downwards, registers are allocated
     first to satisfy the requirements of '-mint-register', then '-mpid'
     and finally '-msmall-data-limit'.  Thus it is possible for the
     small data area register to be 'r8' if both '-mint-register=4' and
     '-mpid' are specified on the command line.

     By default this feature is not enabled.  The default can be
     restored via the '-mno-pid' command-line option.

'-mno-warn-multiple-fast-interrupts'
'-mwarn-multiple-fast-interrupts'
     Prevents GCC from issuing a warning message if it finds more than
     one fast interrupt handler when it is compiling a file.  The
     default is to issue a warning for each extra fast interrupt handler
     found, as the RX only supports one such interrupt.

 _Note:_ The generic GCC command-line option '-ffixed-REG' has special
significance to the RX port when used with the 'interrupt' function
attribute.  This attribute indicates a function intended to process fast
interrupts.  GCC ensures that it only uses the registers 'r10', 'r11',
'r12' and/or 'r13' and only provided that the normal use of the
corresponding registers have been restricted via the '-ffixed-REG' or
'-mint-register' command-line options.


File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RX Options,  Up: Submodel Options

3.17.39 S/390 and zSeries Options
---------------------------------

These are the '-m' options defined for the S/390 and zSeries
architecture.

'-mhard-float'
'-msoft-float'
     Use (do not use) the hardware floating-point instructions and
     registers for floating-point operations.  When '-msoft-float' is
     specified, functions in 'libgcc.a' are used to perform
     floating-point operations.  When '-mhard-float' is specified, the
     compiler generates IEEE floating-point instructions.  This is the
     default.

'-mhard-dfp'
'-mno-hard-dfp'
     Use (do not use) the hardware decimal-floating-point instructions
     for decimal-floating-point operations.  When '-mno-hard-dfp' is
     specified, functions in 'libgcc.a' are used to perform
     decimal-floating-point operations.  When '-mhard-dfp' is specified,
     the compiler generates decimal-floating-point hardware
     instructions.  This is the default for '-march=z9-ec' or higher.

'-mlong-double-64'
'-mlong-double-128'
     These switches control the size of 'long double' type.  A size of
     64 bits makes the 'long double' type equivalent to the 'double'
     type.  This is the default.

'-mbackchain'
'-mno-backchain'
     Store (do not store) the address of the caller's frame as backchain
     pointer into the callee's stack frame.  A backchain may be needed
     to allow debugging using tools that do not understand DWARF 2 call
     frame information.  When '-mno-packed-stack' is in effect, the
     backchain pointer is stored at the bottom of the stack frame; when
     '-mpacked-stack' is in effect, the backchain is placed into the
     topmost word of the 96/160 byte register save area.

     In general, code compiled with '-mbackchain' is call-compatible
     with code compiled with '-mmo-backchain'; however, use of the
     backchain for debugging purposes usually requires that the whole
     binary is built with '-mbackchain'.  Note that the combination of
     '-mbackchain', '-mpacked-stack' and '-mhard-float' is not
     supported.  In order to build a linux kernel use '-msoft-float'.

     The default is to not maintain the backchain.

'-mpacked-stack'
'-mno-packed-stack'
     Use (do not use) the packed stack layout.  When '-mno-packed-stack'
     is specified, the compiler uses the all fields of the 96/160 byte
     register save area only for their default purpose; unused fields
     still take up stack space.  When '-mpacked-stack' is specified,
     register save slots are densely packed at the top of the register
     save area; unused space is reused for other purposes, allowing for
     more efficient use of the available stack space.  However, when
     '-mbackchain' is also in effect, the topmost word of the save area
     is always used to store the backchain, and the return address
     register is always saved two words below the backchain.

     As long as the stack frame backchain is not used, code generated
     with '-mpacked-stack' is call-compatible with code generated with
     '-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
     for S/390 or zSeries generated code that uses the stack frame
     backchain at run time, not just for debugging purposes.  Such code
     is not call-compatible with code compiled with '-mpacked-stack'.
     Also, note that the combination of '-mbackchain', '-mpacked-stack'
     and '-mhard-float' is not supported.  In order to build a linux
     kernel use '-msoft-float'.

     The default is to not use the packed stack layout.

'-msmall-exec'
'-mno-small-exec'
     Generate (or do not generate) code using the 'bras' instruction to
     do subroutine calls.  This only works reliably if the total
     executable size does not exceed 64k.  The default is to use the
     'basr' instruction instead, which does not have this limitation.

'-m64'
'-m31'
     When '-m31' is specified, generate code compliant to the GNU/Linux
     for S/390 ABI.  When '-m64' is specified, generate code compliant
     to the GNU/Linux for zSeries ABI.  This allows GCC in particular to
     generate 64-bit instructions.  For the 's390' targets, the default
     is '-m31', while the 's390x' targets default to '-m64'.

'-mzarch'
'-mesa'
     When '-mzarch' is specified, generate code using the instructions
     available on z/Architecture.  When '-mesa' is specified, generate
     code using the instructions available on ESA/390.  Note that
     '-mesa' is not possible with '-m64'.  When generating code
     compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'.
     When generating code compliant to the GNU/Linux for zSeries ABI,
     the default is '-mzarch'.

'-mmvcle'
'-mno-mvcle'
     Generate (or do not generate) code using the 'mvcle' instruction to
     perform block moves.  When '-mno-mvcle' is specified, use a 'mvc'
     loop instead.  This is the default unless optimizing for size.

'-mdebug'
'-mno-debug'
     Print (or do not print) additional debug information when
     compiling.  The default is to not print debug information.

'-march=CPU-TYPE'
     Generate code that runs on CPU-TYPE, which is the name of a system
     representing a certain processor type.  Possible values for
     CPU-TYPE are 'g5', 'g6', 'z900', 'z990', 'z9-109', 'z9-ec', 'z10',
     'z196', and 'zEC12'.  When generating code using the instructions
     available on z/Architecture, the default is '-march=z900'.
     Otherwise, the default is '-march=g5'.

'-mtune=CPU-TYPE'
     Tune to CPU-TYPE everything applicable about the generated code,
     except for the ABI and the set of available instructions.  The list
     of CPU-TYPE values is the same as for '-march'.  The default is the
     value used for '-march'.

'-mtpf-trace'
'-mno-tpf-trace'
     Generate code that adds (does not add) in TPF OS specific branches
     to trace routines in the operating system.  This option is off by
     default, even when compiling for the TPF OS.

'-mfused-madd'
'-mno-fused-madd'
     Generate code that uses (does not use) the floating-point multiply
     and accumulate instructions.  These instructions are generated by
     default if hardware floating point is used.

'-mwarn-framesize=FRAMESIZE'
     Emit a warning if the current function exceeds the given frame
     size.  Because this is a compile-time check it doesn't need to be a
     real problem when the program runs.  It is intended to identify
     functions that most probably cause a stack overflow.  It is useful
     to be used in an environment with limited stack size e.g. the linux
     kernel.

'-mwarn-dynamicstack'
     Emit a warning if the function calls 'alloca' or uses
     dynamically-sized arrays.  This is generally a bad idea with a
     limited stack size.

'-mstack-guard=STACK-GUARD'
'-mstack-size=STACK-SIZE'
     If these options are provided the S/390 back end emits additional
     instructions in the function prologue that trigger a trap if the
     stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
     the stack on S/390 grows downward).  If the STACK-GUARD option is
     omitted the smallest power of 2 larger than the frame size of the
     compiled function is chosen.  These options are intended to be used
     to help debugging stack overflow problems.  The additionally
     emitted code causes only little overhead and hence can also be used
     in production-like systems without greater performance degradation.
     The given values have to be exact powers of 2 and STACK-SIZE has to
     be greater than STACK-GUARD without exceeding 64k.  In order to be
     efficient the extra code makes the assumption that the stack starts
     at an address aligned to the value given by STACK-SIZE.  The
     STACK-GUARD option can only be used in conjunction with STACK-SIZE.

'-mhotpatch=PRE-HALFWORDS,POST-HALFWORDS'
     If the hotpatch option is enabled, a "hot-patching" function
     prologue is generated for all functions in the compilation unit.
     The funtion label is prepended with the given number of two-byte
     NOP instructions (PRE-HALFWORDS, maximum 1000000).  After the
     label, 2 * POST-HALFWORDS bytes are appended, using the largest NOP
     like instructions the architecture allows (maximum 1000000).

     If both arguments are zero, hotpatching is disabled.

     This option can be overridden for individual functions with the
     'hotpatch' attribute.


File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options

3.17.40 Score Options
---------------------

These options are defined for Score implementations:

'-meb'
     Compile code for big-endian mode.  This is the default.

'-mel'
     Compile code for little-endian mode.

'-mnhwloop'
     Disable generation of 'bcnz' instructions.

'-muls'
     Enable generation of unaligned load and store instructions.

'-mmac'
     Enable the use of multiply-accumulate instructions.  Disabled by
     default.

'-mscore5'
     Specify the SCORE5 as the target architecture.

'-mscore5u'
     Specify the SCORE5U of the target architecture.

'-mscore7'
     Specify the SCORE7 as the target architecture.  This is the
     default.

'-mscore7d'
     Specify the SCORE7D as the target architecture.


File: gcc.info,  Node: SH Options,  Next: Solaris 2 Options,  Prev: Score Options,  Up: Submodel Options

3.17.41 SH Options
------------------

These '-m' options are defined for the SH implementations:

'-m1'
     Generate code for the SH1.

'-m2'
     Generate code for the SH2.

'-m2e'
     Generate code for the SH2e.

'-m2a-nofpu'
     Generate code for the SH2a without FPU, or for a SH2a-FPU in such a
     way that the floating-point unit is not used.

'-m2a-single-only'
     Generate code for the SH2a-FPU, in such a way that no
     double-precision floating-point operations are used.

'-m2a-single'
     Generate code for the SH2a-FPU assuming the floating-point unit is
     in single-precision mode by default.

'-m2a'
     Generate code for the SH2a-FPU assuming the floating-point unit is
     in double-precision mode by default.

'-m3'
     Generate code for the SH3.

'-m3e'
     Generate code for the SH3e.

'-m4-nofpu'
     Generate code for the SH4 without a floating-point unit.

'-m4-single-only'
     Generate code for the SH4 with a floating-point unit that only
     supports single-precision arithmetic.

'-m4-single'
     Generate code for the SH4 assuming the floating-point unit is in
     single-precision mode by default.

'-m4'
     Generate code for the SH4.

'-m4-100'
     Generate code for SH4-100.

'-m4-100-nofpu'
     Generate code for SH4-100 in such a way that the floating-point
     unit is not used.

'-m4-100-single'
     Generate code for SH4-100 assuming the floating-point unit is in
     single-precision mode by default.

'-m4-100-single-only'
     Generate code for SH4-100 in such a way that no double-precision
     floating-point operations are used.

'-m4-200'
     Generate code for SH4-200.

'-m4-200-nofpu'
     Generate code for SH4-200 without in such a way that the
     floating-point unit is not used.

'-m4-200-single'
     Generate code for SH4-200 assuming the floating-point unit is in
     single-precision mode by default.

'-m4-200-single-only'
     Generate code for SH4-200 in such a way that no double-precision
     floating-point operations are used.

'-m4-300'
     Generate code for SH4-300.

'-m4-300-nofpu'
     Generate code for SH4-300 without in such a way that the
     floating-point unit is not used.

'-m4-300-single'
     Generate code for SH4-300 in such a way that no double-precision
     floating-point operations are used.

'-m4-300-single-only'
     Generate code for SH4-300 in such a way that no double-precision
     floating-point operations are used.

'-m4-340'
     Generate code for SH4-340 (no MMU, no FPU).

'-m4-500'
     Generate code for SH4-500 (no FPU). Passes '-isa=sh4-nofpu' to the
     assembler.

'-m4a-nofpu'
     Generate code for the SH4al-dsp, or for a SH4a in such a way that
     the floating-point unit is not used.

'-m4a-single-only'
     Generate code for the SH4a, in such a way that no double-precision
     floating-point operations are used.

'-m4a-single'
     Generate code for the SH4a assuming the floating-point unit is in
     single-precision mode by default.

'-m4a'
     Generate code for the SH4a.

'-m4al'
     Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to
     the assembler.  GCC doesn't generate any DSP instructions at the
     moment.

'-m5-32media'
     Generate 32-bit code for SHmedia.

'-m5-32media-nofpu'
     Generate 32-bit code for SHmedia in such a way that the
     floating-point unit is not used.

'-m5-64media'
     Generate 64-bit code for SHmedia.

'-m5-64media-nofpu'
     Generate 64-bit code for SHmedia in such a way that the
     floating-point unit is not used.

'-m5-compact'
     Generate code for SHcompact.

'-m5-compact-nofpu'
     Generate code for SHcompact in such a way that the floating-point
     unit is not used.

'-mb'
     Compile code for the processor in big-endian mode.

'-ml'
     Compile code for the processor in little-endian mode.

'-mdalign'
     Align doubles at 64-bit boundaries.  Note that this changes the
     calling conventions, and thus some functions from the standard C
     library do not work unless you recompile it first with '-mdalign'.

'-mrelax'
     Shorten some address references at link time, when possible; uses
     the linker option '-relax'.

'-mbigtable'
     Use 32-bit offsets in 'switch' tables.  The default is to use
     16-bit offsets.

'-mbitops'
     Enable the use of bit manipulation instructions on SH2A.

'-mfmovd'
     Enable the use of the instruction 'fmovd'.  Check '-mdalign' for
     alignment constraints.

'-mrenesas'
     Comply with the calling conventions defined by Renesas.

'-mno-renesas'
     Comply with the calling conventions defined for GCC before the
     Renesas conventions were available.  This option is the default for
     all targets of the SH toolchain.

'-mnomacsave'
     Mark the 'MAC' register as call-clobbered, even if '-mrenesas' is
     given.

'-mieee'
'-mno-ieee'
     Control the IEEE compliance of floating-point comparisons, which
     affects the handling of cases where the result of a comparison is
     unordered.  By default '-mieee' is implicitly enabled.  If
     '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set,
     which results in faster floating-point greater-equal and less-equal
     comparisons.  The implcit settings can be overridden by specifying
     either '-mieee' or '-mno-ieee'.

'-minline-ic_invalidate'
     Inline code to invalidate instruction cache entries after setting
     up nested function trampolines.  This option has no effect if
     '-musermode' is in effect and the selected code generation option
     (e.g.  '-m4') does not allow the use of the 'icbi' instruction.  If
     the selected code generation option does not allow the use of the
     'icbi' instruction, and '-musermode' is not in effect, the inlined
     code manipulates the instruction cache address array directly with
     an associative write.  This not only requires privileged mode at
     run time, but it also fails if the cache line had been mapped via
     the TLB and has become unmapped.

'-misize'
     Dump instruction size and location in the assembly code.

'-mpadstruct'
     This option is deprecated.  It pads structures to multiple of 4
     bytes, which is incompatible with the SH ABI.

'-matomic-model=MODEL'
     Sets the model of atomic operations and additional parameters as a
     comma separated list.  For details on the atomic built-in functions
     see *note __atomic Builtins::.  The following models and parameters
     are supported:

     'none'
          Disable compiler generated atomic sequences and emit library
          calls for atomic operations.  This is the default if the
          target is not 'sh*-*-linux*'.

     'soft-gusa'
          Generate GNU/Linux compatible gUSA software atomic sequences
          for the atomic built-in functions.  The generated atomic
          sequences require additional support from the
          interrupt/exception handling code of the system and are only
          suitable for SH3* and SH4* single-core systems.  This option
          is enabled by default when the target is 'sh*-*-linux*' and
          SH3* or SH4*.  When the target is SH4A, this option also
          partially utilizes the hardware atomic instructions 'movli.l'
          and 'movco.l' to create more efficient code, unless 'strict'
          is specified.

     'soft-tcb'
          Generate software atomic sequences that use a variable in the
          thread control block.  This is a variation of the gUSA
          sequences which can also be used on SH1* and SH2* targets.
          The generated atomic sequences require additional support from
          the interrupt/exception handling code of the system and are
          only suitable for single-core systems.  When using this model,
          the 'gbr-offset=' parameter has to be specified as well.

     'soft-imask'
          Generate software atomic sequences that temporarily disable
          interrupts by setting 'SR.IMASK = 1111'.  This model works
          only when the program runs in privileged mode and is only
          suitable for single-core systems.  Additional support from the
          interrupt/exception handling code of the system is not
          required.  This model is enabled by default when the target is
          'sh*-*-linux*' and SH1* or SH2*.

     'hard-llcs'
          Generate hardware atomic sequences using the 'movli.l' and
          'movco.l' instructions only.  This is only available on SH4A
          and is suitable for multi-core systems.  Since the hardware
          instructions support only 32 bit atomic variables access to 8
          or 16 bit variables is emulated with 32 bit accesses.  Code
          compiled with this option is also compatible with other
          software atomic model interrupt/exception handling systems if
          executed on an SH4A system.  Additional support from the
          interrupt/exception handling code of the system is not
          required for this model.

     'gbr-offset='
          This parameter specifies the offset in bytes of the variable
          in the thread control block structure that should be used by
          the generated atomic sequences when the 'soft-tcb' model has
          been selected.  For other models this parameter is ignored.
          The specified value must be an integer multiple of four and in
          the range 0-1020.

     'strict'
          This parameter prevents mixed usage of multiple atomic models,
          even if they are compatible, and makes the compiler generate
          atomic sequences of the specified model only.

'-mtas'
     Generate the 'tas.b' opcode for '__atomic_test_and_set'.  Notice
     that depending on the particular hardware and software
     configuration this can degrade overall performance due to the
     operand cache line flushes that are implied by the 'tas.b'
     instruction.  On multi-core SH4A processors the 'tas.b' instruction
     must be used with caution since it can result in data corruption
     for certain cache configurations.

'-mprefergot'
     When generating position-independent code, emit function calls
     using the Global Offset Table instead of the Procedure Linkage
     Table.

'-musermode'
'-mno-usermode'
     Don't allow (allow) the compiler generating privileged mode code.
     Specifying '-musermode' also implies '-mno-inline-ic_invalidate' if
     the inlined code would not work in user mode.  '-musermode' is the
     default when the target is 'sh*-*-linux*'.  If the target is SH1*
     or SH2* '-musermode' has no effect, since there is no user mode.

'-multcost=NUMBER'
     Set the cost to assume for a multiply insn.

'-mdiv=STRATEGY'
     Set the division strategy to be used for integer division
     operations.  For SHmedia STRATEGY can be one of:

     'fp'
          Performs the operation in floating point.  This has a very
          high latency, but needs only a few instructions, so it might
          be a good choice if your code has enough easily-exploitable
          ILP to allow the compiler to schedule the floating-point
          instructions together with other instructions.  Division by
          zero causes a floating-point exception.

     'inv'
          Uses integer operations to calculate the inverse of the
          divisor, and then multiplies the dividend with the inverse.
          This strategy allows CSE and hoisting of the inverse
          calculation.  Division by zero calculates an unspecified
          result, but does not trap.

     'inv:minlat'
          A variant of 'inv' where, if no CSE or hoisting opportunities
          have been found, or if the entire operation has been hoisted
          to the same place, the last stages of the inverse calculation
          are intertwined with the final multiply to reduce the overall
          latency, at the expense of using a few more instructions, and
          thus offering fewer scheduling opportunities with other code.

     'call'
          Calls a library function that usually implements the
          'inv:minlat' strategy.  This gives high code density for
          'm5-*media-nofpu' compilations.

     'call2'
          Uses a different entry point of the same library function,
          where it assumes that a pointer to a lookup table has already
          been set up, which exposes the pointer load to CSE and code
          hoisting optimizations.

     'inv:call'
     'inv:call2'
     'inv:fp'
          Use the 'inv' algorithm for initial code generation, but if
          the code stays unoptimized, revert to the 'call', 'call2', or
          'fp' strategies, respectively.  Note that the
          potentially-trapping side effect of division by zero is
          carried by a separate instruction, so it is possible that all
          the integer instructions are hoisted out, but the marker for
          the side effect stays where it is.  A recombination to
          floating-point operations or a call is not possible in that
          case.

     'inv20u'
     'inv20l'
          Variants of the 'inv:minlat' strategy.  In the case that the
          inverse calculation is not separated from the multiply, they
          speed up division where the dividend fits into 20 bits (plus
          sign where applicable) by inserting a test to skip a number of
          operations in this case; this test slows down the case of
          larger dividends.  'inv20u' assumes the case of a such a small
          dividend to be unlikely, and 'inv20l' assumes it to be likely.

     For targets other than SHmedia STRATEGY can be one of:

     'call-div1'
          Calls a library function that uses the single-step division
          instruction 'div1' to perform the operation.  Division by zero
          calculates an unspecified result and does not trap.  This is
          the default except for SH4, SH2A and SHcompact.

     'call-fp'
          Calls a library function that performs the operation in double
          precision floating point.  Division by zero causes a
          floating-point exception.  This is the default for SHcompact
          with FPU. Specifying this for targets that do not have a
          double precision FPU defaults to 'call-div1'.

     'call-table'
          Calls a library function that uses a lookup table for small
          divisors and the 'div1' instruction with case distinction for
          larger divisors.  Division by zero calculates an unspecified
          result and does not trap.  This is the default for SH4.
          Specifying this for targets that do not have dynamic shift
          instructions defaults to 'call-div1'.

     When a division strategy has not been specified the default
     strategy is selected based on the current target.  For SH2A the
     default strategy is to use the 'divs' and 'divu' instructions
     instead of library function calls.

'-maccumulate-outgoing-args'
     Reserve space once for outgoing arguments in the function prologue
     rather than around each call.  Generally beneficial for performance
     and size.  Also needed for unwinding to avoid changing the stack
     frame around conditional code.

'-mdivsi3_libfunc=NAME'
     Set the name of the library function used for 32-bit signed
     division to NAME.  This only affects the name used in the 'call'
     and 'inv:call' division strategies, and the compiler still expects
     the same sets of input/output/clobbered registers as if this option
     were not present.

'-mfixed-range=REGISTER-RANGE'
     Generate code treating the given register range as fixed registers.
     A fixed register is one that the register allocator can not use.
     This is useful when compiling kernel code.  A register range is
     specified as two registers separated by a dash.  Multiple register
     ranges can be specified separated by a comma.

'-mindexed-addressing'
     Enable the use of the indexed addressing mode for
     SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
     implement 32-bit wrap-around semantics for the indexed addressing
     mode.  The architecture allows the implementation of processors
     with 64-bit MMU, which the OS could use to get 32-bit addressing,
     but since no current hardware implementation supports this or any
     other way to make the indexed addressing mode safe to use in the
     32-bit ABI, the default is '-mno-indexed-addressing'.

'-mgettrcost=NUMBER'
     Set the cost assumed for the 'gettr' instruction to NUMBER.  The
     default is 2 if '-mpt-fixed' is in effect, 100 otherwise.

'-mpt-fixed'
     Assume 'pt*' instructions won't trap.  This generally generates
     better-scheduled code, but is unsafe on current hardware.  The
     current architecture definition says that 'ptabs' and 'ptrel' trap
     when the target anded with 3 is 3.  This has the unintentional
     effect of making it unsafe to schedule these instructions before a
     branch, or hoist them out of a loop.  For example,
     '__do_global_ctors', a part of 'libgcc' that runs constructors at
     program startup, calls functions in a list which is delimited by
     -1.  With the '-mpt-fixed' option, the 'ptabs' is done before
     testing against -1.  That means that all the constructors run a bit
     more quickly, but when the loop comes to the end of the list, the
     program crashes because 'ptabs' loads -1 into a target register.

     Since this option is unsafe for any hardware implementing the
     current architecture specification, the default is '-mno-pt-fixed'.
     Unless specified explicitly with '-mgettrcost', '-mno-pt-fixed'
     also implies '-mgettrcost=100'; this deters register allocation
     from using target registers for storing ordinary integers.

'-minvalid-symbols'
     Assume symbols might be invalid.  Ordinary function symbols
     generated by the compiler are always valid to load with
     'movi'/'shori'/'ptabs' or 'movi'/'shori'/'ptrel', but with
     assembler and/or linker tricks it is possible to generate symbols
     that cause 'ptabs' or 'ptrel' to trap.  This option is only
     meaningful when '-mno-pt-fixed' is in effect.  It prevents
     cross-basic-block CSE, hoisting and most scheduling of symbol
     loads.  The default is '-mno-invalid-symbols'.

'-mbranch-cost=NUM'
     Assume NUM to be the cost for a branch instruction.  Higher numbers
     make the compiler try to generate more branch-free code if
     possible.  If not specified the value is selected depending on the
     processor type that is being compiled for.

'-mzdcbranch'
'-mno-zdcbranch'
     Assume (do not assume) that zero displacement conditional branch
     instructions 'bt' and 'bf' are fast.  If '-mzdcbranch' is
     specified, the compiler prefers zero displacement branch code
     sequences.  This is enabled by default when generating code for SH4
     and SH4A. It can be explicitly disabled by specifying
     '-mno-zdcbranch'.

'-mcbranch-force-delay-slot'
     Force the usage of delay slots for conditional branches, which
     stuffs the delay slot with a 'nop' if a suitable instruction can't
     be found.  By default this option is disabled.  It can be enabled
     to work around hardware bugs as found in the original SH7055.

'-mfused-madd'
'-mno-fused-madd'
     Generate code that uses (does not use) the floating-point multiply
     and accumulate instructions.  These instructions are generated by
     default if hardware floating point is used.  The machine-dependent
     '-mfused-madd' option is now mapped to the machine-independent
     '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to
     '-ffp-contract=off'.

'-mfsca'
'-mno-fsca'
     Allow or disallow the compiler to emit the 'fsca' instruction for
     sine and cosine approximations.  The option '-mfsca' must be used
     in combination with '-funsafe-math-optimizations'.  It is enabled
     by default when generating code for SH4A. Using '-mno-fsca'
     disables sine and cosine approximations even if
     '-funsafe-math-optimizations' is in effect.

'-mfsrra'
'-mno-fsrra'
     Allow or disallow the compiler to emit the 'fsrra' instruction for
     reciprocal square root approximations.  The option '-mfsrra' must
     be used in combination with '-funsafe-math-optimizations' and
     '-ffinite-math-only'.  It is enabled by default when generating
     code for SH4A. Using '-mno-fsrra' disables reciprocal square root
     approximations even if '-funsafe-math-optimizations' and
     '-ffinite-math-only' are in effect.

'-mpretend-cmove'
     Prefer zero-displacement conditional branches for conditional move
     instruction patterns.  This can result in faster code on the SH4
     processor.


File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options

3.17.42 Solaris 2 Options
-------------------------

These '-m' options are supported on Solaris 2:

'-mclear-hwcap'
     '-mclear-hwcap' tells the compiler to remove the hardware
     capabilities generated by the Solaris assembler.  This is only
     necessary when object files use ISA extensions not supported by the
     current machine, but check at runtime whether or not to use them.

'-mimpure-text'
     '-mimpure-text', used in addition to '-shared', tells the compiler
     to not pass '-z text' to the linker when linking a shared object.
     Using this option, you can link position-dependent code into a
     shared object.

     '-mimpure-text' suppresses the "relocations remain against
     allocatable but non-writable sections" linker error message.
     However, the necessary relocations trigger copy-on-write, and the
     shared object is not actually shared across processes.  Instead of
     using '-mimpure-text', you should compile all source code with
     '-fpic' or '-fPIC'.

 These switches are supported in addition to the above on Solaris 2:

'-pthreads'
     Add support for multithreading using the POSIX threads library.
     This option sets flags for both the preprocessor and linker.  This
     option does not affect the thread safety of object code produced by
     the compiler or that of libraries supplied with it.

'-pthread'
     This is a synonym for '-pthreads'.


File: gcc.info,  Node: SPARC Options,  Next: SPU Options,  Prev: Solaris 2 Options,  Up: Submodel Options

3.17.43 SPARC Options
---------------------

These '-m' options are supported on the SPARC:

'-mno-app-regs'
'-mapp-regs'
     Specify '-mapp-regs' to generate output using the global registers
     2 through 4, which the SPARC SVR4 ABI reserves for applications.
     Like the global register 1, each global register 2 through 4 is
     then treated as an allocable register that is clobbered by function
     calls.  This is the default.

     To be fully SVR4 ABI-compliant at the cost of some performance
     loss, specify '-mno-app-regs'.  You should compile libraries and
     system software with this option.

'-mflat'
'-mno-flat'
     With '-mflat', the compiler does not generate save/restore
     instructions and uses a "flat" or single register window model.
     This model is compatible with the regular register window model.
     The local registers and the input registers (0-5) are still treated
     as "call-saved" registers and are saved on the stack as needed.

     With '-mno-flat' (the default), the compiler generates save/restore
     instructions (except for leaf functions).  This is the normal
     operating mode.

'-mfpu'
'-mhard-float'
     Generate output containing floating-point instructions.  This is
     the default.

'-mno-fpu'
'-msoft-float'
     Generate output containing library calls for floating point.
     *Warning:* the requisite libraries are not available for all SPARC
     targets.  Normally the facilities of the machine's usual C compiler
     are used, but this cannot be done directly in cross-compilation.
     You must make your own arrangements to provide suitable library
     functions for cross-compilation.  The embedded targets
     'sparc-*-aout' and 'sparclite-*-*' do provide software
     floating-point support.

     '-msoft-float' changes the calling convention in the output file;
     therefore, it is only useful if you compile _all_ of a program with
     this option.  In particular, you need to compile 'libgcc.a', the
     library that comes with GCC, with '-msoft-float' in order for this
     to work.

'-mhard-quad-float'
     Generate output containing quad-word (long double) floating-point
     instructions.

'-msoft-quad-float'
     Generate output containing library calls for quad-word (long
     double) floating-point instructions.  The functions called are
     those specified in the SPARC ABI.  This is the default.

     As of this writing, there are no SPARC implementations that have
     hardware support for the quad-word floating-point instructions.
     They all invoke a trap handler for one of these instructions, and
     then the trap handler emulates the effect of the instruction.
     Because of the trap handler overhead, this is much slower than
     calling the ABI library routines.  Thus the '-msoft-quad-float'
     option is the default.

'-mno-unaligned-doubles'
'-munaligned-doubles'
     Assume that doubles have 8-byte alignment.  This is the default.

     With '-munaligned-doubles', GCC assumes that doubles have 8-byte
     alignment only if they are contained in another type, or if they
     have an absolute address.  Otherwise, it assumes they have 4-byte
     alignment.  Specifying this option avoids some rare compatibility
     problems with code generated by other compilers.  It is not the
     default because it results in a performance loss, especially for
     floating-point code.

'-muser-mode'
'-mno-user-mode'
     Do not generate code that can only run in supervisor mode.  This is
     relevant only for the 'casa' instruction emitted for the LEON3
     processor.  The default is '-mno-user-mode'.

'-mno-faster-structs'
'-mfaster-structs'
     With '-mfaster-structs', the compiler assumes that structures
     should have 8-byte alignment.  This enables the use of pairs of
     'ldd' and 'std' instructions for copies in structure assignment, in
     place of twice as many 'ld' and 'st' pairs.  However, the use of
     this changed alignment directly violates the SPARC ABI.  Thus, it's
     intended only for use on targets where the developer acknowledges
     that their resulting code is not directly in line with the rules of
     the ABI.

'-mcpu=CPU_TYPE'
     Set the instruction set, register set, and instruction scheduling
     parameters for machine type CPU_TYPE.  Supported values for
     CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc',
     'leon', 'leon3', 'leon3v7', 'sparclite', 'f930', 'f934',
     'sparclite86x', 'sparclet', 'tsc701', 'v9', 'ultrasparc',
     'ultrasparc3', 'niagara', 'niagara2', 'niagara3' and 'niagara4'.

     Native Solaris and GNU/Linux toolchains also support the value
     'native', which selects the best architecture option for the host
     processor.  '-mcpu=native' has no effect if GCC does not recognize
     the processor.

     Default instruction scheduling parameters are used for values that
     select an architecture and not an implementation.  These are 'v7',
     'v8', 'sparclite', 'sparclet', 'v9'.

     Here is a list of each supported architecture and their supported
     implementations.

     v7
          cypress, leon3v7

     v8
          supersparc, hypersparc, leon, leon3

     sparclite
          f930, f934, sparclite86x

     sparclet
          tsc701

     v9
          ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4

     By default (unless configured otherwise), GCC generates code for
     the V7 variant of the SPARC architecture.  With '-mcpu=cypress',
     the compiler additionally optimizes it for the Cypress CY7C602
     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
     also appropriate for the older SPARCStation 1, 2, IPX etc.

     With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC
     architecture.  The only difference from V7 code is that the
     compiler emits the integer multiply and integer divide instructions
     which exist in SPARC-V8 but not in SPARC-V7.  With
     '-mcpu=supersparc', the compiler additionally optimizes it for the
     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
     series.

     With '-mcpu=sparclite', GCC generates code for the SPARClite
     variant of the SPARC architecture.  This adds the integer multiply,
     integer divide step and scan ('ffs') instructions which exist in
     SPARClite but not in SPARC-V7.  With '-mcpu=f930', the compiler
     additionally optimizes it for the Fujitsu MB86930 chip, which is
     the original SPARClite, with no FPU.  With '-mcpu=f934', the
     compiler additionally optimizes it for the Fujitsu MB86934 chip,
     which is the more recent SPARClite with FPU.

     With '-mcpu=sparclet', GCC generates code for the SPARClet variant
     of the SPARC architecture.  This adds the integer multiply,
     multiply/accumulate, integer divide step and scan ('ffs')
     instructions which exist in SPARClet but not in SPARC-V7.  With
     '-mcpu=tsc701', the compiler additionally optimizes it for the
     TEMIC SPARClet chip.

     With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC
     architecture.  This adds 64-bit integer and floating-point move
     instructions, 3 additional floating-point condition code registers
     and conditional move instructions.  With '-mcpu=ultrasparc', the
     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
     chips.  With '-mcpu=ultrasparc3', the compiler additionally
     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
     chips.  With '-mcpu=niagara', the compiler additionally optimizes
     it for Sun UltraSPARC T1 chips.  With '-mcpu=niagara2', the
     compiler additionally optimizes it for Sun UltraSPARC T2 chips.
     With '-mcpu=niagara3', the compiler additionally optimizes it for
     Sun UltraSPARC T3 chips.  With '-mcpu=niagara4', the compiler
     additionally optimizes it for Sun UltraSPARC T4 chips.

'-mtune=CPU_TYPE'
     Set the instruction scheduling parameters for machine type
     CPU_TYPE, but do not set the instruction set or register set that
     the option '-mcpu=CPU_TYPE' does.

     The same values for '-mcpu=CPU_TYPE' can be used for
     '-mtune=CPU_TYPE', but the only useful values are those that select
     a particular CPU implementation.  Those are 'cypress',
     'supersparc', 'hypersparc', 'leon', 'leon3', 'leon3v7', 'f930',
     'f934', 'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3',
     'niagara', 'niagara2', 'niagara3' and 'niagara4'.  With native
     Solaris and GNU/Linux toolchains, 'native' can also be used.

'-mv8plus'
'-mno-v8plus'
     With '-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
     difference from the V8 ABI is that the global and out registers are
     considered 64 bits wide.  This is enabled by default on Solaris in
     32-bit mode for all SPARC-V9 processors.

'-mvis'
'-mno-vis'
     With '-mvis', GCC generates code that takes advantage of the
     UltraSPARC Visual Instruction Set extensions.  The default is
     '-mno-vis'.

'-mvis2'
'-mno-vis2'
     With '-mvis2', GCC generates code that takes advantage of version
     2.0 of the UltraSPARC Visual Instruction Set extensions.  The
     default is '-mvis2' when targeting a cpu that supports such
     instructions, such as UltraSPARC-III and later.  Setting '-mvis2'
     also sets '-mvis'.

'-mvis3'
'-mno-vis3'
     With '-mvis3', GCC generates code that takes advantage of version
     3.0 of the UltraSPARC Visual Instruction Set extensions.  The
     default is '-mvis3' when targeting a cpu that supports such
     instructions, such as niagara-3 and later.  Setting '-mvis3' also
     sets '-mvis2' and '-mvis'.

'-mcbcond'
'-mno-cbcond'
     With '-mcbcond', GCC generates code that takes advantage of
     compare-and-branch instructions, as defined in the Sparc
     Architecture 2011.  The default is '-mcbcond' when targeting a cpu
     that supports such instructions, such as niagara-4 and later.

'-mpopc'
'-mno-popc'
     With '-mpopc', GCC generates code that takes advantage of the
     UltraSPARC population count instruction.  The default is '-mpopc'
     when targeting a cpu that supports such instructions, such as
     Niagara-2 and later.

'-mfmaf'
'-mno-fmaf'
     With '-mfmaf', GCC generates code that takes advantage of the
     UltraSPARC Fused Multiply-Add Floating-point extensions.  The
     default is '-mfmaf' when targeting a cpu that supports such
     instructions, such as Niagara-3 and later.

'-mfix-at697f'
     Enable the documented workaround for the single erratum of the
     Atmel AT697F processor (which corresponds to erratum #13 of the
     AT697E processor).

'-mfix-ut699'
     Enable the documented workarounds for the floating-point errata and
     the data cache nullify errata of the UT699 processor.

 These '-m' options are supported in addition to the above on SPARC-V9
processors in 64-bit environments:

'-m32'
'-m64'
     Generate code for a 32-bit or 64-bit environment.  The 32-bit
     environment sets int, long and pointer to 32 bits.  The 64-bit
     environment sets int to 32 bits and long and pointer to 64 bits.

'-mcmodel=WHICH'
     Set the code model to one of

     'medlow'
          The Medium/Low code model: 64-bit addresses, programs must be
          linked in the low 32 bits of memory.  Programs can be
          statically or dynamically linked.

     'medmid'
          The Medium/Middle code model: 64-bit addresses, programs must
          be linked in the low 44 bits of memory, the text and data
          segments must be less than 2GB in size and the data segment
          must be located within 2GB of the text segment.

     'medany'
          The Medium/Anywhere code model: 64-bit addresses, programs may
          be linked anywhere in memory, the text and data segments must
          be less than 2GB in size and the data segment must be located
          within 2GB of the text segment.

     'embmedany'
          The Medium/Anywhere code model for embedded systems: 64-bit
          addresses, the text and data segments must be less than 2GB in
          size, both starting anywhere in memory (determined at link
          time).  The global register %g4 points to the base of the data
          segment.  Programs are statically linked and PIC is not
          supported.

'-mmemory-model=MEM-MODEL'
     Set the memory model in force on the processor to one of

     'default'
          The default memory model for the processor and operating
          system.

     'rmo'
          Relaxed Memory Order

     'pso'
          Partial Store Order

     'tso'
          Total Store Order

     'sc'
          Sequential Consistency

     These memory models are formally defined in Appendix D of the Sparc
     V9 architecture manual, as set in the processor's 'PSTATE.MM'
     field.

'-mstack-bias'
'-mno-stack-bias'
     With '-mstack-bias', GCC assumes that the stack pointer, and frame
     pointer if present, are offset by -2047 which must be added back
     when making stack frame references.  This is the default in 64-bit
     mode.  Otherwise, assume no such offset is present.


File: gcc.info,  Node: SPU Options,  Next: System V Options,  Prev: SPARC Options,  Up: Submodel Options

3.17.44 SPU Options
-------------------

These '-m' options are supported on the SPU:

'-mwarn-reloc'
'-merror-reloc'

     The loader for SPU does not handle dynamic relocations.  By
     default, GCC gives an error when it generates code that requires a
     dynamic relocation.  '-mno-error-reloc' disables the error,
     '-mwarn-reloc' generates a warning instead.

'-msafe-dma'
'-munsafe-dma'

     Instructions that initiate or test completion of DMA must not be
     reordered with respect to loads and stores of the memory that is
     being accessed.  With '-munsafe-dma' you must use the 'volatile'
     keyword to protect memory accesses, but that can lead to
     inefficient code in places where the memory is known to not change.
     Rather than mark the memory as volatile, you can use '-msafe-dma'
     to tell the compiler to treat the DMA instructions as potentially
     affecting all memory.

'-mbranch-hints'

     By default, GCC generates a branch hint instruction to avoid
     pipeline stalls for always-taken or probably-taken branches.  A
     hint is not generated closer than 8 instructions away from its
     branch.  There is little reason to disable them, except for
     debugging purposes, or to make an object a little bit smaller.

'-msmall-mem'
'-mlarge-mem'

     By default, GCC generates code assuming that addresses are never
     larger than 18 bits.  With '-mlarge-mem' code is generated that
     assumes a full 32-bit address.

'-mstdmain'

     By default, GCC links against startup code that assumes the
     SPU-style main function interface (which has an unconventional
     parameter list).  With '-mstdmain', GCC links your program against
     startup code that assumes a C99-style interface to 'main',
     including a local copy of 'argv' strings.

'-mfixed-range=REGISTER-RANGE'
     Generate code treating the given register range as fixed registers.
     A fixed register is one that the register allocator cannot use.
     This is useful when compiling kernel code.  A register range is
     specified as two registers separated by a dash.  Multiple register
     ranges can be specified separated by a comma.

'-mea32'
'-mea64'
     Compile code assuming that pointers to the PPU address space
     accessed via the '__ea' named address space qualifier are either 32
     or 64 bits wide.  The default is 32 bits.  As this is an
     ABI-changing option, all object code in an executable must be
     compiled with the same setting.

'-maddress-space-conversion'
'-mno-address-space-conversion'
     Allow/disallow treating the '__ea' address space as superset of the
     generic address space.  This enables explicit type casts between
     '__ea' and generic pointer as well as implicit conversions of
     generic pointers to '__ea' pointers.  The default is to allow
     address space pointer conversions.

'-mcache-size=CACHE-SIZE'
     This option controls the version of libgcc that the compiler links
     to an executable and selects a software-managed cache for accessing
     variables in the '__ea' address space with a particular cache size.
     Possible options for CACHE-SIZE are '8', '16', '32', '64' and
     '128'.  The default cache size is 64KB.

'-matomic-updates'
'-mno-atomic-updates'
     This option controls the version of libgcc that the compiler links
     to an executable and selects whether atomic updates to the
     software-managed cache of PPU-side variables are used.  If you use
     atomic updates, changes to a PPU variable from SPU code using the
     '__ea' named address space qualifier do not interfere with changes
     to other PPU variables residing in the same cache line from PPU
     code.  If you do not use atomic updates, such interference may
     occur; however, writing back cache lines is more efficient.  The
     default behavior is to use atomic updates.

'-mdual-nops'
'-mdual-nops=N'
     By default, GCC inserts nops to increase dual issue when it expects
     it to increase performance.  N can be a value from 0 to 10.  A
     smaller N inserts fewer nops.  10 is the default, 0 is the same as
     '-mno-dual-nops'.  Disabled with '-Os'.

'-mhint-max-nops=N'
     Maximum number of nops to insert for a branch hint.  A branch hint
     must be at least 8 instructions away from the branch it is
     affecting.  GCC inserts up to N nops to enforce this, otherwise it
     does not generate the branch hint.

'-mhint-max-distance=N'
     The encoding of the branch hint instruction limits the hint to be
     within 256 instructions of the branch it is affecting.  By default,
     GCC makes sure it is within 125.

'-msafe-hints'
     Work around a hardware bug that causes the SPU to stall
     indefinitely.  By default, GCC inserts the 'hbrp' instruction to
     make sure this stall won't happen.


File: gcc.info,  Node: System V Options,  Next: TILE-Gx Options,  Prev: SPU Options,  Up: Submodel Options

3.17.45 Options for System V
----------------------------

These additional options are available on System V Release 4 for
compatibility with other compilers on those systems:

'-G'
     Create a shared object.  It is recommended that '-symbolic' or
     '-shared' be used instead.

'-Qy'
     Identify the versions of each tool used by the compiler, in a
     '.ident' assembler directive in the output.

'-Qn'
     Refrain from adding '.ident' directives to the output file (this is
     the default).

'-YP,DIRS'
     Search the directories DIRS, and no others, for libraries specified
     with '-l'.

'-Ym,DIR'
     Look in the directory DIR to find the M4 preprocessor.  The
     assembler uses this option.


File: gcc.info,  Node: TILE-Gx Options,  Next: TILEPro Options,  Prev: System V Options,  Up: Submodel Options

3.17.46 TILE-Gx Options
-----------------------

These '-m' options are supported on the TILE-Gx:

'-mcmodel=small'
     Generate code for the small model.  The distance for direct calls
     is limited to 500M in either direction.  PC-relative addresses are
     32 bits.  Absolute addresses support the full address range.

'-mcmodel=large'
     Generate code for the large model.  There is no limitation on call
     distance, pc-relative addresses, or absolute addresses.

'-mcpu=NAME'
     Selects the type of CPU to be targeted.  Currently the only
     supported type is 'tilegx'.

'-m32'
'-m64'
     Generate code for a 32-bit or 64-bit environment.  The 32-bit
     environment sets int, long, and pointer to 32 bits.  The 64-bit
     environment sets int to 32 bits and long and pointer to 64 bits.

'-mbig-endian'
'-mlittle-endian'
     Generate code in big/little endian mode, respectively.


File: gcc.info,  Node: TILEPro Options,  Next: V850 Options,  Prev: TILE-Gx Options,  Up: Submodel Options

3.17.47 TILEPro Options
-----------------------

These '-m' options are supported on the TILEPro:

'-mcpu=NAME'
     Selects the type of CPU to be targeted.  Currently the only
     supported type is 'tilepro'.

'-m32'
     Generate code for a 32-bit environment, which sets int, long, and
     pointer to 32 bits.  This is the only supported behavior so the
     flag is essentially ignored.


File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TILEPro Options,  Up: Submodel Options

3.17.48 V850 Options
--------------------

These '-m' options are defined for V850 implementations:

'-mlong-calls'
'-mno-long-calls'
     Treat all calls as being far away (near).  If calls are assumed to
     be far away, the compiler always loads the function's address into
     a register, and calls indirect through the pointer.

'-mno-ep'
'-mep'
     Do not optimize (do optimize) basic blocks that use the same index
     pointer 4 or more times to copy pointer into the 'ep' register, and
     use the shorter 'sld' and 'sst' instructions.  The '-mep' option is
     on by default if you optimize.

'-mno-prolog-function'
'-mprolog-function'
     Do not use (do use) external functions to save and restore
     registers at the prologue and epilogue of a function.  The external
     functions are slower, but use less code space if more than one
     function saves the same number of registers.  The
     '-mprolog-function' option is on by default if you optimize.

'-mspace'
     Try to make the code as small as possible.  At present, this just
     turns on the '-mep' and '-mprolog-function' options.

'-mtda=N'
     Put static or global variables whose size is N bytes or less into
     the tiny data area that register 'ep' points to.  The tiny data
     area can hold up to 256 bytes in total (128 bytes for byte
     references).

'-msda=N'
     Put static or global variables whose size is N bytes or less into
     the small data area that register 'gp' points to.  The small data
     area can hold up to 64 kilobytes.

'-mzda=N'
     Put static or global variables whose size is N bytes or less into
     the first 32 kilobytes of memory.

'-mv850'
     Specify that the target processor is the V850.

'-mv850e3v5'
     Specify that the target processor is the V850E3V5.  The
     preprocessor constant '__v850e3v5__' is defined if this option is
     used.

'-mv850e2v4'
     Specify that the target processor is the V850E3V5.  This is an
     alias for the '-mv850e3v5' option.

'-mv850e2v3'
     Specify that the target processor is the V850E2V3.  The
     preprocessor constant '__v850e2v3__' is defined if this option is
     used.

'-mv850e2'
     Specify that the target processor is the V850E2.  The preprocessor
     constant '__v850e2__' is defined if this option is used.

'-mv850e1'
     Specify that the target processor is the V850E1.  The preprocessor
     constants '__v850e1__' and '__v850e__' are defined if this option
     is used.

'-mv850es'
     Specify that the target processor is the V850ES. This is an alias
     for the '-mv850e1' option.

'-mv850e'
     Specify that the target processor is the V850E.  The preprocessor
     constant '__v850e__' is defined if this option is used.

     If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor
     '-mv850e2v3' nor '-mv850e3v5' are defined then a default target
     processor is chosen and the relevant '__v850*__' preprocessor
     constant is defined.

     The preprocessor constants '__v850' and '__v851__' are always
     defined, regardless of which processor variant is the target.

'-mdisable-callt'
'-mno-disable-callt'
     This option suppresses generation of the 'CALLT' instruction for
     the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the
     v850 architecture.

     This option is enabled by default when the RH850 ABI is in use (see
     '-mrh850-abi'), and disabled by default when the GCC ABI is in use.
     If 'CALLT' instructions are being generated then the C preprocessor
     symbol '__V850_CALLT__' is defined.

'-mrelax'
'-mno-relax'
     Pass on (or do not pass on) the '-mrelax' command-line option to
     the assembler.

'-mlong-jumps'
'-mno-long-jumps'
     Disable (or re-enable) the generation of PC-relative jump
     instructions.

'-msoft-float'
'-mhard-float'
     Disable (or re-enable) the generation of hardware floating point
     instructions.  This option is only significant when the target
     architecture is 'V850E2V3' or higher.  If hardware floating point
     instructions are being generated then the C preprocessor symbol
     '__FPU_OK__' is defined, otherwise the symbol '__NO_FPU__' is
     defined.

'-mloop'
     Enables the use of the e3v5 LOOP instruction.  The use of this
     instruction is not enabled by default when the e3v5 architecture is
     selected because its use is still experimental.

'-mrh850-abi'
'-mghs'
     Enables support for the RH850 version of the V850 ABI. This is the
     default.  With this version of the ABI the following rules apply:

        * Integer sized structures and unions are returned via a memory
          pointer rather than a register.

        * Large structures and unions (more than 8 bytes in size) are
          passed by value.

        * Functions are aligned to 16-bit boundaries.

        * The '-m8byte-align' command-line option is supported.

        * The '-mdisable-callt' command-line option is enabled by
          default.  The '-mno-disable-callt' command-line option is not
          supported.

     When this version of the ABI is enabled the C preprocessor symbol
     '__V850_RH850_ABI__' is defined.

'-mgcc-abi'
     Enables support for the old GCC version of the V850 ABI. With this
     version of the ABI the following rules apply:

        * Integer sized structures and unions are returned in register
          'r10'.

        * Large structures and unions (more than 8 bytes in size) are
          passed by reference.

        * Functions are aligned to 32-bit boundaries, unless optimizing
          for size.

        * The '-m8byte-align' command-line option is not supported.

        * The '-mdisable-callt' command-line option is supported but not
          enabled by default.

     When this version of the ABI is enabled the C preprocessor symbol
     '__V850_GCC_ABI__' is defined.

'-m8byte-align'
'-mno-8byte-align'
     Enables support for 'double' and 'long long' types to be aligned on
     8-byte boundaries.  The default is to restrict the alignment of all
     objects to at most 4-bytes.  When '-m8byte-align' is in effect the
     C preprocessor symbol '__V850_8BYTE_ALIGN__' is defined.

'-mbig-switch'
     Generate code suitable for big switch tables.  Use this option only
     if the assembler/linker complain about out of range branches within
     a switch table.

'-mapp-regs'
     This option causes r2 and r5 to be used in the code generated by
     the compiler.  This setting is the default.

'-mno-app-regs'
     This option causes r2 and r5 to be treated as fixed registers.


File: gcc.info,  Node: VAX Options,  Next: Visium Options,  Prev: V850 Options,  Up: Submodel Options

3.17.49 VAX Options
-------------------

These '-m' options are defined for the VAX:

'-munix'
     Do not output certain jump instructions ('aobleq' and so on) that
     the Unix assembler for the VAX cannot handle across long ranges.

'-mgnu'
     Do output those jump instructions, on the assumption that the GNU
     assembler is being used.

'-mg'
     Output code for G-format floating-point numbers instead of
     D-format.


File: gcc.info,  Node: Visium Options,  Next: VMS Options,  Prev: VAX Options,  Up: Submodel Options

3.17.50 Visium Options
----------------------

'-mdebug'
     A program which performs file I/O and is destined to run on an MCM
     target should be linked with this option.  It causes the libraries
     libc.a and libdebug.a to be linked.  The program should be run on
     the target under the control of the GDB remote debugging stub.

'-msim'
     A program which performs file I/O and is destined to run on the
     simulator should be linked with option.  This causes libraries
     libc.a and libsim.a to be linked.

'-mfpu'
'-mhard-float'
     Generate code containing floating-point instructions.  This is the
     default.

'-mno-fpu'
'-msoft-float'
     Generate code containing library calls for floating-point.

     '-msoft-float' changes the calling convention in the output file;
     therefore, it is only useful if you compile _all_ of a program with
     this option.  In particular, you need to compile 'libgcc.a', the
     library that comes with GCC, with '-msoft-float' in order for this
     to work.

'-mcpu=CPU_TYPE'
     Set the instruction set, register set, and instruction scheduling
     parameters for machine type CPU_TYPE.  Supported values for
     CPU_TYPE are 'mcm', 'gr5' and 'gr6'.

     'mcm' is a synonym of 'gr5' present for backward compatibility.

     By default (unless configured otherwise), GCC generates code for
     the GR5 variant of the Visium architecture.

     With '-mcpu=gr6', GCC generates code for the GR6 variant of the
     Visium architecture.  The only difference from GR5 code is that the
     compiler will generate block move instructions.

'-mtune=CPU_TYPE'
     Set the instruction scheduling parameters for machine type
     CPU_TYPE, but do not set the instruction set or register set that
     the option '-mcpu=CPU_TYPE' would.

'-msv-mode'
     Generate code for the supervisor mode, where there are no
     restrictions on the access to general registers.  This is the
     default.

'-muser-mode'
     Generate code for the user mode, where the access to some general
     registers is forbidden: on the GR5, registers r24 to r31 cannot be
     accessed in this mode; on the GR6, only registers r29 to r31 are
     affected.


File: gcc.info,  Node: VMS Options,  Next: VxWorks Options,  Prev: Visium Options,  Up: Submodel Options

3.17.51 VMS Options
-------------------

These '-m' options are defined for the VMS implementations:

'-mvms-return-codes'
     Return VMS condition codes from 'main'.  The default is to return
     POSIX-style condition (e.g. error) codes.

'-mdebug-main=PREFIX'
     Flag the first routine whose name starts with PREFIX as the main
     routine for the debugger.

'-mmalloc64'
     Default to 64-bit memory allocation routines.

'-mpointer-size=SIZE'
     Set the default size of pointers.  Possible options for SIZE are
     '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit
     pointers, and 'no' for supporting only 32 bit pointers.  The later
     option disables 'pragma pointer_size'.


File: gcc.info,  Node: VxWorks Options,  Next: x86 Options,  Prev: VMS Options,  Up: Submodel Options

3.17.52 VxWorks Options
-----------------------

The options in this section are defined for all VxWorks targets.
Options specific to the target hardware are listed with the other
options for that target.

'-mrtp'
     GCC can generate code for both VxWorks kernels and real time
     processes (RTPs).  This option switches from the former to the
     latter.  It also defines the preprocessor macro '__RTP__'.

'-non-static'
     Link an RTP executable against shared libraries rather than static
     libraries.  The options '-static' and '-shared' can also be used
     for RTPs (*note Link Options::); '-static' is the default.

'-Bstatic'
'-Bdynamic'
     These options are passed down to the linker.  They are defined for
     compatibility with Diab.

'-Xbind-lazy'
     Enable lazy binding of function calls.  This option is equivalent
     to '-Wl,-z,now' and is defined for compatibility with Diab.

'-Xbind-now'
     Disable lazy binding of function calls.  This option is the default
     and is defined for compatibility with Diab.


File: gcc.info,  Node: x86 Options,  Next: x86 Windows Options,  Prev: VxWorks Options,  Up: Submodel Options

3.17.53 x86 Options
-------------------

These '-m' options are defined for the x86 family of computers.

'-march=CPU-TYPE'
     Generate instructions for the machine type CPU-TYPE.  In contrast
     to '-mtune=CPU-TYPE', which merely tunes the generated code for the
     specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code
     that may not run at all on processors other than the one indicated.
     Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'.

     The choices for CPU-TYPE are:

     'native'
          This selects the CPU to generate code for at compilation time
          by determining the processor type of the compiling machine.
          Using '-march=native' enables all instruction subsets
          supported by the local machine (hence the result might not run
          on different machines).  Using '-mtune=native' produces code
          optimized for the local machine under the constraints of the
          selected instruction set.

     'i386'
          Original Intel i386 CPU.

     'i486'
          Intel i486 CPU.  (No scheduling is implemented for this chip.)

     'i586'
     'pentium'
          Intel Pentium CPU with no MMX support.

     'pentium-mmx'
          Intel Pentium MMX CPU, based on Pentium core with MMX
          instruction set support.

     'pentiumpro'
          Intel Pentium Pro CPU.

     'i686'
          When used with '-march', the Pentium Pro instruction set is
          used, so the code runs on all i686 family chips.  When used
          with '-mtune', it has the same meaning as 'generic'.

     'pentium2'
          Intel Pentium II CPU, based on Pentium Pro core with MMX
          instruction set support.

     'pentium3'
     'pentium3m'
          Intel Pentium III CPU, based on Pentium Pro core with MMX and
          SSE instruction set support.

     'pentium-m'
          Intel Pentium M; low-power version of Intel Pentium III CPU
          with MMX, SSE and SSE2 instruction set support.  Used by
          Centrino notebooks.

     'pentium4'
     'pentium4m'
          Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set
          support.

     'prescott'
          Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2
          and SSE3 instruction set support.

     'nocona'
          Improved version of Intel Pentium 4 CPU with 64-bit
          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.

     'core2'
          Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
          and SSSE3 instruction set support.

     'nehalem'
          Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2,
          SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set
          support.

     'westmere'
          Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2,
          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL
          instruction set support.

     'sandybridge'
          Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL
          instruction set support.

     'ivybridge'
          Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2,
          SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL,
          FSGSBASE, RDRND and F16C instruction set support.

     'haswell'
          Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE,
          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction
          set support.

     'broadwell'
          Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE,
          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES,
          PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX
          and PREFETCHW instruction set support.

     'bonnell'
          Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE,
          SSE2, SSE3 and SSSE3 instruction set support.

     'silvermont'
          Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE,
          SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and
          RDRND instruction set support.

     'knl'
          Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX,
          SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
          AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED,
          ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER and AVX512CD
          instruction set support.

     'k6'
          AMD K6 CPU with MMX instruction set support.

     'k6-2'
     'k6-3'
          Improved versions of AMD K6 CPU with MMX and 3DNow!
          instruction set support.

     'athlon'
     'athlon-tbird'
          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE
          prefetch instructions support.

     'athlon-4'
     'athlon-xp'
     'athlon-mp'
          Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and
          full SSE instruction set support.

     'k8'
     'opteron'
     'athlon64'
     'athlon-fx'
          Processors based on the AMD K8 core with x86-64 instruction
          set support, including the AMD Opteron, Athlon 64, and Athlon
          64 FX processors.  (This supersets MMX, SSE, SSE2, 3DNow!,
          enhanced 3DNow! and 64-bit instruction set extensions.)

     'k8-sse3'
     'opteron-sse3'
     'athlon64-sse3'
          Improved versions of AMD K8 cores with SSE3 instruction set
          support.

     'amdfam10'
     'barcelona'
          CPUs based on AMD Family 10h cores with x86-64 instruction set
          support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
          enhanced 3DNow!, ABM and 64-bit instruction set extensions.)

     'bdver1'
          CPUs based on AMD Family 15h cores with x86-64 instruction set
          support.  (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL,
          CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
          and 64-bit instruction set extensions.)
     'bdver2'
          AMD Family 15h core based CPUs with x86-64 instruction set
          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP,
          LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
          SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
     'bdver3'
          AMD Family 15h core based CPUs with x86-64 instruction set
          support.  (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE,
          AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3,
          SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set
          extensions.
     'bdver4'
          AMD Family 15h core based CPUs with x86-64 instruction set
          support.  (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4,
          FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX,
          SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit
          instruction set extensions.

     'btver1'
          CPUs based on AMD Family 14h cores with x86-64 instruction set
          support.  (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A,
          CX16, ABM and 64-bit instruction set extensions.)

     'btver2'
          CPUs based on AMD Family 16h cores with x86-64 instruction set
          support.  This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES,
          SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX
          and 64-bit instruction set extensions.

     'winchip-c6'
          IDT WinChip C6 CPU, dealt in same way as i486 with additional
          MMX instruction set support.

     'winchip2'
          IDT WinChip 2 CPU, dealt in same way as i486 with additional
          MMX and 3DNow! instruction set support.

     'c3'
          VIA C3 CPU with MMX and 3DNow! instruction set support.  (No
          scheduling is implemented for this chip.)

     'c3-2'
          VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set
          support.  (No scheduling is implemented for this chip.)

     'geode'
          AMD Geode embedded processor with MMX and 3DNow! instruction
          set support.

'-mtune=CPU-TYPE'
     Tune to CPU-TYPE everything applicable about the generated code,
     except for the ABI and the set of available instructions.  While
     picking a specific CPU-TYPE schedules things appropriately for that
     particular chip, the compiler does not generate any code that
     cannot run on the default machine type unless you use a
     '-march=CPU-TYPE' option.  For example, if GCC is configured for
     i686-pc-linux-gnu then '-mtune=pentium4' generates code that is
     tuned for Pentium 4 but still runs on i686 machines.

     The choices for CPU-TYPE are the same as for '-march'.  In
     addition, '-mtune' supports 2 extra choices for CPU-TYPE:

     'generic'
          Produce code optimized for the most common IA32/AMD64/EM64T
          processors.  If you know the CPU on which your code will run,
          then you should use the corresponding '-mtune' or '-march'
          option instead of '-mtune=generic'.  But, if you do not know
          exactly what CPU users of your application will have, then you
          should use this option.

          As new processors are deployed in the marketplace, the
          behavior of this option will change.  Therefore, if you
          upgrade to a newer version of GCC, code generation controlled
          by this option will change to reflect the processors that are
          most common at the time that version of GCC is released.

          There is no '-march=generic' option because '-march' indicates
          the instruction set the compiler can use, and there is no
          generic instruction set applicable to all processors.  In
          contrast, '-mtune' indicates the processor (or, in this case,
          collection of processors) for which the code is optimized.

     'intel'
          Produce code optimized for the most current Intel processors,
          which are Haswell and Silvermont for this version of GCC. If
          you know the CPU on which your code will run, then you should
          use the corresponding '-mtune' or '-march' option instead of
          '-mtune=intel'.  But, if you want your application performs
          better on both Haswell and Silvermont, then you should use
          this option.

          As new Intel processors are deployed in the marketplace, the
          behavior of this option will change.  Therefore, if you
          upgrade to a newer version of GCC, code generation controlled
          by this option will change to reflect the most current Intel
          processors at the time that version of GCC is released.

          There is no '-march=intel' option because '-march' indicates
          the instruction set the compiler can use, and there is no
          common instruction set applicable to all processors.  In
          contrast, '-mtune' indicates the processor (or, in this case,
          collection of processors) for which the code is optimized.

'-mcpu=CPU-TYPE'
     A deprecated synonym for '-mtune'.

'-mfpmath=UNIT'
     Generate floating-point arithmetic for selected unit UNIT.  The
     choices for UNIT are:

     '387'
          Use the standard 387 floating-point coprocessor present on the
          majority of chips and emulated otherwise.  Code compiled with
          this option runs almost everywhere.  The temporary results are
          computed in 80-bit precision instead of the precision
          specified by the type, resulting in slightly different results
          compared to most of other chips.  See '-ffloat-store' for more
          detailed description.

          This is the default choice for x86-32 targets.

     'sse'
          Use scalar floating-point instructions present in the SSE
          instruction set.  This instruction set is supported by Pentium
          III and newer chips, and in the AMD line by Athlon-4, Athlon
          XP and Athlon MP chips.  The earlier version of the SSE
          instruction set supports only single-precision arithmetic,
          thus the double and extended-precision arithmetic are still
          done using 387.  A later version, present only in Pentium 4
          and AMD x86-64 chips, supports double-precision arithmetic
          too.

          For the x86-32 compiler, you must use '-march=CPU-TYPE',
          '-msse' or '-msse2' switches to enable SSE extensions and make
          this option effective.  For the x86-64 compiler, these
          extensions are enabled by default.

          The resulting code should be considerably faster in the
          majority of cases and avoid the numerical instability problems
          of 387 code, but may break some existing code that expects
          temporaries to be 80 bits.

          This is the default choice for the x86-64 compiler.

     'sse,387'
     'sse+387'
     'both'
          Attempt to utilize both instruction sets at once.  This
          effectively doubles the amount of available registers, and on
          chips with separate execution units for 387 and SSE the
          execution resources too.  Use this option with care, as it is
          still experimental, because the GCC register allocator does
          not model separate functional units well, resulting in
          unstable performance.

'-masm=DIALECT'
     Output assembly instructions using selected DIALECT.  Also affects
     which dialect is used for basic 'asm' (*note Basic Asm::) and
     extended 'asm' (*note Extended Asm::).  Supported choices (in
     dialect order) are 'att' or 'intel'.  The default is 'att'.  Darwin
     does not support 'intel'.

'-mieee-fp'
'-mno-ieee-fp'
     Control whether or not the compiler uses IEEE floating-point
     comparisons.  These correctly handle the case where the result of a
     comparison is unordered.

'-msoft-float'
     Generate output containing library calls for floating point.

     *Warning:* the requisite libraries are not part of GCC.  Normally
     the facilities of the machine's usual C compiler are used, but this
     can't be done directly in cross-compilation.  You must make your
     own arrangements to provide suitable library functions for
     cross-compilation.

     On machines where a function returns floating-point results in the
     80387 register stack, some floating-point opcodes may be emitted
     even if '-msoft-float' is used.

'-mno-fp-ret-in-387'
     Do not use the FPU registers for return values of functions.

     The usual calling convention has functions return values of types
     'float' and 'double' in an FPU register, even if there is no FPU.
     The idea is that the operating system should emulate an FPU.

     The option '-mno-fp-ret-in-387' causes such values to be returned
     in ordinary CPU registers instead.

'-mno-fancy-math-387'
     Some 387 emulators do not support the 'sin', 'cos' and 'sqrt'
     instructions for the 387.  Specify this option to avoid generating
     those instructions.  This option is the default on FreeBSD, OpenBSD
     and NetBSD.  This option is overridden when '-march' indicates that
     the target CPU always has an FPU and so the instruction does not
     need emulation.  These instructions are not generated unless you
     also use the '-funsafe-math-optimizations' switch.

'-malign-double'
'-mno-align-double'
     Control whether GCC aligns 'double', 'long double', and 'long long'
     variables on a two-word boundary or a one-word boundary.  Aligning
     'double' variables on a two-word boundary produces code that runs
     somewhat faster on a Pentium at the expense of more memory.

     On x86-64, '-malign-double' is enabled by default.

     *Warning:* if you use the '-malign-double' switch, structures
     containing the above types are aligned differently than the
     published application binary interface specifications for the
     x86-32 and are not binary compatible with structures in code
     compiled without that switch.

'-m96bit-long-double'
'-m128bit-long-double'
     These switches control the size of 'long double' type.  The x86-32
     application binary interface specifies the size to be 96 bits, so
     '-m96bit-long-double' is the default in 32-bit mode.

     Modern architectures (Pentium and newer) prefer 'long double' to be
     aligned to an 8- or 16-byte boundary.  In arrays or structures
     conforming to the ABI, this is not possible.  So specifying
     '-m128bit-long-double' aligns 'long double' to a 16-byte boundary
     by padding the 'long double' with an additional 32-bit zero.

     In the x86-64 compiler, '-m128bit-long-double' is the default
     choice as its ABI specifies that 'long double' is aligned on
     16-byte boundary.

     Notice that neither of these options enable any extra precision
     over the x87 standard of 80 bits for a 'long double'.

     *Warning:* if you override the default value for your target ABI,
     this changes the size of structures and arrays containing 'long
     double' variables, as well as modifying the function calling
     convention for functions taking 'long double'.  Hence they are not
     binary-compatible with code compiled without that switch.

'-mlong-double-64'
'-mlong-double-80'
'-mlong-double-128'
     These switches control the size of 'long double' type.  A size of
     64 bits makes the 'long double' type equivalent to the 'double'
     type.  This is the default for 32-bit Bionic C library.  A size of
     128 bits makes the 'long double' type equivalent to the
     '__float128' type.  This is the default for 64-bit Bionic C
     library.

     *Warning:* if you override the default value for your target ABI,
     this changes the size of structures and arrays containing 'long
     double' variables, as well as modifying the function calling
     convention for functions taking 'long double'.  Hence they are not
     binary-compatible with code compiled without that switch.

'-malign-data=TYPE'
     Control how GCC aligns variables.  Supported values for TYPE are
     'compat' uses increased alignment value compatible uses GCC 4.8 and
     earlier, 'abi' uses alignment value as specified by the psABI, and
     'cacheline' uses increased alignment value to match the cache line
     size.  'compat' is the default.

'-mlarge-data-threshold=THRESHOLD'
     When '-mcmodel=medium' is specified, data objects larger than
     THRESHOLD are placed in the large data section.  This value must be
     the same across all objects linked into the binary, and defaults to
     65535.

'-mrtd'
     Use a different function-calling convention, in which functions
     that take a fixed number of arguments return with the 'ret NUM'
     instruction, which pops their arguments while returning.  This
     saves one instruction in the caller since there is no need to pop
     the arguments there.

     You can specify that an individual function is called with this
     calling sequence with the function attribute 'stdcall'.  You can
     also override the '-mrtd' option by using the function attribute
     'cdecl'.  *Note Function Attributes::.

     *Warning:* this calling convention is incompatible with the one
     normally used on Unix, so you cannot use it if you need to call
     libraries compiled with the Unix compiler.

     Also, you must provide function prototypes for all functions that
     take variable numbers of arguments (including 'printf'); otherwise
     incorrect code is generated for calls to those functions.

     In addition, seriously incorrect code results if you call a
     function with too many arguments.  (Normally, extra arguments are
     harmlessly ignored.)

'-mregparm=NUM'
     Control how many registers are used to pass integer arguments.  By
     default, no registers are used to pass arguments, and at most 3
     registers can be used.  You can control this behavior for a
     specific function by using the function attribute 'regparm'.  *Note
     Function Attributes::.

     *Warning:* if you use this switch, and NUM is nonzero, then you
     must build all modules with the same value, including any
     libraries.  This includes the system libraries and startup modules.

'-msseregparm'
     Use SSE register passing conventions for float and double arguments
     and return values.  You can control this behavior for a specific
     function by using the function attribute 'sseregparm'.  *Note
     Function Attributes::.

     *Warning:* if you use this switch then you must build all modules
     with the same value, including any libraries.  This includes the
     system libraries and startup modules.

'-mvect8-ret-in-mem'
     Return 8-byte vectors in memory instead of MMX registers.  This is
     the default on Solaris 8 and 9 and VxWorks to match the ABI of the
     Sun Studio compilers until version 12.  Later compiler versions
     (starting with Studio 12 Update 1) follow the ABI used by other x86
     targets, which is the default on Solaris 10 and later.  _Only_ use
     this option if you need to remain compatible with existing code
     produced by those previous compiler versions or older versions of
     GCC.

'-mpc32'
'-mpc64'
'-mpc80'

     Set 80387 floating-point precision to 32, 64 or 80 bits.  When
     '-mpc32' is specified, the significands of results of
     floating-point operations are rounded to 24 bits (single
     precision); '-mpc64' rounds the significands of results of
     floating-point operations to 53 bits (double precision) and
     '-mpc80' rounds the significands of results of floating-point
     operations to 64 bits (extended double precision), which is the
     default.  When this option is used, floating-point operations in
     higher precisions are not available to the programmer without
     setting the FPU control word explicitly.

     Setting the rounding of floating-point operations to less than the
     default 80 bits can speed some programs by 2% or more.  Note that
     some mathematical libraries assume that extended-precision (80-bit)
     floating-point operations are enabled by default; routines in such
     libraries could suffer significant loss of accuracy, typically
     through so-called "catastrophic cancellation", when this option is
     used to set the precision to less than extended precision.

'-mstackrealign'
     Realign the stack at entry.  On the x86, the '-mstackrealign'
     option generates an alternate prologue and epilogue that realigns
     the run-time stack if necessary.  This supports mixing legacy codes
     that keep 4-byte stack alignment with modern codes that keep
     16-byte stack alignment for SSE compatibility.  See also the
     attribute 'force_align_arg_pointer', applicable to individual
     functions.

'-mpreferred-stack-boundary=NUM'
     Attempt to keep the stack boundary aligned to a 2 raised to NUM
     byte boundary.  If '-mpreferred-stack-boundary' is not specified,
     the default is 4 (16 bytes or 128 bits).

     *Warning:* When generating code for the x86-64 architecture with
     SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used
     to keep the stack boundary aligned to 8 byte boundary.  Since
     x86-64 ABI require 16 byte stack alignment, this is ABI
     incompatible and intended to be used in controlled environment
     where stack space is important limitation.  This option leads to
     wrong code when functions compiled with 16 byte stack alignment
     (such as functions from a standard library) are called with
     misaligned stack.  In this case, SSE instructions may lead to
     misaligned memory access traps.  In addition, variable arguments
     are handled incorrectly for 16 byte aligned objects (including x87
     long double and __int128), leading to wrong results.  You must
     build all modules with '-mpreferred-stack-boundary=3', including
     any libraries.  This includes the system libraries and startup
     modules.

'-mincoming-stack-boundary=NUM'
     Assume the incoming stack is aligned to a 2 raised to NUM byte
     boundary.  If '-mincoming-stack-boundary' is not specified, the one
     specified by '-mpreferred-stack-boundary' is used.

     On Pentium and Pentium Pro, 'double' and 'long double' values
     should be aligned to an 8-byte boundary (see '-malign-double') or
     suffer significant run time performance penalties.  On Pentium III,
     the Streaming SIMD Extension (SSE) data type '__m128' may not work
     properly if it is not 16-byte aligned.

     To ensure proper alignment of this values on the stack, the stack
     boundary must be as aligned as that required by any value stored on
     the stack.  Further, every function must be generated such that it
     keeps the stack aligned.  Thus calling a function compiled with a
     higher preferred stack boundary from a function compiled with a
     lower preferred stack boundary most likely misaligns the stack.  It
     is recommended that libraries that use callbacks always use the
     default setting.

     This extra alignment does consume extra stack space, and generally
     increases code size.  Code that is sensitive to stack space usage,
     such as embedded systems and operating system kernels, may want to
     reduce the preferred alignment to '-mpreferred-stack-boundary=2'.

'-mmmx'
'-msse'
'-msse2'
'-msse3'
'-mssse3'
'-msse4'
'-msse4a'
'-msse4.1'
'-msse4.2'
'-mavx'
'-mavx2'
'-mavx512f'
'-mavx512pf'
'-mavx512er'
'-mavx512cd'
'-msha'
'-maes'
'-mpclmul'
'-mclfushopt'
'-mfsgsbase'
'-mrdrnd'
'-mf16c'
'-mfma'
'-mfma4'
'-mno-fma4'
'-mprefetchwt1'
'-mxop'
'-mlwp'
'-m3dnow'
'-mpopcnt'
'-mabm'
'-mbmi'
'-mbmi2'
'-mlzcnt'
'-mfxsr'
'-mxsave'
'-mxsaveopt'
'-mxsavec'
'-mxsaves'
'-mrtm'
'-mtbm'
'-mmpx'
     These switches enable the use of instructions in the MMX, SSE,
     SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER,
     AVX512CD, SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A,
     FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT, RTM,
     MPX or 3DNow! extended instruction sets.  Each has a corresponding
     '-mno-' option to disable use of these instructions.

     These extensions are also available as built-in functions: see
     *note x86 Built-in Functions::, for details of the functions
     enabled and disabled by these switches.

     To generate SSE/SSE2 instructions automatically from floating-point
     code (as opposed to 387 instructions), see '-mfpmath=sse'.

     GCC depresses SSEx instructions when '-mavx' is used.  Instead, it
     generates new AVX instructions or AVX equivalence for all SSEx
     instructions when needed.

     These options enable GCC to use these extended instructions in
     generated code, even without '-mfpmath=sse'.  Applications that
     perform run-time CPU detection must compile separate files for each
     supported architecture, using the appropriate flags.  In
     particular, the file containing the CPU detection code should be
     compiled without these options.

'-mdump-tune-features'
     This option instructs GCC to dump the names of the x86 performance
     tuning features and default settings.  The names can be used in
     '-mtune-ctrl=FEATURE-LIST'.

'-mtune-ctrl=FEATURE-LIST'
     This option is used to do fine grain control of x86 code generation
     features.  FEATURE-LIST is a comma separated list of FEATURE names.
     See also '-mdump-tune-features'.  When specified, the FEATURE is
     turned on if it is not preceded with '^', otherwise, it is turned
     off.  '-mtune-ctrl=FEATURE-LIST' is intended to be used by GCC
     developers.  Using it may lead to code paths not covered by testing
     and can potentially result in compiler ICEs or runtime errors.

'-mno-default'
     This option instructs GCC to turn off all tunable features.  See
     also '-mtune-ctrl=FEATURE-LIST' and '-mdump-tune-features'.

'-mcld'
     This option instructs GCC to emit a 'cld' instruction in the
     prologue of functions that use string instructions.  String
     instructions depend on the DF flag to select between autoincrement
     or autodecrement mode.  While the ABI specifies the DF flag to be
     cleared on function entry, some operating systems violate this
     specification by not clearing the DF flag in their exception
     dispatchers.  The exception handler can be invoked with the DF flag
     set, which leads to wrong direction mode when string instructions
     are used.  This option can be enabled by default on 32-bit x86
     targets by configuring GCC with the '--enable-cld' configure
     option.  Generation of 'cld' instructions can be suppressed with
     the '-mno-cld' compiler option in this case.

'-mvzeroupper'
     This option instructs GCC to emit a 'vzeroupper' instruction before
     a transfer of control flow out of the function to minimize the AVX
     to SSE transition penalty as well as remove unnecessary 'zeroupper'
     intrinsics.

'-mprefer-avx128'
     This option instructs GCC to use 128-bit AVX instructions instead
     of 256-bit AVX instructions in the auto-vectorizer.

'-mcx16'
     This option enables GCC to generate 'CMPXCHG16B' instructions.
     'CMPXCHG16B' allows for atomic operations on 128-bit double
     quadword (or oword) data types.  This is useful for high-resolution
     counters that can be updated by multiple processors (or cores).
     This instruction is generated as part of atomic built-in functions:
     see *note __sync Builtins:: or *note __atomic Builtins:: for
     details.

'-msahf'
     This option enables generation of 'SAHF' instructions in 64-bit
     code.  Early Intel Pentium 4 CPUs with Intel 64 support, prior to
     the introduction of Pentium 4 G1 step in December 2005, lacked the
     'LAHF' and 'SAHF' instructions which are supported by AMD64.  These
     are load and store instructions, respectively, for certain status
     flags.  In 64-bit mode, the 'SAHF' instruction is used to optimize
     'fmod', 'drem', and 'remainder' built-in functions; see *note Other
     Builtins:: for details.

'-mmovbe'
     This option enables use of the 'movbe' instruction to implement
     '__builtin_bswap32' and '__builtin_bswap64'.

'-mcrc32'
     This option enables built-in functions '__builtin_ia32_crc32qi',
     '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and
     '__builtin_ia32_crc32di' to generate the 'crc32' machine
     instruction.

'-mrecip'
     This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and
     their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional
     Newton-Raphson step to increase precision instead of 'DIVSS' and
     'SQRTSS' (and their vectorized variants) for single-precision
     floating-point arguments.  These instructions are generated only
     when '-funsafe-math-optimizations' is enabled together with
     '-finite-math-only' and '-fno-trapping-math'.  Note that while the
     throughput of the sequence is higher than the throughput of the
     non-reciprocal instruction, the precision of the sequence can be
     decreased by up to 2 ulp (i.e.  the inverse of 1.0 equals
     0.99999994).

     Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or
     'RSQRTPS') already with '-ffast-math' (or the above option
     combination), and doesn't need '-mrecip'.

     Also note that GCC emits the above sequence with additional
     Newton-Raphson step for vectorized single-float division and
     vectorized 'sqrtf(X)' already with '-ffast-math' (or the above
     option combination), and doesn't need '-mrecip'.

'-mrecip=OPT'
     This option controls which reciprocal estimate instructions may be
     used.  OPT is a comma-separated list of options, which may be
     preceded by a '!' to invert the option:

     'all'
          Enable all estimate instructions.

     'default'
          Enable the default instructions, equivalent to '-mrecip'.

     'none'
          Disable all estimate instructions, equivalent to '-mno-recip'.

     'div'
          Enable the approximation for scalar division.

     'vec-div'
          Enable the approximation for vectorized division.

     'sqrt'
          Enable the approximation for scalar square root.

     'vec-sqrt'
          Enable the approximation for vectorized square root.

     So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal
     approximations, except for square root.

'-mveclibabi=TYPE'
     Specifies the ABI type to use for vectorizing intrinsics using an
     external library.  Supported values for TYPE are 'svml' for the
     Intel short vector math library and 'acml' for the AMD math core
     library.  To use this option, both '-ftree-vectorize' and
     '-funsafe-math-optimizations' have to be enabled, and an SVML or
     ACML ABI-compatible library must be specified at link time.

     GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102',
     'vmldLog102', 'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2',
     'vmldAtanh2', 'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2',
     'vmldAsin2', 'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2',
     'vmlsExp4', 'vmlsLn4', 'vmlsLog104', 'vmlsLog104', 'vmlsPow4',
     'vmlsTanh4', 'vmlsTan4', 'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4',
     'vmlsSinh4', 'vmlsSin4', 'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4',
     'vmlsCos4', 'vmlsAcosh4' and 'vmlsAcos4' for corresponding function
     type when '-mveclibabi=svml' is used, and '__vrd2_sin',
     '__vrd2_cos', '__vrd2_exp', '__vrd2_log', '__vrd2_log2',
     '__vrd2_log10', '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf',
     '__vrs4_logf', '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf'
     for the corresponding function type when '-mveclibabi=acml' is
     used.

'-mabi=NAME'
     Generate code for the specified calling convention.  Permissible
     values are 'sysv' for the ABI used on GNU/Linux and other systems,
     and 'ms' for the Microsoft ABI. The default is to use the Microsoft
     ABI when targeting Microsoft Windows and the SysV ABI on all other
     systems.  You can control this behavior for specific functions by
     using the function attributes 'ms_abi' and 'sysv_abi'.  *Note
     Function Attributes::.

'-mtls-dialect=TYPE'
     Generate code to access thread-local storage using the 'gnu' or
     'gnu2' conventions.  'gnu' is the conservative default; 'gnu2' is
     more efficient, but it may add compile- and run-time requirements
     that cannot be satisfied on all systems.

'-mpush-args'
'-mno-push-args'
     Use PUSH operations to store outgoing parameters.  This method is
     shorter and usually equally fast as method using SUB/MOV operations
     and is enabled by default.  In some cases disabling it may improve
     performance because of improved scheduling and reduced
     dependencies.

'-maccumulate-outgoing-args'
     If enabled, the maximum amount of space required for outgoing
     arguments is computed in the function prologue.  This is faster on
     most modern CPUs because of reduced dependencies, improved
     scheduling and reduced stack usage when the preferred stack
     boundary is not equal to 2.  The drawback is a notable increase in
     code size.  This switch implies '-mno-push-args'.

'-mthreads'
     Support thread-safe exception handling on MinGW. Programs that rely
     on thread-safe exception handling must compile and link all code
     with the '-mthreads' option.  When compiling, '-mthreads' defines
     '-D_MT'; when linking, it links in a special thread helper library
     '-lmingwthrd' which cleans up per-thread exception-handling data.

'-mno-align-stringops'
     Do not align the destination of inlined string operations.  This
     switch reduces code size and improves performance in case the
     destination is already aligned, but GCC doesn't know about it.

'-minline-all-stringops'
     By default GCC inlines string operations only when the destination
     is known to be aligned to least a 4-byte boundary.  This enables
     more inlining and increases code size, but may improve performance
     of code that depends on fast 'memcpy', 'strlen', and 'memset' for
     short lengths.

'-minline-stringops-dynamically'
     For string operations of unknown size, use run-time checks with
     inline code for small blocks and a library call for large blocks.

'-mstringop-strategy=ALG'
     Override the internal decision heuristic for the particular
     algorithm to use for inlining string operations.  The allowed
     values for ALG are:

     'rep_byte'
     'rep_4byte'
     'rep_8byte'
          Expand using i386 'rep' prefix of the specified size.

     'byte_loop'
     'loop'
     'unrolled_loop'
          Expand into an inline loop.

     'libcall'
          Always use a library call.

'-mmemcpy-strategy=STRATEGY'
     Override the internal decision heuristic to decide if
     '__builtin_memcpy' should be inlined and what inline algorithm to
     use when the expected size of the copy operation is known.
     STRATEGY is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN
     triplets.  ALG is specified in '-mstringop-strategy', MAX_SIZE
     specifies the max byte size with which inline algorithm ALG is
     allowed.  For the last triplet, the MAX_SIZE must be '-1'.  The
     MAX_SIZE of the triplets in the list must be specified in
     increasing order.  The minimal byte size for ALG is '0' for the
     first triplet and 'MAX_SIZE + 1' of the preceding range.

'-mmemset-strategy=STRATEGY'
     The option is similar to '-mmemcpy-strategy=' except that it is to
     control '__builtin_memset' expansion.

'-momit-leaf-frame-pointer'
     Don't keep the frame pointer in a register for leaf functions.
     This avoids the instructions to save, set up, and restore frame
     pointers and makes an extra register available in leaf functions.
     The option '-fomit-leaf-frame-pointer' removes the frame pointer
     for leaf functions, which might make debugging harder.

'-mtls-direct-seg-refs'
'-mno-tls-direct-seg-refs'
     Controls whether TLS variables may be accessed with offsets from
     the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or
     whether the thread base pointer must be added.  Whether or not this
     is valid depends on the operating system, and whether it maps the
     segment to cover the entire TLS area.

     For systems that use the GNU C Library, the default is on.

'-msse2avx'
'-mno-sse2avx'
     Specify that the assembler should encode SSE instructions with VEX
     prefix.  The option '-mavx' turns this on by default.

'-mfentry'
'-mno-fentry'
     If profiling is active ('-pg'), put the profiling counter call
     before the prologue.  Note: On x86 architectures the attribute
     'ms_hook_prologue' isn't possible at the moment for '-mfentry' and
     '-pg'.

'-mrecord-mcount'
'-mno-record-mcount'
     If profiling is active ('-pg'), generate a __mcount_loc section
     that contains pointers to each profiling call.  This is useful for
     automatically patching and out calls.

'-mnop-mcount'
'-mno-nop-mcount'
     If profiling is active ('-pg'), generate the calls to the profiling
     functions as nops.  This is useful when they should be patched in
     later dynamically.  This is likely only useful together with
     '-mrecord-mcount'.

'-mskip-rax-setup'
'-mno-skip-rax-setup'
     When generating code for the x86-64 architecture with SSE
     extensions disabled, '-skip-rax-setup' can be used to skip setting
     up RAX register when there are no variable arguments passed in
     vector registers.

     *Warning:* Since RAX register is used to avoid unnecessarily saving
     vector registers on stack when passing variable arguments, the
     impacts of this option are callees may waste some stack space,
     misbehave or jump to a random location.  GCC 4.4 or newer don't
     have those issues, regardless the RAX register value.

'-m8bit-idiv'
'-mno-8bit-idiv'
     On some processors, like Intel Atom, 8-bit unsigned integer divide
     is much faster than 32-bit/64-bit integer divide.  This option
     generates a run-time check.  If both dividend and divisor are
     within range of 0 to 255, 8-bit unsigned integer divide is used
     instead of 32-bit/64-bit integer divide.

'-mavx256-split-unaligned-load'
'-mavx256-split-unaligned-store'
     Split 32-byte AVX unaligned load and store.

'-mstack-protector-guard=GUARD'
     Generate stack protection code using canary at GUARD.  Supported
     locations are 'global' for global canary or 'tls' for per-thread
     canary in the TLS block (the default).  This option has effect only
     when '-fstack-protector' or '-fstack-protector-all' is specified.

 These '-m' switches are supported in addition to the above on x86-64
processors in 64-bit environments.

'-m32'
'-m64'
'-mx32'
'-m16'
     Generate code for a 16-bit, 32-bit or 64-bit environment.  The
     '-m32' option sets 'int', 'long', and pointer types to 32 bits, and
     generates code that runs on any i386 system.

     The '-m64' option sets 'int' to 32 bits and 'long' and pointer
     types to 64 bits, and generates code for the x86-64 architecture.
     For Darwin only the '-m64' option also turns off the '-fno-pic' and
     '-mdynamic-no-pic' options.

     The '-mx32' option sets 'int', 'long', and pointer types to 32
     bits, and generates code for the x86-64 architecture.

     The '-m16' option is the same as '-m32', except for that it outputs
     the '.code16gcc' assembly directive at the beginning of the
     assembly output so that the binary can run in 16-bit mode.

'-mno-red-zone'
     Do not use a so-called "red zone" for x86-64 code.  The red zone is
     mandated by the x86-64 ABI; it is a 128-byte area beyond the
     location of the stack pointer that is not modified by signal or
     interrupt handlers and therefore can be used for temporary data
     without adjusting the stack pointer.  The flag '-mno-red-zone'
     disables this red zone.

'-mcmodel=small'
     Generate code for the small code model: the program and its symbols
     must be linked in the lower 2 GB of the address space.  Pointers
     are 64 bits.  Programs can be statically or dynamically linked.
     This is the default code model.

'-mcmodel=kernel'
     Generate code for the kernel code model.  The kernel runs in the
     negative 2 GB of the address space.  This model has to be used for
     Linux kernel code.

'-mcmodel=medium'
     Generate code for the medium model: the program is linked in the
     lower 2 GB of the address space.  Small symbols are also placed
     there.  Symbols with sizes larger than '-mlarge-data-threshold' are
     put into large data or BSS sections and can be located above 2GB.
     Programs can be statically or dynamically linked.

'-mcmodel=large'
     Generate code for the large model.  This model makes no assumptions
     about addresses and sizes of sections.

'-maddress-mode=long'
     Generate code for long address mode.  This is only supported for
     64-bit and x32 environments.  It is the default address mode for
     64-bit environments.

'-maddress-mode=short'
     Generate code for short address mode.  This is only supported for
     32-bit and x32 environments.  It is the default address mode for
     32-bit and x32 environments.


File: gcc.info,  Node: x86 Windows Options,  Next: Xstormy16 Options,  Prev: x86 Options,  Up: Submodel Options

3.17.54 x86 Windows Options
---------------------------

These additional options are available for Microsoft Windows targets:

'-mconsole'
     This option specifies that a console application is to be
     generated, by instructing the linker to set the PE header subsystem
     type required for console applications.  This option is available
     for Cygwin and MinGW targets and is enabled by default on those
     targets.

'-mdll'
     This option is available for Cygwin and MinGW targets.  It
     specifies that a DLL--a dynamic link library--is to be generated,
     enabling the selection of the required runtime startup object and
     entry point.

'-mnop-fun-dllimport'
     This option is available for Cygwin and MinGW targets.  It
     specifies that the 'dllimport' attribute should be ignored.

'-mthread'
     This option is available for MinGW targets.  It specifies that
     MinGW-specific thread support is to be used.

'-municode'
     This option is available for MinGW-w64 targets.  It causes the
     'UNICODE' preprocessor macro to be predefined, and chooses
     Unicode-capable runtime startup code.

'-mwin32'
     This option is available for Cygwin and MinGW targets.  It
     specifies that the typical Microsoft Windows predefined macros are
     to be set in the pre-processor, but does not influence the choice
     of runtime library/startup code.

'-mwindows'
     This option is available for Cygwin and MinGW targets.  It
     specifies that a GUI application is to be generated by instructing
     the linker to set the PE header subsystem type appropriately.

'-fno-set-stack-executable'
     This option is available for MinGW targets.  It specifies that the
     executable flag for the stack used by nested functions isn't set.
     This is necessary for binaries running in kernel mode of Microsoft
     Windows, as there the User32 API, which is used to set executable
     privileges, isn't available.

'-fwritable-relocated-rdata'
     This option is available for MinGW and Cygwin targets.  It
     specifies that relocated-data in read-only section is put into
     .data section.  This is a necessary for older runtimes not
     supporting modification of .rdata sections for pseudo-relocation.

'-mpe-aligned-commons'
     This option is available for Cygwin and MinGW targets.  It
     specifies that the GNU extension to the PE file format that permits
     the correct alignment of COMMON variables should be used when
     generating code.  It is enabled by default if GCC detects that the
     target assembler found during configuration supports the feature.

 See also under *note x86 Options:: for standard options.


File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86 Windows Options,  Up: Submodel Options

3.17.55 Xstormy16 Options
-------------------------

These options are defined for Xstormy16:

'-msim'
     Choose startup files and linker script suitable for the simulator.


File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options

3.17.56 Xtensa Options
----------------------

These options are supported for Xtensa targets:

'-mconst16'
'-mno-const16'
     Enable or disable use of 'CONST16' instructions for loading
     constant values.  The 'CONST16' instruction is currently not a
     standard option from Tensilica.  When enabled, 'CONST16'
     instructions are always used in place of the standard 'L32R'
     instructions.  The use of 'CONST16' is enabled by default only if
     the 'L32R' instruction is not available.

'-mfused-madd'
'-mno-fused-madd'
     Enable or disable use of fused multiply/add and multiply/subtract
     instructions in the floating-point option.  This has no effect if
     the floating-point option is not also enabled.  Disabling fused
     multiply/add and multiply/subtract instructions forces the compiler
     to use separate instructions for the multiply and add/subtract
     operations.  This may be desirable in some cases where strict IEEE
     754-compliant results are required: the fused multiply add/subtract
     instructions do not round the intermediate result, thereby
     producing results with _more_ bits of precision than specified by
     the IEEE standard.  Disabling fused multiply add/subtract
     instructions also ensures that the program output is not sensitive
     to the compiler's ability to combine multiply and add/subtract
     operations.

'-mserialize-volatile'
'-mno-serialize-volatile'
     When this option is enabled, GCC inserts 'MEMW' instructions before
     'volatile' memory references to guarantee sequential consistency.
     The default is '-mserialize-volatile'.  Use
     '-mno-serialize-volatile' to omit the 'MEMW' instructions.

'-mforce-no-pic'
     For targets, like GNU/Linux, where all user-mode Xtensa code must
     be position-independent code (PIC), this option disables PIC for
     compiling kernel code.

'-mtext-section-literals'
'-mno-text-section-literals'
     These options control the treatment of literal pools.  The default
     is '-mno-text-section-literals', which places literals in a
     separate section in the output file.  This allows the literal pool
     to be placed in a data RAM/ROM, and it also allows the linker to
     combine literal pools from separate object files to remove
     redundant literals and improve code size.  With
     '-mtext-section-literals', the literals are interspersed in the
     text section in order to keep them as close as possible to their
     references.  This may be necessary for large assembly files.

'-mtarget-align'
'-mno-target-align'
     When this option is enabled, GCC instructs the assembler to
     automatically align instructions to reduce branch penalties at the
     expense of some code density.  The assembler attempts to widen
     density instructions to align branch targets and the instructions
     following call instructions.  If there are not enough preceding
     safe density instructions to align a target, no widening is
     performed.  The default is '-mtarget-align'.  These options do not
     affect the treatment of auto-aligned instructions like 'LOOP',
     which the assembler always aligns, either by widening density
     instructions or by inserting NOP instructions.

'-mlongcalls'
'-mno-longcalls'
     When this option is enabled, GCC instructs the assembler to
     translate direct calls to indirect calls unless it can determine
     that the target of a direct call is in the range allowed by the
     call instruction.  This translation typically occurs for calls to
     functions in other source files.  Specifically, the assembler
     translates a direct 'CALL' instruction into an 'L32R' followed by a
     'CALLX' instruction.  The default is '-mno-longcalls'.  This option
     should be used in programs where the call target can potentially be
     out of range.  This option is implemented in the assembler, not the
     compiler, so the assembly code generated by GCC still shows direct
     call instructions--look at the disassembled object code to see the
     actual instructions.  Note that the assembler uses an indirect call
     for every cross-file call, not just those that really are out of
     range.


File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options

3.17.57 zSeries Options
-----------------------

These are listed under *Note S/390 and zSeries Options::.


File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC

3.18 Options for Code Generation Conventions
============================================

These machine-independent options control the interface conventions used
in code generation.

 Most of them have both positive and negative forms; the negative form
of '-ffoo' is '-fno-foo'.  In the table below, only one of the forms is
listed--the one that is not the default.  You can figure out the other
form by either removing 'no-' or adding it.

'-fbounds-check'
     For front ends that support it, generate additional code to check
     that indices used to access arrays are within the declared range.
     This is currently only supported by the Java and Fortran front
     ends, where this option defaults to true and false respectively.

'-fstack-reuse=REUSE-LEVEL'
     This option controls stack space reuse for user declared local/auto
     variables and compiler generated temporaries.  REUSE_LEVEL can be
     'all', 'named_vars', or 'none'.  'all' enables stack reuse for all
     local variables and temporaries, 'named_vars' enables the reuse
     only for user defined local variables with names, and 'none'
     disables stack reuse completely.  The default value is 'all'.  The
     option is needed when the program extends the lifetime of a scoped
     local variable or a compiler generated temporary beyond the end
     point defined by the language.  When a lifetime of a variable ends,
     and if the variable lives in memory, the optimizing compiler has
     the freedom to reuse its stack space with other temporaries or
     scoped local variables whose live range does not overlap with it.
     Legacy code extending local lifetime is likely to break with the
     stack reuse optimization.

     For example,

             int *p;
             {
               int local1;

               p = &local1;
               local1 = 10;
               ....
             }
             {
                int local2;
                local2 = 20;
                ...
             }

             if (*p == 10)  // out of scope use of local1
               {

               }

     Another example:

             struct A
             {
                 A(int k) : i(k), j(k) { }
                 int i;
                 int j;
             };

             A *ap;

             void foo(const A& ar)
             {
                ap = &ar;
             }

             void bar()
             {
                foo(A(10)); // temp object's lifetime ends when foo returns

                {
                  A a(20);
                  ....
                }
                ap->i+= 10;  // ap references out of scope temp whose space
                             // is reused with a. What is the value of ap->i?
             }


     The lifetime of a compiler generated temporary is well defined by
     the C++ standard.  When a lifetime of a temporary ends, and if the
     temporary lives in memory, the optimizing compiler has the freedom
     to reuse its stack space with other temporaries or scoped local
     variables whose live range does not overlap with it.  However some
     of the legacy code relies on the behavior of older compilers in
     which temporaries' stack space is not reused, the aggressive stack
     reuse can lead to runtime errors.  This option is used to control
     the temporary stack reuse optimization.

'-ftrapv'
     This option generates traps for signed overflow on addition,
     subtraction, multiplication operations.

'-fwrapv'
     This option instructs the compiler to assume that signed arithmetic
     overflow of addition, subtraction and multiplication wraps around
     using twos-complement representation.  This flag enables some
     optimizations and disables others.  This option is enabled by
     default for the Java front end, as required by the Java language
     specification.

'-fexceptions'
     Enable exception handling.  Generates extra code needed to
     propagate exceptions.  For some targets, this implies GCC generates
     frame unwind information for all functions, which can produce
     significant data size overhead, although it does not affect
     execution.  If you do not specify this option, GCC enables it by
     default for languages like C++ that normally require exception
     handling, and disables it for languages like C that do not normally
     require it.  However, you may need to enable this option when
     compiling C code that needs to interoperate properly with exception
     handlers written in C++.  You may also wish to disable this option
     if you are compiling older C++ programs that don't use exception
     handling.

'-fnon-call-exceptions'
     Generate code that allows trapping instructions to throw
     exceptions.  Note that this requires platform-specific runtime
     support that does not exist everywhere.  Moreover, it only allows
     _trapping_ instructions to throw exceptions, i.e. memory references
     or floating-point instructions.  It does not allow exceptions to be
     thrown from arbitrary signal handlers such as 'SIGALRM'.

'-fdelete-dead-exceptions'
     Consider that instructions that may throw exceptions but don't
     otherwise contribute to the execution of the program can be
     optimized away.  This option is enabled by default for the Ada
     front end, as permitted by the Ada language specification.
     Optimization passes that cause dead exceptions to be removed are
     enabled independently at different optimization levels.

'-funwind-tables'
     Similar to '-fexceptions', except that it just generates any needed
     static data, but does not affect the generated code in any other
     way.  You normally do not need to enable this option; instead, a
     language processor that needs this handling enables it on your
     behalf.

'-fasynchronous-unwind-tables'
     Generate unwind table in DWARF 2 format, if supported by target
     machine.  The table is exact at each instruction boundary, so it
     can be used for stack unwinding from asynchronous events (such as
     debugger or garbage collector).

'-fno-gnu-unique'
     On systems with recent GNU assembler and C library, the C++
     compiler uses the 'STB_GNU_UNIQUE' binding to make sure that
     definitions of template static data members and static local
     variables in inline functions are unique even in the presence of
     'RTLD_LOCAL'; this is necessary to avoid problems with a library
     used by two different 'RTLD_LOCAL' plugins depending on a
     definition in one of them and therefore disagreeing with the other
     one about the binding of the symbol.  But this causes 'dlclose' to
     be ignored for affected DSOs; if your program relies on
     reinitialization of a DSO via 'dlclose' and 'dlopen', you can use
     '-fno-gnu-unique'.

'-fpcc-struct-return'
     Return "short" 'struct' and 'union' values in memory like longer
     ones, rather than in registers.  This convention is less efficient,
     but it has the advantage of allowing intercallability between
     GCC-compiled files and files compiled with other compilers,
     particularly the Portable C Compiler (pcc).

     The precise convention for returning structures in memory depends
     on the target configuration macros.

     Short structures and unions are those whose size and alignment
     match that of some integer type.

     *Warning:* code compiled with the '-fpcc-struct-return' switch is
     not binary compatible with code compiled with the
     '-freg-struct-return' switch.  Use it to conform to a non-default
     application binary interface.

'-freg-struct-return'
     Return 'struct' and 'union' values in registers when possible.
     This is more efficient for small structures than
     '-fpcc-struct-return'.

     If you specify neither '-fpcc-struct-return' nor
     '-freg-struct-return', GCC defaults to whichever convention is
     standard for the target.  If there is no standard convention, GCC
     defaults to '-fpcc-struct-return', except on targets where GCC is
     the principal compiler.  In those cases, we can choose the
     standard, and we chose the more efficient register return
     alternative.

     *Warning:* code compiled with the '-freg-struct-return' switch is
     not binary compatible with code compiled with the
     '-fpcc-struct-return' switch.  Use it to conform to a non-default
     application binary interface.

'-fshort-enums'
     Allocate to an 'enum' type only as many bytes as it needs for the
     declared range of possible values.  Specifically, the 'enum' type
     is equivalent to the smallest integer type that has enough room.

     *Warning:* the '-fshort-enums' switch causes GCC to generate code
     that is not binary compatible with code generated without that
     switch.  Use it to conform to a non-default application binary
     interface.

'-fshort-double'
     Use the same size for 'double' as for 'float'.

     *Warning:* the '-fshort-double' switch causes GCC to generate code
     that is not binary compatible with code generated without that
     switch.  Use it to conform to a non-default application binary
     interface.

'-fshort-wchar'
     Override the underlying type for 'wchar_t' to be 'short unsigned
     int' instead of the default for the target.  This option is useful
     for building programs to run under WINE.

     *Warning:* the '-fshort-wchar' switch causes GCC to generate code
     that is not binary compatible with code generated without that
     switch.  Use it to conform to a non-default application binary
     interface.

'-fno-common'
     In C code, controls the placement of uninitialized global
     variables.  Unix C compilers have traditionally permitted multiple
     definitions of such variables in different compilation units by
     placing the variables in a common block.  This is the behavior
     specified by '-fcommon', and is the default for GCC on most
     targets.  On the other hand, this behavior is not required by ISO
     C, and on some targets may carry a speed or code size penalty on
     variable references.  The '-fno-common' option specifies that the
     compiler should place uninitialized global variables in the data
     section of the object file, rather than generating them as common
     blocks.  This has the effect that if the same variable is declared
     (without 'extern') in two different compilations, you get a
     multiple-definition error when you link them.  In this case, you
     must compile with '-fcommon' instead.  Compiling with '-fno-common'
     is useful on targets for which it provides better performance, or
     if you wish to verify that the program will work on other systems
     that always treat uninitialized variable declarations this way.

'-fno-ident'
     Ignore the '#ident' directive.

'-finhibit-size-directive'
     Don't output a '.size' assembler directive, or anything else that
     would cause trouble if the function is split in the middle, and the
     two halves are placed at locations far apart in memory.  This
     option is used when compiling 'crtstuff.c'; you should not need to
     use it for anything else.

'-fverbose-asm'
     Put extra commentary information in the generated assembly code to
     make it more readable.  This option is generally only of use to
     those who actually need to read the generated assembly code
     (perhaps while debugging the compiler itself).

     '-fno-verbose-asm', the default, causes the extra information to be
     omitted and is useful when comparing two assembler files.

'-frecord-gcc-switches'
     This switch causes the command line used to invoke the compiler to
     be recorded into the object file that is being created.  This
     switch is only implemented on some targets and the exact format of
     the recording is target and binary file format dependent, but it
     usually takes the form of a section containing ASCII text.  This
     switch is related to the '-fverbose-asm' switch, but that switch
     only records information in the assembler output file as comments,
     so it never reaches the object file.  See also
     '-grecord-gcc-switches' for another way of storing compiler options
     into the object file.

'-fpic'
     Generate position-independent code (PIC) suitable for use in a
     shared library, if supported for the target machine.  Such code
     accesses all constant addresses through a global offset table
     (GOT).  The dynamic loader resolves the GOT entries when the
     program starts (the dynamic loader is not part of GCC; it is part
     of the operating system).  If the GOT size for the linked
     executable exceeds a machine-specific maximum size, you get an
     error message from the linker indicating that '-fpic' does not
     work; in that case, recompile with '-fPIC' instead.  (These
     maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
     x86 has no such limit.)

     Position-independent code requires special support, and therefore
     works only on certain machines.  For the x86, GCC supports PIC for
     System V but not for the Sun 386i.  Code generated for the IBM
     RS/6000 is always position-independent.

     When this flag is set, the macros '__pic__' and '__PIC__' are
     defined to 1.

'-fPIC'
     If supported for the target machine, emit position-independent
     code, suitable for dynamic linking and avoiding any limit on the
     size of the global offset table.  This option makes a difference on
     the m68k, PowerPC and SPARC.

     Position-independent code requires special support, and therefore
     works only on certain machines.

     When this flag is set, the macros '__pic__' and '__PIC__' are
     defined to 2.

'-fpie'
'-fPIE'
     These options are similar to '-fpic' and '-fPIC', but generated
     position independent code can be only linked into executables.
     Usually these options are used when '-pie' GCC option is used
     during linking.

     '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'.
     The macros have the value 1 for '-fpie' and 2 for '-fPIE'.

'-fno-jump-tables'
     Do not use jump tables for switch statements even where it would be
     more efficient than other code generation strategies.  This option
     is of use in conjunction with '-fpic' or '-fPIC' for building code
     that forms part of a dynamic linker and cannot reference the
     address of a jump table.  On some targets, jump tables do not
     require a GOT and this option is not needed.

'-ffixed-REG'
     Treat the register named REG as a fixed register; generated code
     should never refer to it (except perhaps as a stack pointer, frame
     pointer or in some other fixed role).

     REG must be the name of a register.  The register names accepted
     are machine-specific and are defined in the 'REGISTER_NAMES' macro
     in the machine description macro file.

     This flag does not have a negative form, because it specifies a
     three-way choice.

'-fcall-used-REG'
     Treat the register named REG as an allocable register that is
     clobbered by function calls.  It may be allocated for temporaries
     or variables that do not live across a call.  Functions compiled
     this way do not save and restore the register REG.

     It is an error to use this flag with the frame pointer or stack
     pointer.  Use of this flag for other registers that have fixed
     pervasive roles in the machine's execution model produces
     disastrous results.

     This flag does not have a negative form, because it specifies a
     three-way choice.

'-fcall-saved-REG'
     Treat the register named REG as an allocable register saved by
     functions.  It may be allocated even for temporaries or variables
     that live across a call.  Functions compiled this way save and
     restore the register REG if they use it.

     It is an error to use this flag with the frame pointer or stack
     pointer.  Use of this flag for other registers that have fixed
     pervasive roles in the machine's execution model produces
     disastrous results.

     A different sort of disaster results from the use of this flag for
     a register in which function values may be returned.

     This flag does not have a negative form, because it specifies a
     three-way choice.

'-fpack-struct[=N]'
     Without a value specified, pack all structure members together
     without holes.  When a value is specified (which must be a small
     power of two), pack structure members according to this value,
     representing the maximum alignment (that is, objects with default
     alignment requirements larger than this are output potentially
     unaligned at the next fitting location.

     *Warning:* the '-fpack-struct' switch causes GCC to generate code
     that is not binary compatible with code generated without that
     switch.  Additionally, it makes the code suboptimal.  Use it to
     conform to a non-default application binary interface.

'-finstrument-functions'
     Generate instrumentation calls for entry and exit to functions.
     Just after function entry and just before function exit, the
     following profiling functions are called with the address of the
     current function and its call site.  (On some platforms,
     '__builtin_return_address' does not work beyond the current
     function, so the call site information may not be available to the
     profiling functions otherwise.)

          void __cyg_profile_func_enter (void *this_fn,
                                         void *call_site);
          void __cyg_profile_func_exit  (void *this_fn,
                                         void *call_site);

     The first argument is the address of the start of the current
     function, which may be looked up exactly in the symbol table.

     This instrumentation is also done for functions expanded inline in
     other functions.  The profiling calls indicate where, conceptually,
     the inline function is entered and exited.  This means that
     addressable versions of such functions must be available.  If all
     your uses of a function are expanded inline, this may mean an
     additional expansion of code size.  If you use 'extern inline' in
     your C code, an addressable version of such functions must be
     provided.  (This is normally the case anyway, but if you get lucky
     and the optimizer always expands the functions inline, you might
     have gotten away without providing static copies.)

     A function may be given the attribute 'no_instrument_function', in
     which case this instrumentation is not done.  This can be used, for
     example, for the profiling functions listed above, high-priority
     interrupt routines, and any functions from which the profiling
     functions cannot safely be called (perhaps signal handlers, if the
     profiling routines generate output or allocate memory).

'-finstrument-functions-exclude-file-list=FILE,FILE,...'

     Set the list of functions that are excluded from instrumentation
     (see the description of '-finstrument-functions').  If the file
     that contains a function definition matches with one of FILE, then
     that function is not instrumented.  The match is done on
     substrings: if the FILE parameter is a substring of the file name,
     it is considered to be a match.

     For example:

          -finstrument-functions-exclude-file-list=/bits/stl,include/sys

     excludes any inline function defined in files whose pathnames
     contain '/bits/stl' or 'include/sys'.

     If, for some reason, you want to include letter ',' in one of SYM,
     write '\,'.  For example,
     '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the
     single quote surrounding the option).

'-finstrument-functions-exclude-function-list=SYM,SYM,...'

     This is similar to '-finstrument-functions-exclude-file-list', but
     this option sets the list of function names to be excluded from
     instrumentation.  The function name to be matched is its
     user-visible name, such as 'vector<int> blah(const vector<int> &)',
     not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE').
     The match is done on substrings: if the SYM parameter is a
     substring of the function name, it is considered to be a match.
     For C99 and C++ extended identifiers, the function name must be
     given in UTF-8, not using universal character names.

'-fstack-check'
     Generate code to verify that you do not go beyond the boundary of
     the stack.  You should specify this flag if you are running in an
     environment with multiple threads, but you only rarely need to
     specify it in a single-threaded environment since stack overflow is
     automatically detected on nearly all systems if there is only one
     stack.

     Note that this switch does not actually cause checking to be done;
     the operating system or the language runtime must do that.  The
     switch causes generation of code to ensure that they see the stack
     being extended.

     You can additionally specify a string parameter: 'no' means no
     checking, 'generic' means force the use of old-style checking,
     'specific' means use the best checking method and is equivalent to
     bare '-fstack-check'.

     Old-style checking is a generic mechanism that requires no specific
     target support in the compiler but comes with the following
     drawbacks:

       1. Modified allocation strategy for large objects: they are
          always allocated dynamically if their size exceeds a fixed
          threshold.

       2. Fixed limit on the size of the static frame of functions: when
          it is topped by a particular function, stack checking is not
          reliable and a warning is issued by the compiler.

       3. Inefficiency: because of both the modified allocation strategy
          and the generic implementation, code performance is hampered.

     Note that old-style stack checking is also the fallback method for
     'specific' if no target support has been added in the compiler.

'-fstack-limit-register=REG'
'-fstack-limit-symbol=SYM'
'-fno-stack-limit'
     Generate code to ensure that the stack does not grow beyond a
     certain value, either the value of a register or the address of a
     symbol.  If a larger stack is required, a signal is raised at run
     time.  For most targets, the signal is raised before the stack
     overruns the boundary, so it is possible to catch the signal
     without taking special precautions.

     For instance, if the stack starts at absolute address '0x80000000'
     and grows downwards, you can use the flags
     '-fstack-limit-symbol=__stack_limit' and
     '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of
     128KB.  Note that this may only work with the GNU linker.

'-fsplit-stack'
     Generate code to automatically split the stack before it overflows.
     The resulting program has a discontiguous stack which can only
     overflow if the program is unable to allocate any more memory.
     This is most useful when running threaded programs, as it is no
     longer necessary to calculate a good stack size to use for each
     thread.  This is currently only implemented for the x86 targets
     running GNU/Linux.

     When code compiled with '-fsplit-stack' calls code compiled without
     '-fsplit-stack', there may not be much stack space available for
     the latter code to run.  If compiling all code, including library
     code, with '-fsplit-stack' is not an option, then the linker can
     fix up these calls so that the code compiled without
     '-fsplit-stack' always has a large stack.  Support for this is
     implemented in the gold linker in GNU binutils release 2.21 and
     later.

'-fleading-underscore'
     This option and its counterpart, '-fno-leading-underscore',
     forcibly change the way C symbols are represented in the object
     file.  One use is to help link with legacy assembly code.

     *Warning:* the '-fleading-underscore' switch causes GCC to generate
     code that is not binary compatible with code generated without that
     switch.  Use it to conform to a non-default application binary
     interface.  Not all targets provide complete support for this
     switch.

'-ftls-model=MODEL'
     Alter the thread-local storage model to be used (*note
     Thread-Local::).  The MODEL argument should be one of
     'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'.
     Note that the choice is subject to optimization: the compiler may
     use a more efficient model for symbols not visible outside of the
     translation unit, or if '-fpic' is not given on the command line.

     The default without '-fpic' is 'initial-exec'; with '-fpic' the
     default is 'global-dynamic'.

'-fvisibility=[default|internal|hidden|protected]'
     Set the default ELF image symbol visibility to the specified
     option--all symbols are marked with this unless overridden within
     the code.  Using this feature can very substantially improve
     linking and load times of shared object libraries, produce more
     optimized code, provide near-perfect API export and prevent symbol
     clashes.  It is *strongly* recommended that you use this in any
     shared objects you distribute.

     Despite the nomenclature, 'default' always means public; i.e.,
     available to be linked against from outside the shared object.
     'protected' and 'internal' are pretty useless in real-world usage
     so the only other commonly used option is 'hidden'.  The default if
     '-fvisibility' isn't specified is 'default', i.e., make every
     symbol public.

     A good explanation of the benefits offered by ensuring ELF symbols
     have the correct visibility is given by "How To Write Shared
     Libraries" by Ulrich Drepper (which can be found at
     <http://www.akkadia.org/drepper/>)--however a superior solution
     made possible by this option to marking things hidden when the
     default is public is to make the default hidden and mark things
     public.  This is the norm with DLLs on Windows and with
     '-fvisibility=hidden' and '__attribute__ ((visibility("default")))'
     instead of '__declspec(dllexport)' you get almost identical
     semantics with identical syntax.  This is a great boon to those
     working with cross-platform projects.

     For those adding visibility support to existing code, you may find
     '#pragma GCC visibility' of use.  This works by you enclosing the
     declarations you wish to set visibility for with (for example)
     '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility
     pop'.  Bear in mind that symbol visibility should be viewed *as
     part of the API interface contract* and thus all new code should
     always specify visibility when it is not the default; i.e.,
     declarations only for use within the local DSO should *always* be
     marked explicitly as hidden as so to avoid PLT indirection
     overheads--making this abundantly clear also aids readability and
     self-documentation of the code.  Note that due to ISO C++
     specification requirements, 'operator new' and 'operator delete'
     must always be of default visibility.

     Be aware that headers from outside your project, in particular
     system headers and headers from any other library you use, may not
     be expecting to be compiled with visibility other than the default.
     You may need to explicitly say '#pragma GCC visibility
     push(default)' before including any such headers.

     'extern' declarations are not affected by '-fvisibility', so a lot
     of code can be recompiled with '-fvisibility=hidden' with no
     modifications.  However, this means that calls to 'extern'
     functions with no explicit visibility use the PLT, so it is more
     effective to use '__attribute ((visibility))' and/or '#pragma GCC
     visibility' to tell the compiler which 'extern' declarations should
     be treated as hidden.

     Note that '-fvisibility' does affect C++ vague linkage entities.
     This means that, for instance, an exception class that is be thrown
     between DSOs must be explicitly marked with default visibility so
     that the 'type_info' nodes are unified between the DSOs.

     An overview of these techniques, their benefits and how to use them
     is at <http://gcc.gnu.org/wiki/Visibility>.

'-fstrict-volatile-bitfields'
     This option should be used if accesses to volatile bit-fields (or
     other structure fields, although the compiler usually honors those
     types anyway) should use a single access of the width of the
     field's type, aligned to a natural alignment if possible.  For
     example, targets with memory-mapped peripheral registers might
     require all such accesses to be 16 bits wide; with this flag you
     can declare all peripheral bit-fields as 'unsigned short' (assuming
     short is 16 bits on these targets) to force GCC to use 16-bit
     accesses instead of, perhaps, a more efficient 32-bit access.

     If this option is disabled, the compiler uses the most efficient
     instruction.  In the previous example, that might be a 32-bit load
     instruction, even though that accesses bytes that do not contain
     any portion of the bit-field, or memory-mapped registers unrelated
     to the one being updated.

     In some cases, such as when the 'packed' attribute is applied to a
     structure field, it may not be possible to access the field with a
     single read or write that is correctly aligned for the target
     machine.  In this case GCC falls back to generating multiple
     accesses rather than code that will fault or truncate the result at
     run time.

     Note: Due to restrictions of the C/C++11 memory model, write
     accesses are not allowed to touch non bit-field members.  It is
     therefore recommended to define all bits of the field's type as
     bit-field members.

     The default value of this option is determined by the application
     binary interface for the target processor.

'-fsync-libcalls'
     This option controls whether any out-of-line instance of the
     '__sync' family of functions may be used to implement the C++11
     '__atomic' family of functions.

     The default value of this option is enabled, thus the only useful
     form of the option is '-fno-sync-libcalls'.  This option is used in
     the implementation of the 'libatomic' runtime library.


File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC

3.19 Environment Variables Affecting GCC
========================================

This section describes several environment variables that affect how GCC
operates.  Some of them work by specifying directories or prefixes to
use when searching for various kinds of files.  Some are used to specify
other aspects of the compilation environment.

 Note that you can also specify places to search using options such as
'-B', '-I' and '-L' (*note Directory Options::).  These take precedence
over places specified using environment variables, which in turn take
precedence over those specified by the configuration of GCC.  *Note
Controlling the Compilation Driver 'gcc': (gccint)Driver.

'LANG'
'LC_CTYPE'
'LC_MESSAGES'
'LC_ALL'
     These environment variables control the way that GCC uses
     localization information which allows GCC to work with different
     national conventions.  GCC inspects the locale categories
     'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so.
     These locale categories can be set to any value supported by your
     installation.  A typical value is 'en_GB.UTF-8' for English in the
     United Kingdom encoded in UTF-8.

     The 'LC_CTYPE' environment variable specifies character
     classification.  GCC uses it to determine the character boundaries
     in a string; this is needed for some multibyte encodings that
     contain quote and escape characters that are otherwise interpreted
     as a string end or escape.

     The 'LC_MESSAGES' environment variable specifies the language to
     use in diagnostic messages.

     If the 'LC_ALL' environment variable is set, it overrides the value
     of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and
     'LC_MESSAGES' default to the value of the 'LANG' environment
     variable.  If none of these variables are set, GCC defaults to
     traditional C English behavior.

'TMPDIR'
     If 'TMPDIR' is set, it specifies the directory to use for temporary
     files.  GCC uses temporary files to hold the output of one stage of
     compilation which is to be used as input to the next stage: for
     example, the output of the preprocessor, which is the input to the
     compiler proper.

'GCC_COMPARE_DEBUG'
     Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing
     '-fcompare-debug' to the compiler driver.  See the documentation of
     this option for more details.

'GCC_EXEC_PREFIX'
     If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
     names of the subprograms executed by the compiler.  No slash is
     added when this prefix is combined with the name of a subprogram,
     but you can specify a prefix that ends with a slash if you wish.

     If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an
     appropriate prefix to use based on the pathname it is invoked with.

     If GCC cannot find the subprogram using the specified prefix, it
     tries looking in the usual places for the subprogram.

     The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where
     PREFIX is the prefix to the installed compiler.  In many cases
     PREFIX is the value of 'prefix' when you ran the 'configure'
     script.

     Other prefixes specified with '-B' take precedence over this
     prefix.

     This prefix is also used for finding files such as 'crt0.o' that
     are used for linking.

     In addition, the prefix is used in an unusual way in finding the
     directories to search for header files.  For each of the standard
     directories whose name normally begins with '/usr/local/lib/gcc'
     (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries
     replacing that beginning with the specified prefix to produce an
     alternate directory name.  Thus, with '-Bfoo/', GCC searches
     'foo/bar' just before it searches the standard directory
     '/usr/local/lib/bar'.  If a standard directory begins with the
     configured PREFIX then the value of PREFIX is replaced by
     'GCC_EXEC_PREFIX' when looking for header files.

'COMPILER_PATH'
     The value of 'COMPILER_PATH' is a colon-separated list of
     directories, much like 'PATH'.  GCC tries the directories thus
     specified when searching for subprograms, if it can't find the
     subprograms using 'GCC_EXEC_PREFIX'.

'LIBRARY_PATH'
     The value of 'LIBRARY_PATH' is a colon-separated list of
     directories, much like 'PATH'.  When configured as a native
     compiler, GCC tries the directories thus specified when searching
     for special linker files, if it can't find them using
     'GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
     when searching for ordinary libraries for the '-l' option (but
     directories specified with '-L' come first).

'LANG'
     This variable is used to pass locale information to the compiler.
     One way in which this information is used is to determine the
     character set to be used when character literals, string literals
     and comments are parsed in C and C++.  When the compiler is
     configured to allow multibyte characters, the following values for
     'LANG' are recognized:

     'C-JIS'
          Recognize JIS characters.
     'C-SJIS'
          Recognize SJIS characters.
     'C-EUCJP'
          Recognize EUCJP characters.

     If 'LANG' is not defined, or if it has some other value, then the
     compiler uses 'mblen' and 'mbtowc' as defined by the default locale
     to recognize and translate multibyte characters.

Some additional environment variables affect the behavior of the
preprocessor.

'CPATH'
'C_INCLUDE_PATH'
'CPLUS_INCLUDE_PATH'
'OBJC_INCLUDE_PATH'
     Each variable's value is a list of directories separated by a
     special character, much like 'PATH', in which to look for header
     files.  The special character, 'PATH_SEPARATOR', is
     target-dependent and determined at GCC build time.  For Microsoft
     Windows-based targets it is a semicolon, and for almost all other
     targets it is a colon.

     'CPATH' specifies a list of directories to be searched as if
     specified with '-I', but after any paths given with '-I' options on
     the command line.  This environment variable is used regardless of
     which language is being preprocessed.

     The remaining environment variables apply only when preprocessing
     the particular language indicated.  Each specifies a list of
     directories to be searched as if specified with '-isystem', but
     after any paths given with '-isystem' options on the command line.

     In all these variables, an empty element instructs the compiler to
     search its current working directory.  Empty elements can appear at
     the beginning or end of a path.  For instance, if the value of
     'CPATH' is ':/special/include', that has the same effect as
     '-I. -I/special/include'.

'DEPENDENCIES_OUTPUT'
     If this variable is set, its value specifies how to output
     dependencies for Make based on the non-system header files
     processed by the compiler.  System header files are ignored in the
     dependency output.

     The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in
     which case the Make rules are written to that file, guessing the
     target name from the source file name.  Or the value can have the
     form 'FILE TARGET', in which case the rules are written to file
     FILE using TARGET as the target name.

     In other words, this environment variable is equivalent to
     combining the options '-MM' and '-MF' (*note Preprocessor
     Options::), with an optional '-MT' switch too.

'SUNPRO_DEPENDENCIES'
     This variable is the same as 'DEPENDENCIES_OUTPUT' (see above),
     except that system header files are not ignored, so it implies '-M'
     rather than '-MM'.  However, the dependence on the main input file
     is omitted.  *Note Preprocessor Options::.


File: gcc.info,  Node: Precompiled Headers,  Prev: Environment Variables,  Up: Invoking GCC

3.20 Using Precompiled Headers
==============================

Often large projects have many header files that are included in every
source file.  The time the compiler takes to process these header files
over and over again can account for nearly all of the time required to
build the project.  To make builds faster, GCC allows you to
"precompile" a header file.

 To create a precompiled header file, simply compile it as you would any
other file, if necessary using the '-x' option to make the driver treat
it as a C or C++ header file.  You may want to use a tool like 'make' to
keep the precompiled header up-to-date when the headers it contains
change.

 A precompiled header file is searched for when '#include' is seen in
the compilation.  As it searches for the included file (*note Search
Path: (cpp)Search Path.) the compiler looks for a precompiled header in
each directory just before it looks for the include file in that
directory.  The name searched for is the name specified in the
'#include' with '.gch' appended.  If the precompiled header file can't
be used, it is ignored.

 For instance, if you have '#include "all.h"', and you have 'all.h.gch'
in the same directory as 'all.h', then the precompiled header file is
used if possible, and the original header is used otherwise.

 Alternatively, you might decide to put the precompiled header file in a
directory and use '-I' to ensure that directory is searched before (or
instead of) the directory containing the original header.  Then, if you
want to check that the precompiled header file is always used, you can
put a file of the same name as the original header in this directory
containing an '#error' command.

 This also works with '-include'.  So yet another way to use precompiled
headers, good for projects not designed with precompiled header files in
mind, is to simply take most of the header files used by a project,
include them from another header file, precompile that header file, and
'-include' the precompiled header.  If the header files have guards
against multiple inclusion, they are skipped because they've already
been included (in the precompiled header).

 If you need to precompile the same header file for different languages,
targets, or compiler options, you can instead make a _directory_ named
like 'all.h.gch', and put each precompiled header in the directory,
perhaps using '-o'.  It doesn't matter what you call the files in the
directory; every precompiled header in the directory is considered.  The
first precompiled header encountered in the directory that is valid for
this compilation is used; they're searched in no particular order.

 There are many other possibilities, limited only by your imagination,
good sense, and the constraints of your build system.

 A precompiled header file can be used only when these conditions apply:

   * Only one precompiled header can be used in a particular
     compilation.

   * A precompiled header can't be used once the first C token is seen.
     You can have preprocessor directives before a precompiled header;
     you cannot include a precompiled header from inside another header.

   * The precompiled header file must be produced for the same language
     as the current compilation.  You can't use a C precompiled header
     for a C++ compilation.

   * The precompiled header file must have been produced by the same
     compiler binary as the current compilation is using.

   * Any macros defined before the precompiled header is included must
     either be defined in the same way as when the precompiled header
     was generated, or must not affect the precompiled header, which
     usually means that they don't appear in the precompiled header at
     all.

     The '-D' option is one way to define a macro before a precompiled
     header is included; using a '#define' can also do it.  There are
     also some options that define macros implicitly, like '-O' and
     '-Wdeprecated'; the same rule applies to macros defined this way.

   * If debugging information is output when using the precompiled
     header, using '-g' or similar, the same kind of debugging
     information must have been output when building the precompiled
     header.  However, a precompiled header built using '-g' can be used
     in a compilation when no debugging information is being output.

   * The same '-m' options must generally be used when building and
     using the precompiled header.  *Note Submodel Options::, for any
     cases where this rule is relaxed.

   * Each of the following options must be the same when building and
     using the precompiled header:

          -fexceptions

   * Some other command-line options starting with '-f', '-p', or '-O'
     must be defined in the same way as when the precompiled header was
     generated.  At present, it's not clear which options are safe to
     change and which are not; the safest choice is to use exactly the
     same options when generating and using the precompiled header.  The
     following are known to be safe:

          -fmessage-length=  -fpreprocessed  -fsched-interblock
          -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous
          -fsched-verbose=NUMBER  -fschedule-insns  -fvisibility=
          -pedantic-errors

 For all of these except the last, the compiler automatically ignores
the precompiled header if the conditions aren't met.  If you find an
option combination that doesn't work and doesn't cause the precompiled
header to be ignored, please consider filing a bug report, see *note
Bugs::.

 If you do use differing options when generating and using the
precompiled header, the actual behavior is a mixture of the behavior for
the options.  For instance, if you use '-g' to generate the precompiled
header but not when using it, you may or may not get debugging
information for routines in the precompiled header.


File: gcc.info,  Node: C Implementation,  Next: C++ Implementation,  Prev: Invoking GCC,  Up: Top

4 C Implementation-Defined Behavior
***********************************

A conforming implementation of ISO C is required to document its choice
of behavior in each of the areas that are designated "implementation
defined".  The following lists all such areas, along with the section
numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC
9899:2011 standards.  Some areas are only implementation-defined in one
version of the standard.

 Some choices depend on the externally determined ABI for the platform
(including standard character encodings) which GCC follows; these are
listed as "determined by ABI" below.  *Note Binary Compatibility:
Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
documented in the preprocessor manual.  *Note Implementation-defined
behavior: (cpp)Implementation-defined behavior.  Some choices are made
by the library and operating system (or other environment when compiling
for a freestanding environment); refer to their documentation for
details.

* Menu:

* Translation implementation::
* Environment implementation::
* Identifiers implementation::
* Characters implementation::
* Integers implementation::
* Floating point implementation::
* Arrays and pointers implementation::
* Hints implementation::
* Structures unions enumerations and bit-fields implementation::
* Qualifiers implementation::
* Declarators implementation::
* Statements implementation::
* Preprocessing directives implementation::
* Library functions implementation::
* Architecture implementation::
* Locale-specific behavior implementation::


File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation

4.1 Translation
===============

   * 'How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90,
     C99 and C11 5.1.1.3).'

     Diagnostics consist of all the output sent to stderr by GCC.

   * 'Whether each nonempty sequence of white-space characters other
     than new-line is retained or replaced by one space character in
     translation phase 3 (C90, C99 and C11 5.1.1.2).'

     *Note Implementation-defined behavior: (cpp)Implementation-defined
     behavior.


File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation

4.2 Environment
===============

The behavior of most of these points are dependent on the implementation
of the C library, and are not defined by GCC itself.

   * 'The mapping between physical source file multibyte characters and
     the source character set in translation phase 1 (C90, C99 and C11
     5.1.1.2).'

     *Note Implementation-defined behavior: (cpp)Implementation-defined
     behavior.


File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation

4.3 Identifiers
===============

   * 'Which additional multibyte characters may appear in identifiers
     and their correspondence to universal character names (C99 and C11
     6.4.2).'

     *Note Implementation-defined behavior: (cpp)Implementation-defined
     behavior.

   * 'The number of significant initial characters in an identifier (C90
     6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).'

     For internal names, all characters are significant.  For external
     names, the number of significant characters are defined by the
     linker; for almost all targets, all characters are significant.

   * 'Whether case distinctions are significant in an identifier with
     external linkage (C90 6.1.2).'

     This is a property of the linker.  C99 and C11 require that case
     distinctions are always significant in identifiers with external
     linkage and systems without this property are not supported by GCC.


File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation

4.4 Characters
==============

   * 'The number of bits in a byte (C90 3.4, C99 and C11 3.6).'

     Determined by ABI.

   * 'The values of the members of the execution character set (C90, C99
     and C11 5.2.1).'

     Determined by ABI.

   * 'The unique value of the member of the execution character set
     produced for each of the standard alphabetic escape sequences (C90,
     C99 and C11 5.2.2).'

     Determined by ABI.

   * 'The value of a 'char' object into which has been stored any
     character other than a member of the basic execution character set
     (C90 6.1.2.5, C99 and C11 6.2.5).'

     Determined by ABI.

   * 'Which of 'signed char' or 'unsigned char' has the same range,
     representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90
     6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).'

     Determined by ABI.  The options '-funsigned-char' and
     '-fsigned-char' change the default.  *Note Options Controlling C
     Dialect: C Dialect Options.

   * 'The mapping of members of the source character set (in character
     constants and string literals) to members of the execution
     character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11
     5.1.1.2).'

     Determined by ABI.

   * 'The value of an integer character constant containing more than
     one character or containing a character or escape sequence that
     does not map to a single-byte execution character (C90 6.1.3.4, C99
     and C11 6.4.4.4).'

     *Note Implementation-defined behavior: (cpp)Implementation-defined
     behavior.

   * 'The value of a wide character constant containing more than one
     multibyte character or a single multibyte character that maps to
     multiple members of the extended execution character set, or
     containing a multibyte character or escape sequence not represented
     in the extended execution character set (C90 6.1.3.4, C99 and C11
     6.4.4.4).'

     *Note Implementation-defined behavior: (cpp)Implementation-defined
     behavior.

   * 'The current locale used to convert a wide character constant
     consisting of a single multibyte character that maps to a member of
     the extended execution character set into a corresponding wide
     character code (C90 6.1.3.4, C99 and C11 6.4.4.4).'

     *Note Implementation-defined behavior: (cpp)Implementation-defined
     behavior.

   * 'Whether differently-prefixed wide string literal tokens can be
     concatenated and, if so, the treatment of the resulting multibyte
     character sequence (C11 6.4.5).'

     Such tokens may not be concatenated.

   * 'The current locale used to convert a wide string literal into
     corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).'

     *Note Implementation-defined behavior: (cpp)Implementation-defined
     behavior.

   * 'The value of a string literal containing a multibyte character or
     escape sequence not represented in the execution character set (C90
     6.1.4, C99 and C11 6.4.5).'

     *Note Implementation-defined behavior: (cpp)Implementation-defined
     behavior.

   * 'The encoding of any of 'wchar_t', 'char16_t', and 'char32_t' where
     the corresponding standard encoding macro ('__STDC_ISO_10646__',
     '__STDC_UTF_16__', or '__STDC_UTF_32__') is not defined (C11
     6.10.8.2).'

     *Note Implementation-defined behavior: (cpp)Implementation-defined
     behavior.  'char16_t' and 'char32_t' literals are always encoded in
     UTF-16 and UTF-32 respectively.


File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation

4.5 Integers
============

   * 'Any extended integer types that exist in the implementation (C99
     and C11 6.2.5).'

     GCC does not support any extended integer types.

   * 'Whether signed integer types are represented using sign and
     magnitude, two's complement, or one's complement, and whether the
     extraordinary value is a trap representation or an ordinary value
     (C99 and C11 6.2.6.2).'

     GCC supports only two's complement integer types, and all bit
     patterns are ordinary values.

   * 'The rank of any extended integer type relative to another extended
     integer type with the same precision (C99 and C11 6.3.1.1).'

     GCC does not support any extended integer types.

   * 'The result of, or the signal raised by, converting an integer to a
     signed integer type when the value cannot be represented in an
     object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).'

     For conversion to a type of width N, the value is reduced modulo
     2^N to be within range of the type; no signal is raised.

   * 'The results of some bitwise operations on signed integers (C90
     6.3, C99 and C11 6.5).'

     Bitwise operators act on the representation of the value including
     both the sign and value bits, where the sign bit is considered
     immediately above the highest-value value bit.  Signed '>>' acts on
     negative numbers by sign extension.

     GCC does not use the latitude given in C99 and C11 only to treat
     certain aspects of signed '<<' as undefined, but this is subject to
     change.

   * 'The sign of the remainder on integer division (C90 6.3.5).'

     GCC always follows the C99 and C11 requirement that the result of
     division is truncated towards zero.


File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation

4.6 Floating Point
==================

   * 'The accuracy of the floating-point operations and of the library
     functions in '<math.h>' and '<complex.h>' that return
     floating-point results (C90, C99 and C11 5.2.4.2.2).'

     The accuracy is unknown.

   * 'The rounding behaviors characterized by non-standard values of
     'FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).'

     GCC does not use such values.

   * 'The evaluation methods characterized by non-standard negative
     values of 'FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).'

     GCC does not use such values.

   * 'The direction of rounding when an integer is converted to a
     floating-point number that cannot exactly represent the original
     value (C90 6.2.1.3, C99 and C11 6.3.1.4).'

     C99 Annex F is followed.

   * 'The direction of rounding when a floating-point number is
     converted to a narrower floating-point number (C90 6.2.1.4, C99 and
     C11 6.3.1.5).'

     C99 Annex F is followed.

   * 'How the nearest representable value or the larger or smaller
     representable value immediately adjacent to the nearest
     representable value is chosen for certain floating constants (C90
     6.1.3.1, C99 and C11 6.4.4.2).'

     C99 Annex F is followed.

   * 'Whether and how floating expressions are contracted when not
     disallowed by the 'FP_CONTRACT' pragma (C99 and C11 6.5).'

     Expressions are currently only contracted if '-ffp-contract=fast',
     '-funsafe-math-optimizations' or '-ffast-math' are used.  This is
     subject to change.

   * 'The default state for the 'FENV_ACCESS' pragma (C99 and C11
     7.6.1).'

     This pragma is not implemented, but the default is to "off" unless
     '-frounding-math' is used in which case it is "on".

   * 'Additional floating-point exceptions, rounding modes,
     environments, and classifications, and their macro names (C99 and
     C11 7.6, C99 and C11 7.12).'

     This is dependent on the implementation of the C library, and is
     not defined by GCC itself.

   * 'The default state for the 'FP_CONTRACT' pragma (C99 and C11
     7.12.2).'

     This pragma is not implemented.  Expressions are currently only
     contracted if '-ffp-contract=fast', '-funsafe-math-optimizations'
     or '-ffast-math' are used.  This is subject to change.

   * 'Whether the "inexact" floating-point exception can be raised when
     the rounded result actually does equal the mathematical result in
     an IEC 60559 conformant implementation (C99 F.9).'

     This is dependent on the implementation of the C library, and is
     not defined by GCC itself.

   * 'Whether the "underflow" (and "inexact") floating-point exception
     can be raised when a result is tiny but not inexact in an IEC 60559
     conformant implementation (C99 F.9).'

     This is dependent on the implementation of the C library, and is
     not defined by GCC itself.


File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation

4.7 Arrays and Pointers
=======================

   * 'The result of converting a pointer to an integer or vice versa
     (C90 6.3.4, C99 and C11 6.3.2.3).'

     A cast from pointer to integer discards most-significant bits if
     the pointer representation is larger than the integer type,
     sign-extends(1) if the pointer representation is smaller than the
     integer type, otherwise the bits are unchanged.

     A cast from integer to pointer discards most-significant bits if
     the pointer representation is smaller than the integer type,
     extends according to the signedness of the integer type if the
     pointer representation is larger than the integer type, otherwise
     the bits are unchanged.

     When casting from pointer to integer and back again, the resulting
     pointer must reference the same object as the original pointer,
     otherwise the behavior is undefined.  That is, one may not use
     integer arithmetic to avoid the undefined behavior of pointer
     arithmetic as proscribed in C99 and C11 6.5.6/8.

   * 'The size of the result of subtracting two pointers to elements of
     the same array (C90 6.3.6, C99 and C11 6.5.6).'

     The value is as specified in the standard and the type is
     determined by the ABI.

   ---------- Footnotes ----------

   (1) Future versions of GCC may zero-extend, or use a target-defined
'ptr_extend' pattern.  Do not rely on sign extension.


File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation

4.8 Hints
=========

   * 'The extent to which suggestions made by using the 'register'
     storage-class specifier are effective (C90 6.5.1, C99 and C11
     6.7.1).'

     The 'register' specifier affects code generation only in these
     ways:

        * When used as part of the register variable extension, see
          *note Explicit Reg Vars::.

        * When '-O0' is in use, the compiler allocates distinct stack
          memory for all variables that do not have the 'register'
          storage-class specifier; if 'register' is specified, the
          variable may have a shorter lifespan than the code would
          indicate and may never be placed in memory.

        * On some rare x86 targets, 'setjmp' doesn't save the registers
          in all circumstances.  In those cases, GCC doesn't allocate
          any variables in registers unless they are marked 'register'.

   * 'The extent to which suggestions made by using the inline function
     specifier are effective (C99 and C11 6.7.4).'

     GCC will not inline any functions if the '-fno-inline' option is
     used or if '-O0' is used.  Otherwise, GCC may still be unable to
     inline a function for many reasons; the '-Winline' option may be
     used to determine if a function has not been inlined and why not.


File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation

4.9 Structures, Unions, Enumerations, and Bit-Fields
====================================================

   * 'A member of a union object is accessed using a member of a
     different type (C90 6.3.2.3).'

     The relevant bytes of the representation of the object are treated
     as an object of the type used for the access.  *Note
     Type-punning::.  This may be a trap representation.

   * 'Whether a "plain" 'int' bit-field is treated as a 'signed int'
     bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90
     6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).'

     By default it is treated as 'signed int' but this may be changed by
     the '-funsigned-bitfields' option.

   * 'Allowable bit-field types other than '_Bool', 'signed int', and
     'unsigned int' (C99 and C11 6.7.2.1).'

     Other integer types, such as 'long int', and enumerated types are
     permitted even in strictly conforming mode.

   * 'Whether atomic types are permitted for bit-fields (C11 6.7.2.1).'

     Atomic types are not permitted for bit-fields.

   * 'Whether a bit-field can straddle a storage-unit boundary (C90
     6.5.2.1, C99 and C11 6.7.2.1).'

     Determined by ABI.

   * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1,
     C99 and C11 6.7.2.1).'

     Determined by ABI.

   * 'The alignment of non-bit-field members of structures (C90 6.5.2.1,
     C99 and C11 6.7.2.1).'

     Determined by ABI.

   * 'The integer type compatible with each enumerated type (C90
     6.5.2.2, C99 and C11 6.7.2.2).'

     Normally, the type is 'unsigned int' if there are no negative
     values in the enumeration, otherwise 'int'.  If '-fshort-enums' is
     specified, then if there are negative values it is the first of
     'signed char', 'short' and 'int' that can represent all the values,
     otherwise it is the first of 'unsigned char', 'unsigned short' and
     'unsigned int' that can represent all the values.

     On some targets, '-fshort-enums' is the default; this is determined
     by the ABI.


File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation

4.10 Qualifiers
===============

   * 'What constitutes an access to an object that has
     volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).'

     Such an object is normally accessed by pointers and used for
     accessing hardware.  In most expressions, it is intuitively obvious
     what is a read and what is a write.  For example

          volatile int *dst = SOMEVALUE;
          volatile int *src = SOMEOTHERVALUE;
          *dst = *src;

     will cause a read of the volatile object pointed to by SRC and
     store the value into the volatile object pointed to by DST.  There
     is no guarantee that these reads and writes are atomic, especially
     for objects larger than 'int'.

     However, if the volatile storage is not being modified, and the
     value of the volatile storage is not used, then the situation is
     less obvious.  For example

          volatile int *src = SOMEVALUE;
          *src;

     According to the C standard, such an expression is an rvalue whose
     type is the unqualified version of its original type, i.e.  'int'.
     Whether GCC interprets this as a read of the volatile object being
     pointed to or only as a request to evaluate the expression for its
     side-effects depends on this type.

     If it is a scalar type, or on most targets an aggregate type whose
     only member object is of a scalar type, or a union type whose
     member objects are of scalar types, the expression is interpreted
     by GCC as a read of the volatile object; in the other cases, the
     expression is only evaluated for its side-effects.


File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation

4.11 Declarators
================

   * 'The maximum number of declarators that may modify an arithmetic,
     structure or union type (C90 6.5.4).'

     GCC is only limited by available memory.


File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation

4.12 Statements
===============

   * 'The maximum number of 'case' values in a 'switch' statement (C90
     6.6.4.2).'

     GCC is only limited by available memory.


File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation

4.13 Preprocessing Directives
=============================

*Note Implementation-defined behavior: (cpp)Implementation-defined
behavior, for details of these aspects of implementation-defined
behavior.

   * 'The locations within '#pragma' directives where header name
     preprocessing tokens are recognized (C11 6.4, C11 6.4.7).'

   * 'How sequences in both forms of header names are mapped to headers
     or external source file names (C90 6.1.7, C99 and C11 6.4.7).'

   * 'Whether the value of a character constant in a constant expression
     that controls conditional inclusion matches the value of the same
     character constant in the execution character set (C90 6.8.1, C99
     and C11 6.10.1).'

   * 'Whether the value of a single-character character constant in a
     constant expression that controls conditional inclusion may have a
     negative value (C90 6.8.1, C99 and C11 6.10.1).'

   * 'The places that are searched for an included '<>' delimited
     header, and how the places are specified or the header is
     identified (C90 6.8.2, C99 and C11 6.10.2).'

   * 'How the named source file is searched for in an included '""'
     delimited header (C90 6.8.2, C99 and C11 6.10.2).'

   * 'The method by which preprocessing tokens (possibly resulting from
     macro expansion) in a '#include' directive are combined into a
     header name (C90 6.8.2, C99 and C11 6.10.2).'

   * 'The nesting limit for '#include' processing (C90 6.8.2, C99 and
     C11 6.10.2).'

   * 'Whether the '#' operator inserts a '\' character before the '\'
     character that begins a universal character name in a character
     constant or string literal (C99 and C11 6.10.3.2).'

   * 'The behavior on each recognized non-'STDC #pragma' directive (C90
     6.8.6, C99 and C11 6.10.6).'

     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC
     on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
     details of target-specific pragmas.

   * 'The definitions for '__DATE__' and '__TIME__' when respectively,
     the date and time of translation are not available (C90 6.8.8, C99
     6.10.8, C11 6.10.8.1).'


File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation

4.14 Library Functions
======================

The behavior of most of these points are dependent on the implementation
of the C library, and are not defined by GCC itself.

   * 'The null pointer constant to which the macro 'NULL' expands (C90
     7.1.6, C99 7.17, C11 7.19).'

     In '<stddef.h>', 'NULL' expands to '((void *)0)'.  GCC does not
     provide the other headers which define 'NULL' and some library
     implementations may use other definitions in those headers.


File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation

4.15 Architecture
=================

   * 'The values or expressions assigned to the macros specified in the
     headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90, C99 and
     C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).'

     Determined by ABI.

   * 'The result of attempting to indirectly access an object with
     automatic or thread storage duration from a thread other than the
     one with which it is associated (C11 6.2.4).'

     Such accesses are supported, subject to the same requirements for
     synchronization for concurrent accesses as for concurrent accesses
     to any object.

   * 'The number, order, and encoding of bytes in any object (when not
     explicitly specified in this International Standard) (C99 and C11
     6.2.6.1).'

     Determined by ABI.

   * 'Whether any extended alignments are supported and the contexts in
     which they are supported (C11 6.2.8).'

     Extended alignments up to 2^{28} (bytes) are supported for objects
     of automatic storage duration.  Alignments supported for objects of
     static and thread storage duration are determined by the ABI.

   * 'Valid alignment values other than those returned by an _Alignof
     expression for fundamental types, if any (C11 6.2.8).'

     Valid alignments are powers of 2 up to and including 2^{28}.

   * 'The value of the result of the 'sizeof' and '_Alignof' operators
     (C90 6.3.3.4, C99 and C11 6.5.3.4).'

     Determined by ABI.


File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation

4.16 Locale-Specific Behavior
=============================

The behavior of these points are dependent on the implementation of the
C library, and are not defined by GCC itself.


File: gcc.info,  Node: C++ Implementation,  Next: C Extensions,  Prev: C Implementation,  Up: Top

5 C++ Implementation-Defined Behavior
*************************************

A conforming implementation of ISO C++ is required to document its
choice of behavior in each of the areas that are designated
"implementation defined".  The following lists all such areas, along
with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
14882:2003 standards.  Some areas are only implementation-defined in one
version of the standard.

 Some choices depend on the externally determined ABI for the platform
(including standard character encodings) which GCC follows; these are
listed as "determined by ABI" below.  *Note Binary Compatibility:
Compatibility, and <http://gcc.gnu.org/readings.html>.  Some choices are
documented in the preprocessor manual.  *Note Implementation-defined
behavior: (cpp)Implementation-defined behavior.  Some choices are
documented in the corresponding document for the C language.  *Note C
Implementation::.  Some choices are made by the library and operating
system (or other environment when compiling for a freestanding
environment); refer to their documentation for details.

* Menu:

* Conditionally-supported behavior::
* Exception handling::


File: gcc.info,  Node: Conditionally-supported behavior,  Next: Exception handling,  Up: C++ Implementation

5.1 Conditionally-Supported Behavior
====================================

'Each implementation shall include documentation that identifies all
conditionally-supported constructs that it does not support (C++0x
1.4).'

   * 'Whether an argument of class type with a non-trivial copy
     constructor or destructor can be passed to ... (C++0x 5.2.2).'

     Such argument passing is supported, using the same
     pass-by-invisible-reference approach used for normal function
     arguments of such types.


File: gcc.info,  Node: Exception handling,  Prev: Conditionally-supported behavior,  Up: C++ Implementation

5.2 Exception Handling
======================

   * 'In the situation where no matching handler is found, it is
     implementation-defined whether or not the stack is unwound before
     std::terminate() is called (C++98 15.5.1).'

     The stack is not unwound before std::terminate is called.


File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C++ Implementation,  Up: Top

6 Extensions to the C Language Family
*************************************

GNU C provides several language features not found in ISO standard C.
(The '-pedantic' option directs GCC to print a warning message if any of
these features is used.)  To test for the availability of these features
in conditional compilation, check for a predefined macro '__GNUC__',
which is always defined under GCC.

 These extensions are available in C and Objective-C.  Most of them are
also available in C++.  *Note Extensions to the C++ Language: C++
Extensions, for extensions that apply _only_ to C++.

 Some features that are in ISO C99 but not C90 or C++ are also, as
extensions, accepted by GCC in C90 mode and in C++.

* Menu:

* Statement Exprs::     Putting statements and declarations inside expressions.
* Local Labels::        Labels local to a block.
* Labels as Values::    Getting pointers to labels, and computed gotos.
* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
* Constructing Calls::  Dispatching a call to another function.
* Typeof::              'typeof': referring to the type of an expression.
* Conditionals::        Omitting the middle operand of a '?:' expression.
* __int128::		128-bit integers--'__int128'.
* Long Long::           Double-word integers--'long long int'.
* Complex::             Data types for complex numbers.
* Floating Types::      Additional Floating Types.
* Half-Precision::      Half-Precision Floating Point.
* Decimal Float::       Decimal Floating Types.
* Hex Floats::          Hexadecimal floating-point constants.
* Fixed-Point::         Fixed-Point Types.
* Named Address Spaces::Named address spaces.
* Zero Length::         Zero-length arrays.
* Empty Structures::    Structures with no members.
* Variable Length::     Arrays whose length is computed at run time.
* Variadic Macros::     Macros with a variable number of arguments.
* Escaped Newlines::    Slightly looser rules for escaped newlines.
* Subscripting::        Any array can be subscripted, even if not an lvalue.
* Pointer Arith::       Arithmetic on 'void'-pointers and function pointers.
* Pointers to Arrays::  Pointers to arrays with qualifiers work as expected.
* Initializers::        Non-constant initializers.
* Compound Literals::   Compound literals give structures, unions
                        or arrays as values.
* Designated Inits::    Labeling elements of initializers.
* Case Ranges::         'case 1 ... 9' and such.
* Cast to Union::       Casting to union type from any member of the union.
* Mixed Declarations::  Mixing declarations and code.
* Function Attributes:: Declaring that functions have no side effects,
                        or that they can never return.
* Label Attributes::    Specifying attributes on labels.
* Attribute Syntax::    Formal syntax for attributes.
* Function Prototypes:: Prototype declarations and old-style definitions.
* C++ Comments::        C++ comments are recognized.
* Dollar Signs::        Dollar sign is allowed in identifiers.
* Character Escapes::   '\e' stands for the character <ESC>.
* Variable Attributes:: Specifying attributes of variables.
* Type Attributes::     Specifying attributes of types.
* Alignment::           Inquiring about the alignment of a type or variable.
* Inline::              Defining inline functions (as fast as macros).
* Volatiles::           What constitutes an access to a volatile object.
* Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
* Alternate Keywords::  '__const__', '__asm__', etc., for header files.
* Incomplete Enums::    'enum foo;', with details to follow.
* Function Names::      Printable strings which are the name of the current
                        function.
* Return Address::      Getting the return or frame address of a function.
* Vector Extensions::   Using vector instructions through built-in functions.
* Offsetof::            Special syntax for implementing 'offsetof'.
* __sync Builtins::     Legacy built-in functions for atomic memory access.
* __atomic Builtins::   Atomic built-in functions with memory model.
* Integer Overflow Builtins:: Built-in functions to perform arithmetics and
                        arithmetic overflow checking.
* x86 specific memory model extensions for transactional memory:: x86 memory models.
* Object Size Checking:: Built-in functions for limited buffer overflow
                        checking.
* Pointer Bounds Checker builtins:: Built-in functions for Pointer Bounds Checker.
* Cilk Plus Builtins::  Built-in functions for the Cilk Plus language extension.
* Other Builtins::      Other built-in functions.
* Target Builtins::     Built-in functions specific to particular targets.
* Target Format Checks:: Format checks specific to particular targets.
* Pragmas::             Pragmas accepted by GCC.
* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
* Thread-Local::        Per-thread variables.
* Binary constants::    Binary constants using the '0b' prefix.


File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions

6.1 Statements and Declarations in Expressions
==============================================

A compound statement enclosed in parentheses may appear as an expression
in GNU C.  This allows you to use loops, switches, and local variables
within an expression.

 Recall that a compound statement is a sequence of statements surrounded
by braces; in this construct, parentheses go around the braces.  For
example:

     ({ int y = foo (); int z;
        if (y > 0) z = y;
        else z = - y;
        z; })

is a valid (though slightly more complex than necessary) expression for
the absolute value of 'foo ()'.

 The last thing in the compound statement should be an expression
followed by a semicolon; the value of this subexpression serves as the
value of the entire construct.  (If you use some other kind of statement
last within the braces, the construct has type 'void', and thus
effectively no value.)

 This feature is especially useful in making macro definitions "safe"
(so that they evaluate each operand exactly once).  For example, the
"maximum" function is commonly defined as a macro in standard C as
follows:

     #define max(a,b) ((a) > (b) ? (a) : (b))

But this definition computes either A or B twice, with bad results if
the operand has side effects.  In GNU C, if you know the type of the
operands (here taken as 'int'), you can define the macro safely as
follows:

     #define maxint(a,b) \
       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })

 Embedded statements are not allowed in constant expressions, such as
the value of an enumeration constant, the width of a bit-field, or the
initial value of a static variable.

 If you don't know the type of the operand, you can still do this, but
you must use 'typeof' or '__auto_type' (*note Typeof::).

 In G++, the result value of a statement expression undergoes array and
function pointer decay, and is returned by value to the enclosing
expression.  For instance, if 'A' is a class, then

             A a;

             ({a;}).Foo ()

constructs a temporary 'A' object to hold the result of the statement
expression, and that is used to invoke 'Foo'.  Therefore the 'this'
pointer observed by 'Foo' is not the address of 'a'.

 In a statement expression, any temporaries created within a statement
are destroyed at that statement's end.  This makes statement expressions
inside macros slightly different from function calls.  In the latter
case temporaries introduced during argument evaluation are destroyed at
the end of the statement that includes the function call.  In the
statement expression case they are destroyed during the statement
expression.  For instance,

     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
     template<typename T> T function(T a) { T b = a; return b + 3; }

     void foo ()
     {
       macro (X ());
       function (X ());
     }

has different places where temporaries are destroyed.  For the 'macro'
case, the temporary 'X' is destroyed just after the initialization of
'b'.  In the 'function' case that temporary is destroyed when the
function returns.

 These considerations mean that it is probably a bad idea to use
statement expressions of this form in header files that are designed to
work with C++.  (Note that some versions of the GNU C Library contained
header files using statement expressions that lead to precisely this
bug.)

 Jumping into a statement expression with 'goto' or using a 'switch'
statement outside the statement expression with a 'case' or 'default'
label inside the statement expression is not permitted.  Jumping into a
statement expression with a computed 'goto' (*note Labels as Values::)
has undefined behavior.  Jumping out of a statement expression is
permitted, but if the statement expression is part of a larger
expression then it is unspecified which other subexpressions of that
expression have been evaluated except where the language definition
requires certain subexpressions to be evaluated before or after the
statement expression.  In any case, as with a function call, the
evaluation of a statement expression is not interleaved with the
evaluation of other parts of the containing expression.  For example,

       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();

calls 'foo' and 'bar1' and does not call 'baz' but may or may not call
'bar2'.  If 'bar2' is called, it is called after 'foo' and before
'bar1'.


File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions

6.2 Locally Declared Labels
===========================

GCC allows you to declare "local labels" in any nested block scope.  A
local label is just like an ordinary label, but you can only reference
it (with a 'goto' statement, or by taking its address) within the block
in which it is declared.

 A local label declaration looks like this:

     __label__ LABEL;

or

     __label__ LABEL1, LABEL2, /* ... */;

 Local label declarations must come at the beginning of the block,
before any ordinary declarations or statements.

 The label declaration defines the label _name_, but does not define the
label itself.  You must do this in the usual way, with 'LABEL:', within
the statements of the statement expression.

 The local label feature is useful for complex macros.  If a macro
contains nested loops, a 'goto' can be useful for breaking out of them.
However, an ordinary label whose scope is the whole function cannot be
used: if the macro can be expanded several times in one function, the
label is multiply defined in that function.  A local label avoids this
problem.  For example:

     #define SEARCH(value, array, target)              \
     do {                                              \
       __label__ found;                                \
       typeof (target) _SEARCH_target = (target);      \
       typeof (*(array)) *_SEARCH_array = (array);     \
       int i, j;                                       \
       int value;                                      \
       for (i = 0; i < max; i++)                       \
         for (j = 0; j < max; j++)                     \
           if (_SEARCH_array[i][j] == _SEARCH_target)  \
             { (value) = i; goto found; }              \
       (value) = -1;                                   \
      found:;                                          \
     } while (0)

 This could also be written using a statement expression:

     #define SEARCH(array, target)                     \
     ({                                                \
       __label__ found;                                \
       typeof (target) _SEARCH_target = (target);      \
       typeof (*(array)) *_SEARCH_array = (array);     \
       int i, j;                                       \
       int value;                                      \
       for (i = 0; i < max; i++)                       \
         for (j = 0; j < max; j++)                     \
           if (_SEARCH_array[i][j] == _SEARCH_target)  \
             { value = i; goto found; }                \
       value = -1;                                     \
      found:                                           \
       value;                                          \
     })

 Local label declarations also make the labels they declare visible to
nested functions, if there are any.  *Note Nested Functions::, for
details.


File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions

6.3 Labels as Values
====================

You can get the address of a label defined in the current function (or a
containing function) with the unary operator '&&'.  The value has type
'void *'.  This value is a constant and can be used wherever a constant
of that type is valid.  For example:

     void *ptr;
     /* ... */
     ptr = &&foo;

 To use these values, you need to be able to jump to one.  This is done
with the computed goto statement(1), 'goto *EXP;'.  For example,

     goto *ptr;

Any expression of type 'void *' is allowed.

 One way of using these constants is in initializing a static array that
serves as a jump table:

     static void *array[] = { &&foo, &&bar, &&hack };

Then you can select a label with indexing, like this:

     goto *array[i];

Note that this does not check whether the subscript is in bounds--array
indexing in C never does that.

 Such an array of label values serves a purpose much like that of the
'switch' statement.  The 'switch' statement is cleaner, so use that
rather than an array unless the problem does not fit a 'switch'
statement very well.

 Another use of label values is in an interpreter for threaded code.
The labels within the interpreter function can be stored in the threaded
code for super-fast dispatching.

 You may not use this mechanism to jump to code in a different function.
If you do that, totally unpredictable things happen.  The best way to
avoid this is to store the label address only in automatic variables and
never pass it as an argument.

 An alternate way to write the above example is

     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
                                  &&hack - &&foo };
     goto *(&&foo + array[i]);

This is more friendly to code living in shared libraries, as it reduces
the number of dynamic relocations that are needed, and by consequence,
allows the data to be read-only.  This alternative with label
differences is not supported for the AVR target, please use the first
approach for AVR programs.

 The '&&foo' expressions for the same label might have different values
if the containing function is inlined or cloned.  If a program relies on
them being always the same, '__attribute__((__noinline__,__noclone__))'
should be used to prevent inlining and cloning.  If '&&foo' is used in a
static variable initializer, inlining and cloning is forbidden.

   ---------- Footnotes ----------

   (1) The analogous feature in Fortran is called an assigned goto, but
that name seems inappropriate in C, where one can do more than simply
store label addresses in label variables.


File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions

6.4 Nested Functions
====================

A "nested function" is a function defined inside another function.
Nested functions are supported as an extension in GNU C, but are not
supported by GNU C++.

 The nested function's name is local to the block where it is defined.
For example, here we define a nested function named 'square', and call
it twice:

     foo (double a, double b)
     {
       double square (double z) { return z * z; }

       return square (a) + square (b);
     }

 The nested function can access all the variables of the containing
function that are visible at the point of its definition.  This is
called "lexical scoping".  For example, here we show a nested function
which uses an inherited variable named 'offset':

     bar (int *array, int offset, int size)
     {
       int access (int *array, int index)
         { return array[index + offset]; }
       int i;
       /* ... */
       for (i = 0; i < size; i++)
         /* ... */ access (array, i) /* ... */
     }

 Nested function definitions are permitted within functions in the
places where variable definitions are allowed; that is, in any block,
mixed with the other declarations and statements in the block.

 It is possible to call the nested function from outside the scope of
its name by storing its address or passing the address to another
function:

     hack (int *array, int size)
     {
       void store (int index, int value)
         { array[index] = value; }

       intermediate (store, size);
     }

 Here, the function 'intermediate' receives the address of 'store' as an
argument.  If 'intermediate' calls 'store', the arguments given to
'store' are used to store into 'array'.  But this technique works only
so long as the containing function ('hack', in this example) does not
exit.

 If you try to call the nested function through its address after the
containing function exits, all hell breaks loose.  If you try to call it
after a containing scope level exits, and if it refers to some of the
variables that are no longer in scope, you may be lucky, but it's not
wise to take the risk.  If, however, the nested function does not refer
to anything that has gone out of scope, you should be safe.

 GCC implements taking the address of a nested function using a
technique called "trampolines".  This technique was described in
'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference
Proceedings, October 17-21, 1988).

 A nested function can jump to a label inherited from a containing
function, provided the label is explicitly declared in the containing
function (*note Local Labels::).  Such a jump returns instantly to the
containing function, exiting the nested function that did the 'goto' and
any intermediate functions as well.  Here is an example:

     bar (int *array, int offset, int size)
     {
       __label__ failure;
       int access (int *array, int index)
         {
           if (index > size)
             goto failure;
           return array[index + offset];
         }
       int i;
       /* ... */
       for (i = 0; i < size; i++)
         /* ... */ access (array, i) /* ... */
       /* ... */
       return 0;

      /* Control comes here from 'access'
         if it detects an error.  */
      failure:
       return -1;
     }

 A nested function always has no linkage.  Declaring one with 'extern'
or 'static' is erroneous.  If you need to declare the nested function
before its definition, use 'auto' (which is otherwise meaningless for
function declarations).

     bar (int *array, int offset, int size)
     {
       __label__ failure;
       auto int access (int *, int);
       /* ... */
       int access (int *array, int index)
         {
           if (index > size)
             goto failure;
           return array[index + offset];
         }
       /* ... */
     }


File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions

6.5 Constructing Function Calls
===============================

Using the built-in functions described below, you can record the
arguments a function received, and call another function with the same
arguments, without knowing the number or types of the arguments.

 You can also record the return value of that function call, and later
return that value, without knowing what data type the function tried to
return (as long as your caller expects that data type).

 However, these built-in functions may interact badly with some
sophisticated features or other extensions of the language.  It is,
therefore, not recommended to use them outside very simple functions
acting as mere forwarders for their arguments.

 -- Built-in Function: void * __builtin_apply_args ()
     This built-in function returns a pointer to data describing how to
     perform a call with the same arguments as are passed to the current
     function.

     The function saves the arg pointer register, structure value
     address, and all registers that might be used to pass arguments to
     a function into a block of memory allocated on the stack.  Then it
     returns the address of that block.

 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
          *ARGUMENTS, size_t SIZE)
     This built-in function invokes FUNCTION with a copy of the
     parameters described by ARGUMENTS and SIZE.

     The value of ARGUMENTS should be the value returned by
     '__builtin_apply_args'.  The argument SIZE specifies the size of
     the stack argument data, in bytes.

     This function returns a pointer to data describing how to return
     whatever value is returned by FUNCTION.  The data is saved in a
     block of memory allocated on the stack.

     It is not always simple to compute the proper value for SIZE.  The
     value is used by '__builtin_apply' to compute the amount of data
     that should be pushed on the stack and copied from the incoming
     argument area.

 -- Built-in Function: void __builtin_return (void *RESULT)
     This built-in function returns the value described by RESULT from
     the containing function.  You should specify, for RESULT, a value
     returned by '__builtin_apply'.

 -- Built-in Function: __builtin_va_arg_pack ()
     This built-in function represents all anonymous arguments of an
     inline function.  It can be used only in inline functions that are
     always inlined, never compiled as a separate function, such as
     those using '__attribute__ ((__always_inline__))' or '__attribute__
     ((__gnu_inline__))' extern inline functions.  It must be only
     passed as last argument to some other function with variable
     arguments.  This is useful for writing small wrapper inlines for
     variable argument functions, when using preprocessor macros is
     undesirable.  For example:
          extern int myprintf (FILE *f, const char *format, ...);
          extern inline __attribute__ ((__gnu_inline__)) int
          myprintf (FILE *f, const char *format, ...)
          {
            int r = fprintf (f, "myprintf: ");
            if (r < 0)
              return r;
            int s = fprintf (f, format, __builtin_va_arg_pack ());
            if (s < 0)
              return s;
            return r + s;
          }

 -- Built-in Function: size_t __builtin_va_arg_pack_len ()
     This built-in function returns the number of anonymous arguments of
     an inline function.  It can be used only in inline functions that
     are always inlined, never compiled as a separate function, such as
     those using '__attribute__ ((__always_inline__))' or '__attribute__
     ((__gnu_inline__))' extern inline functions.  For example following
     does link- or run-time checking of open arguments for optimized
     code:
          #ifdef __OPTIMIZE__
          extern inline __attribute__((__gnu_inline__)) int
          myopen (const char *path, int oflag, ...)
          {
            if (__builtin_va_arg_pack_len () > 1)
              warn_open_too_many_arguments ();

            if (__builtin_constant_p (oflag))
              {
                if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1)
                  {
                    warn_open_missing_mode ();
                    return __open_2 (path, oflag);
                  }
                return open (path, oflag, __builtin_va_arg_pack ());
              }

            if (__builtin_va_arg_pack_len () < 1)
              return __open_2 (path, oflag);

            return open (path, oflag, __builtin_va_arg_pack ());
          }
          #endif


File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions

6.6 Referring to a Type with 'typeof'
=====================================

Another way to refer to the type of an expression is with 'typeof'.  The
syntax of using of this keyword looks like 'sizeof', but the construct
acts semantically like a type name defined with 'typedef'.

 There are two ways of writing the argument to 'typeof': with an
expression or with a type.  Here is an example with an expression:

     typeof (x[0](1))

This assumes that 'x' is an array of pointers to functions; the type
described is that of the values of the functions.

 Here is an example with a typename as the argument:

     typeof (int *)

Here the type described is that of pointers to 'int'.

 If you are writing a header file that must work when included in ISO C
programs, write '__typeof__' instead of 'typeof'.  *Note Alternate
Keywords::.

 A 'typeof' construct can be used anywhere a typedef name can be used.
For example, you can use it in a declaration, in a cast, or inside of
'sizeof' or 'typeof'.

 The operand of 'typeof' is evaluated for its side effects if and only
if it is an expression of variably modified type or the name of such a
type.

 'typeof' is often useful in conjunction with statement expressions
(*note Statement Exprs::).  Here is how the two together can be used to
define a safe "maximum" macro which operates on any arithmetic type and
evaluates each of its arguments exactly once:

     #define max(a,b) \
       ({ typeof (a) _a = (a); \
           typeof (b) _b = (b); \
         _a > _b ? _a : _b; })

 The reason for using names that start with underscores for the local
variables is to avoid conflicts with variable names that occur within
the expressions that are substituted for 'a' and 'b'.  Eventually we
hope to design a new form of declaration syntax that allows you to
declare variables whose scopes start only after their initializers; this
will be a more reliable way to prevent such conflicts.

Some more examples of the use of 'typeof':

   * This declares 'y' with the type of what 'x' points to.

          typeof (*x) y;

   * This declares 'y' as an array of such values.

          typeof (*x) y[4];

   * This declares 'y' as an array of pointers to characters:

          typeof (typeof (char *)[4]) y;

     It is equivalent to the following traditional C declaration:

          char *y[4];

     To see the meaning of the declaration using 'typeof', and why it
     might be a useful way to write, rewrite it with these macros:

          #define pointer(T)  typeof(T *)
          #define array(T, N) typeof(T [N])

     Now the declaration can be rewritten this way:

          array (pointer (char), 4) y;

     Thus, 'array (pointer (char), 4)' is the type of arrays of 4
     pointers to 'char'.

 In GNU C, but not GNU C++, you may also declare the type of a variable
as '__auto_type'.  In that case, the declaration must declare only one
variable, whose declarator must just be an identifier, the declaration
must be initialized, and the type of the variable is determined by the
initializer; the name of the variable is not in scope until after the
initializer.  (In C++, you should use C++11 'auto' for this purpose.)
Using '__auto_type', the "maximum" macro above could be written as:

     #define max(a,b) \
       ({ __auto_type _a = (a); \
           __auto_type _b = (b); \
         _a > _b ? _a : _b; })

 Using '__auto_type' instead of 'typeof' has two advantages:

   * Each argument to the macro appears only once in the expansion of
     the macro.  This prevents the size of the macro expansion growing
     exponentially when calls to such macros are nested inside arguments
     of such macros.

   * If the argument to the macro has variably modified type, it is
     evaluated only once when using '__auto_type', but twice if 'typeof'
     is used.


File: gcc.info,  Node: Conditionals,  Next: __int128,  Prev: Typeof,  Up: C Extensions

6.7 Conditionals with Omitted Operands
======================================

The middle operand in a conditional expression may be omitted.  Then if
the first operand is nonzero, its value is the value of the conditional
expression.

 Therefore, the expression

     x ? : y

has the value of 'x' if that is nonzero; otherwise, the value of 'y'.

 This example is perfectly equivalent to

     x ? x : y

In this simple case, the ability to omit the middle operand is not
especially useful.  When it becomes useful is when the first operand
does, or may (if it is a macro argument), contain a side effect.  Then
repeating the operand in the middle would perform the side effect twice.
Omitting the middle operand uses the value already computed without the
undesirable effects of recomputing it.


File: gcc.info,  Node: __int128,  Next: Long Long,  Prev: Conditionals,  Up: C Extensions

6.8 128-bit Integers
====================

As an extension the integer scalar type '__int128' is supported for
targets which have an integer mode wide enough to hold 128 bits.  Simply
write '__int128' for a signed 128-bit integer, or 'unsigned __int128'
for an unsigned 128-bit integer.  There is no support in GCC for
expressing an integer constant of type '__int128' for targets with 'long
long' integer less than 128 bits wide.


File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: __int128,  Up: C Extensions

6.9 Double-Word Integers
========================

ISO C99 supports data types for integers that are at least 64 bits wide,
and as an extension GCC supports them in C90 mode and in C++.  Simply
write 'long long int' for a signed integer, or 'unsigned long long int'
for an unsigned integer.  To make an integer constant of type 'long long
int', add the suffix 'LL' to the integer.  To make an integer constant
of type 'unsigned long long int', add the suffix 'ULL' to the integer.

 You can use these types in arithmetic like any other integer types.
Addition, subtraction, and bitwise boolean operations on these types are
open-coded on all types of machines.  Multiplication is open-coded if
the machine supports a fullword-to-doubleword widening multiply
instruction.  Division and shifts are open-coded only on machines that
provide special support.  The operations that are not open-coded use
special library routines that come with GCC.

 There may be pitfalls when you use 'long long' types for function
arguments without function prototypes.  If a function expects type 'int'
for its argument, and you pass a value of type 'long long int',
confusion results because the caller and the subroutine disagree about
the number of bytes for the argument.  Likewise, if the function expects
'long long int' and you pass 'int'.  The best way to avoid such problems
is to use prototypes.


File: gcc.info,  Node: Complex,  Next: Floating Types,  Prev: Long Long,  Up: C Extensions

6.10 Complex Numbers
====================

ISO C99 supports complex floating data types, and as an extension GCC
supports them in C90 mode and in C++.  GCC also supports complex integer
data types which are not part of ISO C99.  You can declare complex types
using the keyword '_Complex'.  As an extension, the older GNU keyword
'__complex__' is also supported.

 For example, '_Complex double x;' declares 'x' as a variable whose real
part and imaginary part are both of type 'double'.  '_Complex short int
y;' declares 'y' to have real and imaginary parts of type 'short int';
this is not likely to be useful, but it shows that the set of complex
types is complete.

 To write a constant with a complex data type, use the suffix 'i' or 'j'
(either one; they are equivalent).  For example, '2.5fi' has type
'_Complex float' and '3i' has type '_Complex int'.  Such a constant
always has a pure imaginary value, but you can form any complex value
you like by adding one to a real constant.  This is a GNU extension; if
you have an ISO C99 conforming C library (such as the GNU C Library),
and want to construct complex constants of floating type, you should
include '<complex.h>' and use the macros 'I' or '_Complex_I' instead.

 To extract the real part of a complex-valued expression EXP, write
'__real__ EXP'.  Likewise, use '__imag__' to extract the imaginary part.
This is a GNU extension; for values of floating type, you should use the
ISO C99 functions 'crealf', 'creal', 'creall', 'cimagf', 'cimag' and
'cimagl', declared in '<complex.h>' and also provided as built-in
functions by GCC.

 The operator '~' performs complex conjugation when used on a value with
a complex type.  This is a GNU extension; for values of floating type,
you should use the ISO C99 functions 'conjf', 'conj' and 'conjl',
declared in '<complex.h>' and also provided as built-in functions by
GCC.

 GCC can allocate complex automatic variables in a noncontiguous
fashion; it's even possible for the real part to be in a register while
the imaginary part is on the stack (or vice versa).  Only the DWARF 2
debug info format can represent this, so use of DWARF 2 is recommended.
If you are using the stabs debug info format, GCC describes a
noncontiguous complex variable as if it were two separate variables of
noncomplex type.  If the variable's actual name is 'foo', the two
fictitious variables are named 'foo$real' and 'foo$imag'.  You can
examine and set these two fictitious variables with your debugger.


File: gcc.info,  Node: Floating Types,  Next: Half-Precision,  Prev: Complex,  Up: C Extensions

6.11 Additional Floating Types
==============================

As an extension, GNU C supports additional floating types, '__float80'
and '__float128' to support 80-bit ('XFmode') and 128-bit ('TFmode')
floating types.  Support for additional types includes the arithmetic
operators: add, subtract, multiply, divide; unary arithmetic operators;
relational operators; equality operators; and conversions to and from
integer and other floating types.  Use a suffix 'w' or 'W' in a literal
constant of type '__float80' and 'q' or 'Q' for '_float128'.  You can
declare complex types using the corresponding internal complex type,
'XCmode' for '__float80' type and 'TCmode' for '__float128' type:

     typedef _Complex float __attribute__((mode(TC))) _Complex128;
     typedef _Complex float __attribute__((mode(XC))) _Complex80;

 Not all targets support additional floating-point types.  '__float80'
and '__float128' types are supported on x86 and IA-64 targets.  The
'__float128' type is supported on hppa HP-UX targets.


File: gcc.info,  Node: Half-Precision,  Next: Decimal Float,  Prev: Floating Types,  Up: C Extensions

6.12 Half-Precision Floating Point
==================================

On ARM targets, GCC supports half-precision (16-bit) floating point via
the '__fp16' type.  You must enable this type explicitly with the
'-mfp16-format' command-line option in order to use it.

 ARM supports two incompatible representations for half-precision
floating-point values.  You must choose one of the representations and
use it consistently in your program.

 Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format.  This
format can represent normalized values in the range of 2^{-14} to 65504.
There are 11 bits of significand precision, approximately 3 decimal
digits.

 Specifying '-mfp16-format=alternative' selects the ARM alternative
format.  This representation is similar to the IEEE format, but does not
support infinities or NaNs.  Instead, the range of exponents is
extended, so that this format can represent normalized values in the
range of 2^{-14} to 131008.

 The '__fp16' type is a storage format only.  For purposes of arithmetic
and other operations, '__fp16' values in C or C++ expressions are
automatically promoted to 'float'.  In addition, you cannot declare a
function with a return value or parameters of type '__fp16'.

 Note that conversions from 'double' to '__fp16' involve an intermediate
conversion to 'float'.  Because of rounding, this can sometimes produce
a different result than a direct conversion.

 ARM provides hardware support for conversions between '__fp16' and
'float' values as an extension to VFP and NEON (Advanced SIMD). GCC
generates code using these hardware instructions if you compile with
options to select an FPU that provides them; for example,
'-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the '-mfp16-format'
option to select a half-precision format.

 Language-level support for the '__fp16' data type is independent of
whether GCC generates code using hardware floating-point instructions.
In cases where hardware support is not specified, GCC implements
conversions between '__fp16' and 'float' values as library calls.


File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Half-Precision,  Up: C Extensions

6.13 Decimal Floating Types
===========================

As an extension, GNU C supports decimal floating types as defined in the
N1312 draft of ISO/IEC WDTR24732.  Support for decimal floating types in
GCC will evolve as the draft technical report changes.  Calling
conventions for any target might also change.  Not all targets support
decimal floating types.

 The decimal floating types are '_Decimal32', '_Decimal64', and
'_Decimal128'.  They use a radix of ten, unlike the floating types
'float', 'double', and 'long double' whose radix is not specified by the
C standard but is usually two.

 Support for decimal floating types includes the arithmetic operators
add, subtract, multiply, divide; unary arithmetic operators; relational
operators; equality operators; and conversions to and from integer and
other floating types.  Use a suffix 'df' or 'DF' in a literal constant
of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL'
for '_Decimal128'.

 GCC support of decimal float as specified by the draft technical report
is incomplete:

   * When the value of a decimal floating type cannot be represented in
     the integer type to which it is being converted, the result is
     undefined rather than the result value specified by the draft
     technical report.

   * GCC does not provide the C library functionality associated with
     'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which
     must come from a separate C library implementation.  Because of
     this the GNU C compiler does not define macro '__STDC_DEC_FP__' to
     indicate that the implementation conforms to the technical report.

 Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by
the DWARF 2 debug information format.


File: gcc.info,  Node: Hex Floats,  Next: Fixed-Point,  Prev: Decimal Float,  Up: C Extensions

6.14 Hex Floats
===============

ISO C99 supports floating-point numbers written not only in the usual
decimal notation, such as '1.55e1', but also numbers such as '0x1.fp3'
written in hexadecimal format.  As a GNU extension, GCC supports this in
C90 mode (except in some cases when strictly conforming) and in C++.  In
that format the '0x' hex introducer and the 'p' or 'P' exponent field
are mandatory.  The exponent is a decimal number that indicates the
power of 2 by which the significant part is multiplied.  Thus '0x1.f' is
1 15/16, 'p3' multiplies it by 8, and the value of '0x1.fp3' is the same
as '1.55e1'.

 Unlike for floating-point numbers in the decimal notation the exponent
is always required in the hexadecimal notation.  Otherwise the compiler
would not be able to resolve the ambiguity of, e.g., '0x1.f'.  This
could mean '1.0f' or '1.9375' since 'f' is also the extension for
floating-point constants of type 'float'.


File: gcc.info,  Node: Fixed-Point,  Next: Named Address Spaces,  Prev: Hex Floats,  Up: C Extensions

6.15 Fixed-Point Types
======================

As an extension, GNU C supports fixed-point types as defined in the
N1169 draft of ISO/IEC DTR 18037.  Support for fixed-point types in GCC
will evolve as the draft technical report changes.  Calling conventions
for any target might also change.  Not all targets support fixed-point
types.

 The fixed-point types are 'short _Fract', '_Fract', 'long _Fract',
'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract',
'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short
_Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract',
'_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned
long _Fract', '_Sat unsigned long long _Fract', 'short _Accum',
'_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum',
'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum',
'_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long
_Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat
unsigned long _Accum', '_Sat unsigned long long _Accum'.

 Fixed-point data values contain fractional and optional integral parts.
The format of fixed-point data varies and depends on the target machine.

 Support for fixed-point types includes:
   * prefix and postfix increment and decrement operators ('++', '--')
   * unary arithmetic operators ('+', '-', '!')
   * binary arithmetic operators ('+', '-', '*', '/')
   * binary shift operators ('<<', '>>')
   * relational operators ('<', '<=', '>=', '>')
   * equality operators ('==', '!=')
   * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=')
   * conversions to and from integer, floating-point, or fixed-point
     types

 Use a suffix in a fixed-point literal constant:
   * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract'
   * 'r' or 'R' for '_Fract' and '_Sat _Fract'
   * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract'
   * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract'
   * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short
     _Fract'
   * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract'
   * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long
     _Fract'
   * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned
     long long _Fract'
   * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum'
   * 'k' or 'K' for '_Accum' and '_Sat _Accum'
   * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum'
   * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum'
   * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short
     _Accum'
   * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum'
   * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long
     _Accum'
   * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned
     long long _Accum'

 GCC support of fixed-point types as specified by the draft technical
report is incomplete:

   * Pragmas to control overflow and rounding behaviors are not
     implemented.

 Fixed-point types are supported by the DWARF 2 debug information
format.


File: gcc.info,  Node: Named Address Spaces,  Next: Zero Length,  Prev: Fixed-Point,  Up: C Extensions

6.16 Named Address Spaces
=========================

As an extension, GNU C supports named address spaces as defined in the
N1275 draft of ISO/IEC DTR 18037.  Support for named address spaces in
GCC will evolve as the draft technical report changes.  Calling
conventions for any target might also change.  At present, only the AVR,
SPU, M32C, and RL78 targets support address spaces other than the
generic address space.

 Address space identifiers may be used exactly like any other C type
qualifier (e.g., 'const' or 'volatile').  See the N1275 document for
more details.

6.16.1 AVR Named Address Spaces
-------------------------------

On the AVR target, there are several address spaces that can be used in
order to put read-only data into the flash memory and access that data
by means of the special instructions 'LPM' or 'ELPM' needed to read from
flash.

 Per default, any data including read-only data is located in RAM (the
generic address space) so that non-generic address spaces are needed to
locate read-only data in flash memory _and_ to generate the right
instructions to access this data without using (inline) assembler code.

'__flash'
     The '__flash' qualifier locates data in the '.progmem.data'
     section.  Data is read using the 'LPM' instruction.  Pointers to
     this address space are 16 bits wide.

'__flash1'
'__flash2'
'__flash3'
'__flash4'
'__flash5'
     These are 16-bit address spaces locating data in section
     '.progmemN.data' where N refers to address space '__flashN'.  The
     compiler sets the 'RAMPZ' segment register appropriately before
     reading data by means of the 'ELPM' instruction.

'__memx'
     This is a 24-bit address space that linearizes flash and RAM: If
     the high bit of the address is set, data is read from RAM using the
     lower two bytes as RAM address.  If the high bit of the address is
     clear, data is read from flash with 'RAMPZ' set according to the
     high byte of the address.  *Note '__builtin_avr_flash_segment': AVR
     Built-in Functions.

     Objects in this address space are located in '.progmemx.data'.

 Example

     char my_read (const __flash char ** p)
     {
         /* p is a pointer to RAM that points to a pointer to flash.
            The first indirection of p reads that flash pointer
            from RAM and the second indirection reads a char from this
            flash address.  */

         return **p;
     }

     /* Locate array[] in flash memory */
     const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 };

     int i = 1;

     int main (void)
     {
        /* Return 17 by reading from flash memory */
        return array[array[i]];
     }

For each named address space supported by avr-gcc there is an equally
named but uppercase built-in macro defined.  The purpose is to
facilitate testing if respective address space support is available or
not:

     #ifdef __FLASH
     const __flash int var = 1;

     int read_var (void)
     {
         return var;
     }
     #else
     #include <avr/pgmspace.h> /* From AVR-LibC */

     const int var PROGMEM = 1;

     int read_var (void)
     {
         return (int) pgm_read_word (&var);
     }
     #endif /* __FLASH */

Notice that attribute *note 'progmem': AVR Variable Attributes. locates
data in flash but accesses to these data read from generic address
space, i.e. from RAM, so that you need special accessors like
'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/)
together with attribute 'progmem'.

Limitations and caveats

   * Reading across the 64 KiB section boundary of the '__flash' or
     '__flashN' address spaces shows undefined behavior.  The only
     address space that supports reading across the 64 KiB flash segment
     boundaries is '__memx'.

   * If you use one of the '__flashN' address spaces you must arrange
     your linker script to locate the '.progmemN.data' sections
     according to your needs.

   * Any data or pointers to the non-generic address spaces must be
     qualified as 'const', i.e. as read-only data.  This still applies
     if the data in one of these address spaces like software version
     number or calibration lookup table are intended to be changed after
     load time by, say, a boot loader.  In this case the right
     qualification is 'const' 'volatile' so that the compiler must not
     optimize away known values or insert them as immediates into
     operands of instructions.

   * The following code initializes a variable 'pfoo' located in static
     storage with a 24-bit address:
          extern const __memx char foo;
          const __memx void *pfoo = &foo;

     Such code requires at least binutils 2.23, see
     PR13503 (http://sourceware.org/PR13503).

6.16.2 M32C Named Address Spaces
--------------------------------

On the M32C target, with the R8C and M16C CPU variants, variables
qualified with '__far' are accessed using 32-bit addresses in order to
access memory beyond the first 64 Ki bytes.  If '__far' is used with the
M32CM or M32C CPU variants, it has no effect.

6.16.3 RL78 Named Address Spaces
--------------------------------

On the RL78 target, variables qualified with '__far' are accessed with
32-bit pointers (20-bit addresses) rather than the default 16-bit
addresses.  Non-far variables are assumed to appear in the topmost
64 KiB of the address space.

6.16.4 SPU Named Address Spaces
-------------------------------

On the SPU target variables may be declared as belonging to another
address space by qualifying the type with the '__ea' address space
identifier:

     extern int __ea i;

The compiler generates special code to access the variable 'i'.  It may
use runtime library support, or generate special machine instructions to
access that address space.


File: gcc.info,  Node: Zero Length,  Next: Empty Structures,  Prev: Named Address Spaces,  Up: C Extensions

6.17 Arrays of Length Zero
==========================

Zero-length arrays are allowed in GNU C.  They are very useful as the
last element of a structure that is really a header for a
variable-length object:

     struct line {
       int length;
       char contents[0];
     };

     struct line *thisline = (struct line *)
       malloc (sizeof (struct line) + this_length);
     thisline->length = this_length;

 In ISO C90, you would have to give 'contents' a length of 1, which
means either you waste space or complicate the argument to 'malloc'.

 In ISO C99, you would use a "flexible array member", which is slightly
different in syntax and semantics:

   * Flexible array members are written as 'contents[]' without the '0'.

   * Flexible array members have incomplete type, and so the 'sizeof'
     operator may not be applied.  As a quirk of the original
     implementation of zero-length arrays, 'sizeof' evaluates to zero.

   * Flexible array members may only appear as the last member of a
     'struct' that is otherwise non-empty.

   * A structure containing a flexible array member, or a union
     containing such a structure (possibly recursively), may not be a
     member of a structure or an element of an array.  (However, these
     uses are permitted by GCC as extensions.)

 Non-empty initialization of zero-length arrays is treated like any case
where there are more initializer elements than the array holds, in that
a suitable warning about "excess elements in array" is given, and the
excess elements (all of them, in this case) are ignored.

 GCC allows static initialization of flexible array members.  This is
equivalent to defining a new structure containing the original structure
followed by an array of sufficient size to contain the data.  E.g. in
the following, 'f1' is constructed as if it were declared like 'f2'.

     struct f1 {
       int x; int y[];
     } f1 = { 1, { 2, 3, 4 } };

     struct f2 {
       struct f1 f1; int data[3];
     } f2 = { { 1 }, { 2, 3, 4 } };

The convenience of this extension is that 'f1' has the desired type,
eliminating the need to consistently refer to 'f2.f1'.

 This has symmetry with normal static arrays, in that an array of
unknown size is also written with '[]'.

 Of course, this extension only makes sense if the extra data comes at
the end of a top-level object, as otherwise we would be overwriting data
at subsequent offsets.  To avoid undue complication and confusion with
initialization of deeply nested arrays, we simply disallow any non-empty
initialization except when the structure is the top-level object.  For
example:

     struct foo { int x; int y[]; };
     struct bar { struct foo z; };

     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
     struct bar c = { { 1, { } } };            // Valid.
     struct foo d[1] = { { 1, { 2, 3, 4 } } };  // Invalid.


File: gcc.info,  Node: Empty Structures,  Next: Variable Length,  Prev: Zero Length,  Up: C Extensions

6.18 Structures with No Members
===============================

GCC permits a C structure to have no members:

     struct empty {
     };

 The structure has size zero.  In C++, empty structures are part of the
language.  G++ treats empty structures as if they had a single member of
type 'char'.


File: gcc.info,  Node: Variable Length,  Next: Variadic Macros,  Prev: Empty Structures,  Up: C Extensions

6.19 Arrays of Variable Length
==============================

Variable-length automatic arrays are allowed in ISO C99, and as an
extension GCC accepts them in C90 mode and in C++.  These arrays are
declared like any other automatic arrays, but with a length that is not
a constant expression.  The storage is allocated at the point of
declaration and deallocated when the block scope containing the
declaration exits.  For example:

     FILE *
     concat_fopen (char *s1, char *s2, char *mode)
     {
       char str[strlen (s1) + strlen (s2) + 1];
       strcpy (str, s1);
       strcat (str, s2);
       return fopen (str, mode);
     }

 Jumping or breaking out of the scope of the array name deallocates the
storage.  Jumping into the scope is not allowed; you get an error
message for it.

 As an extension, GCC accepts variable-length arrays as a member of a
structure or a union.  For example:

     void
     foo (int n)
     {
       struct S { int x[n]; };
     }

 You can use the function 'alloca' to get an effect much like
variable-length arrays.  The function 'alloca' is available in many
other C implementations (but not in all).  On the other hand,
variable-length arrays are more elegant.

 There are other differences between these two methods.  Space allocated
with 'alloca' exists until the containing _function_ returns.  The space
for a variable-length array is deallocated as soon as the array name's
scope ends.  (If you use both variable-length arrays and 'alloca' in the
same function, deallocation of a variable-length array also deallocates
anything more recently allocated with 'alloca'.)

 You can also use variable-length arrays as arguments to functions:

     struct entry
     tester (int len, char data[len][len])
     {
       /* ... */
     }

 The length of an array is computed once when the storage is allocated
and is remembered for the scope of the array in case you access it with
'sizeof'.

 If you want to pass the array first and the length afterward, you can
use a forward declaration in the parameter list--another GNU extension.

     struct entry
     tester (int len; char data[len][len], int len)
     {
       /* ... */
     }

 The 'int len' before the semicolon is a "parameter forward
declaration", and it serves the purpose of making the name 'len' known
when the declaration of 'data' is parsed.

 You can write any number of such parameter forward declarations in the
parameter list.  They can be separated by commas or semicolons, but the
last one must end with a semicolon, which is followed by the "real"
parameter declarations.  Each forward declaration must match a "real"
declaration in parameter name and data type.  ISO C99 does not support
parameter forward declarations.


File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Variable Length,  Up: C Extensions

6.20 Macros with a Variable Number of Arguments.
================================================

In the ISO C standard of 1999, a macro can be declared to accept a
variable number of arguments much as a function can.  The syntax for
defining the macro is similar to that of a function.  Here is an
example:

     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)

Here '...' is a "variable argument".  In the invocation of such a macro,
it represents the zero or more tokens until the closing parenthesis that
ends the invocation, including any commas.  This set of tokens replaces
the identifier '__VA_ARGS__' in the macro body wherever it appears.  See
the CPP manual for more information.

 GCC has long supported variadic macros, and used a different syntax
that allowed you to give a name to the variable arguments just like any
other argument.  Here is an example:

     #define debug(format, args...) fprintf (stderr, format, args)

This is in all ways equivalent to the ISO C example above, but arguably
more readable and descriptive.

 GNU CPP has two further variadic macro extensions, and permits them to
be used with either of the above forms of macro definition.

 In standard C, you are not allowed to leave the variable argument out
entirely; but you are allowed to pass an empty argument.  For example,
this invocation is invalid in ISO C, because there is no comma after the
string:

     debug ("A message")

 GNU CPP permits you to completely omit the variable arguments in this
way.  In the above examples, the compiler would complain, though since
the expansion of the macro still has the extra comma after the format
string.

 To help solve this problem, CPP behaves specially for variable
arguments used with the token paste operator, '##'.  If instead you
write

     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)

and if the variable arguments are omitted or empty, the '##' operator
causes the preprocessor to remove the comma before it.  If you do
provide some variable arguments in your macro invocation, GNU CPP does
not complain about the paste operation and instead places the variable
arguments after the comma.  Just like any other pasted macro argument,
these arguments are not macro expanded.


File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions

6.21 Slightly Looser Rules for Escaped Newlines
===============================================

The preprocessor treatment of escaped newlines is more relaxed than that
specified by the C90 standard, which requires the newline to immediately
follow a backslash.  GCC's implementation allows whitespace in the form
of spaces, horizontal and vertical tabs, and form feeds between the
backslash and the subsequent newline.  The preprocessor issues a
warning, but treats it as a valid escaped newline and combines the two
lines to form a single logical line.  This works within comments and
tokens, as well as between tokens.  Comments are _not_ treated as
whitespace for the purposes of this relaxation, since they have not yet
been replaced with spaces.


File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions

6.22 Non-Lvalue Arrays May Have Subscripts
==========================================

In ISO C99, arrays that are not lvalues still decay to pointers, and may
be subscripted, although they may not be modified or used after the next
sequence point and the unary '&' operator may not be applied to them.
As an extension, GNU C allows such arrays to be subscripted in C90 mode,
though otherwise they do not decay to pointers outside C99 mode.  For
example, this is valid in GNU C though not valid in C90:

     struct foo {int a[4];};

     struct foo f();

     bar (int index)
     {
       return f().a[index];
     }


File: gcc.info,  Node: Pointer Arith,  Next: Pointers to Arrays,  Prev: Subscripting,  Up: C Extensions

6.23 Arithmetic on 'void'- and Function-Pointers
================================================

In GNU C, addition and subtraction operations are supported on pointers
to 'void' and on pointers to functions.  This is done by treating the
size of a 'void' or of a function as 1.

 A consequence of this is that 'sizeof' is also allowed on 'void' and on
function types, and returns 1.

 The option '-Wpointer-arith' requests a warning if these extensions are
used.


File: gcc.info,  Node: Pointers to Arrays,  Next: Initializers,  Prev: Pointer Arith,  Up: C Extensions

6.24 Pointers to Arrays with Qualifiers Work as Expected
========================================================

In GNU C, pointers to arrays with qualifiers work similar to pointers to
other qualified types.  For example, a value of type 'int (*)[5]' can be
used to initialize a variable of type 'const int (*)[5]'.  These types
are incompatible in ISO C because the 'const' qualifier is formally
attached to the element type of the array and not the array itself.

     extern void
     transpose (int N, int M, double out[M][N], const double in[N][M]);
     double x[3][2];
     double y[2][3];
     ...
     transpose(3, 2, y, x);


File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointers to Arrays,  Up: C Extensions

6.25 Non-Constant Initializers
==============================

As in standard C++ and ISO C99, the elements of an aggregate initializer
for an automatic variable are not required to be constant expressions in
GNU C.  Here is an example of an initializer with run-time varying
elements:

     foo (float f, float g)
     {
       float beat_freqs[2] = { f-g, f+g };
       /* ... */
     }


File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions

6.26 Compound Literals
======================

ISO C99 supports compound literals.  A compound literal looks like a
cast containing an initializer.  Its value is an object of the type
specified in the cast, containing the elements specified in the
initializer; it is an lvalue.  As an extension, GCC supports compound
literals in C90 mode and in C++, though the semantics are somewhat
different in C++.

 Usually, the specified type is a structure.  Assume that 'struct foo'
and 'structure' are declared as shown:

     struct foo {int a; char b[2];} structure;

Here is an example of constructing a 'struct foo' with a compound
literal:

     structure = ((struct foo) {x + y, 'a', 0});

This is equivalent to writing the following:

     {
       struct foo temp = {x + y, 'a', 0};
       structure = temp;
     }

 You can also construct an array, though this is dangerous in C++, as
explained below.  If all the elements of the compound literal are (made
up of) simple constant expressions, suitable for use in initializers of
objects of static storage duration, then the compound literal can be
coerced to a pointer to its first element and used in such an
initializer, as shown here:

     char **foo = (char *[]) { "x", "y", "z" };

 Compound literals for scalar types and union types are also allowed,
but then the compound literal is equivalent to a cast.

 As a GNU extension, GCC allows initialization of objects with static
storage duration by compound literals (which is not possible in ISO C99,
because the initializer is not a constant).  It is handled as if the
object is initialized only with the bracket enclosed list if the types
of the compound literal and the object match.  The initializer list of
the compound literal must be constant.  If the object being initialized
has array type of unknown size, the size is determined by compound
literal size.

     static struct foo x = (struct foo) {1, 'a', 'b'};
     static int y[] = (int []) {1, 2, 3};
     static int z[] = (int [3]) {1};

The above lines are equivalent to the following:
     static struct foo x = {1, 'a', 'b'};
     static int y[] = {1, 2, 3};
     static int z[] = {1, 0, 0};

 In C, a compound literal designates an unnamed object with static or
automatic storage duration.  In C++, a compound literal designates a
temporary object, which only lives until the end of its full-expression.
As a result, well-defined C code that takes the address of a subobject
of a compound literal can be undefined in C++, so the C++ compiler
rejects the conversion of a temporary array to a pointer.  For instance,
if the array compound literal example above appeared inside a function,
any subsequent use of 'foo' in C++ has undefined behavior because the
lifetime of the array ends after the declaration of 'foo'.

 As an optimization, the C++ compiler sometimes gives array compound
literals longer lifetimes: when the array either appears outside a
function or has const-qualified type.  If 'foo' and its initializer had
elements of 'char *const' type rather than 'char *', or if 'foo' were a
global variable, the array would have static storage duration.  But it
is probably safest just to avoid the use of array compound literals in
code compiled as C++.


File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions

6.27 Designated Initializers
============================

Standard C90 requires the elements of an initializer to appear in a
fixed order, the same as the order of the elements in the array or
structure being initialized.

 In ISO C99 you can give the elements in any order, specifying the array
indices or structure field names they apply to, and GNU C allows this as
an extension in C90 mode as well.  This extension is not implemented in
GNU C++.

 To specify an array index, write '[INDEX] =' before the element value.
For example,

     int a[6] = { [4] = 29, [2] = 15 };

is equivalent to

     int a[6] = { 0, 0, 15, 0, 29, 0 };

The index values must be constant expressions, even if the array being
initialized is automatic.

 An alternative syntax for this that has been obsolete since GCC 2.5 but
GCC still accepts is to write '[INDEX]' before the element value, with
no '='.

 To initialize a range of elements to the same value, write '[FIRST ...
LAST] = VALUE'.  This is a GNU extension.  For example,

     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

If the value in it has side-effects, the side-effects happen only once,
not for each initialized field by the range initializer.

Note that the length of the array is the highest value specified plus
one.

 In a structure initializer, specify the name of a field to initialize
with '.FIELDNAME =' before the element value.  For example, given the
following structure,

     struct point { int x, y; };

the following initialization

     struct point p = { .y = yvalue, .x = xvalue };

is equivalent to

     struct point p = { xvalue, yvalue };

 Another syntax that has the same meaning, obsolete since GCC 2.5, is
'FIELDNAME:', as shown here:

     struct point p = { y: yvalue, x: xvalue };

 Omitted field members are implicitly initialized the same as objects
that have static storage duration.

 The '[INDEX]' or '.FIELDNAME' is known as a "designator".  You can also
use a designator (or the obsolete colon syntax) when initializing a
union, to specify which element of the union should be used.  For
example,

     union foo { int i; double d; };

     union foo f = { .d = 4 };

converts 4 to a 'double' to store it in the union using the second
element.  By contrast, casting 4 to type 'union foo' stores it into the
union as the integer 'i', since it is an integer.  (*Note Cast to
Union::.)

 You can combine this technique of naming elements with ordinary C
initialization of successive elements.  Each initializer element that
does not have a designator applies to the next consecutive element of
the array or structure.  For example,

     int a[6] = { [1] = v1, v2, [4] = v4 };

is equivalent to

     int a[6] = { 0, v1, v2, 0, v4, 0 };

 Labeling the elements of an array initializer is especially useful when
the indices are characters or belong to an 'enum' type.  For example:

     int whitespace[256]
       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };

 You can also write a series of '.FIELDNAME' and '[INDEX]' designators
before an '=' to specify a nested subobject to initialize; the list is
taken relative to the subobject corresponding to the closest surrounding
brace pair.  For example, with the 'struct point' declaration above:

     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };

If the same field is initialized multiple times, it has the value from
the last initialization.  If any such overridden initialization has
side-effect, it is unspecified whether the side-effect happens or not.
Currently, GCC discards them and issues a warning.


File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions

6.28 Case Ranges
================

You can specify a range of consecutive values in a single 'case' label,
like this:

     case LOW ... HIGH:

This has the same effect as the proper number of individual 'case'
labels, one for each integer value from LOW to HIGH, inclusive.

 This feature is especially useful for ranges of ASCII character codes:

     case 'A' ... 'Z':

 *Be careful:* Write spaces around the '...', for otherwise it may be
parsed wrong when you use it with integer values.  For example, write
this:

     case 1 ... 5:

rather than this:

     case 1...5:


File: gcc.info,  Node: Cast to Union,  Next: Mixed Declarations,  Prev: Case Ranges,  Up: C Extensions

6.29 Cast to a Union Type
=========================

A cast to union type is similar to other casts, except that the type
specified is a union type.  You can specify the type either with 'union
TAG' or with a typedef name.  A cast to union is actually a constructor,
not a cast, and hence does not yield an lvalue like normal casts.
(*Note Compound Literals::.)

 The types that may be cast to the union type are those of the members
of the union.  Thus, given the following union and variables:

     union foo { int i; double d; };
     int x;
     double y;

both 'x' and 'y' can be cast to type 'union foo'.

 Using the cast as the right-hand side of an assignment to a variable of
union type is equivalent to storing in a member of the union:

     union foo u;
     /* ... */
     u = (union foo) x  ==  u.i = x
     u = (union foo) y  ==  u.d = y

 You can also use the union cast as a function argument:

     void hack (union foo);
     /* ... */
     hack ((union foo) x);


File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions

6.30 Mixed Declarations and Code
================================

ISO C99 and ISO C++ allow declarations and code to be freely mixed
within compound statements.  As an extension, GNU C also allows this in
C90 mode.  For example, you could do:

     int i;
     /* ... */
     i++;
     int j = i + 2;

 Each identifier is visible from where it is declared until the end of
the enclosing block.


File: gcc.info,  Node: Function Attributes,  Next: Label Attributes,  Prev: Mixed Declarations,  Up: C Extensions

6.31 Declaring Attributes of Functions
======================================

In GNU C, you declare certain things about functions called in your
program which help the compiler optimize function calls and check your
code more carefully.

 The keyword '__attribute__' allows you to specify special attributes
when making a declaration.  This keyword is followed by an attribute
specification inside double parentheses.  The following attributes are
currently defined for functions on all targets: 'aligned', 'alloc_size',
'alloc_align', 'assume_aligned', 'noreturn', 'returns_twice',
'noinline', 'noclone', 'no_icf', 'always_inline', 'flatten', 'pure',
'const', 'nothrow', 'sentinel', 'format', 'format_arg',
'no_instrument_function', 'no_split_stack', 'section', 'constructor',
'destructor', 'used', 'unused', 'deprecated', 'weak', 'malloc', 'alias',
'ifunc', 'warn_unused_result', 'nonnull', 'returns_nonnull',
'gnu_inline', 'externally_visible', 'hot', 'cold', 'artificial',
'no_sanitize_address', 'no_address_safety_analysis',
'no_sanitize_thread', 'no_sanitize_undefined', 'no_reorder',
'bnd_legacy', 'bnd_instrument', 'stack_protect', 'error' and 'warning'.
Several other attributes are defined for functions on particular target
systems.  Other attributes, including 'section' are supported for
variables declarations (*note Variable Attributes::), labels (*note
Label Attributes::) and for types (*note Type Attributes::).

 GCC plugins may provide their own attributes.

 You may also specify attributes with '__' preceding and following each
keyword.  This allows you to use them in header files without being
concerned about a possible macro of the same name.  For example, you may
use '__noreturn__' instead of 'noreturn'.

 *Note Attribute Syntax::, for details of the exact syntax for using
attributes.

'alias ("TARGET")'
     The 'alias' attribute causes the declaration to be emitted as an
     alias for another symbol, which must be specified.  For instance,

          void __f () { /* Do something. */; }
          void f () __attribute__ ((weak, alias ("__f")));

     defines 'f' to be a weak alias for '__f'.  In C++, the mangled name
     for the target must be used.  It is an error if '__f' is not
     defined in the same translation unit.

     Not all target machines support this attribute.

'aligned (ALIGNMENT)'
     This attribute specifies a minimum alignment for the function,
     measured in bytes.

     You cannot use this attribute to decrease the alignment of a
     function, only to increase it.  However, when you explicitly
     specify a function alignment this overrides the effect of the
     '-falign-functions' (*note Optimize Options::) option for this
     function.

     Note that the effectiveness of 'aligned' attributes may be limited
     by inherent limitations in your linker.  On many systems, the
     linker is only able to arrange for functions to be aligned up to a
     certain maximum alignment.  (For some linkers, the maximum
     supported alignment may be very very small.)  See your linker
     documentation for further information.

     The 'aligned' attribute can also be used for variables and fields
     (*note Variable Attributes::.)

'alloc_size'
     The 'alloc_size' attribute is used to tell the compiler that the
     function return value points to memory, where the size is given by
     one or two of the functions parameters.  GCC uses this information
     to improve the correctness of '__builtin_object_size'.

     The function parameter(s) denoting the allocated size are specified
     by one or two integer arguments supplied to the attribute.  The
     allocated size is either the value of the single function argument
     specified or the product of the two function arguments specified.
     Argument numbering starts at one.

     For instance,

          void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)))
          void* my_realloc(void*, size_t) __attribute__((alloc_size(2)))

     declares that 'my_calloc' returns memory of the size given by the
     product of parameter 1 and 2 and that 'my_realloc' returns memory
     of the size given by parameter 2.

'alloc_align'
     The 'alloc_align' attribute is used to tell the compiler that the
     function return value points to memory, where the returned pointer
     minimum alignment is given by one of the functions parameters.  GCC
     uses this information to improve pointer alignment analysis.

     The function parameter denoting the allocated alignment is
     specified by one integer argument, whose number is the argument of
     the attribute.  Argument numbering starts at one.

     For instance,

          void* my_memalign(size_t, size_t) __attribute__((alloc_align(1)))

     declares that 'my_memalign' returns memory with minimum alignment
     given by parameter 1.

'assume_aligned'
     The 'assume_aligned' attribute is used to tell the compiler that
     the function return value points to memory, where the returned
     pointer minimum alignment is given by the first argument.  If the
     attribute has two arguments, the second argument is misalignment
     offset.

     For instance

          void* my_alloc1(size_t) __attribute__((assume_aligned(16)))
          void* my_alloc2(size_t) __attribute__((assume_aligned(32, 8)))

     declares that 'my_alloc1' returns 16-byte aligned pointer and that
     'my_alloc2' returns a pointer whose value modulo 32 is equal to 8.

'always_inline'
     Generally, functions are not inlined unless optimization is
     specified.  For functions declared inline, this attribute inlines
     the function independent of any restrictions that otherwise apply
     to inlining.  Failure to inline such a function is diagnosed as an
     error.  Note that if such a function is called indirectly the
     compiler may or may not inline it depending on optimization level
     and a failure to inline an indirect call may or may not be
     diagnosed.

'gnu_inline'
     This attribute should be used with a function that is also declared
     with the 'inline' keyword.  It directs GCC to treat the function as
     if it were defined in gnu90 mode even when compiling in C99 or
     gnu99 mode.

     If the function is declared 'extern', then this definition of the
     function is used only for inlining.  In no case is the function
     compiled as a standalone function, not even if you take its address
     explicitly.  Such an address becomes an external reference, as if
     you had only declared the function, and had not defined it.  This
     has almost the effect of a macro.  The way to use this is to put a
     function definition in a header file with this attribute, and put
     another copy of the function, without 'extern', in a library file.
     The definition in the header file causes most calls to the function
     to be inlined.  If any uses of the function remain, they refer to
     the single copy in the library.  Note that the two definitions of
     the functions need not be precisely the same, although if they do
     not have the same effect your program may behave oddly.

     In C, if the function is neither 'extern' nor 'static', then the
     function is compiled as a standalone function, as well as being
     inlined where possible.

     This is how GCC traditionally handled functions declared 'inline'.
     Since ISO C99 specifies a different semantics for 'inline', this
     function attribute is provided as a transition measure and as a
     useful feature in its own right.  This attribute is available in
     GCC 4.1.3 and later.  It is available if either of the preprocessor
     macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined.
     *Note An Inline Function is As Fast As a Macro: Inline.

     In C++, this attribute does not depend on 'extern' in any way, but
     it still requires the 'inline' keyword to enable its special
     behavior.

'artificial'
     This attribute is useful for small inline wrappers that if possible
     should appear during debugging as a unit.  Depending on the debug
     info format it either means marking the function as artificial or
     using the caller location for all instructions within the inlined
     body.

'bank_switch'
     When added to an interrupt handler with the M32C port, causes the
     prologue and epilogue to use bank switching to preserve the
     registers rather than saving them on the stack.

'flatten'
     Generally, inlining into a function is limited.  For a function
     marked with this attribute, every call inside this function is
     inlined, if possible.  Whether the function itself is considered
     for inlining depends on its size and the current inlining
     parameters.

'error ("MESSAGE")'
     If this attribute is used on a function declaration and a call to
     such a function is not eliminated through dead code elimination or
     other optimizations, an error that includes MESSAGE is diagnosed.
     This is useful for compile-time checking, especially together with
     '__builtin_constant_p' and inline functions where checking the
     inline function arguments is not possible through 'extern char
     [(condition) ? 1 : -1];' tricks.  While it is possible to leave the
     function undefined and thus invoke a link failure, when using this
     attribute the problem is diagnosed earlier and with exact location
     of the call even in presence of inline functions or when not
     emitting debugging information.

'warning ("MESSAGE")'
     If this attribute is used on a function declaration and a call to
     such a function is not eliminated through dead code elimination or
     other optimizations, a warning that includes MESSAGE is diagnosed.
     This is useful for compile-time checking, especially together with
     '__builtin_constant_p' and inline functions.  While it is possible
     to define the function with a message in '.gnu.warning*' section,
     when using this attribute the problem is diagnosed earlier and with
     exact location of the call even in presence of inline functions or
     when not emitting debugging information.

'cdecl'
     On the x86-32 targets, the 'cdecl' attribute causes the compiler to
     assume that the calling function pops off the stack space used to
     pass arguments.  This is useful to override the effects of the
     '-mrtd' switch.

'const'
     Many functions do not examine any values except their arguments,
     and have no effects except the return value.  Basically this is
     just slightly more strict class than the 'pure' attribute below,
     since function is not allowed to read global memory.

     Note that a function that has pointer arguments and examines the
     data pointed to must _not_ be declared 'const'.  Likewise, a
     function that calls a non-'const' function usually must not be
     'const'.  It does not make sense for a 'const' function to return
     'void'.

'constructor'
'destructor'
'constructor (PRIORITY)'
'destructor (PRIORITY)'
     The 'constructor' attribute causes the function to be called
     automatically before execution enters 'main ()'.  Similarly, the
     'destructor' attribute causes the function to be called
     automatically after 'main ()' completes or 'exit ()' is called.
     Functions with these attributes are useful for initializing data
     that is used implicitly during the execution of the program.

     You may provide an optional integer priority to control the order
     in which constructor and destructor functions are run.  A
     constructor with a smaller priority number runs before a
     constructor with a larger priority number; the opposite
     relationship holds for destructors.  So, if you have a constructor
     that allocates a resource and a destructor that deallocates the
     same resource, both functions typically have the same priority.
     The priorities for constructor and destructor functions are the
     same as those specified for namespace-scope C++ objects (*note C++
     Attributes::).

     These attributes are not currently implemented for Objective-C.

'deprecated'
'deprecated (MSG)'
     The 'deprecated' attribute results in a warning if the function is
     used anywhere in the source file.  This is useful when identifying
     functions that are expected to be removed in a future version of a
     program.  The warning also includes the location of the declaration
     of the deprecated function, to enable users to easily find further
     information about why the function is deprecated, or what they
     should do instead.  Note that the warnings only occurs for uses:

          int old_fn () __attribute__ ((deprecated));
          int old_fn ();
          int (*fn_ptr)() = old_fn;

     results in a warning on line 3 but not line 2.  The optional MSG
     argument, which must be a string, is printed in the warning if
     present.

     The 'deprecated' attribute can also be used for variables and types
     (*note Variable Attributes::, *note Type Attributes::.)

'disinterrupt'
     On Epiphany and MeP targets, this attribute causes the compiler to
     emit instructions to disable interrupts for the duration of the
     given function.

'dllexport'
     On Microsoft Windows targets and Symbian OS targets the 'dllexport'
     attribute causes the compiler to provide a global pointer to a
     pointer in a DLL, so that it can be referenced with the 'dllimport'
     attribute.  On Microsoft Windows targets, the pointer name is
     formed by combining '_imp__' and the function or variable name.

     You can use '__declspec(dllexport)' as a synonym for '__attribute__
     ((dllexport))' for compatibility with other compilers.

     On systems that support the 'visibility' attribute, this attribute
     also implies "default" visibility.  It is an error to explicitly
     specify any other visibility.

     GCC's default behavior is to emit all inline functions with the
     'dllexport' attribute.  Since this can cause object file-size
     bloat, you can use '-fno-keep-inline-dllexport', which tells GCC to
     ignore the attribute for inlined functions unless the
     '-fkeep-inline-functions' flag is used instead.

     The attribute is ignored for undefined symbols.

     When applied to C++ classes, the attribute marks defined
     non-inlined member functions and static data members as exports.
     Static consts initialized in-class are not marked unless they are
     also defined out-of-class.

     For Microsoft Windows targets there are alternative methods for
     including the symbol in the DLL's export table such as using a
     '.def' file with an 'EXPORTS' section or, with GNU ld, using the
     '--export-all' linker flag.

'dllimport'
     On Microsoft Windows and Symbian OS targets, the 'dllimport'
     attribute causes the compiler to reference a function or variable
     via a global pointer to a pointer that is set up by the DLL
     exporting the symbol.  The attribute implies 'extern'.  On
     Microsoft Windows targets, the pointer name is formed by combining
     '_imp__' and the function or variable name.

     You can use '__declspec(dllimport)' as a synonym for '__attribute__
     ((dllimport))' for compatibility with other compilers.

     On systems that support the 'visibility' attribute, this attribute
     also implies "default" visibility.  It is an error to explicitly
     specify any other visibility.

     Currently, the attribute is ignored for inlined functions.  If the
     attribute is applied to a symbol _definition_, an error is
     reported.  If a symbol previously declared 'dllimport' is later
     defined, the attribute is ignored in subsequent references, and a
     warning is emitted.  The attribute is also overridden by a
     subsequent declaration as 'dllexport'.

     When applied to C++ classes, the attribute marks non-inlined member
     functions and static data members as imports.  However, the
     attribute is ignored for virtual methods to allow creation of
     vtables using thunks.

     On the SH Symbian OS target the 'dllimport' attribute also has
     another affect--it can cause the vtable and run-time type
     information for a class to be exported.  This happens when the
     class has a dllimported constructor or a non-inline, non-pure
     virtual function and, for either of those two conditions, the class
     also has an inline constructor or destructor and has a key function
     that is defined in the current translation unit.

     For Microsoft Windows targets the use of the 'dllimport' attribute
     on functions is not necessary, but provides a small performance
     benefit by eliminating a thunk in the DLL.  The use of the
     'dllimport' attribute on imported variables can be avoided by
     passing the '--enable-auto-import' switch to the GNU linker.  As
     with functions, using the attribute for a variable eliminates a
     thunk in the DLL.

     One drawback to using this attribute is that a pointer to a
     _variable_ marked as 'dllimport' cannot be used as a constant
     address.  However, a pointer to a _function_ with the 'dllimport'
     attribute can be used as a constant initializer; in this case, the
     address of a stub function in the import lib is referenced.  On
     Microsoft Windows targets, the attribute can be disabled for
     functions by setting the '-mnop-fun-dllimport' flag.

'exception'
     Use this attribute on the NDS32 target to indicate that the
     specified function is an exception handler.  The compiler will
     generate corresponding sections for use in an exception handler.

'exception_handler'
     Use this attribute on the Blackfin to indicate that the specified
     function is an exception handler.  The compiler generates function
     entry and exit sequences suitable for use in an exception handler
     when this attribute is present.

'externally_visible'
     This attribute, attached to a global variable or function,
     nullifies the effect of the '-fwhole-program' command-line option,
     so the object remains visible outside the current compilation unit.

     If '-fwhole-program' is used together with '-flto' and 'gold' is
     used as the linker plugin, 'externally_visible' attributes are
     automatically added to functions (not variable yet due to a current
     'gold' issue) that are accessed outside of LTO objects according to
     resolution file produced by 'gold'.  For other linkers that cannot
     generate resolution file, explicit 'externally_visible' attributes
     are still necessary.

'far'

     On MeP targets this causes the compiler to use a calling convention
     that assumes the called function is too far away for the built-in
     addressing modes.

'fast_interrupt'
     Use this attribute on the M32C and RX ports to indicate that the
     specified function is a fast interrupt handler.  This is just like
     the 'interrupt' attribute, except that 'freit' is used to return
     instead of 'reit'.

'fastcall'
     On x86-32 targets, the 'fastcall' attribute causes the compiler to
     pass the first argument (if of integral type) in the register ECX
     and the second argument (if of integral type) in the register EDX.
     Subsequent and other typed arguments are passed on the stack.  The
     called function pops the arguments off the stack.  If the number of
     arguments is variable all arguments are pushed on the stack.

'thiscall'
     On x86-32 targets, the 'thiscall' attribute causes the compiler to
     pass the first argument (if of integral type) in the register ECX.
     Subsequent and other typed arguments are passed on the stack.  The
     called function pops the arguments off the stack.  If the number of
     arguments is variable all arguments are pushed on the stack.  The
     'thiscall' attribute is intended for C++ non-static member
     functions.  As a GCC extension, this calling convention can be used
     for C functions and for static member methods.

'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
     The 'format' attribute specifies that a function takes 'printf',
     'scanf', 'strftime' or 'strfmon' style arguments that should be
     type-checked against a format string.  For example, the
     declaration:

          extern int
          my_printf (void *my_object, const char *my_format, ...)
                __attribute__ ((format (printf, 2, 3)));

     causes the compiler to check the arguments in calls to 'my_printf'
     for consistency with the 'printf' style format string argument
     'my_format'.

     The parameter ARCHETYPE determines how the format string is
     interpreted, and should be 'printf', 'scanf', 'strftime',
     'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'.  (You can
     also use '__printf__', '__scanf__', '__strftime__' or
     '__strfmon__'.)  On MinGW targets, 'ms_printf', 'ms_scanf', and
     'ms_strftime' are also present.  ARCHETYPE values such as 'printf'
     refer to the formats accepted by the system's C runtime library,
     while values prefixed with 'gnu_' always refer to the formats
     accepted by the GNU C Library.  On Microsoft Windows targets,
     values prefixed with 'ms_' refer to the formats accepted by the
     'msvcrt.dll' library.  The parameter STRING-INDEX specifies which
     argument is the format string argument (starting from 1), while
     FIRST-TO-CHECK is the number of the first argument to check against
     the format string.  For functions where the arguments are not
     available to be checked (such as 'vprintf'), specify the third
     parameter as zero.  In this case the compiler only checks the
     format string for consistency.  For 'strftime' formats, the third
     parameter is required to be zero.  Since non-static C++ methods
     have an implicit 'this' argument, the arguments of such methods
     should be counted from two, not one, when giving values for
     STRING-INDEX and FIRST-TO-CHECK.

     In the example above, the format string ('my_format') is the second
     argument of the function 'my_print', and the arguments to check
     start with the third argument, so the correct parameters for the
     format attribute are 2 and 3.

     The 'format' attribute allows you to identify your own functions
     that take format strings as arguments, so that GCC can check the
     calls to these functions for errors.  The compiler always (unless
     '-ffreestanding' or '-fno-builtin' is used) checks formats for the
     standard library functions 'printf', 'fprintf', 'sprintf', 'scanf',
     'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and
     'vsprintf' whenever such warnings are requested (using '-Wformat'),
     so there is no need to modify the header file 'stdio.h'.  In C99
     mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf'
     and 'vsscanf' are also checked.  Except in strictly conforming C
     standard modes, the X/Open function 'strfmon' is also checked as
     are 'printf_unlocked' and 'fprintf_unlocked'.  *Note Options
     Controlling C Dialect: C Dialect Options.

     For Objective-C dialects, 'NSString' (or '__NSString__') is
     recognized in the same context.  Declarations including these
     format attributes are parsed for correct syntax, however the result
     of checking of such format strings is not yet defined, and is not
     carried out by this version of the compiler.

     The target may also provide additional types of format checks.
     *Note Format Checks Specific to Particular Target Machines: Target
     Format Checks.

'format_arg (STRING-INDEX)'
     The 'format_arg' attribute specifies that a function takes a format
     string for a 'printf', 'scanf', 'strftime' or 'strfmon' style
     function and modifies it (for example, to translate it into another
     language), so the result can be passed to a 'printf', 'scanf',
     'strftime' or 'strfmon' style function (with the remaining
     arguments to the format function the same as they would have been
     for the unmodified string).  For example, the declaration:

          extern char *
          my_dgettext (char *my_domain, const char *my_format)
                __attribute__ ((format_arg (2)));

     causes the compiler to check the arguments in calls to a 'printf',
     'scanf', 'strftime' or 'strfmon' type function, whose format string
     argument is a call to the 'my_dgettext' function, for consistency
     with the format string argument 'my_format'.  If the 'format_arg'
     attribute had not been specified, all the compiler could tell in
     such calls to format functions would be that the format string
     argument is not constant; this would generate a warning when
     '-Wformat-nonliteral' is used, but the calls could not be checked
     without the attribute.

     The parameter STRING-INDEX specifies which argument is the format
     string argument (starting from one).  Since non-static C++ methods
     have an implicit 'this' argument, the arguments of such methods
     should be counted from two.

     The 'format_arg' attribute allows you to identify your own
     functions that modify format strings, so that GCC can check the
     calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function
     whose operands are a call to one of your own function.  The
     compiler always treats 'gettext', 'dgettext', and 'dcgettext' in
     this manner except when strict ISO C support is requested by
     '-ansi' or an appropriate '-std' option, or '-ffreestanding' or
     '-fno-builtin' is used.  *Note Options Controlling C Dialect: C
     Dialect Options.

     For Objective-C dialects, the 'format-arg' attribute may refer to
     an 'NSString' reference for compatibility with the 'format'
     attribute above.

     The target may also allow additional types in 'format-arg'
     attributes.  *Note Format Checks Specific to Particular Target
     Machines: Target Format Checks.

'function_vector'
     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
     the specified function should be called through the function
     vector.  Calling a function through the function vector reduces
     code size, however; the function vector has a limited size (maximum
     128 entries on the H8/300 and 64 entries on the H8/300H and H8S)
     and shares space with the interrupt vector.

     On SH2A targets, this attribute declares a function to be called
     using the TBR relative addressing mode.  The argument to this
     attribute is the entry number of the same function in a vector
     table containing all the TBR relative addressable functions.  For
     correct operation the TBR must be setup accordingly to point to the
     start of the vector table before any functions with this attribute
     are invoked.  Usually a good place to do the initialization is the
     startup routine.  The TBR relative vector table can have at max 256
     function entries.  The jumps to these functions are generated using
     a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR).
     You must use GAS and GLD from GNU binutils version 2.7 or later for
     this attribute to work correctly.

     Please refer the example of M16C target, to see the use of this
     attribute while declaring a function,

     In an application, for a function being called once, this attribute
     saves at least 8 bytes of code; and if other successive calls are
     being made to the same function, it saves 2 bytes of code per each
     of these calls.

     On M16C/M32C targets, the 'function_vector' attribute declares a
     special page subroutine call function.  Use of this attribute
     reduces the code size by 2 bytes for each call generated to the
     subroutine.  The argument to the attribute is the vector number
     entry from the special page vector table which contains the 16
     low-order bits of the subroutine's entry address.  Each vector
     table has special page number (18 to 255) that is used in 'jsrs'
     instructions.  Jump addresses of the routines are generated by
     adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of
     M32C targets), to the 2-byte addresses set in the vector table.
     Therefore you need to ensure that all the special page vector
     routines should get mapped within the address range 0x0F0000 to
     0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C).

     In the following example 2 bytes are saved for each call to
     function 'foo'.

          void foo (void) __attribute__((function_vector(0x18)));
          void foo (void)
          {
          }

          void bar (void)
          {
              foo();
          }

     If functions are defined in one file and are called in another
     file, then be sure to write this declaration in both files.

     This attribute is ignored for R8C target.

'ifunc ("RESOLVER")'
     The 'ifunc' attribute is used to mark a function as an indirect
     function using the STT_GNU_IFUNC symbol type extension to the ELF
     standard.  This allows the resolution of the symbol value to be
     determined dynamically at load time, and an optimized version of
     the routine can be selected for the particular processor or other
     system characteristics determined then.  To use this attribute,
     first define the implementation functions available, and a resolver
     function that returns a pointer to the selected implementation
     function.  The implementation functions' declarations must match
     the API of the function being implemented, the resolver's
     declaration is be a function returning pointer to void function
     returning void:

          void *my_memcpy (void *dst, const void *src, size_t len)
          {
            ...
          }

          static void (*resolve_memcpy (void)) (void)
          {
            return my_memcpy; // we'll just always select this routine
          }

     The exported header file declaring the function the user calls
     would contain:

          extern void *memcpy (void *, const void *, size_t);

     allowing the user to call this as a regular function, unaware of
     the implementation.  Finally, the indirect function needs to be
     defined in the same translation unit as the resolver function:

          void *memcpy (void *, const void *, size_t)
               __attribute__ ((ifunc ("resolve_memcpy")));

     Indirect functions cannot be weak.  Binutils version 2.20.1 or
     higher and GNU C Library version 2.11.1 are required to use this
     feature.

'interrupt'
     Use this attribute on the ARC, ARM, AVR, CR16, Epiphany, M32C,
     M32R/D, m68k, MeP, MIPS, MSP430, NDS32, RL78, RX, Visium and
     Xstormy16 ports to indicate that the specified function is an
     interrupt handler.  The compiler generates function entry and exit
     sequences suitable for use in an interrupt handler when this
     attribute is present.  With Epiphany targets it may also generate a
     special section with code to initialize the interrupt vector table.

     Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S,
     MicroBlaze, and SH processors can be specified via the
     'interrupt_handler' attribute.

     Note, on the ARC, you must specify the kind of interrupt to be
     handled in a parameter to the interrupt attribute like this:

          void f () __attribute__ ((interrupt ("ilink1")));

     Permissible values for this parameter are: 'ilink1' and 'ilink2'.

     Note, on the AVR, the hardware globally disables interrupts when an
     interrupt is executed.  The first instruction of an interrupt
     handler declared with this attribute is a 'SEI' instruction to
     re-enable interrupts.  See also the 'signal' function attribute
     that does not insert a 'SEI' instruction.  If both 'signal' and
     'interrupt' are specified for the same function, 'signal' is
     silently ignored.

     Note, for the ARM, you can specify the kind of interrupt to be
     handled by adding an optional parameter to the interrupt attribute
     like this:

          void f () __attribute__ ((interrupt ("IRQ")));

     Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI',
     'ABORT' and 'UNDEF'.

     On ARMv7-M the interrupt type is ignored, and the attribute means
     the function may be called with a word-aligned stack pointer.

     Note, for the MSP430 you can provide an argument to the interrupt
     attribute which specifies a name or number.  If the argument is a
     number it indicates the slot in the interrupt vector table (0 - 31)
     to which this handler should be assigned.  If the argument is a
     name it is treated as a symbolic name for the vector slot.  These
     names should match up with appropriate entries in the linker
     script.  By default the names 'watchdog' for vector 26, 'nmi' for
     vector 30 and 'reset' for vector 31 are recognized.

     You can also use the following function attributes to modify how
     normal functions interact with interrupt functions:

     'critical'
          Critical functions disable interrupts upon entry and restore
          the previous interrupt state upon exit.  Critical functions
          cannot also have the 'naked' or 'reentrant' attributes.  They
          can have the 'interrupt' attribute.

     'reentrant'
          Reentrant functions disable interrupts upon entry and enable
          them upon exit.  Reentrant functions cannot also have the
          'naked' or 'critical' attributes.  They can have the
          'interrupt' attribute.

     'wakeup'
          This attribute only applies to interrupt functions.  It is
          silently ignored if applied to a non-interrupt function.  A
          wakeup interrupt function will rouse the processor from any
          low-power state that it might be in when the function exits.

     On Epiphany targets one or more optional parameters can be added
     like this:

          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();

     Permissible values for these parameters are: 'reset',
     'software_exception', 'page_miss', 'timer0', 'timer1', 'message',
     'dma0', 'dma1', 'wand' and 'swi'.  Multiple parameters indicate
     that multiple entries in the interrupt vector table should be
     initialized for this function, i.e. for each parameter NAME, a jump
     to the function is emitted in the section ivt_entry_NAME.  The
     parameter(s) may be omitted entirely, in which case no interrupt
     vector table entry is provided.

     Note, on Epiphany targets, interrupts are enabled inside the
     function unless the 'disinterrupt' attribute is also specified.

     On Epiphany targets, you can also use the following attribute to
     modify the behavior of an interrupt handler:
     'forwarder_section'
          The interrupt handler may be in external memory which cannot
          be reached by a branch instruction, so generate a local memory
          trampoline to transfer control.  The single parameter
          identifies the section where the trampoline is placed.

     The following examples are all valid uses of these attributes on
     Epiphany targets:
          void __attribute__ ((interrupt)) universal_handler ();
          void __attribute__ ((interrupt ("dma1"))) dma1_handler ();
          void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler ();
          void __attribute__ ((interrupt ("timer0"), disinterrupt))
            fast_timer_handler ();
          void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp")))
            external_dma_handler ();

     On MIPS targets, you can use the following attributes to modify the
     behavior of an interrupt handler:
     'use_shadow_register_set'
          Assume that the handler uses a shadow register set, instead of
          the main general-purpose registers.

     'keep_interrupts_masked'
          Keep interrupts masked for the whole function.  Without this
          attribute, GCC tries to reenable interrupts for as much of the
          function as it can.

     'use_debug_exception_return'
          Return using the 'deret' instruction.  Interrupt handlers that
          don't have this attribute return using 'eret' instead.

     You can use any combination of these attributes, as shown below:
          void __attribute__ ((interrupt)) v0 ();
          void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
          void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
          void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
          void __attribute__ ((interrupt, use_shadow_register_set,
                               keep_interrupts_masked)) v4 ();
          void __attribute__ ((interrupt, use_shadow_register_set,
                               use_debug_exception_return)) v5 ();
          void __attribute__ ((interrupt, keep_interrupts_masked,
                               use_debug_exception_return)) v6 ();
          void __attribute__ ((interrupt, use_shadow_register_set,
                               keep_interrupts_masked,
                               use_debug_exception_return)) v7 ();

     On NDS32 target, this attribute indicates that the specified
     function is an interrupt handler.  The compiler generates
     corresponding sections for use in an interrupt handler.  You can
     use the following attributes to modify the behavior:
     'nested'
          This interrupt service routine is interruptible.
     'not_nested'
          This interrupt service routine is not interruptible.
     'nested_ready'
          This interrupt service routine is interruptible after
          'PSW.GIE' (global interrupt enable) is set.  This allows
          interrupt service routine to finish some short critical code
          before enabling interrupts.
     'save_all'
          The system will help save all registers into stack before
          entering interrupt handler.
     'partial_save'
          The system will help save caller registers into stack before
          entering interrupt handler.

     On RL78, use 'brk_interrupt' instead of 'interrupt' for handlers
     intended to be used with the 'BRK' opcode (i.e. those that must end
     with 'RETB' instead of 'RETI').

     On RX targets, you may specify one or more vector numbers as
     arguments to the attribute, as well as naming an alternate table
     name.  Parameters are handled sequentially, so one handler can be
     assigned to multiple entries in multiple tables.  One may also pass
     the magic string '"$default"' which causes the function to be used
     for any unfilled slots in the current table.

     This example shows a simple assignment of a function to one vector
     in the default table (note that preprocessor macros may be used for
     chip-specific symbolic vector names):
          void __attribute__ ((interrupt (5))) txd1_handler ();

     This example assigns a function to two slots in the default table
     (using preprocessor macros defined elsewhere) and makes it the
     default for the 'dct' table:
          void __attribute__ ((interrupt (RXD1_VECT,RXD2_VECT,"dct","$default")))
          	txd1_handler ();

'interrupt_handler'
     Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, and
     SH to indicate that the specified function is an interrupt handler.
     The compiler generates function entry and exit sequences suitable
     for use in an interrupt handler when this attribute is present.

'interrupt_thread'
     Use this attribute on fido, a subarchitecture of the m68k, to
     indicate that the specified function is an interrupt handler that
     is designed to run as a thread.  The compiler omits generate
     prologue/epilogue sequences and replaces the return instruction
     with a 'sleep' instruction.  This attribute is available only on
     fido.

'isr'
     Use this attribute on ARM to write Interrupt Service Routines.
     This is an alias to the 'interrupt' attribute above.

'kspisusp'
     When used together with 'interrupt_handler', 'exception_handler' or
     'nmi_handler', code is generated to load the stack pointer from the
     USP register in the function prologue.

'l1_text'
     This attribute specifies a function to be placed into L1
     Instruction SRAM.  The function is put into a specific section
     named '.l1.text'.  With '-mfdpic', function calls with a such
     function as the callee or caller uses inlined PLT.

'l2'
     On the Blackfin, this attribute specifies a function to be placed
     into L2 SRAM. The function is put into a specific section named
     '.l1.text'.  With '-mfdpic', callers of such functions use an
     inlined PLT.

'leaf'
     Calls to external functions with this attribute must return to the
     current compilation unit only by return or by exception handling.
     In particular, leaf functions are not allowed to call callback
     function passed to it from the current compilation unit or directly
     call functions exported by the unit or longjmp into the unit.  Leaf
     function might still call functions from other compilation units
     and thus they are not necessarily leaf in the sense that they
     contain no function calls at all.

     The attribute is intended for library functions to improve dataflow
     analysis.  The compiler takes the hint that any data not escaping
     the current compilation unit can not be used or modified by the
     leaf function.  For example, the 'sin' function is a leaf function,
     but 'qsort' is not.

     Note that leaf functions might invoke signals and signal handlers
     might be defined in the current compilation unit and use static
     variables.  The only compliant way to write such a signal handler
     is to declare such variables 'volatile'.

     The attribute has no effect on functions defined within the current
     compilation unit.  This is to allow easy merging of multiple
     compilation units into one, for example, by using the link-time
     optimization.  For this reason the attribute is not allowed on
     types to annotate indirect calls.

'long_call'
'medium_call'
'short_call'
     These attributes specify how a particular function is called on
     ARC, ARM and Epiphany - with 'medium_call' being specific to ARC.
     These attributes override the '-mlong-calls' (*note ARM Options::
     and *note ARC Options::) and '-mmedium-calls' (*note ARC Options::)
     command-line switches and '#pragma long_calls' settings.  For ARM,
     the 'long_call' attribute indicates that the function might be far
     away from the call site and require a different (more expensive)
     calling sequence.  The 'short_call' attribute always places the
     offset to the function from the call site into the 'BL' instruction
     directly.

     For ARC, a function marked with the 'long_call' attribute is always
     called using register-indirect jump-and-link instructions, thereby
     enabling the called function to be placed anywhere within the
     32-bit address space.  A function marked with the 'medium_call'
     attribute will always be close enough to be called with an
     unconditional branch-and-link instruction, which has a 25-bit
     offset from the call site.  A function marked with the 'short_call'
     attribute will always be close enough to be called with a
     conditional branch-and-link instruction, which has a 21-bit offset
     from the call site.

'longcall'
'shortcall'
     On Blackfin and PowerPC, the 'longcall' attribute indicates that
     the function might be far away from the call site and require a
     different (more expensive) calling sequence.  The 'shortcall'
     attribute indicates that the function is always close enough for
     the shorter calling sequence to be used.  These attributes override
     both the '-mlongcall' switch and, on the RS/6000 and PowerPC, the
     '#pragma longcall' setting.

     *Note RS/6000 and PowerPC Options::, for more information on
     whether long calls are necessary.

'long_call'
'near'
'far'
     These attributes specify how a particular function is called on
     MIPS.  The attributes override the '-mlong-calls' (*note MIPS
     Options::) command-line switch.  The 'long_call' and 'far'
     attributes are synonyms, and cause the compiler to always call the
     function by first loading its address into a register, and then
     using the contents of that register.  The 'near' attribute has the
     opposite effect; it specifies that non-PIC calls should be made
     using the more efficient 'jal' instruction.

'malloc'
     This tells the compiler that a function is 'malloc'-like, i.e.,
     that the pointer P returned by the function cannot alias any other
     pointer valid when the function returns, and moreover no pointers
     to valid objects occur in any storage addressed by P.

     Using this attribute can improve optimization.  Functions like
     'malloc' and 'calloc' have this property because they return a
     pointer to uninitialized or zeroed-out storage.  However, functions
     like 'realloc' do not have this property, as they can return a
     pointer to storage containing pointers.

'mips16'
'nomips16'

     On MIPS targets, you can use the 'mips16' and 'nomips16' function
     attributes to locally select or turn off MIPS16 code generation.  A
     function with the 'mips16' attribute is emitted as MIPS16 code,
     while MIPS16 code generation is disabled for functions with the
     'nomips16' attribute.  These attributes override the '-mips16' and
     '-mno-mips16' options on the command line (*note MIPS Options::).

     When compiling files containing mixed MIPS16 and non-MIPS16 code,
     the preprocessor symbol '__mips16' reflects the setting on the
     command line, not that within individual functions.  Mixed MIPS16
     and non-MIPS16 code may interact badly with some GCC extensions
     such as '__builtin_apply' (*note Constructing Calls::).

'micromips, MIPS'
'nomicromips, MIPS'

     On MIPS targets, you can use the 'micromips' and 'nomicromips'
     function attributes to locally select or turn off microMIPS code
     generation.  A function with the 'micromips' attribute is emitted
     as microMIPS code, while microMIPS code generation is disabled for
     functions with the 'nomicromips' attribute.  These attributes
     override the '-mmicromips' and '-mno-micromips' options on the
     command line (*note MIPS Options::).

     When compiling files containing mixed microMIPS and non-microMIPS
     code, the preprocessor symbol '__mips_micromips' reflects the
     setting on the command line, not that within individual functions.
     Mixed microMIPS and non-microMIPS code may interact badly with some
     GCC extensions such as '__builtin_apply' (*note Constructing
     Calls::).

'model (MODEL-NAME)'

     On the M32R/D, use this attribute to set the addressability of an
     object, and of the code generated for a function.  The identifier
     MODEL-NAME is one of 'small', 'medium', or 'large', representing
     each of the code models.

     Small model objects live in the lower 16MB of memory (so that their
     addresses can be loaded with the 'ld24' instruction), and are
     callable with the 'bl' instruction.

     Medium model objects may live anywhere in the 32-bit address space
     (the compiler generates 'seth/add3' instructions to load their
     addresses), and are callable with the 'bl' instruction.

     Large model objects may live anywhere in the 32-bit address space
     (the compiler generates 'seth/add3' instructions to load their
     addresses), and may not be reachable with the 'bl' instruction (the
     compiler generates the much slower 'seth/add3/jl' instruction
     sequence).

'ms_abi'
'sysv_abi'

     On 32-bit and 64-bit x86 targets, you can use an ABI attribute to
     indicate which calling convention should be used for a function.
     The 'ms_abi' attribute tells the compiler to use the Microsoft ABI,
     while the 'sysv_abi' attribute tells the compiler to use the ABI
     used on GNU/Linux and other systems.  The default is to use the
     Microsoft ABI when targeting Windows.  On all other systems, the
     default is the x86/AMD ABI.

     Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets
     currently requires the '-maccumulate-outgoing-args' option.

'callee_pop_aggregate_return (NUMBER)'

     On x86-32 targets, you can use this attribute to control how
     aggregates are returned in memory.  If the caller is responsible
     for popping the hidden pointer together with the rest of the
     arguments, specify NUMBER equal to zero.  If callee is responsible
     for popping the hidden pointer, specify NUMBER equal to one.

     The default x86-32 ABI assumes that the callee pops the stack for
     hidden pointer.  However, on x86-32 Microsoft Windows targets, the
     compiler assumes that the caller pops the stack for hidden pointer.

'ms_hook_prologue'

     On 32-bit and 64-bit x86 targets, you can use this function
     attribute to make GCC generate the "hot-patching" function prologue
     used in Win32 API functions in Microsoft Windows XP Service Pack 2
     and newer.

'hotpatch (HALFWORDS-BEFORE-FUNCTION-LABEL,HALFWORDS-AFTER-FUNCTION-LABEL)'

     On S/390 System z targets, you can use this function attribute to
     make GCC generate a "hot-patching" function prologue.  If the
     '-mhotpatch=' command-line option is used at the same time, the
     'hotpatch' attribute takes precedence.  The first of the two
     arguments specifies the number of halfwords to be added before the
     function label.  A second argument can be used to specify the
     number of halfwords to be added after the function label.  For both
     arguments the maximum allowed value is 1000000.

     If both arguments are zero, hotpatching is disabled.

'naked'
     This attribute is available on the ARM, AVR, MCORE, MSP430, NDS32,
     RL78, RX and SPU ports.  It allows the compiler to construct the
     requisite function declaration, while allowing the body of the
     function to be assembly code.  The specified function will not have
     prologue/epilogue sequences generated by the compiler.  Only basic
     'asm' statements can safely be included in naked functions (*note
     Basic Asm::).  While using extended 'asm' or a mixture of basic
     'asm' and C code may appear to work, they cannot be depended upon
     to work reliably and are not supported.

'near'
     On MeP targets this attribute causes the compiler to assume the
     called function is close enough to use the normal calling
     convention, overriding the '-mtf' command-line option.

'nesting'
     Use this attribute together with 'interrupt_handler',
     'exception_handler' or 'nmi_handler' to indicate that the function
     entry code should enable nested interrupts or exceptions.

'nmi_handler'
     Use this attribute on the Blackfin to indicate that the specified
     function is an NMI handler.  The compiler generates function entry
     and exit sequences suitable for use in an NMI handler when this
     attribute is present.

'nocompression'
     On MIPS targets, you can use the 'nocompression' function attribute
     to locally turn off MIPS16 and microMIPS code generation.  This
     attribute overrides the '-mips16' and '-mmicromips' options on the
     command line (*note MIPS Options::).

'no_instrument_function'
     If '-finstrument-functions' is given, profiling function calls are
     generated at entry and exit of most user-compiled functions.
     Functions with this attribute are not so instrumented.

'no_split_stack'
     If '-fsplit-stack' is given, functions have a small prologue which
     decides whether to split the stack.  Functions with the
     'no_split_stack' attribute do not have that prologue, and thus may
     run with only a small amount of stack space available.

'stack_protect'
     This function attribute make a stack protection of the function if
     flags 'fstack-protector' or 'fstack-protector-strong' or
     'fstack-protector-explicit' are set.

'noinline'
     This function attribute prevents a function from being considered
     for inlining.  If the function does not have side-effects, there
     are optimizations other than inlining that cause function calls to
     be optimized away, although the function call is live.  To keep
     such calls from being optimized away, put
          asm ("");

     (*note Extended Asm::) in the called function, to serve as a
     special side-effect.

'noclone'
     This function attribute prevents a function from being considered
     for cloning--a mechanism that produces specialized copies of
     functions and which is (currently) performed by interprocedural
     constant propagation.

'no_icf'
     This function attribute prevents a functions from being merged with
     another semantically equivalent function.

'nonnull (ARG-INDEX, ...)'
     The 'nonnull' attribute specifies that some function parameters
     should be non-null pointers.  For instance, the declaration:

          extern void *
          my_memcpy (void *dest, const void *src, size_t len)
                  __attribute__((nonnull (1, 2)));

     causes the compiler to check that, in calls to 'my_memcpy',
     arguments DEST and SRC are non-null.  If the compiler determines
     that a null pointer is passed in an argument slot marked as
     non-null, and the '-Wnonnull' option is enabled, a warning is
     issued.  The compiler may also choose to make optimizations based
     on the knowledge that certain function arguments will never be
     null.

     If no argument index list is given to the 'nonnull' attribute, all
     pointer arguments are marked as non-null.  To illustrate, the
     following declaration is equivalent to the previous example:

          extern void *
          my_memcpy (void *dest, const void *src, size_t len)
                  __attribute__((nonnull));

'no_reorder'
     Do not reorder functions or variables marked 'no_reorder' against
     each other or top level assembler statements the executable.  The
     actual order in the program will depend on the linker command line.
     Static variables marked like this are also not removed.  This has a
     similar effect as the '-fno-toplevel-reorder' option, but only
     applies to the marked symbols.

'returns_nonnull'
     The 'returns_nonnull' attribute specifies that the function return
     value should be a non-null pointer.  For instance, the declaration:

          extern void *
          mymalloc (size_t len) __attribute__((returns_nonnull));

     lets the compiler optimize callers based on the knowledge that the
     return value will never be null.

'noreturn'
     A few standard library functions, such as 'abort' and 'exit',
     cannot return.  GCC knows this automatically.  Some programs define
     their own functions that never return.  You can declare them
     'noreturn' to tell the compiler this fact.  For example,

          void fatal () __attribute__ ((noreturn));

          void
          fatal (/* ... */)
          {
            /* ... */ /* Print error message. */ /* ... */
            exit (1);
          }

     The 'noreturn' keyword tells the compiler to assume that 'fatal'
     cannot return.  It can then optimize without regard to what would
     happen if 'fatal' ever did return.  This makes slightly better
     code.  More importantly, it helps avoid spurious warnings of
     uninitialized variables.

     The 'noreturn' keyword does not affect the exceptional path when
     that applies: a 'noreturn'-marked function may still return to the
     caller by throwing an exception or calling 'longjmp'.

     Do not assume that registers saved by the calling function are
     restored before calling the 'noreturn' function.

     It does not make sense for a 'noreturn' function to have a return
     type other than 'void'.

'nothrow'
     The 'nothrow' attribute is used to inform the compiler that a
     function cannot throw an exception.  For example, most functions in
     the standard C library can be guaranteed not to throw an exception
     with the notable exceptions of 'qsort' and 'bsearch' that take
     function pointer arguments.

'nosave_low_regs'
     Use this attribute on SH targets to indicate that an
     'interrupt_handler' function should not save and restore registers
     R0..R7.  This can be used on SH3* and SH4* targets that have a
     second R0..R7 register bank for non-reentrant interrupt handlers.

'optimize'
     The 'optimize' attribute is used to specify that a function is to
     be compiled with different optimization options than specified on
     the command line.  Arguments can either be numbers or strings.
     Numbers are assumed to be an optimization level.  Strings that
     begin with 'O' are assumed to be an optimization option, while
     other options are assumed to be used with a '-f' prefix.  You can
     also use the '#pragma GCC optimize' pragma to set the optimization
     options that affect more than one function.  *Note Function
     Specific Option Pragmas::, for details about the '#pragma GCC
     optimize' pragma.

     This can be used for instance to have frequently-executed functions
     compiled with more aggressive optimization options that produce
     faster and larger code, while other functions can be compiled with
     less aggressive options.

'OS_main'
'OS_task'
     On AVR, functions with the 'OS_main' or 'OS_task' attribute do not
     save/restore any call-saved register in their prologue/epilogue.

     The 'OS_main' attribute can be used when there _is guarantee_ that
     interrupts are disabled at the time when the function is entered.
     This saves resources when the stack pointer has to be changed to
     set up a frame for local variables.

     The 'OS_task' attribute can be used when there is _no guarantee_
     that interrupts are disabled at that time when the function is
     entered like for, e.g.  task functions in a multi-threading
     operating system.  In that case, changing the stack pointer
     register is guarded by save/clear/restore of the global interrupt
     enable flag.

     The differences to the 'naked' function attribute are:
        * 'naked' functions do not have a return instruction whereas
          'OS_main' and 'OS_task' functions have a 'RET' or 'RETI'
          return instruction.
        * 'naked' functions do not set up a frame for local variables or
          a frame pointer whereas 'OS_main' and 'OS_task' do this as
          needed.

'pcs'

     The 'pcs' attribute can be used to control the calling convention
     used for a function on ARM. The attribute takes an argument that
     specifies the calling convention to use.

     When compiling using the AAPCS ABI (or a variant of it) then valid
     values for the argument are '"aapcs"' and '"aapcs-vfp"'.  In order
     to use a variant other than '"aapcs"' then the compiler must be
     permitted to use the appropriate co-processor registers (i.e., the
     VFP registers must be available in order to use '"aapcs-vfp"').
     For example,

          /* Argument passed in r0, and result returned in r0+r1.  */
          double f2d (float) __attribute__((pcs("aapcs")));

     Variadic functions always use the '"aapcs"' calling convention and
     the compiler rejects attempts to specify an alternative.

'pure'
     Many functions have no effects except the return value and their
     return value depends only on the parameters and/or global
     variables.  Such a function can be subject to common subexpression
     elimination and loop optimization just as an arithmetic operator
     would be.  These functions should be declared with the attribute
     'pure'.  For example,

          int square (int) __attribute__ ((pure));

     says that the hypothetical function 'square' is safe to call fewer
     times than the program says.

     Some of common examples of pure functions are 'strlen' or 'memcmp'.
     Interesting non-pure functions are functions with infinite loops or
     those depending on volatile memory or other system resource, that
     may change between two consecutive calls (such as 'feof' in a
     multithreading environment).

'hot'
     The 'hot' attribute on a function is used to inform the compiler
     that the function is a hot spot of the compiled program.  The
     function is optimized more aggressively and on many targets it is
     placed into a special subsection of the text section so all hot
     functions appear close together, improving locality.

     When profile feedback is available, via '-fprofile-use', hot
     functions are automatically detected and this attribute is ignored.

'cold'
     The 'cold' attribute on functions is used to inform the compiler
     that the function is unlikely to be executed.  The function is
     optimized for size rather than speed and on many targets it is
     placed into a special subsection of the text section so all cold
     functions appear close together, improving code locality of
     non-cold parts of program.  The paths leading to calls of cold
     functions within code are marked as unlikely by the branch
     prediction mechanism.  It is thus useful to mark functions used to
     handle unlikely conditions, such as 'perror', as cold to improve
     optimization of hot functions that do call marked functions in rare
     occasions.

     When profile feedback is available, via '-fprofile-use', cold
     functions are automatically detected and this attribute is ignored.

'no_sanitize_address'
'no_address_safety_analysis'
     The 'no_sanitize_address' attribute on functions is used to inform
     the compiler that it should not instrument memory accesses in the
     function when compiling with the '-fsanitize=address' option.  The
     'no_address_safety_analysis' is a deprecated alias of the
     'no_sanitize_address' attribute, new code should use
     'no_sanitize_address'.

'no_sanitize_thread'
     The 'no_sanitize_thread' attribute on functions is used to inform
     the compiler that it should not instrument memory accesses in the
     function when compiling with the '-fsanitize=thread' option.

'no_sanitize_undefined'
     The 'no_sanitize_undefined' attribute on functions is used to
     inform the compiler that it should not check for undefined behavior
     in the function when compiling with the '-fsanitize=undefined'
     option.

'bnd_legacy'
     The 'bnd_legacy' attribute on functions is used to inform the
     compiler that the function should not be instrumented when compiled
     with the '-fcheck-pointer-bounds' option.

'bnd_instrument'
     The 'bnd_instrument' attribute on functions is used to inform the
     compiler that the function should be instrumented when compiled
     with the '-fchkp-instrument-marked-only' option.

'regparm (NUMBER)'
     On x86-32 targets, the 'regparm' attribute causes the compiler to
     pass arguments number one to NUMBER if they are of integral type in
     registers EAX, EDX, and ECX instead of on the stack.  Functions
     that take a variable number of arguments continue to be passed all
     of their arguments on the stack.

     Beware that on some ELF systems this attribute is unsuitable for
     global functions in shared libraries with lazy binding (which is
     the default).  Lazy binding sends the first call via resolving code
     in the loader, which might assume EAX, EDX and ECX can be
     clobbered, as per the standard calling conventions.  Solaris 8 is
     affected by this.  Systems with the GNU C Library version 2.1 or
     higher and FreeBSD are believed to be safe since the loaders there
     save EAX, EDX and ECX. (Lazy binding can be disabled with the
     linker or the loader if desired, to avoid the problem.)

'reset'
     Use this attribute on the NDS32 target to indicate that the
     specified function is a reset handler.  The compiler will generate
     corresponding sections for use in a reset handler.  You can use the
     following attributes to provide extra exception handling:
     'nmi'
          Provide a user-defined function to handle NMI exception.
     'warm'
          Provide a user-defined function to handle warm reset
          exception.

'sseregparm'
     On x86-32 targets with SSE support, the 'sseregparm' attribute
     causes the compiler to pass up to 3 floating-point arguments in SSE
     registers instead of on the stack.  Functions that take a variable
     number of arguments continue to pass all of their floating-point
     arguments on the stack.

'force_align_arg_pointer'
     On x86 targets, the 'force_align_arg_pointer' attribute may be
     applied to individual function definitions, generating an alternate
     prologue and epilogue that realigns the run-time stack if
     necessary.  This supports mixing legacy codes that run with a
     4-byte aligned stack with modern codes that keep a 16-byte stack
     for SSE compatibility.

'renesas'
     On SH targets this attribute specifies that the function or struct
     follows the Renesas ABI.

'resbank'
     On the SH2A target, this attribute enables the high-speed register
     saving and restoration using a register bank for
     'interrupt_handler' routines.  Saving to the bank is performed
     automatically after the CPU accepts an interrupt that uses a
     register bank.

     The nineteen 32-bit registers comprising general register R0 to
     R14, control register GBR, and system registers MACH, MACL, and PR
     and the vector table address offset are saved into a register bank.
     Register banks are stacked in first-in last-out (FILO) sequence.
     Restoration from the bank is executed by issuing a RESBANK
     instruction.

'returns_twice'
     The 'returns_twice' attribute tells the compiler that a function
     may return more than one time.  The compiler ensures that all
     registers are dead before calling such a function and emits a
     warning about the variables that may be clobbered after the second
     return from the function.  Examples of such functions are 'setjmp'
     and 'vfork'.  The 'longjmp'-like counterpart of such function, if
     any, might need to be marked with the 'noreturn' attribute.

'saveall'
     Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
     indicate that all registers except the stack pointer should be
     saved in the prologue regardless of whether they are used or not.

'save_volatiles'
     Use this attribute on the MicroBlaze to indicate that the function
     is an interrupt handler.  All volatile registers (in addition to
     non-volatile registers) are saved in the function prologue.  If the
     function is a leaf function, only volatiles used by the function
     are saved.  A normal function return is generated instead of a
     return from interrupt.

'break_handler'
     Use this attribute on the MicroBlaze ports to indicate that the
     specified function is a break handler.  The compiler generates
     function entry and exit sequences suitable for use in an break
     handler when this attribute is present.  The return from
     'break_handler' is done through the 'rtbd' instead of 'rtsd'.

          void f () __attribute__ ((break_handler));

'section ("SECTION-NAME")'
     Normally, the compiler places the code it generates in the 'text'
     section.  Sometimes, however, you need additional sections, or you
     need certain particular functions to appear in special sections.
     The 'section' attribute specifies that a function lives in a
     particular section.  For example, the declaration:

          extern void foobar (void) __attribute__ ((section ("bar")));

     puts the function 'foobar' in the 'bar' section.

     Some file formats do not support arbitrary sections so the
     'section' attribute is not available on all platforms.  If you need
     to map the entire contents of a module to a particular section,
     consider using the facilities of the linker instead.

'sentinel'
     This function attribute ensures that a parameter in a function call
     is an explicit 'NULL'.  The attribute is only valid on variadic
     functions.  By default, the sentinel is located at position zero,
     the last parameter of the function call.  If an optional integer
     position argument P is supplied to the attribute, the sentinel must
     be located at position P counting backwards from the end of the
     argument list.

          __attribute__ ((sentinel))
          is equivalent to
          __attribute__ ((sentinel(0)))

     The attribute is automatically set with a position of 0 for the
     built-in functions 'execl' and 'execlp'.  The built-in function
     'execle' has the attribute set with a position of 1.

     A valid 'NULL' in this context is defined as zero with any pointer
     type.  If your system defines the 'NULL' macro with an integer type
     then you need to add an explicit cast.  GCC replaces 'stddef.h'
     with a copy that redefines NULL appropriately.

     The warnings for missing or incorrect sentinels are enabled with
     '-Wformat'.

'short_call'
     See 'long_call'.

'shortcall'
     See 'longcall'.

'signal'
     Use this attribute on the AVR to indicate that the specified
     function is an interrupt handler.  The compiler generates function
     entry and exit sequences suitable for use in an interrupt handler
     when this attribute is present.

     See also the 'interrupt' function attribute.

     The AVR hardware globally disables interrupts when an interrupt is
     executed.  Interrupt handler functions defined with the 'signal'
     attribute do not re-enable interrupts.  It is save to enable
     interrupts in a 'signal' handler.  This "save" only applies to the
     code generated by the compiler and not to the IRQ layout of the
     application which is responsibility of the application.

     If both 'signal' and 'interrupt' are specified for the same
     function, 'signal' is silently ignored.

'sp_switch'
     Use this attribute on the SH to indicate an 'interrupt_handler'
     function should switch to an alternate stack.  It expects a string
     argument that names a global variable holding the address of the
     alternate stack.

          void *alt_stack;
          void f () __attribute__ ((interrupt_handler,
                                    sp_switch ("alt_stack")));

'stdcall'
     On x86-32 targets, the 'stdcall' attribute causes the compiler to
     assume that the called function pops off the stack space used to
     pass arguments, unless it takes a variable number of arguments.

'syscall_linkage'
     This attribute is used to modify the IA-64 calling convention by
     marking all input registers as live at all function exits.  This
     makes it possible to restart a system call after an interrupt
     without having to save/restore the input registers.  This also
     prevents kernel data from leaking into application code.

'target'
     The 'target' attribute is used to specify that a function is to be
     compiled with different target options than specified on the
     command line.  This can be used for instance to have functions
     compiled with a different ISA (instruction set architecture) than
     the default.  You can also use the '#pragma GCC target' pragma to
     set more than one function to be compiled with specific target
     options.  *Note Function Specific Option Pragmas::, for details
     about the '#pragma GCC target' pragma.

     For instance on an x86, you could compile one function with
     'target("sse4.1,arch=core2")' and another with
     'target("sse4a,arch=amdfam10")'.  This is equivalent to compiling
     the first function with '-msse4.1' and '-march=core2' options, and
     the second function with '-msse4a' and '-march=amdfam10' options.
     It is up to the user to make sure that a function is only invoked
     on a machine that supports the particular ISA it is compiled for
     (for example by using 'cpuid' on x86 to determine what feature bits
     and architecture family are used).

          int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
          int sse3_func (void) __attribute__ ((__target__ ("sse3")));

     You can either use multiple strings to specify multiple options, or
     separate the options with a comma (',').

     The 'target' attribute is presently implemented for x86, PowerPC,
     and Nios II targets only.  The options supported are specific to
     each target.

     On the x86, the following options are allowed:

     'abm'
     'no-abm'
          Enable/disable the generation of the advanced bit
          instructions.

     'aes'
     'no-aes'
          Enable/disable the generation of the AES instructions.

     'default'
          *Note Function Multiversioning::, where it is used to specify
          the default function version.

     'mmx'
     'no-mmx'
          Enable/disable the generation of the MMX instructions.

     'pclmul'
     'no-pclmul'
          Enable/disable the generation of the PCLMUL instructions.

     'popcnt'
     'no-popcnt'
          Enable/disable the generation of the POPCNT instruction.

     'sse'
     'no-sse'
          Enable/disable the generation of the SSE instructions.

     'sse2'
     'no-sse2'
          Enable/disable the generation of the SSE2 instructions.

     'sse3'
     'no-sse3'
          Enable/disable the generation of the SSE3 instructions.

     'sse4'
     'no-sse4'
          Enable/disable the generation of the SSE4 instructions (both
          SSE4.1 and SSE4.2).

     'sse4.1'
     'no-sse4.1'
          Enable/disable the generation of the sse4.1 instructions.

     'sse4.2'
     'no-sse4.2'
          Enable/disable the generation of the sse4.2 instructions.

     'sse4a'
     'no-sse4a'
          Enable/disable the generation of the SSE4A instructions.

     'fma4'
     'no-fma4'
          Enable/disable the generation of the FMA4 instructions.

     'xop'
     'no-xop'
          Enable/disable the generation of the XOP instructions.

     'lwp'
     'no-lwp'
          Enable/disable the generation of the LWP instructions.

     'ssse3'
     'no-ssse3'
          Enable/disable the generation of the SSSE3 instructions.

     'cld'
     'no-cld'
          Enable/disable the generation of the CLD before string moves.

     'fancy-math-387'
     'no-fancy-math-387'
          Enable/disable the generation of the 'sin', 'cos', and 'sqrt'
          instructions on the 387 floating-point unit.

     'fused-madd'
     'no-fused-madd'
          Enable/disable the generation of the fused multiply/add
          instructions.

     'ieee-fp'
     'no-ieee-fp'
          Enable/disable the generation of floating point that depends
          on IEEE arithmetic.

     'inline-all-stringops'
     'no-inline-all-stringops'
          Enable/disable inlining of string operations.

     'inline-stringops-dynamically'
     'no-inline-stringops-dynamically'
          Enable/disable the generation of the inline code to do small
          string operations and calling the library routines for large
          operations.

     'align-stringops'
     'no-align-stringops'
          Do/do not align destination of inlined string operations.

     'recip'
     'no-recip'
          Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and
          RSQRTPS instructions followed an additional Newton-Raphson
          step instead of doing a floating-point division.

     'arch=ARCH'
          Specify the architecture to generate code for in compiling the
          function.

     'tune=TUNE'
          Specify the architecture to tune for in compiling the
          function.

     'fpmath=FPMATH'
          Specify which floating-point unit to use.  The
          'target("fpmath=sse,387")' option must be specified as
          'target("fpmath=sse+387")' because the comma would separate
          different options.

     On the PowerPC, the following options are allowed:

     'altivec'
     'no-altivec'
          Generate code that uses (does not use) AltiVec instructions.
          In 32-bit code, you cannot enable AltiVec instructions unless
          '-mabi=altivec' is used on the command line.

     'cmpb'
     'no-cmpb'
          Generate code that uses (does not use) the compare bytes
          instruction implemented on the POWER6 processor and other
          processors that support the PowerPC V2.05 architecture.

     'dlmzb'
     'no-dlmzb'
          Generate code that uses (does not use) the string-search
          'dlmzb' instruction on the IBM 405, 440, 464 and 476
          processors.  This instruction is generated by default when
          targeting those processors.

     'fprnd'
     'no-fprnd'
          Generate code that uses (does not use) the FP round to integer
          instructions implemented on the POWER5+ processor and other
          processors that support the PowerPC V2.03 architecture.

     'hard-dfp'
     'no-hard-dfp'
          Generate code that uses (does not use) the decimal
          floating-point instructions implemented on some POWER
          processors.

     'isel'
     'no-isel'
          Generate code that uses (does not use) ISEL instruction.

     'mfcrf'
     'no-mfcrf'
          Generate code that uses (does not use) the move from condition
          register field instruction implemented on the POWER4 processor
          and other processors that support the PowerPC V2.01
          architecture.

     'mfpgpr'
     'no-mfpgpr'
          Generate code that uses (does not use) the FP move to/from
          general purpose register instructions implemented on the
          POWER6X processor and other processors that support the
          extended PowerPC V2.05 architecture.

     'mulhw'
     'no-mulhw'
          Generate code that uses (does not use) the half-word multiply
          and multiply-accumulate instructions on the IBM 405, 440, 464
          and 476 processors.  These instructions are generated by
          default when targeting those processors.

     'multiple'
     'no-multiple'
          Generate code that uses (does not use) the load multiple word
          instructions and the store multiple word instructions.

     'update'
     'no-update'
          Generate code that uses (does not use) the load or store
          instructions that update the base register to the address of
          the calculated memory location.

     'popcntb'
     'no-popcntb'
          Generate code that uses (does not use) the popcount and
          double-precision FP reciprocal estimate instruction
          implemented on the POWER5 processor and other processors that
          support the PowerPC V2.02 architecture.

     'popcntd'
     'no-popcntd'
          Generate code that uses (does not use) the popcount
          instruction implemented on the POWER7 processor and other
          processors that support the PowerPC V2.06 architecture.

     'powerpc-gfxopt'
     'no-powerpc-gfxopt'
          Generate code that uses (does not use) the optional PowerPC
          architecture instructions in the Graphics group, including
          floating-point select.

     'powerpc-gpopt'
     'no-powerpc-gpopt'
          Generate code that uses (does not use) the optional PowerPC
          architecture instructions in the General Purpose group,
          including floating-point square root.

     'recip-precision'
     'no-recip-precision'
          Assume (do not assume) that the reciprocal estimate
          instructions provide higher-precision estimates than is
          mandated by the PowerPC ABI.

     'string'
     'no-string'
          Generate code that uses (does not use) the load string
          instructions and the store string word instructions to save
          multiple registers and do small block moves.

     'vsx'
     'no-vsx'
          Generate code that uses (does not use) vector/scalar (VSX)
          instructions, and also enable the use of built-in functions
          that allow more direct access to the VSX instruction set.  In
          32-bit code, you cannot enable VSX or AltiVec instructions
          unless '-mabi=altivec' is used on the command line.

     'friz'
     'no-friz'
          Generate (do not generate) the 'friz' instruction when the
          '-funsafe-math-optimizations' option is used to optimize
          rounding a floating-point value to 64-bit integer and back to
          floating point.  The 'friz' instruction does not return the
          same value if the floating-point number is too large to fit in
          an integer.

     'avoid-indexed-addresses'
     'no-avoid-indexed-addresses'
          Generate code that tries to avoid (not avoid) the use of
          indexed load or store instructions.

     'paired'
     'no-paired'
          Generate code that uses (does not use) the generation of
          PAIRED simd instructions.

     'longcall'
     'no-longcall'
          Generate code that assumes (does not assume) that all calls
          are far away so that a longer more expensive calling sequence
          is required.

     'cpu=CPU'
          Specify the architecture to generate code for when compiling
          the function.  If you select the 'target("cpu=power7")'
          attribute when generating 32-bit code, VSX and AltiVec
          instructions are not generated unless you use the
          '-mabi=altivec' option on the command line.

     'tune=TUNE'
          Specify the architecture to tune for when compiling the
          function.  If you do not specify the 'target("tune=TUNE")'
          attribute and you do specify the 'target("cpu=CPU")'
          attribute, compilation tunes for the CPU architecture, and not
          the default tuning specified on the command line.

     When compiling for Nios II, the following options are allowed:

     'custom-INSN=N'
     'no-custom-INSN'
          Each 'custom-INSN=N' attribute locally enables use of a custom
          instruction with encoding N when generating code that uses
          INSN.  Similarly, 'no-custom-INSN' locally inhibits use of the
          custom instruction INSN.  These target attributes correspond
          to the '-mcustom-INSN=N' and '-mno-custom-INSN' command-line
          options, and support the same set of INSN keywords.  *Note
          Nios II Options::, for more information.

     'custom-fpu-cfg=NAME'
          This attribute corresponds to the '-mcustom-fpu-cfg=NAME'
          command-line option, to select a predefined set of custom
          instructions named NAME.  *Note Nios II Options::, for more
          information.

     On the x86 and PowerPC back ends, the inliner does not inline a
     function that has different target options than the caller, unless
     the callee has a subset of the target options of the caller.  For
     example a function declared with 'target("sse3")' can inline a
     function with 'target("sse2")', since '-msse3' implies '-msse2'.

'trap_exit'
     Use this attribute on the SH for an 'interrupt_handler' to return
     using 'trapa' instead of 'rte'.  This attribute expects an integer
     argument specifying the trap number to be used.

'trapa_handler'
     On SH targets this function attribute is similar to
     'interrupt_handler' but it does not save and restore all registers.

'unused'
     This attribute, attached to a function, means that the function is
     meant to be possibly unused.  GCC does not produce a warning for
     this function.

'used'
     This attribute, attached to a function, means that code must be
     emitted for the function even if it appears that the function is
     not referenced.  This is useful, for example, when the function is
     referenced only in inline assembly.

     When applied to a member function of a C++ class template, the
     attribute also means that the function is instantiated if the class
     itself is instantiated.

'vector'
     This RX attribute is similar to the 'interrupt' attribute,
     including its parameters, but does not make the function an
     interrupt-handler type function (i.e.  it retains the normal C
     function calling ABI). See the 'interrupt' attribute for a
     description of its arguments.

'version_id'
     This IA-64 HP-UX attribute, attached to a global variable or
     function, renames a symbol to contain a version string, thus
     allowing for function level versioning.  HP-UX system header files
     may use function level versioning for some system calls.

          extern int foo () __attribute__((version_id ("20040821")));

     Calls to FOO are mapped to calls to FOO{20040821}.

'visibility ("VISIBILITY_TYPE")'
     This attribute affects the linkage of the declaration to which it
     is attached.  There are four supported VISIBILITY_TYPE values:
     default, hidden, protected or internal visibility.

          void __attribute__ ((visibility ("protected")))
          f () { /* Do something. */; }
          int i __attribute__ ((visibility ("hidden")));

     The possible values of VISIBILITY_TYPE correspond to the visibility
     settings in the ELF gABI.

     "default"
          Default visibility is the normal case for the object file
          format.  This value is available for the visibility attribute
          to override other options that may change the assumed
          visibility of entities.

          On ELF, default visibility means that the declaration is
          visible to other modules and, in shared libraries, means that
          the declared entity may be overridden.

          On Darwin, default visibility means that the declaration is
          visible to other modules.

          Default visibility corresponds to "external linkage" in the
          language.

     "hidden"
          Hidden visibility indicates that the entity declared has a new
          form of linkage, which we call "hidden linkage".  Two
          declarations of an object with hidden linkage refer to the
          same object if they are in the same shared object.

     "internal"
          Internal visibility is like hidden visibility, but with
          additional processor specific semantics.  Unless otherwise
          specified by the psABI, GCC defines internal visibility to
          mean that a function is _never_ called from another module.
          Compare this with hidden functions which, while they cannot be
          referenced directly by other modules, can be referenced
          indirectly via function pointers.  By indicating that a
          function cannot be called from outside the module, GCC may for
          instance omit the load of a PIC register since it is known
          that the calling function loaded the correct value.

     "protected"
          Protected visibility is like default visibility except that it
          indicates that references within the defining module bind to
          the definition in that module.  That is, the declared entity
          cannot be overridden by another module.

     All visibilities are supported on many, but not all, ELF targets
     (supported when the assembler supports the '.visibility'
     pseudo-op).  Default visibility is supported everywhere.  Hidden
     visibility is supported on Darwin targets.

     The visibility attribute should be applied only to declarations
     that would otherwise have external linkage.  The attribute should
     be applied consistently, so that the same entity should not be
     declared with different settings of the attribute.

     In C++, the visibility attribute applies to types as well as
     functions and objects, because in C++ types have linkage.  A class
     must not have greater visibility than its non-static data member
     types and bases, and class members default to the visibility of
     their class.  Also, a declaration without explicit visibility is
     limited to the visibility of its type.

     In C++, you can mark member functions and static member variables
     of a class with the visibility attribute.  This is useful if you
     know a particular method or static member variable should only be
     used from one shared object; then you can mark it hidden while the
     rest of the class has default visibility.  Care must be taken to
     avoid breaking the One Definition Rule; for example, it is usually
     not useful to mark an inline method as hidden without marking the
     whole class as hidden.

     A C++ namespace declaration can also have the visibility attribute.

          namespace nspace1 __attribute__ ((visibility ("protected")))
          { /* Do something. */; }

     This attribute applies only to the particular namespace body, not
     to other definitions of the same namespace; it is equivalent to
     using '#pragma GCC visibility' before and after the namespace
     definition (*note Visibility Pragmas::).

     In C++, if a template argument has limited visibility, this
     restriction is implicitly propagated to the template instantiation.
     Otherwise, template instantiations and specializations default to
     the visibility of their template.

     If both the template and enclosing class have explicit visibility,
     the visibility from the template is used.

'vliw'
     On MeP, the 'vliw' attribute tells the compiler to emit
     instructions in VLIW mode instead of core mode.  Note that this
     attribute is not allowed unless a VLIW coprocessor has been
     configured and enabled through command-line options.

'warn_unused_result'
     The 'warn_unused_result' attribute causes a warning to be emitted
     if a caller of the function with this attribute does not use its
     return value.  This is useful for functions where not checking the
     result is either a security problem or always a bug, such as
     'realloc'.

          int fn () __attribute__ ((warn_unused_result));
          int foo ()
          {
            if (fn () < 0) return -1;
            fn ();
            return 0;
          }

     results in warning on line 5.

'weak'
     The 'weak' attribute causes the declaration to be emitted as a weak
     symbol rather than a global.  This is primarily useful in defining
     library functions that can be overridden in user code, though it
     can also be used with non-function declarations.  Weak symbols are
     supported for ELF targets, and also for a.out targets when using
     the GNU assembler and linker.

'weakref'
'weakref ("TARGET")'
     The 'weakref' attribute marks a declaration as a weak reference.
     Without arguments, it should be accompanied by an 'alias' attribute
     naming the target symbol.  Optionally, the TARGET may be given as
     an argument to 'weakref' itself.  In either case, 'weakref'
     implicitly marks the declaration as 'weak'.  Without a TARGET,
     given as an argument to 'weakref' or to 'alias', 'weakref' is
     equivalent to 'weak'.

          static int x() __attribute__ ((weakref ("y")));
          /* is equivalent to... */
          static int x() __attribute__ ((weak, weakref, alias ("y")));
          /* and to... */
          static int x() __attribute__ ((weakref));
          static int x() __attribute__ ((alias ("y")));

     A weak reference is an alias that does not by itself require a
     definition to be given for the target symbol.  If the target symbol
     is only referenced through weak references, then it becomes a
     'weak' undefined symbol.  If it is directly referenced, however,
     then such strong references prevail, and a definition is required
     for the symbol, not necessarily in the same translation unit.

     The effect is equivalent to moving all references to the alias to a
     separate translation unit, renaming the alias to the aliased
     symbol, declaring it as weak, compiling the two separate
     translation units and performing a reloadable link on them.

     At present, a declaration to which 'weakref' is attached can only
     be 'static'.

 You can specify multiple attributes in a declaration by separating them
by commas within the double parentheses or by immediately following an
attribute declaration with another attribute declaration.

 Some people object to the '__attribute__' feature, suggesting that ISO
C's '#pragma' should be used instead.  At the time '__attribute__' was
designed, there were two reasons for not doing this.

  1. It is impossible to generate '#pragma' commands from a macro.

  2. There is no telling what the same '#pragma' might mean in another
     compiler.

 These two reasons applied to almost any application that might have
been proposed for '#pragma'.  It was basically a mistake to use
'#pragma' for _anything_.

 The ISO C99 standard includes '_Pragma', which now allows pragmas to be
generated from macros.  In addition, a '#pragma GCC' namespace is now in
use for GCC-specific pragmas.  However, it has been found convenient to
use '__attribute__' to achieve a natural attachment of attributes to
their corresponding declarations, whereas '#pragma GCC' is of use for
constructs that do not naturally form part of the grammar.  *Note
Pragmas Accepted by GCC: Pragmas.


File: gcc.info,  Node: Label Attributes,  Next: Attribute Syntax,  Prev: Function Attributes,  Up: C Extensions

6.32 Label Attributes
=====================

GCC allows attributes to be set on C labels.  *Note Attribute Syntax::,
for details of the exact syntax for using attributes.  Other attributes
are available for functions (*note Function Attributes::), variables
(*note Variable Attributes::) and for types (*note Type Attributes::).

 This example uses the 'cold' label attribute to indicate the
'ErrorHandling' branch is unlikely to be taken and that the
'ErrorHandling' label is unused:


        asm goto ("some asm" : : : : NoError);

     /* This branch (the fall-through from the asm) is less commonly used */
     ErrorHandling:
        __attribute__((cold, unused)); /* Semi-colon is required here */
        printf("error\n");
        return 0;

     NoError:
        printf("no error\n");
        return 1;

'unused'
     This feature is intended for program-generated code that may
     contain unused labels, but which is compiled with '-Wall'.  It is
     not normally appropriate to use in it human-written code, though it
     could be useful in cases where the code that jumps to the label is
     contained within an '#ifdef' conditional.

'hot'
     The 'hot' attribute on a label is used to inform the compiler that
     the path following the label is more likely than paths that are not
     so annotated.  This attribute is used in cases where
     '__builtin_expect' cannot be used, for instance with computed goto
     or 'asm goto'.

'cold'
     The 'cold' attribute on labels is used to inform the compiler that
     the path following the label is unlikely to be executed.  This
     attribute is used in cases where '__builtin_expect' cannot be used,
     for instance with computed goto or 'asm goto'.


File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Label Attributes,  Up: C Extensions

6.33 Attribute Syntax
=====================

This section describes the syntax with which '__attribute__' may be
used, and the constructs to which attribute specifiers bind, for the C
language.  Some details may vary for C++ and Objective-C.  Because of
infelicities in the grammar for attributes, some forms described here
may not be successfully parsed in all cases.

 There are some problems with the semantics of attributes in C++.  For
example, there are no manglings for attributes, although they may affect
code generation, so problems may arise when attributed types are used in
conjunction with templates or overloading.  Similarly, 'typeid' does not
distinguish between types with different attributes.  Support for
attributes in C++ may be restricted in future to attributes on
declarations only, but not on nested declarators.

 *Note Function Attributes::, for details of the semantics of attributes
applying to functions.  *Note Variable Attributes::, for details of the
semantics of attributes applying to variables.  *Note Type Attributes::,
for details of the semantics of attributes applying to structure, union
and enumerated types.  *Note Label Attributes::, for details of the
semantics of attributes applying to labels.

 An "attribute specifier" is of the form '__attribute__
((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
comma-separated sequence of "attributes", where each attribute is one of
the following:

   * Empty.  Empty attributes are ignored.

   * A word (which may be an identifier such as 'unused', or a reserved
     word such as 'const').

   * A word, followed by, in parentheses, parameters for the attribute.
     These parameters take one of the following forms:

        * An identifier.  For example, 'mode' attributes use this form.

        * An identifier followed by a comma and a non-empty
          comma-separated list of expressions.  For example, 'format'
          attributes use this form.

        * A possibly empty comma-separated list of expressions.  For
          example, 'format_arg' attributes use this form with the list
          being a single integer constant expression, and 'alias'
          attributes use this form with the list being a single string
          constant.

 An "attribute specifier list" is a sequence of one or more attribute
specifiers, not separated by any other tokens.

Label Attributes
................

In GNU C, an attribute specifier list may appear after the colon
following a label, other than a 'case' or 'default' label.  GNU C++ only
permits attributes on labels if the attribute specifier is immediately
followed by a semicolon (i.e., the label applies to an empty statement).
If the semicolon is missing, C++ label attributes are ambiguous, as it
is permissible for a declaration, which could begin with an attribute
list, to be labelled in C++.  Declarations cannot be labelled in C90 or
C99, so the ambiguity does not arise there.

Type Attributes
...............

An attribute specifier list may appear as part of a 'struct', 'union' or
'enum' specifier.  It may go either immediately after the 'struct',
'union' or 'enum' keyword, or after the closing brace.  The former
syntax is preferred.  Where attribute specifiers follow the closing
brace, they are considered to relate to the structure, union or
enumerated type defined, not to any enclosing declaration the type
specifier appears in, and the type defined is not complete until after
the attribute specifiers.

All other attributes
....................

Otherwise, an attribute specifier appears as part of a declaration,
counting declarations of unnamed parameters and type names, and relates
to that declaration (which may be nested in another declaration, for
example in the case of a parameter declaration), or to a particular
declarator within a declaration.  Where an attribute specifier is
applied to a parameter declared as a function or an array, it should
apply to the function or array rather than the pointer to which the
parameter is implicitly converted, but this is not yet correctly
implemented.

 Any list of specifiers and qualifiers at the start of a declaration may
contain attribute specifiers, whether or not such a list may in that
context contain storage class specifiers.  (Some attributes, however,
are essentially in the nature of storage class specifiers, and only make
sense where storage class specifiers may be used; for example,
'section'.)  There is one necessary limitation to this syntax: the first
old-style parameter declaration in a function definition cannot begin
with an attribute specifier, because such an attribute applies to the
function instead by syntax described below (which, however, is not yet
implemented in this case).  In some other cases, attribute specifiers
are permitted by this grammar but not yet supported by the compiler.
All attribute specifiers in this place relate to the declaration as a
whole.  In the obsolescent usage where a type of 'int' is implied by the
absence of type specifiers, such a list of specifiers and qualifiers may
be an attribute specifier list with no other specifiers or qualifiers.

 At present, the first parameter in a function prototype must have some
type specifier that is not an attribute specifier; this resolves an
ambiguity in the interpretation of 'void f(int (__attribute__((foo))
x))', but is subject to change.  At present, if the parentheses of a
function declarator contain only attributes then those attributes are
ignored, rather than yielding an error or warning or implying a single
parameter of type int, but this is subject to change.

 An attribute specifier list may appear immediately before a declarator
(other than the first) in a comma-separated list of declarators in a
declaration of more than one identifier using a single list of
specifiers and qualifiers.  Such attribute specifiers apply only to the
identifier before whose declarator they appear.  For example, in

     __attribute__((noreturn)) void d0 (void),
         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
          d2 (void);

the 'noreturn' attribute applies to all the functions declared; the
'format' attribute only applies to 'd1'.

 An attribute specifier list may appear immediately before the comma,
'=' or semicolon terminating the declaration of an identifier other than
a function definition.  Such attribute specifiers apply to the declared
object or function.  Where an assembler name for an object or function
is specified (*note Asm Labels::), the attribute must follow the 'asm'
specification.

 An attribute specifier list may, in future, be permitted to appear
after the declarator in a function definition (before any old-style
parameter declarations or the function body).

 Attribute specifiers may be mixed with type qualifiers appearing inside
the '[]' of a parameter array declarator, in the C99 construct by which
such qualifiers are applied to the pointer to which the array is
implicitly converted.  Such attribute specifiers apply to the pointer,
not to the array, but at present this is not implemented and they are
ignored.

 An attribute specifier list may appear at the start of a nested
declarator.  At present, there are some limitations in this usage: the
attributes correctly apply to the declarator, but for most individual
attributes the semantics this implies are not implemented.  When
attribute specifiers follow the '*' of a pointer declarator, they may be
mixed with any type qualifiers present.  The following describes the
formal semantics of this syntax.  It makes the most sense if you are
familiar with the formal specification of declarators in the ISO C
standard.

 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1',
where 'T' contains declaration specifiers that specify a type TYPE (such
as 'int') and 'D1' is a declarator that contains an identifier IDENT.
The type specified for IDENT for derived declarators whose type does not
include an attribute specifier is as in the ISO C standard.

 If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the
declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE"
for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.

 If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D',
and the declaration 'T D' specifies the type
"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the
type "DERIVED-DECLARATOR-TYPE-LIST
TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT.

 For example,

     void (__attribute__((noreturn)) ****f) (void);

specifies the type "pointer to pointer to pointer to pointer to
non-returning function returning 'void'".  As another example,

     char *__attribute__((aligned(8))) *f;

specifies the type "pointer to 8-byte-aligned pointer to 'char'".  Note
again that this does not work with most attributes; for example, the
usage of 'aligned' and 'noreturn' attributes given above is not yet
supported.

 For compatibility with existing code written for compiler versions that
did not implement attributes on nested declarators, some laxity is
allowed in the placing of attributes.  If an attribute that only applies
to types is applied to a declaration, it is treated as applying to the
type of that declaration.  If an attribute that only applies to
declarations is applied to the type of a declaration, it is treated as
applying to that declaration; and, for compatibility with code placing
the attributes immediately before the identifier declared, such an
attribute applied to a function return type is treated as applying to
the function type, and such an attribute applied to an array element
type is treated as applying to the array type.  If an attribute that
only applies to function types is applied to a pointer-to-function type,
it is treated as applying to the pointer target type; if such an
attribute is applied to a function return type that is not a
pointer-to-function type, it is treated as applying to the function
type.


File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions

6.34 Prototypes and Old-Style Function Definitions
==================================================

GNU C extends ISO C to allow a function prototype to override a later
old-style non-prototype definition.  Consider the following example:

     /* Use prototypes unless the compiler is old-fashioned.  */
     #ifdef __STDC__
     #define P(x) x
     #else
     #define P(x) ()
     #endif

     /* Prototype function declaration.  */
     int isroot P((uid_t));

     /* Old-style function definition.  */
     int
     isroot (x)   /* ??? lossage here ??? */
          uid_t x;
     {
       return x == 0;
     }

 Suppose the type 'uid_t' happens to be 'short'.  ISO C does not allow
this example, because subword arguments in old-style non-prototype
definitions are promoted.  Therefore in this example the function
definition's argument is really an 'int', which does not match the
prototype argument type of 'short'.

 This restriction of ISO C makes it hard to write code that is portable
to traditional C compilers, because the programmer does not know whether
the 'uid_t' type is 'short', 'int', or 'long'.  Therefore, in cases like
these GNU C allows a prototype to override a later old-style definition.
More precisely, in GNU C, a function prototype argument type overrides
the argument type specified by a later old-style definition if the
former type is the same as the latter type before promotion.  Thus in
GNU C the above example is equivalent to the following:

     int isroot (uid_t);

     int
     isroot (uid_t x)
     {
       return x == 0;
     }

GNU C++ does not support old-style function definitions, so this
extension is irrelevant.


File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions

6.35 C++ Style Comments
=======================

In GNU C, you may use C++ style comments, which start with '//' and
continue until the end of the line.  Many other C implementations allow
such comments, and they are included in the 1999 C standard.  However,
C++ style comments are not recognized if you specify an '-std' option
specifying a version of ISO C before C99, or '-ansi' (equivalent to
'-std=c90').


File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions

6.36 Dollar Signs in Identifier Names
=====================================

In GNU C, you may normally use dollar signs in identifier names.  This
is because many traditional C implementations allow such identifiers.
However, dollar signs in identifiers are not supported on a few target
machines, typically because the target assembler does not allow them.


File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions

6.37 The Character <ESC> in Constants
=====================================

You can use the sequence '\e' in a string or character constant to stand
for the ASCII character <ESC>.


File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions

6.38 Specifying Attributes of Variables
=======================================

The keyword '__attribute__' allows you to specify special attributes of
variables or structure fields.  This keyword is followed by an attribute
specification inside double parentheses.  Some attributes are currently
defined generically for variables.  Other attributes are defined for
variables on particular target systems.  Other attributes are available
for functions (*note Function Attributes::), labels (*note Label
Attributes::) and for types (*note Type Attributes::).  Other front ends
might define more attributes (*note Extensions to the C++ Language: C++
Extensions.).

 You may also specify attributes with '__' preceding and following each
keyword.  This allows you to use them in header files without being
concerned about a possible macro of the same name.  For example, you may
use '__aligned__' instead of 'aligned'.

 *Note Attribute Syntax::, for details of the exact syntax for using
attributes.

'aligned (ALIGNMENT)'
     This attribute specifies a minimum alignment for the variable or
     structure field, measured in bytes.  For example, the declaration:

          int x __attribute__ ((aligned (16))) = 0;

     causes the compiler to allocate the global variable 'x' on a
     16-byte boundary.  On a 68040, this could be used in conjunction
     with an 'asm' expression to access the 'move16' instruction which
     requires 16-byte aligned operands.

     You can also specify the alignment of structure fields.  For
     example, to create a double-word aligned 'int' pair, you could
     write:

          struct foo { int x[2] __attribute__ ((aligned (8))); };

     This is an alternative to creating a union with a 'double' member,
     which forces the union to be double-word aligned.

     As in the preceding examples, you can explicitly specify the
     alignment (in bytes) that you wish the compiler to use for a given
     variable or structure field.  Alternatively, you can leave out the
     alignment factor and just ask the compiler to align a variable or
     field to the default alignment for the target architecture you are
     compiling for.  The default alignment is sufficient for all scalar
     types, but may not be enough for all vector types on a target that
     supports vector operations.  The default alignment is fixed for a
     particular target ABI.

     GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__',
     which is the largest alignment ever used for any data type on the
     target machine you are compiling for.  For example, you could
     write:

          short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__)));

     The compiler automatically sets the alignment for the declared
     variable or field to '__BIGGEST_ALIGNMENT__'.  Doing this can often
     make copy operations more efficient, because the compiler can use
     whatever instructions copy the biggest chunks of memory when
     performing copies to or from the variables or fields that you have
     aligned this way.  Note that the value of '__BIGGEST_ALIGNMENT__'
     may change depending on command-line options.

     When used on a struct, or struct member, the 'aligned' attribute
     can only increase the alignment; in order to decrease it, the
     'packed' attribute must be specified as well.  When used as part of
     a typedef, the 'aligned' attribute can both increase and decrease
     alignment, and specifying the 'packed' attribute generates a
     warning.

     Note that the effectiveness of 'aligned' attributes may be limited
     by inherent limitations in your linker.  On many systems, the
     linker is only able to arrange for variables to be aligned up to a
     certain maximum alignment.  (For some linkers, the maximum
     supported alignment may be very very small.)  If your linker is
     only able to align variables up to a maximum of 8-byte alignment,
     then specifying 'aligned(16)' in an '__attribute__' still only
     provides you with 8-byte alignment.  See your linker documentation
     for further information.

     The 'aligned' attribute can also be used for functions (*note
     Function Attributes::.)

'cleanup (CLEANUP_FUNCTION)'
     The 'cleanup' attribute runs a function when the variable goes out
     of scope.  This attribute can only be applied to auto function
     scope variables; it may not be applied to parameters or variables
     with static storage duration.  The function must take one
     parameter, a pointer to a type compatible with the variable.  The
     return value of the function (if any) is ignored.

     If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during
     the stack unwinding that happens during the processing of the
     exception.  Note that the 'cleanup' attribute does not allow the
     exception to be caught, only to perform an action.  It is undefined
     what happens if CLEANUP_FUNCTION does not return normally.

'common'
'nocommon'
     The 'common' attribute requests GCC to place a variable in "common"
     storage.  The 'nocommon' attribute requests the opposite--to
     allocate space for it directly.

     These attributes override the default chosen by the '-fno-common'
     and '-fcommon' flags respectively.

'deprecated'
'deprecated (MSG)'
     The 'deprecated' attribute results in a warning if the variable is
     used anywhere in the source file.  This is useful when identifying
     variables that are expected to be removed in a future version of a
     program.  The warning also includes the location of the declaration
     of the deprecated variable, to enable users to easily find further
     information about why the variable is deprecated, or what they
     should do instead.  Note that the warning only occurs for uses:

          extern int old_var __attribute__ ((deprecated));
          extern int old_var;
          int new_fn () { return old_var; }

     results in a warning on line 3 but not line 2.  The optional MSG
     argument, which must be a string, is printed in the warning if
     present.

     The 'deprecated' attribute can also be used for functions and types
     (*note Function Attributes::, *note Type Attributes::.)

'mode (MODE)'
     This attribute specifies the data type for the
     declaration--whichever type corresponds to the mode MODE.  This in
     effect lets you request an integer or floating-point type according
     to its width.

     You may also specify a mode of 'byte' or '__byte__' to indicate the
     mode corresponding to a one-byte integer, 'word' or '__word__' for
     the mode of a one-word integer, and 'pointer' or '__pointer__' for
     the mode used to represent pointers.

'packed'
     The 'packed' attribute specifies that a variable or structure field
     should have the smallest possible alignment--one byte for a
     variable, and one bit for a field, unless you specify a larger
     value with the 'aligned' attribute.

     Here is a structure in which the field 'x' is packed, so that it
     immediately follows 'a':

          struct foo
          {
            char a;
            int x[2] __attribute__ ((packed));
          };

     _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed'
     attribute on bit-fields of type 'char'.  This has been fixed in GCC
     4.4 but the change can lead to differences in the structure layout.
     See the documentation of '-Wpacked-bitfield-compat' for more
     information.

'section ("SECTION-NAME")'
     Normally, the compiler places the objects it generates in sections
     like 'data' and 'bss'.  Sometimes, however, you need additional
     sections, or you need certain particular variables to appear in
     special sections, for example to map to special hardware.  The
     'section' attribute specifies that a variable (or function) lives
     in a particular section.  For example, this small program uses
     several specific section names:

          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
          int init_data __attribute__ ((section ("INITDATA")));

          main()
          {
            /* Initialize stack pointer */
            init_sp (stack + sizeof (stack));

            /* Initialize initialized data */
            memcpy (&init_data, &data, &edata - &data);

            /* Turn on the serial ports */
            init_duart (&a);
            init_duart (&b);
          }

     Use the 'section' attribute with _global_ variables and not _local_
     variables, as shown in the example.

     You may use the 'section' attribute with initialized or
     uninitialized global variables but the linker requires each object
     be defined once, with the exception that uninitialized variables
     tentatively go in the 'common' (or 'bss') section and can be
     multiply "defined".  Using the 'section' attribute changes what
     section the variable goes into and may cause the linker to issue an
     error if an uninitialized variable has multiple definitions.  You
     can force a variable to be initialized with the '-fno-common' flag
     or the 'nocommon' attribute.

     Some file formats do not support arbitrary sections so the
     'section' attribute is not available on all platforms.  If you need
     to map the entire contents of a module to a particular section,
     consider using the facilities of the linker instead.

'shared'
     On Microsoft Windows, in addition to putting variable definitions
     in a named section, the section can also be shared among all
     running copies of an executable or DLL.  For example, this small
     program defines shared data by putting it in a named section
     'shared' and marking the section shareable:

          int foo __attribute__((section ("shared"), shared)) = 0;

          int
          main()
          {
            /* Read and write foo.  All running
               copies see the same value.  */
            return 0;
          }

     You may only use the 'shared' attribute along with 'section'
     attribute with a fully-initialized global definition because of the
     way linkers work.  See 'section' attribute for more information.

     The 'shared' attribute is only available on Microsoft Windows.

'tls_model ("TLS_MODEL")'
     The 'tls_model' attribute sets thread-local storage model (*note
     Thread-Local::) of a particular '__thread' variable, overriding
     '-ftls-model=' command-line switch on a per-variable basis.  The
     TLS_MODEL argument should be one of 'global-dynamic',
     'local-dynamic', 'initial-exec' or 'local-exec'.

     Not all targets support this attribute.

'unused'
     This attribute, attached to a variable, means that the variable is
     meant to be possibly unused.  GCC does not produce a warning for
     this variable.

'used'
     This attribute, attached to a variable with static storage, means
     that the variable must be emitted even if it appears that the
     variable is not referenced.

     When applied to a static data member of a C++ class template, the
     attribute also means that the member is instantiated if the class
     itself is instantiated.

'vector_size (BYTES)'
     This attribute specifies the vector size for the variable, measured
     in bytes.  For example, the declaration:

          int foo __attribute__ ((vector_size (16)));

     causes the compiler to set the mode for 'foo', to be 16 bytes,
     divided into 'int' sized units.  Assuming a 32-bit int (a vector of
     4 units of 4 bytes), the corresponding mode of 'foo' is V4SI.

     This attribute is only applicable to integral and float scalars,
     although arrays, pointers, and function return values are allowed
     in conjunction with this construct.

     Aggregates with this attribute are invalid, even if they are of the
     same size as a corresponding scalar.  For example, the declaration:

          struct S { int a; };
          struct S  __attribute__ ((vector_size (16))) foo;

     is invalid even if the size of the structure is the same as the
     size of the 'int'.

'selectany'
     The 'selectany' attribute causes an initialized global variable to
     have link-once semantics.  When multiple definitions of the
     variable are encountered by the linker, the first is selected and
     the remainder are discarded.  Following usage by the Microsoft
     compiler, the linker is told _not_ to warn about size or content
     differences of the multiple definitions.

     Although the primary usage of this attribute is for POD types, the
     attribute can also be applied to global C++ objects that are
     initialized by a constructor.  In this case, the static
     initialization and destruction code for the object is emitted in
     each translation defining the object, but the calls to the
     constructor and destructor are protected by a link-once guard
     variable.

     The 'selectany' attribute is only available on Microsoft Windows
     targets.  You can use '__declspec (selectany)' as a synonym for
     '__attribute__ ((selectany))' for compatibility with other
     compilers.

'weak'
     The 'weak' attribute is described in *note Function Attributes::.

'dllimport'
     The 'dllimport' attribute is described in *note Function
     Attributes::.

'dllexport'
     The 'dllexport' attribute is described in *note Function
     Attributes::.

6.38.1 AVR Variable Attributes
------------------------------

'progmem'
     The 'progmem' attribute is used on the AVR to place read-only data
     in the non-volatile program memory (flash).  The 'progmem'
     attribute accomplishes this by putting respective variables into a
     section whose name starts with '.progmem'.

     This attribute works similar to the 'section' attribute but adds
     additional checking.  Notice that just like the 'section'
     attribute, 'progmem' affects the location of the data but not how
     this data is accessed.

     In order to read data located with the 'progmem' attribute (inline)
     assembler must be used.
          /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */
          #include <avr/pgmspace.h>

          /* Locate var in flash memory */
          const int var[2] PROGMEM = { 1, 2 };

          int read_var (int i)
          {
              /* Access var[] by accessor macro from avr/pgmspace.h */
              return (int) pgm_read_word (& var[i]);
          }

     AVR is a Harvard architecture processor and data and read-only data
     normally resides in the data memory (RAM).

     See also the *note AVR Named Address Spaces:: section for an
     alternate way to locate and access data in flash memory.

'io'
'io (ADDR)'
     Variables with the 'io' attribute are used to address memory-mapped
     peripherals in the io address range.  If an address is specified,
     the variable is assigned that address, and the value is interpreted
     as an address in the data address space.  Example:

          volatile int porta __attribute__((io (0x22)));

     The address specified in the address in the data address range.

     Otherwise, the variable it is not assigned an address, but the
     compiler will still use in/out instructions where applicable,
     assuming some other module assigns an address in the io address
     range.  Example:

          extern volatile int porta __attribute__((io));

'io_low'
'io_low (ADDR)'
     This is like the 'io' attribute, but additionally it informs the
     compiler that the object lies in the lower half of the I/O area,
     allowing the use of 'cbi', 'sbi', 'sbic' and 'sbis' instructions.

'address'
'address (ADDR)'
     Variables with the 'address' attribute are used to address
     memory-mapped peripherals that may lie outside the io address
     range.

          volatile int porta __attribute__((address (0x600)));

6.38.2 Blackfin Variable Attributes
-----------------------------------

Three attributes are currently defined for the Blackfin.

'l1_data'
'l1_data_A'
'l1_data_B'
     Use these attributes on the Blackfin to place the variable into L1
     Data SRAM. Variables with 'l1_data' attribute are put into the
     specific section named '.l1.data'.  Those with 'l1_data_A'
     attribute are put into the specific section named '.l1.data.A'.
     Those with 'l1_data_B' attribute are put into the specific section
     named '.l1.data.B'.

'l2'
     Use this attribute on the Blackfin to place the variable into L2
     SRAM. Variables with 'l2' attribute are put into the specific
     section named '.l2.data'.

6.38.3 H8/300 Variable Attributes
---------------------------------

These variable attributes are available for H8/300 targets:

'eightbit_data'
     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
     the specified variable should be placed into the eight-bit data
     section.  The compiler generates more efficient code for certain
     operations on data in the eight-bit data area.  Note the eight-bit
     data area is limited to 256 bytes of data.

     You must use GAS and GLD from GNU binutils version 2.7 or later for
     this attribute to work correctly.

'tiny_data'
     Use this attribute on the H8/300H and H8S to indicate that the
     specified variable should be placed into the tiny data section.
     The compiler generates more efficient code for loads and stores on
     data in the tiny data section.  Note the tiny data area is limited
     to slightly under 32KB of data.

6.38.4 IA-64 Variable Attributes
--------------------------------

The IA-64 back end supports the following variable attribute:

'model (MODEL-NAME)'

     On IA-64, use this attribute to set the addressability of an
     object.  At present, the only supported identifier for MODEL-NAME
     is 'small', indicating addressability via "small" (22-bit)
     addresses (so that their addresses can be loaded with the 'addl'
     instruction).  Caveat: such addressing is by definition not
     position independent and hence this attribute must not be used for
     objects defined by shared libraries.

6.38.5 M32R/D Variable Attributes
---------------------------------

One attribute is currently defined for the M32R/D.

'model (MODEL-NAME)'
     Use this attribute on the M32R/D to set the addressability of an
     object.  The identifier MODEL-NAME is one of 'small', 'medium', or
     'large', representing each of the code models.

     Small model objects live in the lower 16MB of memory (so that their
     addresses can be loaded with the 'ld24' instruction).

     Medium and large model objects may live anywhere in the 32-bit
     address space (the compiler generates 'seth/add3' instructions to
     load their addresses).

6.38.6 MeP Variable Attributes
------------------------------

The MeP target has a number of addressing modes and busses.  The 'near'
space spans the standard memory space's first 16 megabytes (24 bits).
The 'far' space spans the entire 32-bit memory space.  The 'based' space
is a 128-byte region in the memory space that is addressed relative to
the '$tp' register.  The 'tiny' space is a 65536-byte region relative to
the '$gp' register.  In addition to these memory regions, the MeP target
has a separate 16-bit control bus which is specified with 'cb'
attributes.

'based'
     Any variable with the 'based' attribute is assigned to the '.based'
     section, and is accessed with relative to the '$tp' register.

'tiny'
     Likewise, the 'tiny' attribute assigned variables to the '.tiny'
     section, relative to the '$gp' register.

'near'
     Variables with the 'near' attribute are assumed to have addresses
     that fit in a 24-bit addressing mode.  This is the default for
     large variables ('-mtiny=4' is the default) but this attribute can
     override '-mtiny=' for small variables, or override '-ml'.

'far'
     Variables with the 'far' attribute are addressed using a full
     32-bit address.  Since this covers the entire memory space, this
     allows modules to make no assumptions about where variables might
     be stored.

'io'
'io (ADDR)'
     Variables with the 'io' attribute are used to address memory-mapped
     peripherals.  If an address is specified, the variable is assigned
     that address, else it is not assigned an address (it is assumed
     some other module assigns an address).  Example:

          int timer_count __attribute__((io(0x123)));

'cb'
'cb (ADDR)'
     Variables with the 'cb' attribute are used to access the control
     bus, using special instructions.  'addr' indicates the control bus
     address.  Example:

          int cpu_clock __attribute__((cb(0x123)));

6.38.7 PowerPC Variable Attributes
----------------------------------

Three attributes currently are defined for PowerPC configurations:
'altivec', 'ms_struct' and 'gcc_struct'.

 For full documentation of the struct attributes please see the
documentation in *note x86 Variable Attributes::.

 For documentation of 'altivec' attribute please see the documentation
in *note PowerPC Type Attributes::.

6.38.8 SPU Variable Attributes
------------------------------

The SPU supports the 'spu_vector' attribute for variables.  For
documentation of this attribute please see the documentation in *note
SPU Type Attributes::.

6.38.9 x86 Variable Attributes
------------------------------

Two attributes are currently defined for x86 configurations: 'ms_struct'
and 'gcc_struct'.

'ms_struct'
'gcc_struct'

     If 'packed' is used on a structure, or if bit-fields are used, it
     may be that the Microsoft ABI lays out the structure differently
     than the way GCC normally does.  Particularly when moving packed
     data between functions compiled with GCC and the native Microsoft
     compiler (either via function call or as data in a file), it may be
     necessary to access either format.

     Currently '-m[no-]ms-bitfields' is provided for the Microsoft
     Windows x86 compilers to match the native Microsoft compiler.

     The Microsoft structure layout algorithm is fairly simple with the
     exception of the bit-field packing.  The padding and alignment of
     members of structures and whether a bit-field can straddle a
     storage-unit boundary are determine by these rules:

       1. Structure members are stored sequentially in the order in
          which they are declared: the first member has the lowest
          memory address and the last member the highest.

       2. Every data object has an alignment requirement.  The alignment
          requirement for all data except structures, unions, and arrays
          is either the size of the object or the current packing size
          (specified with either the 'aligned' attribute or the 'pack'
          pragma), whichever is less.  For structures, unions, and
          arrays, the alignment requirement is the largest alignment
          requirement of its members.  Every object is allocated an
          offset so that:

               offset % alignment_requirement == 0

       3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte
          allocation unit if the integral types are the same size and if
          the next bit-field fits into the current allocation unit
          without crossing the boundary imposed by the common alignment
          requirements of the bit-fields.

     MSVC interprets zero-length bit-fields in the following ways:

       1. If a zero-length bit-field is inserted between two bit-fields
          that are normally coalesced, the bit-fields are not coalesced.

          For example:

               struct
                {
                  unsigned long bf_1 : 12;
                  unsigned long : 0;
                  unsigned long bf_2 : 12;
                } t1;

          The size of 't1' is 8 bytes with the zero-length bit-field.
          If the zero-length bit-field were removed, 't1''s size would
          be 4 bytes.

       2. If a zero-length bit-field is inserted after a bit-field,
          'foo', and the alignment of the zero-length bit-field is
          greater than the member that follows it, 'bar', 'bar' is
          aligned as the type of the zero-length bit-field.

          For example:

               struct
                {
                  char foo : 4;
                  short : 0;
                  char bar;
                } t2;

               struct
                {
                  char foo : 4;
                  short : 0;
                  double bar;
                } t3;

          For 't2', 'bar' is placed at offset 2, rather than offset 1.
          Accordingly, the size of 't2' is 4.  For 't3', the zero-length
          bit-field does not affect the alignment of 'bar' or, as a
          result, the size of the structure.

          Taking this into account, it is important to note the
          following:

            1. If a zero-length bit-field follows a normal bit-field,
               the type of the zero-length bit-field may affect the
               alignment of the structure as whole.  For example, 't2'
               has a size of 4 bytes, since the zero-length bit-field
               follows a normal bit-field, and is of type short.

            2. Even if a zero-length bit-field is not followed by a
               normal bit-field, it may still affect the alignment of
               the structure:

                    struct
                     {
                       char foo : 6;
                       long : 0;
                     } t4;

               Here, 't4' takes up 4 bytes.

       3. Zero-length bit-fields following non-bit-field members are
          ignored:

               struct
                {
                  char foo;
                  long : 0;
                  char bar;
                } t5;

          Here, 't5' takes up 2 bytes.

6.38.10 Xstormy16 Variable Attributes
-------------------------------------

One attribute is currently defined for xstormy16 configurations:
'below100'.

'below100'

     If a variable has the 'below100' attribute ('BELOW100' is allowed
     also), GCC places the variable in the first 0x100 bytes of memory
     and use special opcodes to access it.  Such variables are placed in
     either the '.bss_below100' section or the '.data_below100' section.


File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions

6.39 Specifying Attributes of Types
===================================

The keyword '__attribute__' allows you to specify special attributes of
'struct' and 'union' types when you define such types.  This keyword is
followed by an attribute specification inside double parentheses.  Eight
attributes are currently defined for types: 'aligned', 'packed',
'transparent_union', 'unused', 'deprecated', 'visibility', 'may_alias'
and 'bnd_variable_size'.  Other attributes are defined for functions
(*note Function Attributes::), labels (*note Label Attributes::) and for
variables (*note Variable Attributes::).

 You may also specify any one of these attributes with '__' preceding
and following its keyword.  This allows you to use these attributes in
header files without being concerned about a possible macro of the same
name.  For example, you may use '__aligned__' instead of 'aligned'.

 You may specify type attributes in an enum, struct or union type
declaration or definition, or for other types in a 'typedef'
declaration.

 For an enum, struct or union type, you may specify attributes either
between the enum, struct or union tag and the name of the type, or just
past the closing curly brace of the _definition_.  The former syntax is
preferred.

 *Note Attribute Syntax::, for details of the exact syntax for using
attributes.

'aligned (ALIGNMENT)'
     This attribute specifies a minimum alignment (in bytes) for
     variables of the specified type.  For example, the declarations:

          struct S { short f[3]; } __attribute__ ((aligned (8)));
          typedef int more_aligned_int __attribute__ ((aligned (8)));

     force the compiler to ensure (as far as it can) that each variable
     whose type is 'struct S' or 'more_aligned_int' is allocated and
     aligned _at least_ on a 8-byte boundary.  On a SPARC, having all
     variables of type 'struct S' aligned to 8-byte boundaries allows
     the compiler to use the 'ldd' and 'std' (doubleword load and store)
     instructions when copying one variable of type 'struct S' to
     another, thus improving run-time efficiency.

     Note that the alignment of any given 'struct' or 'union' type is
     required by the ISO C standard to be at least a perfect multiple of
     the lowest common multiple of the alignments of all of the members
     of the 'struct' or 'union' in question.  This means that you _can_
     effectively adjust the alignment of a 'struct' or 'union' type by
     attaching an 'aligned' attribute to any one of the members of such
     a type, but the notation illustrated in the example above is a more
     obvious, intuitive, and readable way to request the compiler to
     adjust the alignment of an entire 'struct' or 'union' type.

     As in the preceding example, you can explicitly specify the
     alignment (in bytes) that you wish the compiler to use for a given
     'struct' or 'union' type.  Alternatively, you can leave out the
     alignment factor and just ask the compiler to align a type to the
     maximum useful alignment for the target machine you are compiling
     for.  For example, you could write:

          struct S { short f[3]; } __attribute__ ((aligned));

     Whenever you leave out the alignment factor in an 'aligned'
     attribute specification, the compiler automatically sets the
     alignment for the type to the largest alignment that is ever used
     for any data type on the target machine you are compiling for.
     Doing this can often make copy operations more efficient, because
     the compiler can use whatever instructions copy the biggest chunks
     of memory when performing copies to or from the variables that have
     types that you have aligned this way.

     In the example above, if the size of each 'short' is 2 bytes, then
     the size of the entire 'struct S' type is 6 bytes.  The smallest
     power of two that is greater than or equal to that is 8, so the
     compiler sets the alignment for the entire 'struct S' type to 8
     bytes.

     Note that although you can ask the compiler to select a
     time-efficient alignment for a given type and then declare only
     individual stand-alone objects of that type, the compiler's ability
     to select a time-efficient alignment is primarily useful only when
     you plan to create arrays of variables having the relevant
     (efficiently aligned) type.  If you declare or use arrays of
     variables of an efficiently-aligned type, then it is likely that
     your program also does pointer arithmetic (or subscripting, which
     amounts to the same thing) on pointers to the relevant type, and
     the code that the compiler generates for these pointer arithmetic
     operations is often more efficient for efficiently-aligned types
     than for other types.

     The 'aligned' attribute can only increase the alignment; but you
     can decrease it by specifying 'packed' as well.  See below.

     Note that the effectiveness of 'aligned' attributes may be limited
     by inherent limitations in your linker.  On many systems, the
     linker is only able to arrange for variables to be aligned up to a
     certain maximum alignment.  (For some linkers, the maximum
     supported alignment may be very very small.)  If your linker is
     only able to align variables up to a maximum of 8-byte alignment,
     then specifying 'aligned(16)' in an '__attribute__' still only
     provides you with 8-byte alignment.  See your linker documentation
     for further information.

'packed'
     This attribute, attached to 'struct' or 'union' type definition,
     specifies that each member (other than zero-width bit-fields) of
     the structure or union is placed to minimize the memory required.
     When attached to an 'enum' definition, it indicates that the
     smallest integral type should be used.

     Specifying this attribute for 'struct' and 'union' types is
     equivalent to specifying the 'packed' attribute on each of the
     structure or union members.  Specifying the '-fshort-enums' flag on
     the line is equivalent to specifying the 'packed' attribute on all
     'enum' definitions.

     In the following example 'struct my_packed_struct''s members are
     packed closely together, but the internal layout of its 's' member
     is not packed--to do that, 'struct my_unpacked_struct' needs to be
     packed too.

          struct my_unpacked_struct
           {
              char c;
              int i;
           };

          struct __attribute__ ((__packed__)) my_packed_struct
            {
               char c;
               int  i;
               struct my_unpacked_struct s;
            };

     You may only specify this attribute on the definition of an 'enum',
     'struct' or 'union', not on a 'typedef' that does not also define
     the enumerated type, structure or union.

'transparent_union'

     This attribute, attached to a 'union' type definition, indicates
     that any function parameter having that union type causes calls to
     that function to be treated in a special way.

     First, the argument corresponding to a transparent union type can
     be of any type in the union; no cast is required.  Also, if the
     union contains a pointer type, the corresponding argument can be a
     null pointer constant or a void pointer expression; and if the
     union contains a void pointer type, the corresponding argument can
     be any pointer expression.  If the union member type is a pointer,
     qualifiers like 'const' on the referenced type must be respected,
     just as with normal pointer conversions.

     Second, the argument is passed to the function using the calling
     conventions of the first member of the transparent union, not the
     calling conventions of the union itself.  All members of the union
     must have the same machine representation; this is necessary for
     this argument passing to work properly.

     Transparent unions are designed for library functions that have
     multiple interfaces for compatibility reasons.  For example,
     suppose the 'wait' function must accept either a value of type 'int
     *' to comply with POSIX, or a value of type 'union wait *' to
     comply with the 4.1BSD interface.  If 'wait''s parameter were 'void
     *', 'wait' would accept both kinds of arguments, but it would also
     accept any other pointer type and this would make argument type
     checking less useful.  Instead, '<sys/wait.h>' might define the
     interface as follows:

          typedef union __attribute__ ((__transparent_union__))
            {
              int *__ip;
              union wait *__up;
            } wait_status_ptr_t;

          pid_t wait (wait_status_ptr_t);

     This interface allows either 'int *' or 'union wait *' arguments to
     be passed, using the 'int *' calling convention.  The program can
     call 'wait' with arguments of either type:

          int w1 () { int w; return wait (&w); }
          int w2 () { union wait w; return wait (&w); }

     With this interface, 'wait''s implementation might look like this:

          pid_t wait (wait_status_ptr_t p)
          {
            return waitpid (-1, p.__ip, 0);
          }

'unused'
     When attached to a type (including a 'union' or a 'struct'), this
     attribute means that variables of that type are meant to appear
     possibly unused.  GCC does not produce a warning for any variables
     of that type, even if the variable appears to do nothing.  This is
     often the case with lock or thread classes, which are usually
     defined and then not referenced, but contain constructors and
     destructors that have nontrivial bookkeeping functions.

'deprecated'
'deprecated (MSG)'
     The 'deprecated' attribute results in a warning if the type is used
     anywhere in the source file.  This is useful when identifying types
     that are expected to be removed in a future version of a program.
     If possible, the warning also includes the location of the
     declaration of the deprecated type, to enable users to easily find
     further information about why the type is deprecated, or what they
     should do instead.  Note that the warnings only occur for uses and
     then only if the type is being applied to an identifier that itself
     is not being declared as deprecated.

          typedef int T1 __attribute__ ((deprecated));
          T1 x;
          typedef T1 T2;
          T2 y;
          typedef T1 T3 __attribute__ ((deprecated));
          T3 z __attribute__ ((deprecated));

     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
     warning is issued for line 4 because T2 is not explicitly
     deprecated.  Line 5 has no warning because T3 is explicitly
     deprecated.  Similarly for line 6.  The optional MSG argument,
     which must be a string, is printed in the warning if present.

     The 'deprecated' attribute can also be used for functions and
     variables (*note Function Attributes::, *note Variable
     Attributes::.)

'may_alias'
     Accesses through pointers to types with this attribute are not
     subject to type-based alias analysis, but are instead assumed to be
     able to alias any other type of objects.  In the context of section
     6.5 paragraph 7 of the C99 standard, an lvalue expression
     dereferencing such a pointer is treated like having a character
     type.  See '-fstrict-aliasing' for more information on aliasing
     issues.  This extension exists to support some vector APIs, in
     which pointers to one vector type are permitted to alias pointers
     to a different vector type.

     Note that an object of a type with this attribute does not have any
     special semantics.

     Example of use:

          typedef short __attribute__((__may_alias__)) short_a;

          int
          main (void)
          {
            int a = 0x12345678;
            short_a *b = (short_a *) &a;

            b[1] = 0;

            if (a == 0x12345678)
              abort();

            exit(0);
          }

     If you replaced 'short_a' with 'short' in the variable declaration,
     the above program would abort when compiled with
     '-fstrict-aliasing', which is on by default at '-O2' or above.

'visibility'
     In C++, attribute visibility (*note Function Attributes::) can also
     be applied to class, struct, union and enum types.  Unlike other
     type attributes, the attribute must appear between the initial
     keyword and the name of the type; it cannot appear after the body
     of the type.

     Note that the type visibility is applied to vague linkage entities
     associated with the class (vtable, typeinfo node, etc.).  In
     particular, if a class is thrown as an exception in one shared
     object and caught in another, the class must have default
     visibility.  Otherwise the two shared objects are unable to use the
     same typeinfo node and exception handling will break.

'designated_init'
     This attribute may only be applied to structure types.  It
     indicates that any initialization of an object of this type must
     use designated initializers rather than positional initializers.
     The intent of this attribute is to allow the programmer to indicate
     that a structure's layout may change, and that therefore relying on
     positional initialization will result in future breakage.

     GCC emits warnings based on this attribute by default; use
     '-Wno-designated-init' to suppress them.

'bnd_variable_size'
     When applied to a structure field, this attribute tells Pointer
     Bounds Checker that the size of this field should not be computed
     using static type information.  It may be used to mark
     variably-sized static array fields placed at the end of a
     structure.

          struct S
          {
            int size;
            char data[1];
          }
          S *p = (S *)malloc (sizeof(S) + 100);
          p->data[10] = 0; //Bounds violation

     By using an attribute for the field we may avoid unwanted bound
     violation checks:

          struct S
          {
            int size;
            char data[1] __attribute__((bnd_variable_size));
          }
          S *p = (S *)malloc (sizeof(S) + 100);
          p->data[10] = 0; //OK

 To specify multiple attributes, separate them by commas within the
double parentheses: for example, '__attribute__ ((aligned (16),
packed))'.

6.39.1 ARM Type Attributes
--------------------------

On those ARM targets that support 'dllimport' (such as Symbian OS), you
can use the 'notshared' attribute to indicate that the virtual table and
other similar data for a class should not be exported from a DLL.  For
example:

     class __declspec(notshared) C {
     public:
       __declspec(dllimport) C();
       virtual void f();
     }

     __declspec(dllexport)
     C::C() {}

In this code, 'C::C' is exported from the current DLL, but the virtual
table for 'C' is not exported.  (You can use '__attribute__' instead of
'__declspec' if you prefer, but most Symbian OS code uses '__declspec'.)

6.39.2 MeP Type Attributes
--------------------------

Many of the MeP variable attributes may be applied to types as well.
Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be
applied to either.  The 'io' and 'cb' attributes may not be applied to
types.

6.39.3 PowerPC Type Attributes
------------------------------

Three attributes currently are defined for PowerPC configurations:
'altivec', 'ms_struct' and 'gcc_struct'.

 For full documentation of the 'ms_struct' and 'gcc_struct' attributes
please see the documentation in *note x86 Type Attributes::.

 The 'altivec' attribute allows one to declare AltiVec vector data types
supported by the AltiVec Programming Interface Manual.  The attribute
requires an argument to specify one of three vector types: 'vector__',
'pixel__' (always followed by unsigned short), and 'bool__' (always
followed by unsigned).

     __attribute__((altivec(vector__)))
     __attribute__((altivec(pixel__))) unsigned short
     __attribute__((altivec(bool__))) unsigned

 These attributes mainly are intended to support the '__vector',
'__pixel', and '__bool' AltiVec keywords.

6.39.4 SPU Type Attributes
--------------------------

The SPU supports the 'spu_vector' attribute for types.  This attribute
allows one to declare vector data types supported by the
Sony/Toshiba/IBM SPU Language Extensions Specification.  It is intended
to support the '__vector' keyword.

6.39.5 x86 Type Attributes
--------------------------

Two attributes are currently defined for x86 configurations: 'ms_struct'
and 'gcc_struct'.

'ms_struct'
'gcc_struct'

     If 'packed' is used on a structure, or if bit-fields are used it
     may be that the Microsoft ABI packs them differently than GCC
     normally packs them.  Particularly when moving packed data between
     functions compiled with GCC and the native Microsoft compiler
     (either via function call or as data in a file), it may be
     necessary to access either format.

     Currently '-m[no-]ms-bitfields' is provided for the Microsoft
     Windows x86 compilers to match the native Microsoft compiler.


File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions

6.40 Inquiring on Alignment of Types or Variables
=================================================

The keyword '__alignof__' allows you to inquire about how an object is
aligned, or the minimum alignment usually required by a type.  Its
syntax is just like 'sizeof'.

 For example, if the target machine requires a 'double' value to be
aligned on an 8-byte boundary, then '__alignof__ (double)' is 8.  This
is true on many RISC machines.  On more traditional machine designs,
'__alignof__ (double)' is 4 or even 2.

 Some machines never actually require alignment; they allow reference to
any data type even at an odd address.  For these machines, '__alignof__'
reports the smallest alignment that GCC gives the data type, usually as
mandated by the target ABI.

 If the operand of '__alignof__' is an lvalue rather than a type, its
value is the required alignment for its type, taking into account any
minimum alignment specified with GCC's '__attribute__' extension (*note
Variable Attributes::).  For example, after this declaration:

     struct foo { int x; char y; } foo1;

the value of '__alignof__ (foo1.y)' is 1, even though its actual
alignment is probably 2 or 4, the same as '__alignof__ (int)'.

 It is an error to ask for the alignment of an incomplete type.


File: gcc.info,  Node: Inline,  Next: Volatiles,  Prev: Alignment,  Up: C Extensions

6.41 An Inline Function is As Fast As a Macro
=============================================

By declaring a function inline, you can direct GCC to make calls to that
function faster.  One way GCC can achieve this is to integrate that
function's code into the code for its callers.  This makes execution
faster by eliminating the function-call overhead; in addition, if any of
the actual argument values are constant, their known values may permit
simplifications at compile time so that not all of the inline function's
code needs to be included.  The effect on code size is less predictable;
object code may be larger or smaller with function inlining, depending
on the particular case.  You can also direct GCC to try to integrate all
"simple enough" functions into their callers with the option
'-finline-functions'.

 GCC implements three different semantics of declaring a function
inline.  One is available with '-std=gnu89' or '-fgnu89-inline' or when
'gnu_inline' attribute is present on all inline declarations, another
when '-std=c99', '-std=c11', '-std=gnu99' or '-std=gnu11' (without
'-fgnu89-inline'), and the third is used when compiling C++.

 To declare a function inline, use the 'inline' keyword in its
declaration, like this:

     static inline int
     inc (int *a)
     {
       return (*a)++;
     }

 If you are writing a header file to be included in ISO C90 programs,
write '__inline__' instead of 'inline'.  *Note Alternate Keywords::.

 The three types of inlining behave similarly in two important cases:
when the 'inline' keyword is used on a 'static' function, like the
example above, and when a function is first declared without using the
'inline' keyword and then is defined with 'inline', like this:

     extern int inc (int *a);
     inline int
     inc (int *a)
     {
       return (*a)++;
     }

 In both of these common cases, the program behaves the same as if you
had not used the 'inline' keyword, except for its speed.

 When a function is both inline and 'static', if all calls to the
function are integrated into the caller, and the function's address is
never used, then the function's own assembler code is never referenced.
In this case, GCC does not actually output assembler code for the
function, unless you specify the option '-fkeep-inline-functions'.  Some
calls cannot be integrated for various reasons (in particular, calls
that precede the function's definition cannot be integrated, and neither
can recursive calls within the definition).  If there is a nonintegrated
call, then the function is compiled to assembler code as usual.  The
function must also be compiled as usual if the program refers to its
address, because that can't be inlined.

 Note that certain usages in a function definition can make it
unsuitable for inline substitution.  Among these usages are: variadic
functions, use of 'alloca', use of variable-length data types (*note
Variable Length::), use of computed goto (*note Labels as Values::), use
of nonlocal goto, and nested functions (*note Nested Functions::).
Using '-Winline' warns when a function marked 'inline' could not be
substituted, and gives the reason for the failure.

 As required by ISO C++, GCC considers member functions defined within
the body of a class to be marked inline even if they are not explicitly
declared with the 'inline' keyword.  You can override this with
'-fno-default-inline'; *note Options Controlling C++ Dialect: C++
Dialect Options.

 GCC does not inline any functions when not optimizing unless you
specify the 'always_inline' attribute for the function, like this:

     /* Prototype.  */
     inline void foo (const char) __attribute__((always_inline));

 The remainder of this section is specific to GNU C90 inlining.

 When an inline function is not 'static', then the compiler must assume
that there may be calls from other source files; since a global symbol
can be defined only once in any program, the function must not be
defined in the other source files, so the calls therein cannot be
integrated.  Therefore, a non-'static' inline function is always
compiled on its own in the usual fashion.

 If you specify both 'inline' and 'extern' in the function definition,
then the definition is used only for inlining.  In no case is the
function compiled on its own, not even if you refer to its address
explicitly.  Such an address becomes an external reference, as if you
had only declared the function, and had not defined it.

 This combination of 'inline' and 'extern' has almost the effect of a
macro.  The way to use it is to put a function definition in a header
file with these keywords, and put another copy of the definition
(lacking 'inline' and 'extern') in a library file.  The definition in
the header file causes most calls to the function to be inlined.  If any
uses of the function remain, they refer to the single copy in the
library.


File: gcc.info,  Node: Volatiles,  Next: Using Assembly Language with C,  Prev: Inline,  Up: C Extensions

6.42 When is a Volatile Object Accessed?
========================================

C has the concept of volatile objects.  These are normally accessed by
pointers and used for accessing hardware or inter-thread communication.
The standard encourages compilers to refrain from optimizations
concerning accesses to volatile objects, but leaves it implementation
defined as to what constitutes a volatile access.  The minimum
requirement is that at a sequence point all previous accesses to
volatile objects have stabilized and no subsequent accesses have
occurred.  Thus an implementation is free to reorder and combine
volatile accesses that occur between sequence points, but cannot do so
for accesses across a sequence point.  The use of volatile does not
allow you to violate the restriction on updating objects multiple times
between two sequence points.

 Accesses to non-volatile objects are not ordered with respect to
volatile accesses.  You cannot use a volatile object as a memory barrier
to order a sequence of writes to non-volatile memory.  For instance:

     int *ptr = SOMETHING;
     volatile int vobj;
     *ptr = SOMETHING;
     vobj = 1;

Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write
to *PTR occurs by the time the update of VOBJ happens.  If you need this
guarantee, you must use a stronger memory barrier such as:

     int *ptr = SOMETHING;
     volatile int vobj;
     *ptr = SOMETHING;
     asm volatile ("" : : : "memory");
     vobj = 1;

 A scalar volatile object is read when it is accessed in a void context:

     volatile int *src = SOMEVALUE;
     *src;

 Such expressions are rvalues, and GCC implements this as a read of the
volatile object being pointed to.

 Assignments are also expressions and have an rvalue.  However when
assigning to a scalar volatile, the volatile object is not reread,
regardless of whether the assignment expression's rvalue is used or not.
If the assignment's rvalue is used, the value is that assigned to the
volatile object.  For instance, there is no read of VOBJ in all the
following cases:

     int obj;
     volatile int vobj;
     vobj = SOMETHING;
     obj = vobj = SOMETHING;
     obj ? vobj = ONETHING : vobj = ANOTHERTHING;
     obj = (SOMETHING, vobj = ANOTHERTHING);

 If you need to read the volatile object after an assignment has
occurred, you must use a separate expression with an intervening
sequence point.

 As bit-fields are not individually addressable, volatile bit-fields may
be implicitly read when written to, or when adjacent bit-fields are
accessed.  Bit-field operations may be optimized such that adjacent
bit-fields are only partially accessed, if they straddle a storage unit
boundary.  For these reasons it is unwise to use volatile bit-fields to
access hardware.


File: gcc.info,  Node: Using Assembly Language with C,  Next: Alternate Keywords,  Prev: Volatiles,  Up: C Extensions

6.43 How to Use Inline Assembly Language in C Code
==================================================

The 'asm' keyword allows you to embed assembler instructions within C
code.  GCC provides two forms of inline 'asm' statements.  A "basic
'asm'" statement is one with no operands (*note Basic Asm::), while an
"extended 'asm'" statement (*note Extended Asm::) includes one or more
operands.  The extended form is preferred for mixing C and assembly
language within a function, but to include assembly language at top
level you must use basic 'asm'.

 You can also use the 'asm' keyword to override the assembler name for a
C symbol, or to place a C variable in a specific register.

* Menu:

* Basic Asm::          Inline assembler without operands.
* Extended Asm::       Inline assembler with operands.
* Constraints::        Constraints for 'asm' operands
* Asm Labels::         Specifying the assembler name to use for a C symbol.
* Explicit Reg Vars::  Defining variables residing in specified registers.
* Size of an asm::     How GCC calculates the size of an 'asm' block.


File: gcc.info,  Node: Basic Asm,  Next: Extended Asm,  Up: Using Assembly Language with C

6.43.1 Basic Asm -- Assembler Instructions Without Operands
-----------------------------------------------------------

A basic 'asm' statement has the following syntax:

     asm [ volatile ] ( ASSEMBLERINSTRUCTIONS )

 The 'asm' keyword is a GNU extension.  When writing code that can be
compiled with '-ansi' and the various '-std' options, use '__asm__'
instead of 'asm' (*note Alternate Keywords::).

Qualifiers
..........

'volatile'
     The optional 'volatile' qualifier has no effect.  All basic 'asm'
     blocks are implicitly volatile.

Parameters
..........

ASSEMBLERINSTRUCTIONS
     This is a literal string that specifies the assembler code.  The
     string can contain any instructions recognized by the assembler,
     including directives.  GCC does not parse the assembler
     instructions themselves and does not know what they mean or even
     whether they are valid assembler input.

     You may place multiple assembler instructions together in a single
     'asm' string, separated by the characters normally used in assembly
     code for the system.  A combination that works in most places is a
     newline to break the line, plus a tab character (written as
     '\n\t').  Some assemblers allow semicolons as a line separator.
     However, note that some assembler dialects use semicolons to start
     a comment.

Remarks
.......

Using extended 'asm' typically produces smaller, safer, and more
efficient code, and in most cases it is a better solution than basic
'asm'.  However, there are two situations where only basic 'asm' can be
used:

   * Extended 'asm' statements have to be inside a C function, so to
     write inline assembly language at file scope ("top-level"), outside
     of C functions, you must use basic 'asm'.  You can use this
     technique to emit assembler directives, define assembly language
     macros that can be invoked elsewhere in the file, or write entire
     functions in assembly language.

   * Functions declared with the 'naked' attribute also require basic
     'asm' (*note Function Attributes::).

 Safely accessing C data and calling functions from basic 'asm' is more
complex than it may appear.  To access C data, it is better to use
extended 'asm'.

 Do not expect a sequence of 'asm' statements to remain perfectly
consecutive after compilation.  If certain instructions need to remain
consecutive in the output, put them in a single multi-instruction 'asm'
statement.  Note that GCC's optimizers can move 'asm' statements
relative to other code, including across jumps.

 'asm' statements may not perform jumps into other 'asm' statements.
GCC does not know about these jumps, and therefore cannot take account
of them when deciding how to optimize.  Jumps from 'asm' to C labels are
only supported in extended 'asm'.

 Under certain circumstances, GCC may duplicate (or remove duplicates
of) your assembly code when optimizing.  This can lead to unexpected
duplicate symbol errors during compilation if your assembly code defines
symbols or labels.

 Since GCC does not parse the ASSEMBLERINSTRUCTIONS, it has no
visibility of any symbols it references.  This may result in GCC
discarding those symbols as unreferenced.

 The compiler copies the assembler instructions in a basic 'asm'
verbatim to the assembly language output file, without processing
dialects or any of the '%' operators that are available with extended
'asm'.  This results in minor differences between basic 'asm' strings
and extended 'asm' templates.  For example, to refer to registers you
might use '%eax' in basic 'asm' and '%%eax' in extended 'asm'.

 On targets such as x86 that support multiple assembler dialects, all
basic 'asm' blocks use the assembler dialect specified by the '-masm'
command-line option (*note x86 Options::).  Basic 'asm' provides no
mechanism to provide different assembler strings for different dialects.

 Here is an example of basic 'asm' for i386:

     /* Note that this code will not compile with -masm=intel */
     #define DebugBreak() asm("int $3")


File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Basic Asm,  Up: Using Assembly Language with C

6.43.2 Extended Asm - Assembler Instructions with C Expression Operands
-----------------------------------------------------------------------

With extended 'asm' you can read and write C variables from assembler
and perform jumps from assembler code to C labels.  Extended 'asm'
syntax uses colons (':') to delimit the operand parameters after the
assembler template:

     asm [volatile] ( ASSEMBLERTEMPLATE
                      : OUTPUTOPERANDS
                      [ : INPUTOPERANDS
                      [ : CLOBBERS ] ])

     asm [volatile] goto ( ASSEMBLERTEMPLATE
                           :
                           : INPUTOPERANDS
                           : CLOBBERS
                           : GOTOLABELS)

 The 'asm' keyword is a GNU extension.  When writing code that can be
compiled with '-ansi' and the various '-std' options, use '__asm__'
instead of 'asm' (*note Alternate Keywords::).

Qualifiers
..........

'volatile'
     The typical use of extended 'asm' statements is to manipulate input
     values to produce output values.  However, your 'asm' statements
     may also produce side effects.  If so, you may need to use the
     'volatile' qualifier to disable certain optimizations.  *Note
     Volatile::.

'goto'
     This qualifier informs the compiler that the 'asm' statement may
     perform a jump to one of the labels listed in the GOTOLABELS.
     *Note GotoLabels::.

Parameters
..........

ASSEMBLERTEMPLATE
     This is a literal string that is the template for the assembler
     code.  It is a combination of fixed text and tokens that refer to
     the input, output, and goto parameters.  *Note AssemblerTemplate::.

OUTPUTOPERANDS
     A comma-separated list of the C variables modified by the
     instructions in the ASSEMBLERTEMPLATE.  An empty list is permitted.
     *Note OutputOperands::.

INPUTOPERANDS
     A comma-separated list of C expressions read by the instructions in
     the ASSEMBLERTEMPLATE.  An empty list is permitted.  *Note
     InputOperands::.

CLOBBERS
     A comma-separated list of registers or other values changed by the
     ASSEMBLERTEMPLATE, beyond those listed as outputs.  An empty list
     is permitted.  *Note Clobbers::.

GOTOLABELS
     When you are using the 'goto' form of 'asm', this section contains
     the list of all C labels to which the code in the ASSEMBLERTEMPLATE
     may jump.  *Note GotoLabels::.

     'asm' statements may not perform jumps into other 'asm' statements,
     only to the listed GOTOLABELS.  GCC's optimizers do not know about
     other jumps; therefore they cannot take account of them when
     deciding how to optimize.

 The total number of input + output + goto operands is limited to 30.

Remarks
.......

The 'asm' statement allows you to include assembly instructions directly
within C code.  This may help you to maximize performance in
time-sensitive code or to access assembly instructions that are not
readily available to C programs.

 Note that extended 'asm' statements must be inside a function.  Only
basic 'asm' may be outside functions (*note Basic Asm::).  Functions
declared with the 'naked' attribute also require basic 'asm' (*note
Function Attributes::).

 While the uses of 'asm' are many and varied, it may help to think of an
'asm' statement as a series of low-level instructions that convert input
parameters to output parameters.  So a simple (if not particularly
useful) example for i386 using 'asm' might look like this:

     int src = 1;
     int dst;

     asm ("mov %1, %0\n\t"
         "add $1, %0"
         : "=r" (dst)
         : "r" (src));

     printf("%d\n", dst);

 This code copies 'src' to 'dst' and add 1 to 'dst'.

6.43.2.1 Volatile
.................

GCC's optimizers sometimes discard 'asm' statements if they determine
there is no need for the output variables.  Also, the optimizers may
move code out of loops if they believe that the code will always return
the same result (i.e.  none of its input values change between calls).
Using the 'volatile' qualifier disables these optimizations.  'asm'
statements that have no output operands, including 'asm goto'
statements, are implicitly volatile.

 This i386 code demonstrates a case that does not use (or require) the
'volatile' qualifier.  If it is performing assertion checking, this code
uses 'asm' to perform the validation.  Otherwise, 'dwRes' is
unreferenced by any code.  As a result, the optimizers can discard the
'asm' statement, which in turn removes the need for the entire 'DoCheck'
routine.  By omitting the 'volatile' qualifier when it isn't needed you
allow the optimizers to produce the most efficient code possible.

     void DoCheck(uint32_t dwSomeValue)
     {
        uint32_t dwRes;

        // Assumes dwSomeValue is not zero.
        asm ("bsfl %1,%0"
          : "=r" (dwRes)
          : "r" (dwSomeValue)
          : "cc");

        assert(dwRes > 3);
     }

 The next example shows a case where the optimizers can recognize that
the input ('dwSomeValue') never changes during the execution of the
function and can therefore move the 'asm' outside the loop to produce
more efficient code.  Again, using 'volatile' disables this type of
optimization.

     void do_print(uint32_t dwSomeValue)
     {
        uint32_t dwRes;

        for (uint32_t x=0; x < 5; x++)
        {
           // Assumes dwSomeValue is not zero.
           asm ("bsfl %1,%0"
             : "=r" (dwRes)
             : "r" (dwSomeValue)
             : "cc");

           printf("%u: %u %u\n", x, dwSomeValue, dwRes);
        }
     }

 The following example demonstrates a case where you need to use the
'volatile' qualifier.  It uses the x86 'rdtsc' instruction, which reads
the computer's time-stamp counter.  Without the 'volatile' qualifier,
the optimizers might assume that the 'asm' block will always return the
same value and therefore optimize away the second call.

     uint64_t msr;

     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
             "or %%rdx, %0"        // 'Or' in the lower bits.
             : "=a" (msr)
             :
             : "rdx");

     printf("msr: %llx\n", msr);

     // Do other work...

     // Reprint the timestamp
     asm volatile ( "rdtsc\n\t"    // Returns the time in EDX:EAX.
             "shl $32, %%rdx\n\t"  // Shift the upper bits left.
             "or %%rdx, %0"        // 'Or' in the lower bits.
             : "=a" (msr)
             :
             : "rdx");

     printf("msr: %llx\n", msr);

 GCC's optimizers do not treat this code like the non-volatile code in
the earlier examples.  They do not move it out of loops or omit it on
the assumption that the result from a previous call is still valid.

 Note that the compiler can move even volatile 'asm' instructions
relative to other code, including across jump instructions.  For
example, on many targets there is a system register that controls the
rounding mode of floating-point operations.  Setting it with a volatile
'asm', as in the following PowerPC example, does not work reliably.

     asm volatile("mtfsf 255, %0" : : "f" (fpenv));
     sum = x + y;

 The compiler may move the addition back before the volatile 'asm'.  To
make it work as expected, add an artificial dependency to the 'asm' by
referencing a variable in the subsequent code, for example:

     asm volatile ("mtfsf 255,%1" : "=X" (sum) : "f" (fpenv));
     sum = x + y;

 Under certain circumstances, GCC may duplicate (or remove duplicates
of) your assembly code when optimizing.  This can lead to unexpected
duplicate symbol errors during compilation if your asm code defines
symbols or labels.  Using '%=' (*note AssemblerTemplate::) may help
resolve this problem.

6.43.2.2 Assembler Template
...........................

An assembler template is a literal string containing assembler
instructions.  The compiler replaces tokens in the template that refer
to inputs, outputs, and goto labels, and then outputs the resulting
string to the assembler.  The string can contain any instructions
recognized by the assembler, including directives.  GCC does not parse
the assembler instructions themselves and does not know what they mean
or even whether they are valid assembler input.  However, it does count
the statements (*note Size of an asm::).

 You may place multiple assembler instructions together in a single
'asm' string, separated by the characters normally used in assembly code
for the system.  A combination that works in most places is a newline to
break the line, plus a tab character to move to the instruction field
(written as '\n\t').  Some assemblers allow semicolons as a line
separator.  However, note that some assembler dialects use semicolons to
start a comment.

 Do not expect a sequence of 'asm' statements to remain perfectly
consecutive after compilation, even when you are using the 'volatile'
qualifier.  If certain instructions need to remain consecutive in the
output, put them in a single multi-instruction asm statement.

 Accessing data from C programs without using input/output operands
(such as by using global symbols directly from the assembler template)
may not work as expected.  Similarly, calling functions directly from an
assembler template requires a detailed understanding of the target
assembler and ABI.

 Since GCC does not parse the assembler template, it has no visibility
of any symbols it references.  This may result in GCC discarding those
symbols as unreferenced unless they are also listed as input, output, or
goto operands.

Special format strings
......................

In addition to the tokens described by the input, output, and goto
operands, these tokens have special meanings in the assembler template:

'%%'
     Outputs a single '%' into the assembler code.

'%='
     Outputs a number that is unique to each instance of the 'asm'
     statement in the entire compilation.  This option is useful when
     creating local labels and referring to them multiple times in a
     single template that generates multiple assembler instructions.

'%{'
'%|'
'%}'
     Outputs '{', '|', and '}' characters (respectively) into the
     assembler code.  When unescaped, these characters have special
     meaning to indicate multiple assembler dialects, as described
     below.

Multiple assembler dialects in 'asm' templates
..............................................

On targets such as x86, GCC supports multiple assembler dialects.  The
'-masm' option controls which dialect GCC uses as its default for inline
assembler.  The target-specific documentation for the '-masm' option
contains the list of supported dialects, as well as the default dialect
if the option is not specified.  This information may be important to
understand, since assembler code that works correctly when compiled
using one dialect will likely fail if compiled using another.  *Note x86
Options::.

 If your code needs to support multiple assembler dialects (for example,
if you are writing public headers that need to support a variety of
compilation options), use constructs of this form:

     { dialect0 | dialect1 | dialect2... }

 This construct outputs 'dialect0' when using dialect #0 to compile the
code, 'dialect1' for dialect #1, etc.  If there are fewer alternatives
within the braces than the number of dialects the compiler supports, the
construct outputs nothing.

 For example, if an x86 compiler supports two dialects ('att', 'intel'),
an assembler template such as this:

     "bt{l %[Offset],%[Base] | %[Base],%[Offset]}; jc %l2"

is equivalent to one of

     "btl %[Offset],%[Base] ; jc %l2"   /* att dialect */
     "bt %[Base],%[Offset]; jc %l2"     /* intel dialect */

 Using that same compiler, this code:

     "xchg{l}\t{%%}ebx, %1"

corresponds to either

     "xchgl\t%%ebx, %1"                 /* att dialect */
     "xchg\tebx, %1"                    /* intel dialect */

 There is no support for nesting dialect alternatives.

6.43.2.3 Output Operands
........................

An 'asm' statement has zero or more output operands indicating the names
of C variables modified by the assembler code.

 In this i386 example, 'old' (referred to in the template string as
'%0') and '*Base' (as '%1') are outputs and 'Offset' ('%2') is an input:

     bool old;

     __asm__ ("btsl %2,%1\n\t" // Turn on zero-based bit #Offset in Base.
              "sbb %0,%0"      // Use the CF to calculate old.
        : "=r" (old), "+rm" (*Base)
        : "Ir" (Offset)
        : "cc");

     return old;

 Operands are separated by commas.  Each operand has this format:

     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CVARIABLENAME)

ASMSYMBOLICNAME
     Specifies a symbolic name for the operand.  Reference the name in
     the assembler template by enclosing it in square brackets (i.e.
     '%[Value]').  The scope of the name is the 'asm' statement that
     contains the definition.  Any valid C variable name is acceptable,
     including names already defined in the surrounding code.  No two
     operands within the same 'asm' statement can use the same symbolic
     name.

     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
     the operand in the list of operands in the assembler template.  For
     example if there are three output operands, use '%0' in the
     template to refer to the first, '%1' for the second, and '%2' for
     the third.

CONSTRAINT
     A string constant specifying constraints on the placement of the
     operand; *Note Constraints::, for details.

     Output constraints must begin with either '=' (a variable
     overwriting an existing value) or '+' (when reading and writing).
     When using '=', do not assume the location contains the existing
     value on entry to the 'asm', except when the operand is tied to an
     input; *note Input Operands: InputOperands.

     After the prefix, there must be one or more additional constraints
     (*note Constraints::) that describe where the value resides.
     Common constraints include 'r' for register and 'm' for memory.
     When you list more than one possible location (for example,
     '"=rm"'), the compiler chooses the most efficient one based on the
     current context.  If you list as many alternates as the 'asm'
     statement allows, you permit the optimizers to produce the best
     possible code.  If you must use a specific register, but your
     Machine Constraints do not provide sufficient control to select the
     specific register you want, local register variables may provide a
     solution (*note Local Reg Vars::).

CVARIABLENAME
     Specifies a C lvalue expression to hold the output, typically a
     variable name.  The enclosing parentheses are a required part of
     the syntax.

 When the compiler selects the registers to use to represent the output
operands, it does not use any of the clobbered registers (*note
Clobbers::).

 Output operand expressions must be lvalues.  The compiler cannot check
whether the operands have data types that are reasonable for the
instruction being executed.  For output expressions that are not
directly addressable (for example a bit-field), the constraint must
allow a register.  In that case, GCC uses the register as the output of
the 'asm', and then stores that register into the output.

 Operands using the '+' constraint modifier count as two operands (that
is, both as input and output) towards the total maximum of 30 operands
per 'asm' statement.

 Use the '&' constraint modifier (*note Modifiers::) on all output
operands that must not overlap an input.  Otherwise, GCC may allocate
the output operand in the same register as an unrelated input operand,
on the assumption that the assembler code consumes its inputs before
producing outputs.  This assumption may be false if the assembler code
actually consists of more than one instruction.

 The same problem can occur if one output parameter (A) allows a
register constraint and another output parameter (B) allows a memory
constraint.  The code generated by GCC to access the memory address in B
can contain registers which _might_ be shared by A, and GCC considers
those registers to be inputs to the asm.  As above, GCC assumes that
such input registers are consumed before any outputs are written.  This
assumption may result in incorrect behavior if the asm writes to A
before using B.  Combining the '&' modifier with the register constraint
on A ensures that modifying A does not affect the address referenced by
B.  Otherwise, the location of B is undefined if A is modified before
using B.

 'asm' supports operand modifiers on operands (for example '%k2' instead
of simply '%2').  Typically these qualifiers are hardware dependent.
The list of supported modifiers for x86 is found at *note x86 Operand
modifiers: x86Operandmodifiers.

 If the C code that follows the 'asm' makes no use of any of the output
operands, use 'volatile' for the 'asm' statement to prevent the
optimizers from discarding the 'asm' statement as unneeded (see *note
Volatile::).

 This code makes no use of the optional ASMSYMBOLICNAME.  Therefore it
references the first output operand as '%0' (were there a second, it
would be '%1', etc).  The number of the first input operand is one
greater than that of the last output operand.  In this i386 example,
that makes 'Mask' referenced as '%1':

     uint32_t Mask = 1234;
     uint32_t Index;

       asm ("bsfl %1, %0"
          : "=r" (Index)
          : "r" (Mask)
          : "cc");

 That code overwrites the variable 'Index' ('='), placing the value in a
register ('r').  Using the generic 'r' constraint instead of a
constraint for a specific register allows the compiler to pick the
register to use, which can result in more efficient code.  This may not
be possible if an assembler instruction requires a specific register.

 The following i386 example uses the ASMSYMBOLICNAME syntax.  It
produces the same result as the code above, but some may consider it
more readable or more maintainable since reordering index numbers is not
necessary when adding or removing operands.  The names 'aIndex' and
'aMask' are only used in this example to emphasize which names get used
where.  It is acceptable to reuse the names 'Index' and 'Mask'.

     uint32_t Mask = 1234;
     uint32_t Index;

       asm ("bsfl %[aMask], %[aIndex]"
          : [aIndex] "=r" (Index)
          : [aMask] "r" (Mask)
          : "cc");

 Here are some more examples of output operands.

     uint32_t c = 1;
     uint32_t d;
     uint32_t *e = &c;

     asm ("mov %[e], %[d]"
        : [d] "=rm" (d)
        : [e] "rm" (*e));

 Here, 'd' may either be in a register or in memory.  Since the compiler
might already have the current value of the 'uint32_t' location pointed
to by 'e' in a register, you can enable it to choose the best location
for 'd' by specifying both constraints.

6.43.2.4 Input Operands
.......................

Input operands make values from C variables and expressions available to
the assembly code.

 Operands are separated by commas.  Each operand has this format:

     [ [ASMSYMBOLICNAME] ] CONSTRAINT (CEXPRESSION)

ASMSYMBOLICNAME
     Specifies a symbolic name for the operand.  Reference the name in
     the assembler template by enclosing it in square brackets (i.e.
     '%[Value]').  The scope of the name is the 'asm' statement that
     contains the definition.  Any valid C variable name is acceptable,
     including names already defined in the surrounding code.  No two
     operands within the same 'asm' statement can use the same symbolic
     name.

     When not using an ASMSYMBOLICNAME, use the (zero-based) position of
     the operand in the list of operands in the assembler template.  For
     example if there are two output operands and three inputs, use '%2'
     in the template to refer to the first input operand, '%3' for the
     second, and '%4' for the third.

CONSTRAINT
     A string constant specifying constraints on the placement of the
     operand; *Note Constraints::, for details.

     Input constraint strings may not begin with either '=' or '+'.
     When you list more than one possible location (for example,
     '"irm"'), the compiler chooses the most efficient one based on the
     current context.  If you must use a specific register, but your
     Machine Constraints do not provide sufficient control to select the
     specific register you want, local register variables may provide a
     solution (*note Local Reg Vars::).

     Input constraints can also be digits (for example, '"0"').  This
     indicates that the specified input must be in the same place as the
     output constraint at the (zero-based) index in the output
     constraint list.  When using ASMSYMBOLICNAME syntax for the output
     operands, you may use these names (enclosed in brackets '[]')
     instead of digits.

CEXPRESSION
     This is the C variable or expression being passed to the 'asm'
     statement as input.  The enclosing parentheses are a required part
     of the syntax.

 When the compiler selects the registers to use to represent the input
operands, it does not use any of the clobbered registers (*note
Clobbers::).

 If there are no output operands but there are input operands, place two
consecutive colons where the output operands would go:

     __asm__ ("some instructions"
        : /* No outputs. */
        : "r" (Offset / 8));

 *Warning:* Do _not_ modify the contents of input-only operands (except
for inputs tied to outputs).  The compiler assumes that on exit from the
'asm' statement these operands contain the same values as they had
before executing the statement.  It is _not_ possible to use clobbers to
inform the compiler that the values in these inputs are changing.  One
common work-around is to tie the changing input variable to an output
variable that never gets used.  Note, however, that if the code that
follows the 'asm' statement makes no use of any of the output operands,
the GCC optimizers may discard the 'asm' statement as unneeded (see
*note Volatile::).

 'asm' supports operand modifiers on operands (for example '%k2' instead
of simply '%2').  Typically these qualifiers are hardware dependent.
The list of supported modifiers for x86 is found at *note x86 Operand
modifiers: x86Operandmodifiers.

 In this example using the fictitious 'combine' instruction, the
constraint '"0"' for input operand 1 says that it must occupy the same
location as output operand 0.  Only input operands may use numbers in
constraints, and they must each refer to an output operand.  Only a
number (or the symbolic assembler name) in the constraint can guarantee
that one operand is in the same place as another.  The mere fact that
'foo' is the value of both operands is not enough to guarantee that they
are in the same place in the generated assembler code.

     asm ("combine %2, %0"
        : "=r" (foo)
        : "0" (foo), "g" (bar));

 Here is an example using symbolic names.

     asm ("cmoveq %1, %2, %[result]"
        : [result] "=r"(result)
        : "r" (test), "r" (new), "[result]" (old));

6.43.2.5 Clobbers
.................

While the compiler is aware of changes to entries listed in the output
operands, the inline 'asm' code may modify more than just the outputs.
For example, calculations may require additional registers, or the
processor may overwrite a register as a side effect of a particular
assembler instruction.  In order to inform the compiler of these
changes, list them in the clobber list.  Clobber list items are either
register names or the special clobbers (listed below).  Each clobber
list item is a string constant enclosed in double quotes and separated
by commas.

 Clobber descriptions may not in any way overlap with an input or output
operand.  For example, you may not have an operand describing a register
class with one member when listing that register in the clobber list.
Variables declared to live in specific registers (*note Explicit Reg
Vars::) and used as 'asm' input or output operands must have no part
mentioned in the clobber description.  In particular, there is no way to
specify that input operands get modified without also specifying them as
output operands.

 When the compiler selects which registers to use to represent input and
output operands, it does not use any of the clobbered registers.  As a
result, clobbered registers are available for any use in the assembler
code.

 Here is a realistic example for the VAX showing the use of clobbered
registers:

     asm volatile ("movc3 %0, %1, %2"
                        : /* No outputs. */
                        : "g" (from), "g" (to), "g" (count)
                        : "r0", "r1", "r2", "r3", "r4", "r5");

 Also, there are two special clobber arguments:

'"cc"'
     The '"cc"' clobber indicates that the assembler code modifies the
     flags register.  On some machines, GCC represents the condition
     codes as a specific hardware register; '"cc"' serves to name this
     register.  On other machines, condition code handling is different,
     and specifying '"cc"' has no effect.  But it is valid no matter
     what the target.

'"memory"'
     The '"memory"' clobber tells the compiler that the assembly code
     performs memory reads or writes to items other than those listed in
     the input and output operands (for example, accessing the memory
     pointed to by one of the input parameters).  To ensure memory
     contains correct values, GCC may need to flush specific register
     values to memory before executing the 'asm'.  Further, the compiler
     does not assume that any values read from memory before an 'asm'
     remain unchanged after that 'asm'; it reloads them as needed.
     Using the '"memory"' clobber effectively forms a read/write memory
     barrier for the compiler.

     Note that this clobber does not prevent the _processor_ from doing
     speculative reads past the 'asm' statement.  To prevent that, you
     need processor-specific fence instructions.

     Flushing registers to memory has performance implications and may
     be an issue for time-sensitive code.  You can use a trick to avoid
     this if the size of the memory being accessed is known at compile
     time.  For example, if accessing ten bytes of a string, use a
     memory input like:

     '{"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}'.

6.43.2.6 Goto Labels
....................

'asm goto' allows assembly code to jump to one or more C labels.  The
GOTOLABELS section in an 'asm goto' statement contains a comma-separated
list of all C labels to which the assembler code may jump.  GCC assumes
that 'asm' execution falls through to the next statement (if this is not
the case, consider using the '__builtin_unreachable' intrinsic after the
'asm' statement).  Optimization of 'asm goto' may be improved by using
the 'hot' and 'cold' label attributes (*note Label Attributes::).

 An 'asm goto' statement cannot have outputs.  This is due to an
internal restriction of the compiler: control transfer instructions
cannot have outputs.  If the assembler code does modify anything, use
the '"memory"' clobber to force the optimizers to flush all register
values to memory and reload them if necessary after the 'asm' statement.

 Also note that an 'asm goto' statement is always implicitly considered
volatile.

 To reference a label in the assembler template, prefix it with '%l'
(lowercase 'L') followed by its (zero-based) position in GOTOLABELS plus
the number of input operands.  For example, if the 'asm' has three
inputs and references two labels, refer to the first label as '%l3' and
the second as '%l4').

 Alternately, you can reference labels using the actual C label name
enclosed in brackets.  For example, to reference a label named 'carry',
you can use '%l[carry]'.  The label must still be listed in the
GOTOLABELS section when using this approach.

 Here is an example of 'asm goto' for i386:

     asm goto (
         "btl %1, %0\n\t"
         "jc %l2"
         : /* No outputs. */
         : "r" (p1), "r" (p2)
         : "cc"
         : carry);

     return 0;

     carry:
     return 1;

 The following example shows an 'asm goto' that uses a memory clobber.

     int frob(int x)
     {
       int y;
       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
                 : /* No outputs. */
                 : "r"(x), "r"(&y)
                 : "r5", "memory"
                 : error);
       return y;
     error:
       return -1;
     }

6.43.2.7 x86 Operand Modifiers
..............................

References to input, output, and goto operands in the assembler template
of extended 'asm' statements can use modifiers to affect the way the
operands are formatted in the code output to the assembler.  For
example, the following code uses the 'h' and 'b' modifiers for x86:

     uint16_t  num;
     asm volatile ("xchg %h0, %b0" : "+a" (num) );

These modifiers generate this assembler code:

     xchg %ah, %al

 The rest of this discussion uses the following code for illustrative
purposes.

     int main()
     {
        int iInt = 1;

     top:

        asm volatile goto ("some assembler instructions here"
        : /* No outputs. */
        : "q" (iInt), "X" (sizeof(unsigned char) + 1)
        : /* No clobbers. */
        : top);
     }

 With no modifiers, this is what the output from the operands would be
for the 'att' and 'intel' dialects of assembler:

Operand   masm=att   masm=intel
---------------------------------------
'%0'      '%eax'     'eax'
'%1'      '$2'       '2'
'%2'      '$.L2'     'OFFSET
                     FLAT:.L2'

 The table below shows the list of supported modifiers and their
effects.

Modifier   Description                                  Operand   'masm=att' 'masm=intel'
------------------------------------------------------------------------------------------
'z'        Print the opcode suffix for the size of      '%z0'     'l'
           the current integer operand (one of
           'b'/'w'/'l'/'q').
'b'        Print the QImode name of the register.       '%b0'     '%al'      'al'
'h'        Print the QImode name for a "high"           '%h0'     '%ah'      'ah'
           register.
'w'        Print the HImode name of the register.       '%w0'     '%ax'      'ax'
'k'        Print the SImode name of the register.       '%k0'     '%eax'     'eax'
'q'        Print the DImode name of the register.       '%q0'     '%rax'     'rax'
'l'        Print the label name with no punctuation.    '%l2'     '.L2'      '.L2'
'c'        Require a constant operand and print the     '%c1'     '2'        '2'
           constant expression with no punctuation.

6.43.2.8 x86 Floating-Point 'asm' Operands
..........................................

On x86 targets, there are several rules on the usage of stack-like
registers in the operands of an 'asm'.  These rules apply only to the
operands that are stack-like registers:

  1. Given a set of input registers that die in an 'asm', it is
     necessary to know which are implicitly popped by the 'asm', and
     which must be explicitly popped by GCC.

     An input register that is implicitly popped by the 'asm' must be
     explicitly clobbered, unless it is constrained to match an output
     operand.

  2. For any input register that is implicitly popped by an 'asm', it is
     necessary to know how to adjust the stack to compensate for the
     pop.  If any non-popped input is closer to the top of the reg-stack
     than the implicitly popped register, it would not be possible to
     know what the stack looked like--it's not clear how the rest of the
     stack "slides up".

     All implicitly popped input registers must be closer to the top of
     the reg-stack than any input that is not implicitly popped.

     It is possible that if an input dies in an 'asm', the compiler
     might use the input register for an output reload.  Consider this
     example:

          asm ("foo" : "=t" (a) : "f" (b));

     This code says that input 'b' is not popped by the 'asm', and that
     the 'asm' pushes a result onto the reg-stack, i.e., the stack is
     one deeper after the 'asm' than it was before.  But, it is possible
     that reload may think that it can use the same register for both
     the input and the output.

     To prevent this from happening, if any input operand uses the 'f'
     constraint, all output register constraints must use the '&'
     early-clobber modifier.

     The example above is correctly written as:

          asm ("foo" : "=&t" (a) : "f" (b));

  3. Some operands need to be in particular places on the stack.  All
     output operands fall in this category--GCC has no other way to know
     which registers the outputs appear in unless you indicate this in
     the constraints.

     Output operands must specifically indicate which register an output
     appears in after an 'asm'.  '=f' is not allowed: the operand
     constraints must select a class with a single register.

  4. Output operands may not be "inserted" between existing stack
     registers.  Since no 387 opcode uses a read/write operand, all
     output operands are dead before the 'asm', and are pushed by the
     'asm'.  It makes no sense to push anywhere but the top of the
     reg-stack.

     Output operands must start at the top of the reg-stack: output
     operands may not "skip" a register.

  5. Some 'asm' statements may need extra stack space for internal
     calculations.  This can be guaranteed by clobbering stack registers
     unrelated to the inputs and outputs.

 This 'asm' takes one input, which is internally popped, and produces
two outputs.

     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));

This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode,
and replaces them with one output.  The 'st(1)' clobber is necessary for
the compiler to know that 'fyl2xp1' pops both inputs.

     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");


File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: Using Assembly Language with C

6.43.3 Constraints for 'asm' Operands
-------------------------------------

Here are specific details on what constraint letters you can use with
'asm' operands.  Constraints can say whether an operand may be in a
register, and which kinds of register; whether the operand can be a
memory reference, and which kinds of address; whether the operand may be
an immediate constant, and which possible values it may have.
Constraints can also require two operands to match.  Side-effects aren't
allowed in operands of inline 'asm', unless '<' or '>' constraints are
used, because there is no guarantee that the side-effects will happen
exactly once in an instruction that can update the addressing register.

* Menu:

* Simple Constraints::  Basic use of constraints.
* Multi-Alternative::   When an insn has two alternative constraint-patterns.
* Modifiers::           More precise control over effects of constraints.
* Machine Constraints:: Special constraints for some particular machines.


File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints

6.43.3.1 Simple Constraints
...........................

The simplest kind of constraint is a string full of letters, each of
which describes one kind of operand that is permitted.  Here are the
letters that are allowed:

whitespace
     Whitespace characters are ignored and can be inserted at any
     position except the first.  This enables each alternative for
     different operands to be visually aligned in the machine
     description even if they have different number of constraints and
     modifiers.

'm'
     A memory operand is allowed, with any kind of address that the
     machine supports in general.  Note that the letter used for the
     general memory constraint can be re-defined by a back end using the
     'TARGET_MEM_CONSTRAINT' macro.

'o'
     A memory operand is allowed, but only if the address is
     "offsettable".  This means that adding a small integer (actually,
     the width in bytes of the operand, as determined by its machine
     mode) may be added to the address and the result is also a valid
     memory address.

     For example, an address which is constant is offsettable; so is an
     address that is the sum of a register and a constant (as long as a
     slightly larger constant is also within the range of
     address-offsets supported by the machine); but an autoincrement or
     autodecrement address is not offsettable.  More complicated
     indirect/indexed addresses may or may not be offsettable depending
     on the other addressing modes that the machine supports.

     Note that in an output operand which can be matched by another
     operand, the constraint letter 'o' is valid only when accompanied
     by both '<' (if the target machine has predecrement addressing) and
     '>' (if the target machine has preincrement addressing).

'V'
     A memory operand that is not offsettable.  In other words, anything
     that would fit the 'm' constraint but not the 'o' constraint.

'<'
     A memory operand with autodecrement addressing (either predecrement
     or postdecrement) is allowed.  In inline 'asm' this constraint is
     only allowed if the operand is used exactly once in an instruction
     that can handle the side-effects.  Not using an operand with '<' in
     constraint string in the inline 'asm' pattern at all or using it in
     multiple instructions isn't valid, because the side-effects
     wouldn't be performed or would be performed more than once.
     Furthermore, on some targets the operand with '<' in constraint
     string must be accompanied by special instruction suffixes like
     '%U0' instruction suffix on PowerPC or '%P0' on IA-64.

'>'
     A memory operand with autoincrement addressing (either preincrement
     or postincrement) is allowed.  In inline 'asm' the same
     restrictions as for '<' apply.

'r'
     A register operand is allowed provided that it is in a general
     register.

'i'
     An immediate integer operand (one with constant value) is allowed.
     This includes symbolic constants whose values will be known only at
     assembly time or later.

'n'
     An immediate integer operand with a known numeric value is allowed.
     Many systems cannot support assembly-time constants for operands
     less than a word wide.  Constraints for these operands should use
     'n' rather than 'i'.

'I', 'J', 'K', ... 'P'
     Other letters in the range 'I' through 'P' may be defined in a
     machine-dependent fashion to permit immediate integer operands with
     explicit integer values in specified ranges.  For example, on the
     68000, 'I' is defined to stand for the range of values 1 to 8.
     This is the range permitted as a shift count in the shift
     instructions.

'E'
     An immediate floating operand (expression code 'const_double') is
     allowed, but only if the target floating point format is the same
     as that of the host machine (on which the compiler is running).

'F'
     An immediate floating operand (expression code 'const_double' or
     'const_vector') is allowed.

'G', 'H'
     'G' and 'H' may be defined in a machine-dependent fashion to permit
     immediate floating operands in particular ranges of values.

's'
     An immediate integer operand whose value is not an explicit integer
     is allowed.

     This might appear strange; if an insn allows a constant operand
     with a value not known at compile time, it certainly must allow any
     known value.  So why use 's' instead of 'i'?  Sometimes it allows
     better code to be generated.

     For example, on the 68000 in a fullword instruction it is possible
     to use an immediate operand; but if the immediate value is between
     -128 and 127, better code results from loading the value into a
     register and using the register.  This is because the load into the
     register can be done with a 'moveq' instruction.  We arrange for
     this to happen by defining the letter 'K' to mean "any integer
     outside the range -128 to 127", and then specifying 'Ks' in the
     operand constraints.

'g'
     Any register, memory or immediate integer operand is allowed,
     except for registers that are not general registers.

'X'
     Any operand whatsoever is allowed.

'0', '1', '2', ... '9'
     An operand that matches the specified operand number is allowed.
     If a digit is used together with letters within the same
     alternative, the digit should come last.

     This number is allowed to be more than a single digit.  If multiple
     digits are encountered consecutively, they are interpreted as a
     single decimal integer.  There is scant chance for ambiguity, since
     to-date it has never been desirable that '10' be interpreted as
     matching either operand 1 _or_ operand 0.  Should this be desired,
     one can use multiple alternatives instead.

     This is called a "matching constraint" and what it really means is
     that the assembler has only a single operand that fills two roles
     which 'asm' distinguishes.  For example, an add instruction uses
     two input operands and an output operand, but on most CISC machines
     an add instruction really has only two operands, one of them an
     input-output operand:

          addl #35,r12

     Matching constraints are used in these circumstances.  More
     precisely, the two operands that match must include one input-only
     operand and one output-only operand.  Moreover, the digit must be a
     smaller number than the number of the operand that uses it in the
     constraint.

'p'
     An operand that is a valid memory address is allowed.  This is for
     "load address" and "push address" instructions.

     'p' in the constraint must be accompanied by 'address_operand' as
     the predicate in the 'match_operand'.  This predicate interprets
     the mode specified in the 'match_operand' as the mode of the memory
     reference for which the address would be valid.

OTHER-LETTERS
     Other letters can be defined in machine-dependent fashion to stand
     for particular classes of registers or other arbitrary operand
     types.  'd', 'a' and 'f' are defined on the 68000/68020 to stand
     for data, address and floating point registers.


File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints

6.43.3.2 Multiple Alternative Constraints
.........................................

Sometimes a single instruction has multiple alternative sets of possible
operands.  For example, on the 68000, a logical-or instruction can
combine register or an immediate value into memory, or it can combine
any kind of operand into a register; but it cannot combine one memory
location into another.

 These constraints are represented as multiple alternatives.  An
alternative can be described by a series of letters for each operand.
The overall constraint for an operand is made from the letters for this
operand from the first alternative, a comma, the letters for this
operand from the second alternative, a comma, and so on until the last
alternative.

 If all the operands fit any one alternative, the instruction is valid.
Otherwise, for each alternative, the compiler counts how many
instructions must be added to copy the operands so that that alternative
applies.  The alternative requiring the least copying is chosen.  If two
alternatives need the same amount of copying, the one that comes first
is chosen.  These choices can be altered with the '?' and '!'
characters:

'?'
     Disparage slightly the alternative that the '?' appears in, as a
     choice when no alternative applies exactly.  The compiler regards
     this alternative as one unit more costly for each '?' that appears
     in it.

'!'
     Disparage severely the alternative that the '!' appears in.  This
     alternative can still be used if it fits without reloading, but if
     reloading is needed, some other alternative will be used.

'^'
     This constraint is analogous to '?' but it disparages slightly the
     alternative only if the operand with the '^' needs a reload.

'$'
     This constraint is analogous to '!' but it disparages severely the
     alternative only if the operand with the '$' needs a reload.


File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints

6.43.3.3 Constraint Modifier Characters
.......................................

Here are constraint modifier characters.

'='
     Means that this operand is written to by this instruction: the
     previous value is discarded and replaced by new data.

'+'
     Means that this operand is both read and written by the
     instruction.

     When the compiler fixes up the operands to satisfy the constraints,
     it needs to know which operands are read by the instruction and
     which are written by it.  '=' identifies an operand which is only
     written; '+' identifies an operand that is both read and written;
     all other operands are assumed to only be read.

     If you specify '=' or '+' in a constraint, you put it in the first
     character of the constraint string.

'&'
     Means (in a particular alternative) that this operand is an
     "earlyclobber" operand, which is written before the instruction is
     finished using the input operands.  Therefore, this operand may not
     lie in a register that is read by the instruction or as part of any
     memory address.

     '&' applies only to the alternative in which it is written.  In
     constraints with multiple alternatives, sometimes one alternative
     requires '&' while others do not.  See, for example, the 'movdf'
     insn of the 68000.

     A operand which is read by the instruction can be tied to an
     earlyclobber operand if its only use as an input occurs before the
     early result is written.  Adding alternatives of this form often
     allows GCC to produce better code when only some of the read
     operands can be affected by the earlyclobber.  See, for example,
     the 'mulsi3' insn of the ARM.

     Furthermore, if the "earlyclobber" operand is also a read/write
     operand, then that operand is written only after it's used.

     '&' does not obviate the need to write '=' or '+'.  As
     "earlyclobber" operands are always written, a read-only
     "earlyclobber" operand is ill-formed and will be rejected by the
     compiler.

'%'
     Declares the instruction to be commutative for this operand and the
     following operand.  This means that the compiler may interchange
     the two operands if that is the cheapest way to make all operands
     fit the constraints.  '%' applies to all alternatives and must
     appear as the first character in the constraint.  Only read-only
     operands can use '%'.

     GCC can only handle one commutative pair in an asm; if you use
     more, the compiler may fail.  Note that you need not use the
     modifier if the two alternatives are strictly identical; this would
     only waste time in the reload pass.  The modifier is not
     operational after register allocation, so the result of
     'define_peephole2' and 'define_split's performed after reload
     cannot rely on '%' to make the intended insn match.

'#'
     Says that all following characters, up to the next comma, are to be
     ignored as a constraint.  They are significant only for choosing
     register preferences.

'*'
     Says that the following character should be ignored when choosing
     register preferences.  '*' has no effect on the meaning of the
     constraint as a constraint, and no effect on reloading.  For LRA
     '*' additionally disparages slightly the alternative if the
     following character matches the operand.


File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints

6.43.3.4 Constraints for Particular Machines
............................................

Whenever possible, you should use the general-purpose constraint letters
in 'asm' arguments, since they will convey meaning more readily to
people reading your code.  Failing that, use the constraint letters that
usually have very similar meanings across architectures.  The most
commonly used constraints are 'm' and 'r' (for memory and
general-purpose registers respectively; *note Simple Constraints::), and
'I', usually the letter indicating the most common immediate-constant
format.

 Each architecture defines additional constraints.  These constraints
are used by the compiler itself for instruction generation, as well as
for 'asm' statements; therefore, some of the constraints are not
particularly useful for 'asm'.  Here is a summary of some of the
machine-dependent constraints available on some particular machines; it
includes both constraints that are useful for 'asm' and constraints that
aren't.  The compiler source file mentioned in the table heading for
each architecture is the definitive reference for the meanings of that
architecture's constraints.

_AArch64 family--'config/aarch64/constraints.md'_
     'k'
          The stack pointer register ('SP')

     'w'
          Floating point or SIMD vector register

     'I'
          Integer constant that is valid as an immediate operand in an
          'ADD' instruction

     'J'
          Integer constant that is valid as an immediate operand in a
          'SUB' instruction (once negated)

     'K'
          Integer constant that can be used with a 32-bit logical
          instruction

     'L'
          Integer constant that can be used with a 64-bit logical
          instruction

     'M'
          Integer constant that is valid as an immediate operand in a
          32-bit 'MOV' pseudo instruction.  The 'MOV' may be assembled
          to one of several different machine instructions depending on
          the value

     'N'
          Integer constant that is valid as an immediate operand in a
          64-bit 'MOV' pseudo instruction

     'S'
          An absolute symbolic address or a label reference

     'Y'
          Floating point constant zero

     'Z'
          Integer constant zero

     'Ush'
          The high part (bits 12 and upwards) of the pc-relative address
          of a symbol within 4GB of the instruction

     'Q'
          A memory address which uses a single base register with no
          offset

     'Ump'
          A memory address suitable for a load/store pair instruction in
          SI, DI, SF and DF modes

_ARC --'config/arc/constraints.md'_
     'q'
          Registers usable in ARCompact 16-bit instructions: 'r0'-'r3',
          'r12'-'r15'.  This constraint can only match when the '-mq'
          option is in effect.

     'e'
          Registers usable as base-regs of memory addresses in ARCompact
          16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'.
          This constraint can only match when the '-mq' option is in
          effect.
     'D'
          ARC FPX (dpfp) 64-bit registers.  'D0', 'D1'.

     'I'
          A signed 12-bit integer constant.

     'Cal'
          constant for arithmetic/logical operations.  This might be any
          constant that can be put into a long immediate by the assmbler
          or linker without involving a PIC relocation.

     'K'
          A 3-bit unsigned integer constant.

     'L'
          A 6-bit unsigned integer constant.

     'CnL'
          One's complement of a 6-bit unsigned integer constant.

     'CmL'
          Two's complement of a 6-bit unsigned integer constant.

     'M'
          A 5-bit unsigned integer constant.

     'O'
          A 7-bit unsigned integer constant.

     'P'
          A 8-bit unsigned integer constant.

     'H'
          Any const_double value.

_ARM family--'config/arm/constraints.md'_

     'h'
          In Thumb state, the core registers 'r8'-'r15'.

     'k'
          The stack pointer register.

     'l'
          In Thumb State the core registers 'r0'-'r7'.  In ARM state
          this is an alias for the 'r' constraint.

     't'
          VFP floating-point registers 's0'-'s31'.  Used for 32 bit
          values.

     'w'
          VFP floating-point registers 'd0'-'d31' and the appropriate
          subset 'd0'-'d15' based on command line options.  Used for 64
          bit values only.  Not valid for Thumb1.

     'y'
          The iWMMX co-processor registers.

     'z'
          The iWMMX GR registers.

     'G'
          The floating-point constant 0.0

     'I'
          Integer that is valid as an immediate operand in a data
          processing instruction.  That is, an integer in the range 0 to
          255 rotated by a multiple of 2

     'J'
          Integer in the range -4095 to 4095

     'K'
          Integer that satisfies constraint 'I' when inverted (ones
          complement)

     'L'
          Integer that satisfies constraint 'I' when negated (twos
          complement)

     'M'
          Integer in the range 0 to 32

     'Q'
          A memory reference where the exact address is in a single
          register (''m'' is preferable for 'asm' statements)

     'R'
          An item in the constant pool

     'S'
          A symbol in the text segment of the current file

     'Uv'
          A memory reference suitable for VFP load/store insns
          (reg+constant offset)

     'Uy'
          A memory reference suitable for iWMMXt load/store
          instructions.

     'Uq'
          A memory reference suitable for the ARMv4 ldrsb instruction.

_AVR family--'config/avr/constraints.md'_
     'l'
          Registers from r0 to r15

     'a'
          Registers from r16 to r23

     'd'
          Registers from r16 to r31

     'w'
          Registers from r24 to r31.  These registers can be used in
          'adiw' command

     'e'
          Pointer register (r26-r31)

     'b'
          Base pointer register (r28-r31)

     'q'
          Stack pointer register (SPH:SPL)

     't'
          Temporary register r0

     'x'
          Register pair X (r27:r26)

     'y'
          Register pair Y (r29:r28)

     'z'
          Register pair Z (r31:r30)

     'I'
          Constant greater than -1, less than 64

     'J'
          Constant greater than -64, less than 1

     'K'
          Constant integer 2

     'L'
          Constant integer 0

     'M'
          Constant that fits in 8 bits

     'N'
          Constant integer -1

     'O'
          Constant integer 8, 16, or 24

     'P'
          Constant integer 1

     'G'
          A floating point constant 0.0

     'Q'
          A memory address based on Y or Z pointer with displacement.

_Blackfin family--'config/bfin/constraints.md'_
     'a'
          P register

     'd'
          D register

     'z'
          A call clobbered P register.

     'qN'
          A single register.  If N is in the range 0 to 7, the
          corresponding D register.  If it is 'A', then the register P0.

     'D'
          Even-numbered D register

     'W'
          Odd-numbered D register

     'e'
          Accumulator register.

     'A'
          Even-numbered accumulator register.

     'B'
          Odd-numbered accumulator register.

     'b'
          I register

     'v'
          B register

     'f'
          M register

     'c'
          Registers used for circular buffering, i.e.  I, B, or L
          registers.

     'C'
          The CC register.

     't'
          LT0 or LT1.

     'k'
          LC0 or LC1.

     'u'
          LB0 or LB1.

     'x'
          Any D, P, B, M, I or L register.

     'y'
          Additional registers typically used only in prologues and
          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
          USP.

     'w'
          Any register except accumulators or CC.

     'Ksh'
          Signed 16 bit integer (in the range -32768 to 32767)

     'Kuh'
          Unsigned 16 bit integer (in the range 0 to 65535)

     'Ks7'
          Signed 7 bit integer (in the range -64 to 63)

     'Ku7'
          Unsigned 7 bit integer (in the range 0 to 127)

     'Ku5'
          Unsigned 5 bit integer (in the range 0 to 31)

     'Ks4'
          Signed 4 bit integer (in the range -8 to 7)

     'Ks3'
          Signed 3 bit integer (in the range -3 to 4)

     'Ku3'
          Unsigned 3 bit integer (in the range 0 to 7)

     'PN'
          Constant N, where N is a single-digit constant in the range 0
          to 4.

     'PA'
          An integer equal to one of the MACFLAG_XXX constants that is
          suitable for use with either accumulator.

     'PB'
          An integer equal to one of the MACFLAG_XXX constants that is
          suitable for use only with accumulator A1.

     'M1'
          Constant 255.

     'M2'
          Constant 65535.

     'J'
          An integer constant with exactly a single bit set.

     'L'
          An integer constant with all bits set except exactly one.

     'H'

     'Q'
          Any SYMBOL_REF.

_CR16 Architecture--'config/cr16/cr16.h'_

     'b'
          Registers from r0 to r14 (registers without stack pointer)

     't'
          Register from r0 to r11 (all 16-bit registers)

     'p'
          Register from r12 to r15 (all 32-bit registers)

     'I'
          Signed constant that fits in 4 bits

     'J'
          Signed constant that fits in 5 bits

     'K'
          Signed constant that fits in 6 bits

     'L'
          Unsigned constant that fits in 4 bits

     'M'
          Signed constant that fits in 32 bits

     'N'
          Check for 64 bits wide constants for add/sub instructions

     'G'
          Floating point constant that is legal for store immediate

_Epiphany--'config/epiphany/constraints.md'_
     'U16'
          An unsigned 16-bit constant.

     'K'
          An unsigned 5-bit constant.

     'L'
          A signed 11-bit constant.

     'Cm1'
          A signed 11-bit constant added to -1.  Can only match when the
          '-m1reg-REG' option is active.

     'Cl1'
          Left-shift of -1, i.e., a bit mask with a block of leading
          ones, the rest being a block of trailing zeroes.  Can only
          match when the '-m1reg-REG' option is active.

     'Cr1'
          Right-shift of -1, i.e., a bit mask with a trailing block of
          ones, the rest being zeroes.  Or to put it another way, one
          less than a power of two.  Can only match when the
          '-m1reg-REG' option is active.

     'Cal'
          Constant for arithmetic/logical operations.  This is like 'i',
          except that for position independent code, no symbols /
          expressions needing relocations are allowed.

     'Csy'
          Symbolic constant for call/jump instruction.

     'Rcs'
          The register class usable in short insns.  This is a register
          class constraint, and can thus drive register allocation.
          This constraint won't match unless '-mprefer-short-insn-regs'
          is in effect.

     'Rsc'
          The the register class of registers that can be used to hold a
          sibcall call address.  I.e., a caller-saved register.

     'Rct'
          Core control register class.

     'Rgs'
          The register group usable in short insns.  This constraint
          does not use a register class, so that it only passively
          matches suitable registers, and doesn't drive register
          allocation.

     'Rra'
          Matches the return address if it can be replaced with the link
          register.

     'Rcc'
          Matches the integer condition code register.

     'Sra'
          Matches the return address if it is in a stack slot.

     'Cfm'
          Matches control register values to switch fp mode, which are
          encapsulated in 'UNSPEC_FP_MODE'.

_FRV--'config/frv/frv.h'_
     'a'
          Register in the class 'ACC_REGS' ('acc0' to 'acc7').

     'b'
          Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7').

     'c'
          Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0'
          to 'icc3').

     'd'
          Register in the class 'GPR_REGS' ('gr0' to 'gr63').

     'e'
          Register in the class 'EVEN_REGS' ('gr0' to 'gr63').  Odd
          registers are excluded not in the class but through the use of
          a machine mode larger than 4 bytes.

     'f'
          Register in the class 'FPR_REGS' ('fr0' to 'fr63').

     'h'
          Register in the class 'FEVEN_REGS' ('fr0' to 'fr63').  Odd
          registers are excluded not in the class but through the use of
          a machine mode larger than 4 bytes.

     'l'
          Register in the class 'LR_REG' (the 'lr' register).

     'q'
          Register in the class 'QUAD_REGS' ('gr2' to 'gr63').  Register
          numbers not divisible by 4 are excluded not in the class but
          through the use of a machine mode larger than 8 bytes.

     't'
          Register in the class 'ICC_REGS' ('icc0' to 'icc3').

     'u'
          Register in the class 'FCC_REGS' ('fcc0' to 'fcc3').

     'v'
          Register in the class 'ICR_REGS' ('cc4' to 'cc7').

     'w'
          Register in the class 'FCR_REGS' ('cc0' to 'cc3').

     'x'
          Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63').
          Register numbers not divisible by 4 are excluded not in the
          class but through the use of a machine mode larger than 8
          bytes.

     'z'
          Register in the class 'SPR_REGS' ('lcr' and 'lr').

     'A'
          Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7').

     'B'
          Register in the class 'ACCG_REGS' ('accg0' to 'accg7').

     'C'
          Register in the class 'CR_REGS' ('cc0' to 'cc7').

     'G'
          Floating point constant zero

     'I'
          6-bit signed integer constant

     'J'
          10-bit signed integer constant

     'L'
          16-bit signed integer constant

     'M'
          16-bit unsigned integer constant

     'N'
          12-bit signed integer constant that is negative--i.e. in the
          range of -2048 to -1

     'O'
          Constant zero

     'P'
          12-bit signed integer constant that is greater than zero--i.e.
          in the range of 1 to 2047.

_Hewlett-Packard PA-RISC--'config/pa/pa.h'_
     'a'
          General register 1

     'f'
          Floating point register

     'q'
          Shift amount register

     'x'
          Floating point register (deprecated)

     'y'
          Upper floating point register (32-bit), floating point
          register (64-bit)

     'Z'
          Any register

     'I'
          Signed 11-bit integer constant

     'J'
          Signed 14-bit integer constant

     'K'
          Integer constant that can be deposited with a 'zdepi'
          instruction

     'L'
          Signed 5-bit integer constant

     'M'
          Integer constant 0

     'N'
          Integer constant that can be loaded with a 'ldil' instruction

     'O'
          Integer constant whose value plus one is a power of 2

     'P'
          Integer constant that can be used for 'and' operations in
          'depi' and 'extru' instructions

     'S'
          Integer constant 31

     'U'
          Integer constant 63

     'G'
          Floating-point constant 0.0

     'A'
          A 'lo_sum' data-linkage-table memory operand

     'Q'
          A memory operand that can be used as the destination operand
          of an integer store instruction

     'R'
          A scaled or unscaled indexed memory operand

     'T'
          A memory operand for floating-point loads and stores

     'W'
          A register indirect memory operand

_Intel IA-64--'config/ia64/ia64.h'_
     'a'
          General register 'r0' to 'r3' for 'addl' instruction

     'b'
          Branch register

     'c'
          Predicate register ('c' as in "conditional")

     'd'
          Application register residing in M-unit

     'e'
          Application register residing in I-unit

     'f'
          Floating-point register

     'm'
          Memory operand.  If used together with '<' or '>', the operand
          can have postincrement and postdecrement which require
          printing with '%Pn' on IA-64.

     'G'
          Floating-point constant 0.0 or 1.0

     'I'
          14-bit signed integer constant

     'J'
          22-bit signed integer constant

     'K'
          8-bit signed integer constant for logical instructions

     'L'
          8-bit adjusted signed integer constant for compare pseudo-ops

     'M'
          6-bit unsigned integer constant for shift counts

     'N'
          9-bit signed integer constant for load and store
          postincrements

     'O'
          The constant zero

     'P'
          0 or -1 for 'dep' instruction

     'Q'
          Non-volatile memory for floating-point loads and stores

     'R'
          Integer constant in the range 1 to 4 for 'shladd' instruction

     'S'
          Memory operand except postincrement and postdecrement.  This
          is now roughly the same as 'm' when not used together with '<'
          or '>'.

_M32C--'config/m32c/m32c.c'_
     'Rsp'
     'Rfb'
     'Rsb'
          '$sp', '$fb', '$sb'.

     'Rcr'
          Any control register, when they're 16 bits wide (nothing if
          control registers are 24 bits wide)

     'Rcl'
          Any control register, when they're 24 bits wide.

     'R0w'
     'R1w'
     'R2w'
     'R3w'
          $r0, $r1, $r2, $r3.

     'R02'
          $r0 or $r2, or $r2r0 for 32 bit values.

     'R13'
          $r1 or $r3, or $r3r1 for 32 bit values.

     'Rdi'
          A register that can hold a 64 bit value.

     'Rhl'
          $r0 or $r1 (registers with addressable high/low bytes)

     'R23'
          $r2 or $r3

     'Raa'
          Address registers

     'Raw'
          Address registers when they're 16 bits wide.

     'Ral'
          Address registers when they're 24 bits wide.

     'Rqi'
          Registers that can hold QI values.

     'Rad'
          Registers that can be used with displacements ($a0, $a1, $sb).

     'Rsi'
          Registers that can hold 32 bit values.

     'Rhi'
          Registers that can hold 16 bit values.

     'Rhc'
          Registers chat can hold 16 bit values, including all control
          registers.

     'Rra'
          $r0 through R1, plus $a0 and $a1.

     'Rfl'
          The flags register.

     'Rmm'
          The memory-based pseudo-registers $mem0 through $mem15.

     'Rpi'
          Registers that can hold pointers (16 bit registers for r8c,
          m16c; 24 bit registers for m32cm, m32c).

     'Rpa'
          Matches multiple registers in a PARALLEL to form a larger
          register.  Used to match function return values.

     'Is3'
          -8 ... 7

     'IS1'
          -128 ... 127

     'IS2'
          -32768 ... 32767

     'IU2'
          0 ... 65535

     'In4'
          -8 ... -1 or 1 ... 8

     'In5'
          -16 ... -1 or 1 ... 16

     'In6'
          -32 ... -1 or 1 ... 32

     'IM2'
          -65536 ... -1

     'Ilb'
          An 8 bit value with exactly one bit set.

     'Ilw'
          A 16 bit value with exactly one bit set.

     'Sd'
          The common src/dest memory addressing modes.

     'Sa'
          Memory addressed using $a0 or $a1.

     'Si'
          Memory addressed with immediate addresses.

     'Ss'
          Memory addressed using the stack pointer ($sp).

     'Sf'
          Memory addressed using the frame base register ($fb).

     'Ss'
          Memory addressed using the small base register ($sb).

     'S1'
          $r1h

_MeP--'config/mep/constraints.md'_

     'a'
          The $sp register.

     'b'
          The $tp register.

     'c'
          Any control register.

     'd'
          Either the $hi or the $lo register.

     'em'
          Coprocessor registers that can be directly loaded ($c0-$c15).

     'ex'
          Coprocessor registers that can be moved to each other.

     'er'
          Coprocessor registers that can be moved to core registers.

     'h'
          The $hi register.

     'j'
          The $rpc register.

     'l'
          The $lo register.

     't'
          Registers which can be used in $tp-relative addressing.

     'v'
          The $gp register.

     'x'
          The coprocessor registers.

     'y'
          The coprocessor control registers.

     'z'
          The $0 register.

     'A'
          User-defined register set A.

     'B'
          User-defined register set B.

     'C'
          User-defined register set C.

     'D'
          User-defined register set D.

     'I'
          Offsets for $gp-rel addressing.

     'J'
          Constants that can be used directly with boolean insns.

     'K'
          Constants that can be moved directly to registers.

     'L'
          Small constants that can be added to registers.

     'M'
          Long shift counts.

     'N'
          Small constants that can be compared to registers.

     'O'
          Constants that can be loaded into the top half of registers.

     'S'
          Signed 8-bit immediates.

     'T'
          Symbols encoded for $tp-rel or $gp-rel addressing.

     'U'
          Non-constant addresses for loading/saving coprocessor
          registers.

     'W'
          The top half of a symbol's value.

     'Y'
          A register indirect address without offset.

     'Z'
          Symbolic references to the control bus.

_MicroBlaze--'config/microblaze/constraints.md'_
     'd'
          A general register ('r0' to 'r31').

     'z'
          A status register ('rmsr', '$fcc1' to '$fcc7').

_MIPS--'config/mips/constraints.md'_
     'd'
          An address register.  This is equivalent to 'r' unless
          generating MIPS16 code.

     'f'
          A floating-point register (if available).

     'h'
          Formerly the 'hi' register.  This constraint is no longer
          supported.

     'l'
          The 'lo' register.  Use this register to store values that are
          no bigger than a word.

     'x'
          The concatenated 'hi' and 'lo' registers.  Use this register
          to store doubleword values.

     'c'
          A register suitable for use in an indirect jump.  This will
          always be '$25' for '-mabicalls'.

     'v'
          Register '$3'.  Do not use this constraint in new code; it is
          retained only for compatibility with glibc.

     'y'
          Equivalent to 'r'; retained for backwards compatibility.

     'z'
          A floating-point condition code register.

     'I'
          A signed 16-bit constant (for arithmetic instructions).

     'J'
          Integer zero.

     'K'
          An unsigned 16-bit constant (for logic instructions).

     'L'
          A signed 32-bit constant in which the lower 16 bits are zero.
          Such constants can be loaded using 'lui'.

     'M'
          A constant that cannot be loaded using 'lui', 'addiu' or
          'ori'.

     'N'
          A constant in the range -65535 to -1 (inclusive).

     'O'
          A signed 15-bit constant.

     'P'
          A constant in the range 1 to 65535 (inclusive).

     'G'
          Floating-point zero.

     'R'
          An address that can be used in a non-macro load or store.

     'ZC'
          A memory operand whose address is formed by a base register
          and offset that is suitable for use in instructions with the
          same addressing mode as 'll' and 'sc'.

     'ZD'
          An address suitable for a 'prefetch' instruction, or for any
          other instruction with the same addressing mode as 'prefetch'.

_Motorola 680x0--'config/m68k/constraints.md'_
     'a'
          Address register

     'd'
          Data register

     'f'
          68881 floating-point register, if available

     'I'
          Integer in the range 1 to 8

     'J'
          16-bit signed number

     'K'
          Signed number whose magnitude is greater than 0x80

     'L'
          Integer in the range -8 to -1

     'M'
          Signed number whose magnitude is greater than 0x100

     'N'
          Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate

     'O'
          16 (for rotate using swap)

     'P'
          Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate

     'R'
          Numbers that mov3q can handle

     'G'
          Floating point constant that is not a 68881 constant

     'S'
          Operands that satisfy 'm' when -mpcrel is in effect

     'T'
          Operands that satisfy 's' when -mpcrel is not in effect

     'Q'
          Address register indirect addressing mode

     'U'
          Register offset addressing

     'W'
          const_call_operand

     'Cs'
          symbol_ref or const

     'Ci'
          const_int

     'C0'
          const_int 0

     'Cj'
          Range of signed numbers that don't fit in 16 bits

     'Cmvq'
          Integers valid for mvq

     'Capsw'
          Integers valid for a moveq followed by a swap

     'Cmvz'
          Integers valid for mvz

     'Cmvs'
          Integers valid for mvs

     'Ap'
          push_operand

     'Ac'
          Non-register operands allowed in clr

_Moxie--'config/moxie/constraints.md'_
     'A'
          An absolute address

     'B'
          An offset address

     'W'
          A register indirect memory operand

     'I'
          A constant in the range of 0 to 255.

     'N'
          A constant in the range of 0 to -255.

_MSP430-'config/msp430/constraints.md'_

     'R12'
          Register R12.

     'R13'
          Register R13.

     'K'
          Integer constant 1.

     'L'
          Integer constant -1^20..1^19.

     'M'
          Integer constant 1-4.

     'Ya'
          Memory references which do not require an extended MOVX
          instruction.

     'Yl'
          Memory reference, labels only.

     'Ys'
          Memory reference, stack only.

_NDS32--'config/nds32/constraints.md'_
     'w'
          LOW register class $r0 to $r7 constraint for V3/V3M ISA.
     'l'
          LOW register class $r0 to $r7.
     'd'
          MIDDLE register class $r0 to $r11, $r16 to $r19.
     'h'
          HIGH register class $r12 to $r14, $r20 to $r31.
     't'
          Temporary assist register $ta (i.e. $r15).
     'k'
          Stack register $sp.
     'Iu03'
          Unsigned immediate 3-bit value.
     'In03'
          Negative immediate 3-bit value in the range of -7-0.
     'Iu04'
          Unsigned immediate 4-bit value.
     'Is05'
          Signed immediate 5-bit value.
     'Iu05'
          Unsigned immediate 5-bit value.
     'In05'
          Negative immediate 5-bit value in the range of -31-0.
     'Ip05'
          Unsigned immediate 5-bit value for movpi45 instruction with
          range 16-47.
     'Iu06'
          Unsigned immediate 6-bit value constraint for addri36.sp
          instruction.
     'Iu08'
          Unsigned immediate 8-bit value.
     'Iu09'
          Unsigned immediate 9-bit value.
     'Is10'
          Signed immediate 10-bit value.
     'Is11'
          Signed immediate 11-bit value.
     'Is15'
          Signed immediate 15-bit value.
     'Iu15'
          Unsigned immediate 15-bit value.
     'Ic15'
          A constant which is not in the range of imm15u but ok for bclr
          instruction.
     'Ie15'
          A constant which is not in the range of imm15u but ok for bset
          instruction.
     'It15'
          A constant which is not in the range of imm15u but ok for btgl
          instruction.
     'Ii15'
          A constant whose compliment value is in the range of imm15u
          and ok for bitci instruction.
     'Is16'
          Signed immediate 16-bit value.
     'Is17'
          Signed immediate 17-bit value.
     'Is19'
          Signed immediate 19-bit value.
     'Is20'
          Signed immediate 20-bit value.
     'Ihig'
          The immediate value that can be simply set high 20-bit.
     'Izeb'
          The immediate value 0xff.
     'Izeh'
          The immediate value 0xffff.
     'Ixls'
          The immediate value 0x01.
     'Ix11'
          The immediate value 0x7ff.
     'Ibms'
          The immediate value with power of 2.
     'Ifex'
          The immediate value with power of 2 minus 1.
     'U33'
          Memory constraint for 333 format.
     'U45'
          Memory constraint for 45 format.
     'U37'
          Memory constraint for 37 format.

_Nios II family--'config/nios2/constraints.md'_

     'I'
          Integer that is valid as an immediate operand in an
          instruction taking a signed 16-bit number.  Range -32768 to
          32767.

     'J'
          Integer that is valid as an immediate operand in an
          instruction taking an unsigned 16-bit number.  Range 0 to
          65535.

     'K'
          Integer that is valid as an immediate operand in an
          instruction taking only the upper 16-bits of a 32-bit number.
          Range 32-bit numbers with the lower 16-bits being 0.

     'L'
          Integer that is valid as an immediate operand for a shift
          instruction.  Range 0 to 31.

     'M'
          Integer that is valid as an immediate operand for only the
          value 0.  Can be used in conjunction with the format modifier
          'z' to use 'r0' instead of '0' in the assembly output.

     'N'
          Integer that is valid as an immediate operand for a custom
          instruction opcode.  Range 0 to 255.

     'S'
          Matches immediates which are addresses in the small data
          section and therefore can be added to 'gp' as a 16-bit
          immediate to re-create their 32-bit value.

_PDP-11--'config/pdp11/constraints.md'_
     'a'
          Floating point registers AC0 through AC3.  These can be loaded
          from/to memory with a single instruction.

     'd'
          Odd numbered general registers (R1, R3, R5).  These are used
          for 16-bit multiply operations.

     'f'
          Any of the floating point registers (AC0 through AC5).

     'G'
          Floating point constant 0.

     'I'
          An integer constant that fits in 16 bits.

     'J'
          An integer constant whose low order 16 bits are zero.

     'K'
          An integer constant that does not meet the constraints for
          codes 'I' or 'J'.

     'L'
          The integer constant 1.

     'M'
          The integer constant -1.

     'N'
          The integer constant 0.

     'O'
          Integer constants -4 through -1 and 1 through 4; shifts by
          these amounts are handled as multiple single-bit shifts rather
          than a single variable-length shift.

     'Q'
          A memory reference which requires an additional word (address
          or offset) after the opcode.

     'R'
          A memory reference that is encoded within the opcode.

_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_
     'b'
          Address base register

     'd'
          Floating point register (containing 64-bit value)

     'f'
          Floating point register (containing 32-bit value)

     'v'
          Altivec vector register

     'wa'
          Any VSX register if the -mvsx option was used or NO_REGS.

     'wd'
          VSX vector register to hold vector double data or NO_REGS.

     'wf'
          VSX vector register to hold vector float data or NO_REGS.

     'wg'
          If '-mmfpgpr' was used, a floating point register or NO_REGS.

     'wh'
          Floating point register if direct moves are available, or
          NO_REGS.

     'wi'
          FP or VSX register to hold 64-bit integers for VSX insns or
          NO_REGS.

     'wj'
          FP or VSX register to hold 64-bit integers for direct moves or
          NO_REGS.

     'wk'
          FP or VSX register to hold 64-bit doubles for direct moves or
          NO_REGS.

     'wl'
          Floating point register if the LFIWAX instruction is enabled
          or NO_REGS.

     'wm'
          VSX register if direct move instructions are enabled, or
          NO_REGS.

     'wn'
          No register (NO_REGS).

     'wr'
          General purpose register if 64-bit instructions are enabled or
          NO_REGS.

     'ws'
          VSX vector register to hold scalar double values or NO_REGS.

     'wt'
          VSX vector register to hold 128 bit integer or NO_REGS.

     'wu'
          Altivec register to use for float/32-bit int loads/stores or
          NO_REGS.

     'wv'
          Altivec register to use for double loads/stores or NO_REGS.

     'ww'
          FP or VSX register to perform float operations under '-mvsx'
          or NO_REGS.

     'wx'
          Floating point register if the STFIWX instruction is enabled
          or NO_REGS.

     'wy'
          FP or VSX register to perform ISA 2.07 float ops or NO_REGS.

     'wz'
          Floating point register if the LFIWZX instruction is enabled
          or NO_REGS.

     'wD'
          Int constant that is the element number of the 64-bit scalar
          in a vector.

     'wQ'
          A memory address that will work with the 'lq' and 'stq'
          instructions.

     'h'
          'MQ', 'CTR', or 'LINK' register

     'q'
          'MQ' register

     'c'
          'CTR' register

     'l'
          'LINK' register

     'x'
          'CR' register (condition register) number 0

     'y'
          'CR' register (condition register)

     'z'
          'XER[CA]' carry bit (part of the XER register)

     'I'
          Signed 16-bit constant

     'J'
          Unsigned 16-bit constant shifted left 16 bits (use 'L' instead
          for 'SImode' constants)

     'K'
          Unsigned 16-bit constant

     'L'
          Signed 16-bit constant shifted left 16 bits

     'M'
          Constant larger than 31

     'N'
          Exact power of 2

     'O'
          Zero

     'P'
          Constant whose negation is a signed 16-bit constant

     'G'
          Floating point constant that can be loaded into a register
          with one instruction per word

     'H'
          Integer/Floating point constant that can be loaded into a
          register using three instructions

     'm'
          Memory operand.  Normally, 'm' does not allow addresses that
          update the base register.  If '<' or '>' constraint is also
          used, they are allowed and therefore on PowerPC targets in
          that case it is only safe to use 'm<>' in an 'asm' statement
          if that 'asm' statement accesses the operand exactly once.
          The 'asm' statement must also use '%U<OPNO>' as a placeholder
          for the "update" flag in the corresponding load or store
          instruction.  For example:

               asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));

          is correct but:

               asm ("st %1,%0" : "=m<>" (mem) : "r" (val));

          is not.

     'es'
          A "stable" memory operand; that is, one which does not include
          any automodification of the base register.  This used to be
          useful when 'm' allowed automodification of the base register,
          but as those are now only allowed when '<' or '>' is used,
          'es' is basically the same as 'm' without '<' and '>'.

     'Q'
          Memory operand that is an offset from a register (it is
          usually better to use 'm' or 'es' in 'asm' statements)

     'Z'
          Memory operand that is an indexed or indirect from a register
          (it is usually better to use 'm' or 'es' in 'asm' statements)

     'R'
          AIX TOC entry

     'a'
          Address operand that is an indexed or indirect from a register
          ('p' is preferable for 'asm' statements)

     'S'
          Constant suitable as a 64-bit mask operand

     'T'
          Constant suitable as a 32-bit mask operand

     'U'
          System V Release 4 small data area reference

     't'
          AND masks that can be performed by two rldic{l, r}
          instructions

     'W'
          Vector constant that does not require memory

     'j'
          Vector constant that is all zeros.

_RL78--'config/rl78/constraints.md'_

     'Int3'
          An integer constant in the range 1 ... 7.
     'Int8'
          An integer constant in the range 0 ... 255.
     'J'
          An integer constant in the range -255 ... 0
     'K'
          The integer constant 1.
     'L'
          The integer constant -1.
     'M'
          The integer constant 0.
     'N'
          The integer constant 2.
     'O'
          The integer constant -2.
     'P'
          An integer constant in the range 1 ... 15.
     'Qbi'
          The built-in compare types-eq, ne, gtu, ltu, geu, and leu.
     'Qsc'
          The synthetic compare types-gt, lt, ge, and le.
     'Wab'
          A memory reference with an absolute address.
     'Wbc'
          A memory reference using 'BC' as a base register, with an
          optional offset.
     'Wca'
          A memory reference using 'AX', 'BC', 'DE', or 'HL' for the
          address, for calls.
     'Wcv'
          A memory reference using any 16-bit register pair for the
          address, for calls.
     'Wd2'
          A memory reference using 'DE' as a base register, with an
          optional offset.
     'Wde'
          A memory reference using 'DE' as a base register, without any
          offset.
     'Wfr'
          Any memory reference to an address in the far address space.
     'Wh1'
          A memory reference using 'HL' as a base register, with an
          optional one-byte offset.
     'Whb'
          A memory reference using 'HL' as a base register, with 'B' or
          'C' as the index register.
     'Whl'
          A memory reference using 'HL' as a base register, without any
          offset.
     'Ws1'
          A memory reference using 'SP' as a base register, with an
          optional one-byte offset.
     'Y'
          Any memory reference to an address in the near address space.
     'A'
          The 'AX' register.
     'B'
          The 'BC' register.
     'D'
          The 'DE' register.
     'R'
          'A' through 'L' registers.
     'S'
          The 'SP' register.
     'T'
          The 'HL' register.
     'Z08W'
          The 16-bit 'R8' register.
     'Z10W'
          The 16-bit 'R10' register.
     'Zint'
          The registers reserved for interrupts ('R24' to 'R31').
     'a'
          The 'A' register.
     'b'
          The 'B' register.
     'c'
          The 'C' register.
     'd'
          The 'D' register.
     'e'
          The 'E' register.
     'h'
          The 'H' register.
     'l'
          The 'L' register.
     'v'
          The virtual registers.
     'w'
          The 'PSW' register.
     'x'
          The 'X' register.

_RX--'config/rx/constraints.md'_
     'Q'
          An address which does not involve register indirect addressing
          or pre/post increment/decrement addressing.

     'Symbol'
          A symbol reference.

     'Int08'
          A constant in the range -256 to 255, inclusive.

     'Sint08'
          A constant in the range -128 to 127, inclusive.

     'Sint16'
          A constant in the range -32768 to 32767, inclusive.

     'Sint24'
          A constant in the range -8388608 to 8388607, inclusive.

     'Uint04'
          A constant in the range 0 to 15, inclusive.

_S/390 and zSeries--'config/s390/s390.h'_
     'a'
          Address register (general purpose register except r0)

     'c'
          Condition code register

     'd'
          Data register (arbitrary general purpose register)

     'f'
          Floating-point register

     'I'
          Unsigned 8-bit constant (0-255)

     'J'
          Unsigned 12-bit constant (0-4095)

     'K'
          Signed 16-bit constant (-32768-32767)

     'L'
          Value appropriate as displacement.
          '(0..4095)'
               for short displacement
          '(-524288..524287)'
               for long displacement

     'M'
          Constant integer with a value of 0x7fffffff.

     'N'
          Multiple letter constraint followed by 4 parameter letters.
          '0..9:'
               number of the part counting from most to least
               significant
          'H,Q:'
               mode of the part
          'D,S,H:'
               mode of the containing operand
          '0,F:'
               value of the other parts (F--all bits set)
          The constraint matches if the specified part of a constant has
          a value different from its other parts.

     'Q'
          Memory reference without index register and with short
          displacement.

     'R'
          Memory reference with index register and short displacement.

     'S'
          Memory reference without index register but with long
          displacement.

     'T'
          Memory reference with index register and long displacement.

     'U'
          Pointer with short displacement.

     'W'
          Pointer with long displacement.

     'Y'
          Shift count operand.

_SPARC--'config/sparc/sparc.h'_
     'f'
          Floating-point register on the SPARC-V8 architecture and lower
          floating-point register on the SPARC-V9 architecture.

     'e'
          Floating-point register.  It is equivalent to 'f' on the
          SPARC-V8 architecture and contains both lower and upper
          floating-point registers on the SPARC-V9 architecture.

     'c'
          Floating-point condition code register.

     'd'
          Lower floating-point register.  It is only valid on the
          SPARC-V9 architecture when the Visual Instruction Set is
          available.

     'b'
          Floating-point register.  It is only valid on the SPARC-V9
          architecture when the Visual Instruction Set is available.

     'h'
          64-bit global or out register for the SPARC-V8+ architecture.

     'C'
          The constant all-ones, for floating-point.

     'A'
          Signed 5-bit constant

     'D'
          A vector constant

     'I'
          Signed 13-bit constant

     'J'
          Zero

     'K'
          32-bit constant with the low 12 bits clear (a constant that
          can be loaded with the 'sethi' instruction)

     'L'
          A constant in the range supported by 'movcc' instructions
          (11-bit signed immediate)

     'M'
          A constant in the range supported by 'movrcc' instructions
          (10-bit signed immediate)

     'N'
          Same as 'K', except that it verifies that bits that are not in
          the lower 32-bit range are all zero.  Must be used instead of
          'K' for modes wider than 'SImode'

     'O'
          The constant 4096

     'G'
          Floating-point zero

     'H'
          Signed 13-bit constant, sign-extended to 32 or 64 bits

     'P'
          The constant -1

     'Q'
          Floating-point constant whose integral representation can be
          moved into an integer register using a single sethi
          instruction

     'R'
          Floating-point constant whose integral representation can be
          moved into an integer register using a single mov instruction

     'S'
          Floating-point constant whose integral representation can be
          moved into an integer register using a high/lo_sum instruction
          sequence

     'T'
          Memory address aligned to an 8-byte boundary

     'U'
          Even register

     'W'
          Memory address for 'e' constraint registers

     'w'
          Memory address with only a base register

     'Y'
          Vector zero

_SPU--'config/spu/spu.h'_
     'a'
          An immediate which can be loaded with the il/ila/ilh/ilhu
          instructions.  const_int is treated as a 64 bit value.

     'c'
          An immediate for and/xor/or instructions.  const_int is
          treated as a 64 bit value.

     'd'
          An immediate for the 'iohl' instruction.  const_int is treated
          as a 64 bit value.

     'f'
          An immediate which can be loaded with 'fsmbi'.

     'A'
          An immediate which can be loaded with the il/ila/ilh/ilhu
          instructions.  const_int is treated as a 32 bit value.

     'B'
          An immediate for most arithmetic instructions.  const_int is
          treated as a 32 bit value.

     'C'
          An immediate for and/xor/or instructions.  const_int is
          treated as a 32 bit value.

     'D'
          An immediate for the 'iohl' instruction.  const_int is treated
          as a 32 bit value.

     'I'
          A constant in the range [-64, 63] for shift/rotate
          instructions.

     'J'
          An unsigned 7-bit constant for conversion/nop/channel
          instructions.

     'K'
          A signed 10-bit constant for most arithmetic instructions.

     'M'
          A signed 16 bit immediate for 'stop'.

     'N'
          An unsigned 16-bit constant for 'iohl' and 'fsmbi'.

     'O'
          An unsigned 7-bit constant whose 3 least significant bits are
          0.

     'P'
          An unsigned 3-bit constant for 16-byte rotates and shifts

     'R'
          Call operand, reg, for indirect calls

     'S'
          Call operand, symbol, for relative calls.

     'T'
          Call operand, const_int, for absolute calls.

     'U'
          An immediate which can be loaded with the il/ila/ilh/ilhu
          instructions.  const_int is sign extended to 128 bit.

     'W'
          An immediate for shift and rotate instructions.  const_int is
          treated as a 32 bit value.

     'Y'
          An immediate for and/xor/or instructions.  const_int is sign
          extended as a 128 bit.

     'Z'
          An immediate for the 'iohl' instruction.  const_int is sign
          extended to 128 bit.

_TI C6X family--'config/c6x/constraints.md'_
     'a'
          Register file A (A0-A31).

     'b'
          Register file B (B0-B31).

     'A'
          Predicate registers in register file A (A0-A2 on C64X and
          higher, A1 and A2 otherwise).

     'B'
          Predicate registers in register file B (B0-B2).

     'C'
          A call-used register in register file B (B0-B9, B16-B31).

     'Da'
          Register file A, excluding predicate registers (A3-A31, plus
          A0 if not C64X or higher).

     'Db'
          Register file B, excluding predicate registers (B3-B31).

     'Iu4'
          Integer constant in the range 0 ... 15.

     'Iu5'
          Integer constant in the range 0 ... 31.

     'In5'
          Integer constant in the range -31 ... 0.

     'Is5'
          Integer constant in the range -16 ... 15.

     'I5x'
          Integer constant that can be the operand of an ADDA or a SUBA
          insn.

     'IuB'
          Integer constant in the range 0 ... 65535.

     'IsB'
          Integer constant in the range -32768 ... 32767.

     'IsC'
          Integer constant in the range -2^{20} ... 2^{20} - 1.

     'Jc'
          Integer constant that is a valid mask for the clr instruction.

     'Js'
          Integer constant that is a valid mask for the set instruction.

     'Q'
          Memory location with A base register.

     'R'
          Memory location with B base register.

     'Z'
          Register B14 (aka DP).

_TILE-Gx--'config/tilegx/constraints.md'_
     'R00'
     'R01'
     'R02'
     'R03'
     'R04'
     'R05'
     'R06'
     'R07'
     'R08'
     'R09'
     'R10'
          Each of these represents a register constraint for an
          individual register, from r0 to r10.

     'I'
          Signed 8-bit integer constant.

     'J'
          Signed 16-bit integer constant.

     'K'
          Unsigned 16-bit integer constant.

     'L'
          Integer constant that fits in one signed byte when incremented
          by one (-129 ... 126).

     'm'
          Memory operand.  If used together with '<' or '>', the operand
          can have postincrement which requires printing with '%In' and
          '%in' on TILE-Gx.  For example:

               asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));

     'M'
          A bit mask suitable for the BFINS instruction.

     'N'
          Integer constant that is a byte tiled out eight times.

     'O'
          The integer zero constant.

     'P'
          Integer constant that is a sign-extended byte tiled out as
          four shorts.

     'Q'
          Integer constant that fits in one signed byte when incremented
          (-129 ... 126), but excluding -1.

     'S'
          Integer constant that has all 1 bits consecutive and starting
          at bit 0.

     'T'
          A 16-bit fragment of a got, tls, or pc-relative reference.

     'U'
          Memory operand except postincrement.  This is roughly the same
          as 'm' when not used together with '<' or '>'.

     'W'
          An 8-element vector constant with identical elements.

     'Y'
          A 4-element vector constant with identical elements.

     'Z0'
          The integer constant 0xffffffff.

     'Z1'
          The integer constant 0xffffffff00000000.

_TILEPro--'config/tilepro/constraints.md'_
     'R00'
     'R01'
     'R02'
     'R03'
     'R04'
     'R05'
     'R06'
     'R07'
     'R08'
     'R09'
     'R10'
          Each of these represents a register constraint for an
          individual register, from r0 to r10.

     'I'
          Signed 8-bit integer constant.

     'J'
          Signed 16-bit integer constant.

     'K'
          Nonzero integer constant with low 16 bits zero.

     'L'
          Integer constant that fits in one signed byte when incremented
          by one (-129 ... 126).

     'm'
          Memory operand.  If used together with '<' or '>', the operand
          can have postincrement which requires printing with '%In' and
          '%in' on TILEPro.  For example:

               asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));

     'M'
          A bit mask suitable for the MM instruction.

     'N'
          Integer constant that is a byte tiled out four times.

     'O'
          The integer zero constant.

     'P'
          Integer constant that is a sign-extended byte tiled out as two
          shorts.

     'Q'
          Integer constant that fits in one signed byte when incremented
          (-129 ... 126), but excluding -1.

     'T'
          A symbolic operand, or a 16-bit fragment of a got, tls, or
          pc-relative reference.

     'U'
          Memory operand except postincrement.  This is roughly the same
          as 'm' when not used together with '<' or '>'.

     'W'
          A 4-element vector constant with identical elements.

     'Y'
          A 2-element vector constant with identical elements.

_Visium--'config/visium/constraints.md'_
     'b'
          EAM register 'mdb'

     'c'
          EAM register 'mdc'

     'f'
          Floating point register

     'l'
          General register, but not 'r29', 'r30' and 'r31'

     't'
          Register 'r1'

     'u'
          Register 'r2'

     'v'
          Register 'r3'

     'G'
          Floating-point constant 0.0

     'J'
          Integer constant in the range 0 ..  65535 (16-bit immediate)

     'K'
          Integer constant in the range 1 ..  31 (5-bit immediate)

     'L'
          Integer constant in the range -65535 ..  -1 (16-bit negative
          immediate)

     'M'
          Integer constant -1

     'O'
          Integer constant 0

     'P'
          Integer constant 32

_x86 family--'config/i386/constraints.md'_
     'R'
          Legacy register--the eight integer registers available on all
          i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp').

     'q'
          Any register accessible as 'Rl'.  In 32-bit mode, 'a', 'b',
          'c', and 'd'; in 64-bit mode, any integer register.

     'Q'
          Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'.

     'a'
          The 'a' register.

     'b'
          The 'b' register.

     'c'
          The 'c' register.

     'd'
          The 'd' register.

     'S'
          The 'si' register.

     'D'
          The 'di' register.

     'A'
          The 'a' and 'd' registers.  This class is used for
          instructions that return double word results in the 'ax:dx'
          register pair.  Single word values will be allocated either in
          'ax' or 'dx'.  For example on i386 the following implements
          'rdtsc':

               unsigned long long rdtsc (void)
               {
                 unsigned long long tick;
                 __asm__ __volatile__("rdtsc":"=A"(tick));
                 return tick;
               }

          This is not correct on x86-64 as it would allocate tick in
          either 'ax' or 'dx'.  You have to use the following variant
          instead:

               unsigned long long rdtsc (void)
               {
                 unsigned int tickl, tickh;
                 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
                 return ((unsigned long long)tickh << 32)|tickl;
               }

     'f'
          Any 80387 floating-point (stack) register.

     't'
          Top of 80387 floating-point stack ('%st(0)').

     'u'
          Second from top of 80387 floating-point stack ('%st(1)').

     'y'
          Any MMX register.

     'x'
          Any SSE register.

     'Yz'
          First SSE register ('%xmm0').

     'I'
          Integer constant in the range 0 ... 31, for 32-bit shifts.

     'J'
          Integer constant in the range 0 ... 63, for 64-bit shifts.

     'K'
          Signed 8-bit integer constant.

     'L'
          '0xFF' or '0xFFFF', for andsi as a zero-extending move.

     'M'
          0, 1, 2, or 3 (shifts for the 'lea' instruction).

     'N'
          Unsigned 8-bit integer constant (for 'in' and 'out'
          instructions).

     'G'
          Standard 80387 floating point constant.

     'C'
          Standard SSE floating point constant.

     'e'
          32-bit signed integer constant, or a symbolic reference known
          to fit that range (for immediate operands in sign-extending
          x86-64 instructions).

     'Z'
          32-bit unsigned integer constant, or a symbolic reference
          known to fit that range (for immediate operands in
          zero-extending x86-64 instructions).

_Xstormy16--'config/stormy16/stormy16.h'_
     'a'
          Register r0.

     'b'
          Register r1.

     'c'
          Register r2.

     'd'
          Register r8.

     'e'
          Registers r0 through r7.

     't'
          Registers r0 and r1.

     'y'
          The carry register.

     'z'
          Registers r8 and r9.

     'I'
          A constant between 0 and 3 inclusive.

     'J'
          A constant that has exactly one bit set.

     'K'
          A constant that has exactly one bit clear.

     'L'
          A constant between 0 and 255 inclusive.

     'M'
          A constant between -255 and 0 inclusive.

     'N'
          A constant between -3 and 0 inclusive.

     'O'
          A constant between 1 and 4 inclusive.

     'P'
          A constant between -4 and -1 inclusive.

     'Q'
          A memory reference that is a stack push.

     'R'
          A memory reference that is a stack pop.

     'S'
          A memory reference that refers to a constant address of known
          value.

     'T'
          The register indicated by Rx (not implemented yet).

     'U'
          A constant that is not between 2 and 15 inclusive.

     'Z'
          The constant 0.

_Xtensa--'config/xtensa/constraints.md'_
     'a'
          General-purpose 32-bit register

     'b'
          One-bit boolean register

     'A'
          MAC16 40-bit accumulator register

     'I'
          Signed 12-bit integer constant, for use in MOVI instructions

     'J'
          Signed 8-bit integer constant, for use in ADDI instructions

     'K'
          Integer constant valid for BccI instructions

     'L'
          Unsigned constant valid for BccUI instructions


File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: Using Assembly Language with C

6.43.4 Controlling Names Used in Assembler Code
-----------------------------------------------

You can specify the name to be used in the assembler code for a C
function or variable by writing the 'asm' (or '__asm__') keyword after
the declarator as follows:

     int foo asm ("myfoo") = 2;

This specifies that the name to be used for the variable 'foo' in the
assembler code should be 'myfoo' rather than the usual '_foo'.

 On systems where an underscore is normally prepended to the name of a C
function or variable, this feature allows you to define names for the
linker that do not start with an underscore.

 It does not make sense to use this feature with a non-static local
variable since such variables do not have assembler names.  If you are
trying to put the variable in a particular register, see *note Explicit
Reg Vars::.  GCC presently accepts such code with a warning, but will
probably be changed to issue an error, rather than a warning, in the
future.

 You cannot use 'asm' in this way in a function _definition_; but you
can get the same effect by writing a declaration for the function before
its definition and putting 'asm' there, like this:

     extern func () asm ("FUNC");

     func (x, y)
          int x, y;
     /* ... */

 It is up to you to make sure that the assembler names you choose do not
conflict with any other assembler symbols.  Also, you must not use a
register name; that would produce completely invalid assembler code.
GCC does not as yet have the ability to store static variables in
registers.  Perhaps that will be added.


File: gcc.info,  Node: Explicit Reg Vars,  Next: Size of an asm,  Prev: Asm Labels,  Up: Using Assembly Language with C

6.43.5 Variables in Specified Registers
---------------------------------------

GNU C allows you to put a few global variables into specified hardware
registers.  You can also specify the register in which an ordinary
register variable should be allocated.

   * Global register variables reserve registers throughout the program.
     This may be useful in programs such as programming language
     interpreters that have a couple of global variables that are
     accessed very often.

   * Local register variables in specific registers do not reserve the
     registers, except at the point where they are used as input or
     output operands in an 'asm' statement and the 'asm' statement
     itself is not deleted.  The compiler's data flow analysis is
     capable of determining where the specified registers contain live
     values, and where they are available for other uses.  Stores into
     local register variables may be deleted when they appear to be dead
     according to dataflow analysis.  References to local register
     variables may be deleted or moved or simplified.

     These local variables are sometimes convenient for use with the
     extended 'asm' feature (*note Extended Asm::), if you want to write
     one output of the assembler instruction directly into a particular
     register.  (This works provided the register you specify fits the
     constraints specified for that operand in the 'asm'.)

* Menu:

* Global Reg Vars::
* Local Reg Vars::


File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars

6.43.5.1 Defining Global Register Variables
...........................................

You can define a global register variable in GNU C like this:

     register int *foo asm ("a5");

Here 'a5' is the name of the register that should be used.  Choose a
register that is normally saved and restored by function calls on your
machine, so that library routines will not clobber it.

 Naturally the register name is CPU-dependent, so you need to
conditionalize your program according to CPU type.  The register 'a5' is
a good choice on a 68000 for a variable of pointer type.  On machines
with register windows, be sure to choose a "global" register that is not
affected magically by the function call mechanism.

 In addition, different operating systems on the same CPU may differ in
how they name the registers; then you need additional conditionals.  For
example, some 68000 operating systems call this register '%a5'.

 Eventually there may be a way of asking the compiler to choose a
register automatically, but first we need to figure out how it should
choose and how to enable you to guide the choice.  No solution is
evident.

 Defining a global register variable in a certain register reserves that
register entirely for this use, at least within the current compilation.
The register is not allocated for any other purpose in the functions in
the current compilation, and is not saved and restored by these
functions.  Stores into this register are never deleted even if they
appear to be dead, but references may be deleted or moved or simplified.

 It is not safe to access the global register variables from signal
handlers, or from more than one thread of control, because the system
library routines may temporarily use the register for other things
(unless you recompile them specially for the task at hand).

 It is not safe for one function that uses a global register variable to
call another such function 'foo' by way of a third function 'lose' that
is compiled without knowledge of this variable (i.e. in a different
source file in which the variable isn't declared).  This is because
'lose' might save the register and put some other value there.  For
example, you can't expect a global register variable to be available in
the comparison-function that you pass to 'qsort', since 'qsort' might
have put something else in that register.  (If you are prepared to
recompile 'qsort' with the same global register variable, you can solve
this problem.)

 If you want to recompile 'qsort' or other source files that do not
actually use your global register variable, so that they do not use that
register for any other purpose, then it suffices to specify the compiler
option '-ffixed-REG'.  You need not actually add a global register
declaration to their source code.

 A function that can alter the value of a global register variable
cannot safely be called from a function compiled without this variable,
because it could clobber the value the caller expects to find there on
return.  Therefore, the function that is the entry point into the part
of the program that uses the global register variable must explicitly
save and restore the value that belongs to its caller.

 On most machines, 'longjmp' restores to each global register variable
the value it had at the time of the 'setjmp'.  On some machines,
however, 'longjmp' does not change the value of global register
variables.  To be portable, the function that called 'setjmp' should
make other arrangements to save the values of the global register
variables, and to restore them in a 'longjmp'.  This way, the same thing
happens regardless of what 'longjmp' does.

 All global register variable declarations must precede all function
definitions.  If such a declaration could appear after function
definitions, the declaration would be too late to prevent the register
from being used for other purposes in the preceding functions.

 Global register variables may not have initial values, because an
executable file has no means to supply initial contents for a register.

 On the SPARC, there are reports that g3 ... g7 are suitable registers,
but certain library functions, such as 'getwd', as well as the
subroutines for division and remainder, modify g3 and g4.  g1 and g2 are
local temporaries.

 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
course, it does not do to use more than a few of those.


File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars

6.43.5.2 Specifying Registers for Local Variables
.................................................

You can define a local register variable with a specified register like
this:

     register int *foo asm ("a5");

Here 'a5' is the name of the register that should be used.  Note that
this is the same syntax used for defining global register variables, but
for a local variable it appears within a function.

 Naturally the register name is CPU-dependent, but this is not a
problem, since specific registers are most often useful with explicit
assembler instructions (*note Extended Asm::).  Both of these things
generally require that you conditionalize your program according to CPU
type.

 In addition, operating systems on one type of CPU may differ in how
they name the registers; then you need additional conditionals.  For
example, some 68000 operating systems call this register '%a5'.

 Defining such a register variable does not reserve the register; it
remains available for other uses in places where flow control determines
the variable's value is not live.

 This option does not guarantee that GCC generates code that has this
variable in the register you specify at all times.  You may not code an
explicit reference to this register in the assembler instruction
template part of an 'asm' statement and assume it always refers to this
variable.  However, using the variable as an input or output operand to
the 'asm' guarantees that the specified register is used for that
operand.  *Note Extended Asm::, for more information.

 Stores into local register variables may be deleted when they appear to
be dead according to dataflow analysis.  References to local register
variables may be deleted or moved or simplified.

 As with global register variables, it is recommended that you choose a
register that is normally saved and restored by function calls on your
machine, so that library routines will not clobber it.

 Sometimes when writing inline 'asm' code, you need to make an operand
be a specific register, but there's no matching constraint letter for
that register.  To force the operand into that register, create a local
variable and specify the register in the variable's declaration.  Then
use the local variable for the asm operand and specify any constraint
letter that matches the register:

     register int *p1 asm ("r0") = ...;
     register int *p2 asm ("r1") = ...;
     register int *result asm ("r0");
     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));

 _Warning:_ In the above example, be aware that a register (for example
r0) can be call-clobbered by subsequent code, including function calls
and library calls for arithmetic operators on other variables (for
example the initialization of p2).  In this case, use temporary
variables for expressions between the register assignments:

     int t1 = ...;
     register int *p1 asm ("r0") = ...;
     register int *p2 asm ("r1") = t1;
     register int *result asm ("r0");
     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));


File: gcc.info,  Node: Size of an asm,  Prev: Explicit Reg Vars,  Up: Using Assembly Language with C

6.43.6 Size of an 'asm'
-----------------------

Some targets require that GCC track the size of each instruction used in
order to generate correct code.  Because the final length of the code
produced by an 'asm' statement is only known by the assembler, GCC must
make an estimate as to how big it will be.  It does this by counting the
number of instructions in the pattern of the 'asm' and multiplying that
by the length of the longest instruction supported by that processor.
(When working out the number of instructions, it assumes that any
occurrence of a newline or of whatever statement separator character is
supported by the assembler - typically ';' -- indicates the end of an
instruction.)

 Normally, GCC's estimate is adequate to ensure that correct code is
generated, but it is possible to confuse the compiler if you use pseudo
instructions or assembler macros that expand into multiple real
instructions, or if you use assembler directives that expand to more
space in the object file than is needed for a single instruction.  If
this happens then the assembler may produce a diagnostic saying that a
label is unreachable.


File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Using Assembly Language with C,  Up: C Extensions

6.44 Alternate Keywords
=======================

'-ansi' and the various '-std' options disable certain keywords.  This
causes trouble when you want to use GNU C extensions, or a
general-purpose header file that should be usable by all programs,
including ISO C programs.  The keywords 'asm', 'typeof' and 'inline' are
not available in programs compiled with '-ansi' or '-std' (although
'inline' can be used in a program compiled with '-std=c99' or
'-std=c11').  The ISO C99 keyword 'restrict' is only available when
'-std=gnu99' (which will eventually be the default) or '-std=c99' (or
the equivalent '-std=iso9899:1999'), or an option for a later standard
version, is used.

 The way to solve these problems is to put '__' at the beginning and end
of each problematical keyword.  For example, use '__asm__' instead of
'asm', and '__inline__' instead of 'inline'.

 Other C compilers won't accept these alternative keywords; if you want
to compile with another compiler, you can define the alternate keywords
as macros to replace them with the customary keywords.  It looks like
this:

     #ifndef __GNUC__
     #define __asm__ asm
     #endif

 '-pedantic' and other options cause warnings for many GNU C extensions.
You can prevent such warnings within one expression by writing
'__extension__' before the expression.  '__extension__' has no effect
aside from this.


File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions

6.45 Incomplete 'enum' Types
============================

You can define an 'enum' tag without specifying its possible values.
This results in an incomplete type, much like what you get if you write
'struct foo' without describing the elements.  A later declaration that
does specify the possible values completes the type.

 You can't allocate variables or storage using the type while it is
incomplete.  However, you can work with pointers to that type.

 This extension may not be very useful, but it makes the handling of
'enum' more consistent with the way 'struct' and 'union' are handled.

 This extension is not supported by GNU C++.


File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions

6.46 Function Names as Strings
==============================

GCC provides three magic variables that hold the name of the current
function, as a string.  The first of these is '__func__', which is part
of the C99 standard:

 The identifier '__func__' is implicitly declared by the translator as
if, immediately following the opening brace of each function definition,
the declaration

     static const char __func__[] = "function-name";

appeared, where function-name is the name of the lexically-enclosing
function.  This name is the unadorned name of the function.

 '__FUNCTION__' is another name for '__func__', provided for backward
compatibility with old versions of GCC.

 In C, '__PRETTY_FUNCTION__' is yet another name for '__func__'.
However, in C++, '__PRETTY_FUNCTION__' contains the type signature of
the function as well as its bare name.  For example, this program:

     extern "C" {
     extern int printf (char *, ...);
     }

     class a {
      public:
       void sub (int i)
         {
           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
         }
     };

     int
     main (void)
     {
       a ax;
       ax.sub (0);
       return 0;
     }

gives this output:

     __FUNCTION__ = sub
     __PRETTY_FUNCTION__ = void a::sub(int)

 These identifiers are variables, not preprocessor macros, and may not
be used to initialize 'char' arrays or be concatenated with other string
literals.


File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions

6.47 Getting the Return or Frame Address of a Function
======================================================

These functions may be used to get information about the callers of a
function.

 -- Built-in Function: void * __builtin_return_address (unsigned int
          LEVEL)
     This function returns the return address of the current function,
     or of one of its callers.  The LEVEL argument is number of frames
     to scan up the call stack.  A value of '0' yields the return
     address of the current function, a value of '1' yields the return
     address of the caller of the current function, and so forth.  When
     inlining the expected behavior is that the function returns the
     address of the function that is returned to.  To work around this
     behavior use the 'noinline' function attribute.

     The LEVEL argument must be a constant integer.

     On some machines it may be impossible to determine the return
     address of any function other than the current one; in such cases,
     or when the top of the stack has been reached, this function
     returns '0' or a random value.  In addition,
     '__builtin_frame_address' may be used to determine if the top of
     the stack has been reached.

     Additional post-processing of the returned value may be needed, see
     '__builtin_extract_return_addr'.

     This function should only be used with a nonzero argument for
     debugging purposes.

 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR)
     The address as returned by '__builtin_return_address' may have to
     be fed through this function to get the actual encoded address.
     For example, on the 31-bit S/390 platform the highest bit has to be
     masked out, or on SPARC platforms an offset has to be added for the
     true next instruction to be executed.

     If no fixup is needed, this function simply passes through ADDR.

 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR)
     This function does the reverse of '__builtin_extract_return_addr'.

 -- Built-in Function: void * __builtin_frame_address (unsigned int
          LEVEL)
     This function is similar to '__builtin_return_address', but it
     returns the address of the function frame rather than the return
     address of the function.  Calling '__builtin_frame_address' with a
     value of '0' yields the frame address of the current function, a
     value of '1' yields the frame address of the caller of the current
     function, and so forth.

     The frame is the area on the stack that holds local variables and
     saved registers.  The frame address is normally the address of the
     first word pushed on to the stack by the function.  However, the
     exact definition depends upon the processor and the calling
     convention.  If the processor has a dedicated frame pointer
     register, and the function has a frame, then
     '__builtin_frame_address' returns the value of the frame pointer
     register.

     On some machines it may be impossible to determine the frame
     address of any function other than the current one; in such cases,
     or when the top of the stack has been reached, this function
     returns '0' if the first frame pointer is properly initialized by
     the startup code.

     This function should only be used with a nonzero argument for
     debugging purposes.


File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions

6.48 Using Vector Instructions through Built-in Functions
=========================================================

On some targets, the instruction set contains SIMD vector instructions
which operate on multiple values contained in one large register at the
same time.  For example, on the x86 the MMX, 3DNow! and SSE extensions
can be used this way.

 The first step in using these extensions is to provide the necessary
data types.  This should be done using an appropriate 'typedef':

     typedef int v4si __attribute__ ((vector_size (16)));

The 'int' type specifies the base type, while the attribute specifies
the vector size for the variable, measured in bytes.  For example, the
declaration above causes the compiler to set the mode for the 'v4si'
type to be 16 bytes wide and divided into 'int' sized units.  For a
32-bit 'int' this means a vector of 4 units of 4 bytes, and the
corresponding mode of 'foo' is V4SI.

 The 'vector_size' attribute is only applicable to integral and float
scalars, although arrays, pointers, and function return values are
allowed in conjunction with this construct.  Only sizes that are a power
of two are currently allowed.

 All the basic integer types can be used as base types, both as signed
and as unsigned: 'char', 'short', 'int', 'long', 'long long'.  In
addition, 'float' and 'double' can be used to build floating-point
vector types.

 Specifying a combination that is not valid for the current architecture
causes GCC to synthesize the instructions using a narrower mode.  For
example, if you specify a variable of type 'V4SI' and your architecture
does not allow for this specific SIMD type, GCC produces code that uses
4 'SIs'.

 The types defined in this manner can be used with a subset of normal C
operations.  Currently, GCC allows using the following operators on
these types: '+, -, *, /, unary minus, ^, |, &, ~, %'.

 The operations behave like C++ 'valarrays'.  Addition is defined as the
addition of the corresponding elements of the operands.  For example, in
the code below, each of the 4 elements in A is added to the
corresponding 4 elements in B and the resulting vector is stored in C.

     typedef int v4si __attribute__ ((vector_size (16)));

     v4si a, b, c;

     c = a + b;

 Subtraction, multiplication, division, and the logical operations
operate in a similar manner.  Likewise, the result of using the unary
minus or complement operators on a vector type is a vector whose
elements are the negative or complemented values of the corresponding
elements in the operand.

 It is possible to use shifting operators '<<', '>>' on integer-type
vectors.  The operation is defined as following: '{a0, a1, ..., an} >>
{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'.  Vector
operands must have the same number of elements.

 For convenience, it is allowed to use a binary vector operation where
one operand is a scalar.  In that case the compiler transforms the
scalar operand into a vector where each element is the scalar from the
operation.  The transformation happens only if the scalar could be
safely converted to the vector-element type.  Consider the following
code.

     typedef int v4si __attribute__ ((vector_size (16)));

     v4si a, b, c;
     long l;

     a = b + 1;    /* a = b + {1,1,1,1}; */
     a = 2 * b;    /* a = {2,2,2,2} * b; */

     a = l + a;    /* Error, cannot convert long to int. */

 Vectors can be subscripted as if the vector were an array with the same
number of elements and base type.  Out of bound accesses invoke
undefined behavior at run time.  Warnings for out of bound accesses for
vector subscription can be enabled with '-Warray-bounds'.

 Vector comparison is supported with standard comparison operators: '==,
!=, <, <=, >, >='.  Comparison operands can be vector expressions of
integer-type or real-type.  Comparison between integer-type vectors and
real-type vectors are not supported.  The result of the comparison is a
vector of the same width and number of elements as the comparison
operands with a signed integral element type.

 Vectors are compared element-wise producing 0 when comparison is false
and -1 (constant of the appropriate type where all bits are set)
otherwise.  Consider the following example.

     typedef int v4si __attribute__ ((vector_size (16)));

     v4si a = {1,2,3,4};
     v4si b = {3,2,1,4};
     v4si c;

     c = a >  b;     /* The result would be {0, 0,-1, 0}  */
     c = a == b;     /* The result would be {0,-1, 0,-1}  */

 In C++, the ternary operator '?:' is available.  'a?b:c', where 'b' and
'c' are vectors of the same type and 'a' is an integer vector with the
same number of elements of the same size as 'b' and 'c', computes all
three arguments and creates a vector '{a[0]?b[0]:c[0], a[1]?b[1]:c[1],
...}'.  Note that unlike in OpenCL, 'a' is thus interpreted as 'a != 0'
and not 'a < 0'.  As in the case of binary operations, this syntax is
also accepted when one of 'b' or 'c' is a scalar that is then
transformed into a vector.  If both 'b' and 'c' are scalars and the type
of 'true?b:c' has the same size as the element type of 'a', then 'b' and
'c' are converted to a vector type whose elements have this type and
with the same number of elements as 'a'.

 In C++, the logic operators '!, &&, ||' are available for vectors.
'!v' is equivalent to 'v == 0', 'a && b' is equivalent to 'a!=0 & b!=0'
and 'a || b' is equivalent to 'a!=0 | b!=0'.  For mixed operations
between a scalar 's' and a vector 'v', 's && v' is equivalent to
's?v!=0:0' (the evaluation is short-circuit) and 'v && s' is equivalent
to 'v!=0 & (s?-1:0)'.

 Vector shuffling is available using functions '__builtin_shuffle (vec,
mask)' and '__builtin_shuffle (vec0, vec1, mask)'.  Both functions
construct a permutation of elements from one or two vectors and return a
vector of the same type as the input vector(s).  The MASK is an integral
vector with the same width (W) and element count (N) as the output
vector.

 The elements of the input vectors are numbered in memory ordering of
VEC0 beginning at 0 and VEC1 beginning at N.  The elements of MASK are
considered modulo N in the single-operand case and modulo 2*N in the
two-operand case.

 Consider the following example,

     typedef int v4si __attribute__ ((vector_size (16)));

     v4si a = {1,2,3,4};
     v4si b = {5,6,7,8};
     v4si mask1 = {0,1,1,3};
     v4si mask2 = {0,4,2,5};
     v4si res;

     res = __builtin_shuffle (a, mask1);       /* res is {1,2,2,4}  */
     res = __builtin_shuffle (a, b, mask2);    /* res is {1,5,3,6}  */

 Note that '__builtin_shuffle' is intentionally semantically compatible
with the OpenCL 'shuffle' and 'shuffle2' functions.

 You can declare variables and use them in function calls and returns,
as well as in assignments and some casts.  You can specify a vector type
as a return type for a function.  Vector types can also be used as
function arguments.  It is possible to cast from one vector type to
another, provided they are of the same size (in fact, you can also cast
vectors to and from other datatypes of the same size).

 You cannot operate between vectors of different lengths or different
signedness without a cast.


File: gcc.info,  Node: Offsetof,  Next: __sync Builtins,  Prev: Vector Extensions,  Up: C Extensions

6.49 Support for 'offsetof'
===========================

GCC implements for both C and C++ a syntactic extension to implement the
'offsetof' macro.

     primary:
             "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"

     offsetof_member_designator:
               identifier
             | offsetof_member_designator "." identifier
             | offsetof_member_designator "[" expr "]"

 This extension is sufficient such that

     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)

is a suitable definition of the 'offsetof' macro.  In C++, TYPE may be
dependent.  In either case, MEMBER may consist of a single identifier,
or a sequence of member accesses and array references.


File: gcc.info,  Node: __sync Builtins,  Next: __atomic Builtins,  Prev: Offsetof,  Up: C Extensions

6.50 Legacy '__sync' Built-in Functions for Atomic Memory Access
================================================================

The following built-in functions are intended to be compatible with
those described in the 'Intel Itanium Processor-specific Application
Binary Interface', section 7.4.  As such, they depart from normal GCC
practice by not using the '__builtin_' prefix and also by being
overloaded so that they work on multiple types.

 The definition given in the Intel documentation allows only for the use
of the types 'int', 'long', 'long long' or their unsigned counterparts.
GCC allows any integral scalar or pointer type that is 1, 2, 4 or 8
bytes in length.

 These functions are implemented in terms of the '__atomic' builtins
(*note __atomic Builtins::).  They should not be used for new code which
should use the '__atomic' builtins instead.

 Not all operations are supported by all target processors.  If a
particular operation cannot be implemented on the target processor, a
warning is generated and a call to an external function is generated.
The external function carries the same name as the built-in version,
with an additional suffix '_N' where N is the size of the data type.

 In most cases, these built-in functions are considered a "full
barrier".  That is, no memory operand is moved across the operation,
either forward or backward.  Further, instructions are issued as
necessary to prevent the processor from speculating loads across the
operation and from queuing stores after the operation.

 All of the routines are described in the Intel documentation to take
"an optional list of variables protected by the memory barrier".  It's
not clear what is meant by that; it could mean that _only_ the listed
variables are protected, or it could mean a list of additional variables
to be protected.  The list is ignored by GCC which treats it as empty.
GCC interprets an empty list as meaning that all globally accessible
variables should be protected.

'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
     These built-in functions perform the operation suggested by the
     name, and returns the value that had previously been in memory.
     That is,

          { tmp = *ptr; *ptr OP= value; return tmp; }
          { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }   // nand

     _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as
     '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'.

'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
     These built-in functions perform the operation suggested by the
     name, and return the new value.  That is,

          { *ptr OP= value; return *ptr; }
          { *ptr = ~(*ptr & value); return *ptr; }   // nand

     _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as
     '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'.

'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)'
     These built-in functions perform an atomic compare and swap.  That
     is, if the current value of '*PTR' is OLDVAL, then write NEWVAL
     into '*PTR'.

     The "bool" version returns true if the comparison is successful and
     NEWVAL is written.  The "val" version returns the contents of
     '*PTR' before the operation.

'__sync_synchronize (...)'
     This built-in function issues a full memory barrier.

'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
     This built-in function, as described by Intel, is not a traditional
     test-and-set operation, but rather an atomic exchange operation.
     It writes VALUE into '*PTR', and returns the previous contents of
     '*PTR'.

     Many targets have only minimal support for such locks, and do not
     support a full exchange operation.  In this case, a target may
     support reduced functionality here by which the _only_ valid value
     to store is the immediate constant 1.  The exact value actually
     stored in '*PTR' is implementation defined.

     This built-in function is not a full barrier, but rather an
     "acquire barrier".  This means that references after the operation
     cannot move to (or be speculated to) before the operation, but
     previous memory stores may not be globally visible yet, and
     previous memory loads may not yet be satisfied.

'void __sync_lock_release (TYPE *ptr, ...)'
     This built-in function releases the lock acquired by
     '__sync_lock_test_and_set'.  Normally this means writing the
     constant 0 to '*PTR'.

     This built-in function is not a full barrier, but rather a "release
     barrier".  This means that all previous memory stores are globally
     visible, and all previous memory loads have been satisfied, but
     following memory reads are not prevented from being speculated to
     before the barrier.


File: gcc.info,  Node: __atomic Builtins,  Next: Integer Overflow Builtins,  Prev: __sync Builtins,  Up: C Extensions

6.51 Built-in Functions for Memory Model Aware Atomic Operations
================================================================

The following built-in functions approximately match the requirements
for C++11 memory model.  Many are similar to the '__sync' prefixed
built-in functions, but all also have a memory model parameter.  These
are all identified by being prefixed with '__atomic', and most are
overloaded such that they work with multiple types.

 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8
bytes in length.  16-byte integral types are also allowed if '__int128'
(*note __int128::) is supported by the architecture.

 Target architectures are encouraged to provide their own patterns for
each of these built-in functions.  If no target is provided, the
original non-memory model set of '__sync' atomic built-in functions are
utilized, along with any required synchronization fences surrounding it
in order to achieve the proper behavior.  Execution in this case is
subject to the same restrictions as those built-in functions.

 If there is no pattern or mechanism to provide a lock free instruction
sequence, a call is made to an external routine with the same parameters
to be resolved at run time.

 The four non-arithmetic functions (load, store, exchange, and
compare_exchange) all have a generic version as well.  This generic
version works on any data type.  If the data type size maps to one of
the integral sizes that may have lock free support, the generic version
utilizes the lock free built-in function.  Otherwise an external call is
left to be resolved at run time.  This external call is the same format
with the addition of a 'size_t' parameter inserted as the first
parameter indicating the size of the object being pointed to.  All
objects must be the same size.

 There are 6 different memory models that can be specified.  These map
to the same names in the C++11 standard.  Refer there or to the GCC wiki
on atomic synchronization
(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed
definitions.  These memory models integrate both barriers to code motion
as well as synchronization requirements with other threads.  These are
listed in approximately ascending order of strength.  It is also
possible to use target specific flags for memory model flags, like
Hardware Lock Elision.

'__ATOMIC_RELAXED'
     No barriers or synchronization.
'__ATOMIC_CONSUME'
     Data dependency only for both barrier and synchronization with
     another thread.
'__ATOMIC_ACQUIRE'
     Barrier to hoisting of code and synchronizes with release (or
     stronger) semantic stores from another thread.
'__ATOMIC_RELEASE'
     Barrier to sinking of code and synchronizes with acquire (or
     stronger) semantic loads from another thread.
'__ATOMIC_ACQ_REL'
     Full barrier in both directions and synchronizes with acquire loads
     and release stores in another thread.
'__ATOMIC_SEQ_CST'
     Full barrier in both directions and synchronizes with acquire loads
     and release stores in all threads.

 When implementing patterns for these built-in functions, the memory
model parameter can be ignored as long as the pattern implements the
most restrictive '__ATOMIC_SEQ_CST' model.  Any of the other memory
models execute correctly with this memory model but they may not execute
as efficiently as they could with a more appropriate implementation of
the relaxed requirements.

 Note that the C++11 standard allows for the memory model parameter to
be determined at run time rather than at compile time.  These built-in
functions map any run-time value to '__ATOMIC_SEQ_CST' rather than
invoke a runtime library call or inline a switch statement.  This is
standard compliant, safe, and the simplest approach for now.

 The memory model parameter is a signed int, but only the lower 8 bits
are reserved for the memory model.  The remainder of the signed int is
reserved for future use and should be 0.  Use of the predefined atomic
values ensures proper usage.

 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel)
     This built-in function implements an atomic load operation.  It
     returns the contents of '*PTR'.

     The valid memory model variants are '__ATOMIC_RELAXED',
     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'.

 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int
          memmodel)
     This is the generic version of an atomic load.  It returns the
     contents of '*PTR' in '*RET'.

 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int
          memmodel)
     This built-in function implements an atomic store operation.  It
     writes 'VAL' into '*PTR'.

     The valid memory model variants are '__ATOMIC_RELAXED',
     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.

 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int
          memmodel)
     This is the generic version of an atomic store.  It stores the
     value of '*VAL' into '*PTR'.

 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val,
          int memmodel)
     This built-in function implements an atomic exchange operation.  It
     writes VAL into '*PTR', and returns the previous contents of
     '*PTR'.

     The valid memory model variants are '__ATOMIC_RELAXED',
     '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', '__ATOMIC_RELEASE', and
     '__ATOMIC_ACQ_REL'.

 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val,
          TYPE *ret, int memmodel)
     This is the generic version of an atomic exchange.  It stores the
     contents of '*VAL' into '*PTR'.  The original value of '*PTR' is
     copied into '*RET'.

 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE
          *expected, TYPE desired, bool weak, int success_memmodel, int
          failure_memmodel)
     This built-in function implements an atomic compare and exchange
     operation.  This compares the contents of '*PTR' with the contents
     of '*EXPECTED' and if equal, writes DESIRED into '*PTR'.  If they
     are not equal, the current contents of '*PTR' is written into
     '*EXPECTED'.  WEAK is true for weak compare_exchange, and false for
     the strong variation.  Many targets only offer the strong variation
     and ignore the parameter.  When in doubt, use the strong variation.

     True is returned if DESIRED is written into '*PTR' and the
     execution is considered to conform to the memory model specified by
     SUCCESS_MEMMODEL.  There are no restrictions on what memory model
     can be used here.

     False is returned otherwise, and the execution is considered to
     conform to FAILURE_MEMMODEL.  This memory model cannot be
     '__ATOMIC_RELEASE' nor '__ATOMIC_ACQ_REL'.  It also cannot be a
     stronger model than that specified by SUCCESS_MEMMODEL.

 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE
          *expected, TYPE *desired, bool weak, int success_memmodel, int
          failure_memmodel)
     This built-in function implements the generic version of
     '__atomic_compare_exchange'.  The function is virtually identical
     to '__atomic_compare_exchange_n', except the desired value is also
     a pointer.

 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int
          memmodel)
 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int
          memmodel)
 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int
          memmodel)
 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int
          memmodel)
 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int
          memmodel)
 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val,
          int memmodel)
     These built-in functions perform the operation suggested by the
     name, and return the result of the operation.  That is,

          { *ptr OP= val; return *ptr; }

     All memory models are valid.

 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int
          memmodel)
 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int
          memmodel)
 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int
          memmodel)
 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int
          memmodel)
 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int
          memmodel)
 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val,
          int memmodel)
     These built-in functions perform the operation suggested by the
     name, and return the value that had previously been in '*PTR'.
     That is,

          { tmp = *ptr; *ptr OP= val; return tmp; }

     All memory models are valid.

 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int
          memmodel)

     This built-in function performs an atomic test-and-set operation on
     the byte at '*PTR'.  The byte is set to some implementation defined
     nonzero "set" value and the return value is 'true' if and only if
     the previous contents were "set".  It should be only used for
     operands of type 'bool' or 'char'.  For other types only part of
     the value may be set.

     All memory models are valid.

 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel)

     This built-in function performs an atomic clear operation on
     '*PTR'.  After the operation, '*PTR' contains 0.  It should be only
     used for operands of type 'bool' or 'char' and in conjunction with
     '__atomic_test_and_set'.  For other types it may only clear
     partially.  If the type is not 'bool' prefer using
     '__atomic_store'.

     The valid memory model variants are '__ATOMIC_RELAXED',
     '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'.

 -- Built-in Function: void __atomic_thread_fence (int memmodel)

     This built-in function acts as a synchronization fence between
     threads based on the specified memory model.

     All memory orders are valid.

 -- Built-in Function: void __atomic_signal_fence (int memmodel)

     This built-in function acts as a synchronization fence between a
     thread and signal handlers based in the same thread.

     All memory orders are valid.

 -- Built-in Function: bool __atomic_always_lock_free (size_t size, void
          *ptr)

     This built-in function returns true if objects of SIZE bytes always
     generate lock free atomic instructions for the target architecture.
     SIZE must resolve to a compile-time constant and the result also
     resolves to a compile-time constant.

     PTR is an optional pointer to the object that may be used to
     determine alignment.  A value of 0 indicates typical alignment
     should be used.  The compiler may also ignore this parameter.

          if (_atomic_always_lock_free (sizeof (long long), 0))

 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void
          *ptr)

     This built-in function returns true if objects of SIZE bytes always
     generate lock free atomic instructions for the target architecture.
     If it is not known to be lock free a call is made to a runtime
     routine named '__atomic_is_lock_free'.

     PTR is an optional pointer to the object that may be used to
     determine alignment.  A value of 0 indicates typical alignment
     should be used.  The compiler may also ignore this parameter.


File: gcc.info,  Node: Integer Overflow Builtins,  Next: x86 specific memory model extensions for transactional memory,  Prev: __atomic Builtins,  Up: C Extensions

6.52 Built-in Functions to Perform Arithmetic with Overflow Checking
====================================================================

The following built-in functions allow performing simple arithmetic
operations together with checking whether the operations overflowed.

 -- Built-in Function: bool __builtin_add_overflow (TYPE1 a, TYPE2 b,
          TYPE3 *res)
 -- Built-in Function: bool __builtin_sadd_overflow (int a, int b, int
          *res)
 -- Built-in Function: bool __builtin_saddl_overflow (long int a, long
          int b, long int *res)
 -- Built-in Function: bool __builtin_saddll_overflow (long long int a,
          long long int b, long int *res)
 -- Built-in Function: bool __builtin_uadd_overflow (unsigned int a,
          unsigned int b, unsigned int *res)
 -- Built-in Function: bool __builtin_uaddl_overflow (unsigned long int
          a, unsigned long int b, unsigned long int *res)
 -- Built-in Function: bool __builtin_uaddll_overflow (unsigned long
          long int a, unsigned long long int b, unsigned long int *res)

     These built-in functions promote the first two operands into
     infinite precision signed type and perform addition on those
     promoted operands.  The result is then cast to the type the third
     pointer argument points to and stored there.  If the stored result
     is equal to the infinite precision result, the built-in functions
     return false, otherwise they return true.  As the addition is
     performed in infinite signed precision, these built-in functions
     have fully defined behavior for all argument values.

     The first built-in function allows arbitrary integral types for
     operands and the result type must be pointer to some integer type,
     the rest of the built-in functions have explicit integer types.

     The compiler will attempt to use hardware instructions to implement
     these built-in functions where possible, like conditional jump on
     overflow after addition, conditional jump on carry etc.

 -- Built-in Function: bool __builtin_sub_overflow (TYPE1 a, TYPE2 b,
          TYPE3 *res)
 -- Built-in Function: bool __builtin_ssub_overflow (int a, int b, int
          *res)
 -- Built-in Function: bool __builtin_ssubl_overflow (long int a, long
          int b, long int *res)
 -- Built-in Function: bool __builtin_ssubll_overflow (long long int a,
          long long int b, long int *res)
 -- Built-in Function: bool __builtin_usub_overflow (unsigned int a,
          unsigned int b, unsigned int *res)
 -- Built-in Function: bool __builtin_usubl_overflow (unsigned long int
          a, unsigned long int b, unsigned long int *res)
 -- Built-in Function: bool __builtin_usubll_overflow (unsigned long
          long int a, unsigned long long int b, unsigned long int *res)

     These built-in functions are similar to the add overflow checking
     built-in functions above, except they perform subtraction, subtract
     the second argument from the first one, instead of addition.

 -- Built-in Function: bool __builtin_mul_overflow (TYPE1 a, TYPE2 b,
          TYPE3 *res)
 -- Built-in Function: bool __builtin_smul_overflow (int a, int b, int
          *res)
 -- Built-in Function: bool __builtin_smull_overflow (long int a, long
          int b, long int *res)
 -- Built-in Function: bool __builtin_smulll_overflow (long long int a,
          long long int b, long int *res)
 -- Built-in Function: bool __builtin_umul_overflow (unsigned int a,
          unsigned int b, unsigned int *res)
 -- Built-in Function: bool __builtin_umull_overflow (unsigned long int
          a, unsigned long int b, unsigned long int *res)
 -- Built-in Function: bool __builtin_umulll_overflow (unsigned long
          long int a, unsigned long long int b, unsigned long int *res)

     These built-in functions are similar to the add overflow checking
     built-in functions above, except they perform multiplication,
     instead of addition.


File: gcc.info,  Node: x86 specific memory model extensions for transactional memory,  Next: Object Size Checking,  Prev: Integer Overflow Builtins,  Up: C Extensions

6.53 x86-Specific Memory Model Extensions for Transactional Memory
==================================================================

The x86 architecture supports additional memory ordering flags to mark
lock critical sections for hardware lock elision.  These must be
specified in addition to an existing memory model to atomic intrinsics.

'__ATOMIC_HLE_ACQUIRE'
     Start lock elision on a lock variable.  Memory model must be
     '__ATOMIC_ACQUIRE' or stronger.
'__ATOMIC_HLE_RELEASE'
     End lock elision on a lock variable.  Memory model must be
     '__ATOMIC_RELEASE' or stronger.

 When a lock acquire fails it is required for good performance to abort
the transaction quickly.  This can be done with a '_mm_pause'

     #include <immintrin.h> // For _mm_pause

     int lockvar;

     /* Acquire lock with lock elision */
     while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE))
         _mm_pause(); /* Abort failed transaction */
     ...
     /* Free lock with lock elision */
     __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE);


File: gcc.info,  Node: Object Size Checking,  Next: Pointer Bounds Checker builtins,  Prev: x86 specific memory model extensions for transactional memory,  Up: C Extensions

6.54 Object Size Checking Built-in Functions
============================================

GCC implements a limited buffer overflow protection mechanism that can
prevent some buffer overflow attacks.

 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
          TYPE)
     is a built-in construct that returns a constant number of bytes
     from PTR to the end of the object PTR pointer points to (if known
     at compile time).  '__builtin_object_size' never evaluates its
     arguments for side-effects.  If there are any side-effects in them,
     it returns '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for TYPE
     2 or 3.  If there are multiple objects PTR can point to and all of
     them are known at compile time, the returned number is the maximum
     of remaining byte counts in those objects if TYPE & 2 is 0 and
     minimum if nonzero.  If it is not possible to determine which
     objects PTR points to at compile time, '__builtin_object_size'
     should return '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for
     TYPE 2 or 3.

     TYPE is an integer constant from 0 to 3.  If the least significant
     bit is clear, objects are whole variables, if it is set, a closest
     surrounding subobject is considered the object a pointer points to.
     The second bit determines if maximum or minimum of remaining bytes
     is computed.

          struct V { char buf1[10]; int b; char buf2[10]; } var;
          char *p = &var.buf1[1], *q = &var.b;

          /* Here the object p points to is var.  */
          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
          /* The subobject p points to is var.buf1.  */
          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
          /* The object q points to is var.  */
          assert (__builtin_object_size (q, 0)
                  == (char *) (&var + 1) - (char *) &var.b);
          /* The subobject q points to is var.b.  */
          assert (__builtin_object_size (q, 1) == sizeof (var.b));

 There are built-in functions added for many common string operation
functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is
provided.  This built-in has an additional last argument, which is the
number of bytes remaining in object the DEST argument points to or
'(size_t) -1' if the size is not known.

 The built-in functions are optimized into the normal string functions
like 'memcpy' if the last argument is '(size_t) -1' or if it is known at
compile time that the destination object will not be overflown.  If the
compiler can determine at compile time the object will be always
overflown, it issues a warning.

 The intended use can be e.g.

     #undef memcpy
     #define bos0(dest) __builtin_object_size (dest, 0)
     #define memcpy(dest, src, n) \
       __builtin___memcpy_chk (dest, src, n, bos0 (dest))

     char *volatile p;
     char buf[10];
     /* It is unknown what object p points to, so this is optimized
        into plain memcpy - no checking is possible.  */
     memcpy (p, "abcde", n);
     /* Destination is known and length too.  It is known at compile
        time there will be no overflow.  */
     memcpy (&buf[5], "abcde", 5);
     /* Destination is known, but the length is not known at compile time.
        This will result in __memcpy_chk call that can check for overflow
        at run time.  */
     memcpy (&buf[5], "abcde", n);
     /* Destination is known and it is known at compile time there will
        be overflow.  There will be a warning and __memcpy_chk call that
        will abort the program at run time.  */
     memcpy (&buf[6], "abcde", 5);

 Such built-in functions are provided for 'memcpy', 'mempcpy',
'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and
'strncat'.

 There are also checking built-in functions for formatted output
functions.
     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
                                   const char *fmt, ...);
     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
                                   va_list ap);
     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
                                    const char *fmt, va_list ap);

 The added FLAG argument is passed unchanged to '__sprintf_chk' etc.
functions and can contain implementation specific flags on what
additional security measures the checking function might take, such as
handling '%n' differently.

 The OS argument is the object size S points to, like in the other
built-in functions.  There is a small difference in the behavior though,
if OS is '(size_t) -1', the built-in functions are optimized into the
non-checking functions only if FLAG is 0, otherwise the checking
function is called with OS argument set to '(size_t) -1'.

 In addition to this, there are checking built-in functions
'__builtin___printf_chk', '__builtin___vprintf_chk',
'__builtin___fprintf_chk' and '__builtin___vfprintf_chk'.  These have
just one additional argument, FLAG, right before format string FMT.  If
the compiler is able to optimize them to 'fputc' etc. functions, it
does, otherwise the checking function is called and the FLAG argument
passed to it.


File: gcc.info,  Node: Pointer Bounds Checker builtins,  Next: Cilk Plus Builtins,  Prev: Object Size Checking,  Up: C Extensions

6.55 Pointer Bounds Checker Built-in Functions
==============================================

GCC provides a set of built-in functions to control Pointer Bounds
Checker instrumentation.  Note that all Pointer Bounds Checker builtins
can be used even if you compile with Pointer Bounds Checker off
('-fno-check-pointer-bounds').  The behavior may differ in such case as
documented below.

 -- Built-in Function: void * __builtin___bnd_set_ptr_bounds (const void
          *Q, size_t SIZE)

     This built-in function returns a new pointer with the value of Q,
     and associate it with the bounds [Q, Q+SIZE-1].  With Pointer
     Bounds Checker off, the built-in function just returns the first
     argument.

          extern void *__wrap_malloc (size_t n)
          {
            void *p = (void *)__real_malloc (n);
            if (!p) return __builtin___bnd_null_ptr_bounds (p);
            return __builtin___bnd_set_ptr_bounds (p, n);
          }

 -- Built-in Function: void * __builtin___bnd_narrow_ptr_bounds (const
          void *P, const void *Q, size_t SIZE)

     This built-in function returns a new pointer with the value of P
     and associates it with the narrowed bounds formed by the
     intersection of bounds associated with Q and the bounds [P, P +
     SIZE - 1].  With Pointer Bounds Checker off, the built-in function
     just returns the first argument.

          void init_objects (object *objs, size_t size)
          {
            size_t i;
            /* Initialize objects one-by-one passing pointers with bounds of
               an object, not the full array of objects.  */
            for (i = 0; i < size; i++)
              init_object (__builtin___bnd_narrow_ptr_bounds (objs + i, objs,
                                                              sizeof(object)));
          }

 -- Built-in Function: void * __builtin___bnd_copy_ptr_bounds (const
          void *Q, const void *R)

     This built-in function returns a new pointer with the value of Q,
     and associates it with the bounds already associated with pointer
     R.  With Pointer Bounds Checker off, the built-in function just
     returns the first argument.

          /* Here is a way to get pointer to object's field but
             still with the full object's bounds.  */
          int *field_ptr = __builtin___bnd_copy_ptr_bounds (&objptr->int_field,
                                                            objptr);

 -- Built-in Function: void * __builtin___bnd_init_ptr_bounds (const
          void *Q)

     This built-in function returns a new pointer with the value of Q,
     and associates it with INIT (allowing full memory access) bounds.
     With Pointer Bounds Checker off, the built-in function just returns
     the first argument.

 -- Built-in Function: void * __builtin___bnd_null_ptr_bounds (const
          void *Q)

     This built-in function returns a new pointer with the value of Q,
     and associates it with NULL (allowing no memory access) bounds.
     With Pointer Bounds Checker off, the built-in function just returns
     the first argument.

 -- Built-in Function: void __builtin___bnd_store_ptr_bounds (const void
          **PTR_ADDR, const void *PTR_VAL)

     This built-in function stores the bounds associated with pointer
     PTR_VAL and location PTR_ADDR into Bounds Table.  This can be
     useful to propagate bounds from legacy code without touching the
     associated pointer's memory when pointers are copied as integers.
     With Pointer Bounds Checker off, the built-in function call is
     ignored.

 -- Built-in Function: void __builtin___bnd_chk_ptr_lbounds (const void
          *Q)

     This built-in function checks if the pointer Q is within the lower
     bound of its associated bounds.  With Pointer Bounds Checker off,
     the built-in function call is ignored.

          extern void *__wrap_memset (void *dst, int c, size_t len)
          {
            if (len > 0)
              {
                __builtin___bnd_chk_ptr_lbounds (dst);
                __builtin___bnd_chk_ptr_ubounds ((char *)dst + len - 1);
                __real_memset (dst, c, len);
              }
            return dst;
          }

 -- Built-in Function: void __builtin___bnd_chk_ptr_ubounds (const void
          *Q)

     This built-in function checks if the pointer Q is within the upper
     bound of its associated bounds.  With Pointer Bounds Checker off,
     the built-in function call is ignored.

 -- Built-in Function: void __builtin___bnd_chk_ptr_bounds (const void
          *Q, size_t SIZE)

     This built-in function checks if [Q, Q + SIZE - 1] is within the
     lower and upper bounds associated with Q.  With Pointer Bounds
     Checker off, the built-in function call is ignored.

          extern void *__wrap_memcpy (void *dst, const void *src, size_t n)
          {
            if (n > 0)
              {
                __bnd_chk_ptr_bounds (dst, n);
                __bnd_chk_ptr_bounds (src, n);
                __real_memcpy (dst, src, n);
              }
            return dst;
          }

 -- Built-in Function: const void * __builtin___bnd_get_ptr_lbound
          (const void *Q)

     This built-in function returns the lower bound associated with the
     pointer Q, as a pointer value.  This is useful for debugging using
     'printf'.  With Pointer Bounds Checker off, the built-in function
     returns 0.

          void *lb = __builtin___bnd_get_ptr_lbound (q);
          void *ub = __builtin___bnd_get_ptr_ubound (q);
          printf ("q = %p  lb(q) = %p  ub(q) = %p", q, lb, ub);

 -- Built-in Function: const void * __builtin___bnd_get_ptr_ubound
          (const void *Q)

     This built-in function returns the upper bound (which is a pointer)
     associated with the pointer Q.  With Pointer Bounds Checker off,
     the built-in function returns -1.


File: gcc.info,  Node: Cilk Plus Builtins,  Next: Other Builtins,  Prev: Pointer Bounds Checker builtins,  Up: C Extensions

6.56 Cilk Plus C/C++ Language Extension Built-in Functions
==========================================================

GCC provides support for the following built-in reduction functions if
Cilk Plus is enabled.  Cilk Plus can be enabled using the '-fcilkplus'
flag.

   * '__sec_implicit_index'
   * '__sec_reduce'
   * '__sec_reduce_add'
   * '__sec_reduce_all_nonzero'
   * '__sec_reduce_all_zero'
   * '__sec_reduce_any_nonzero'
   * '__sec_reduce_any_zero'
   * '__sec_reduce_max'
   * '__sec_reduce_min'
   * '__sec_reduce_max_ind'
   * '__sec_reduce_min_ind'
   * '__sec_reduce_mul'
   * '__sec_reduce_mutating'

 Further details and examples about these built-in functions are
described in the Cilk Plus language manual which can be found at
<http://www.cilkplus.org>.


File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Cilk Plus Builtins,  Up: C Extensions

6.57 Other Built-in Functions Provided by GCC
=============================================

GCC provides a large number of built-in functions other than the ones
mentioned above.  Some of these are for internal use in the processing
of exceptions or variable-length argument lists and are not documented
here because they may change from time to time; we do not recommend
general use of these functions.

 The remaining functions are provided for optimization purposes.

 GCC includes built-in versions of many of the functions in the standard
C library.  The versions prefixed with '__builtin_' are always treated
as having the same meaning as the C library function even if you specify
the '-fno-builtin' option.  (*note C Dialect Options::) Many of these
functions are only optimized in certain cases; if they are not optimized
in a particular case, a call to the library function is emitted.

 Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or
'-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero',
'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l',
'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked',
'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r',
'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1',
'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy',
'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'scalbf',
'scalbl', 'scalb', 'signbit', 'signbitf', 'signbitl', 'signbitd32',
'signbitd64', 'signbitd128', 'significandf', 'significandl',
'significand', 'sincosf', 'sincosl', 'sincos', 'stpcpy', 'stpncpy',
'strcasecmp', 'strdup', 'strfmon', 'strncasecmp', 'strndup', 'toascii',
'y0f', 'y0l', 'y0', 'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be
handled as built-in functions.  All these functions have corresponding
versions prefixed with '__builtin_', which may be used even in strict
C90 mode.

 The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf',
'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl',
'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos',
'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh',
'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl',
'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh',
'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag',
'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf',
'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl',
'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl',
'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf',
'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc',
'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l',
'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl',
'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot',
'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank',
'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint',
'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f',
'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint',
'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint',
'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl',
'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof',
'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl',
'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl',
'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf',
'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are
handled as built-in functions except in strict ISO C90 mode ('-ansi' or
'-std=c90').

 There are also built-in versions of the ISO C99 functions 'acosf',
'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl',
'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl',
'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf',
'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl',
'modfl', 'modf', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl',
'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are
recognized in any mode since ISO C90 reserves these names for the
purpose to which ISO C99 puts them.  All these functions have
corresponding versions prefixed with '__builtin_'.

 The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit',
'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper',
'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions
except in strict ISO C90 mode ('-ansi' or '-std=c90').

 The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan',
'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod',
'fprintf', 'fputs', 'frexp', 'fscanf', 'isalnum', 'isalpha', 'iscntrl',
'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace',
'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp', 'log10',
'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset', 'modf', 'pow',
'printf', 'putchar', 'puts', 'scanf', 'sinh', 'sin', 'snprintf',
'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr', 'strcmp', 'strcpy',
'strcspn', 'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk',
'strrchr', 'strspn', 'strstr', 'tanh', 'tan', 'vfprintf', 'vprintf' and
'vsprintf' are all recognized as built-in functions unless
'-fno-builtin' is specified (or '-fno-builtin-FUNCTION' is specified for
an individual function).  All of these functions have corresponding
versions prefixed with '__builtin_'.

 GCC provides built-in versions of the ISO C99 floating-point comparison
macros that avoid raising exceptions for unordered operands.  They have
the same names as the standard macros ( 'isgreater', 'isgreaterequal',
'isless', 'islessequal', 'islessgreater', and 'isunordered') , with
'__builtin_' prefixed.  We intend for a library implementor to be able
to simply '#define' each standard macro to its built-in equivalent.  In
the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign'
and 'isnormal' built-ins used with '__builtin_' prefixed.  The 'isinf'
and 'isnan' built-in functions appear both with and without the
'__builtin_' prefix.

 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)

     You can use the built-in function '__builtin_types_compatible_p' to
     determine whether two types are the same.

     This built-in function returns 1 if the unqualified versions of the
     types TYPE1 and TYPE2 (which are types, not expressions) are
     compatible, 0 otherwise.  The result of this built-in function can
     be used in integer constant expressions.

     This built-in function ignores top level qualifiers (e.g., 'const',
     'volatile').  For example, 'int' is equivalent to 'const int'.

     The type 'int[]' and 'int[5]' are compatible.  On the other hand,
     'int' and 'char *' are not compatible, even if the size of their
     types, on the particular architecture are the same.  Also, the
     amount of pointer indirection is taken into account when
     determining similarity.  Consequently, 'short *' is not similar to
     'short **'.  Furthermore, two types that are typedefed are
     considered compatible if their underlying types are compatible.

     An 'enum' type is not considered to be compatible with another
     'enum' type even if both are compatible with the same integer type;
     this is what the C standard specifies.  For example, 'enum {foo,
     bar}' is not similar to 'enum {hot, dog}'.

     You typically use this function in code whose execution varies
     depending on the arguments' types.  For example:

          #define foo(x)                                                  \
            ({                                                           \
              typeof (x) tmp = (x);                                       \
              if (__builtin_types_compatible_p (typeof (x), long double)) \
                tmp = foo_long_double (tmp);                              \
              else if (__builtin_types_compatible_p (typeof (x), double)) \
                tmp = foo_double (tmp);                                   \
              else if (__builtin_types_compatible_p (typeof (x), float))  \
                tmp = foo_float (tmp);                                    \
              else                                                        \
                abort ();                                                 \
              tmp;                                                        \
            })

     _Note:_ This construct is only available for C.

 -- Built-in Function: TYPE __builtin_call_with_static_chain (CALL_EXP,
          POINTER_EXP)

     The CALL_EXP expression must be a function call, and the
     POINTER_EXP expression must be a pointer.  The POINTER_EXP is
     passed to the function call in the target's static chain location.
     The result of builtin is the result of the function call.

     _Note:_ This builtin is only available for C.  This builtin can be
     used to call Go closures from C.

 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
          EXP2)

     You can use the built-in function '__builtin_choose_expr' to
     evaluate code depending on the value of a constant expression.
     This built-in function returns EXP1 if CONST_EXP, which is an
     integer constant expression, is nonzero.  Otherwise it returns
     EXP2.

     This built-in function is analogous to the '? :' operator in C,
     except that the expression returned has its type unaltered by
     promotion rules.  Also, the built-in function does not evaluate the
     expression that is not chosen.  For example, if CONST_EXP evaluates
     to true, EXP2 is not evaluated even if it has side-effects.

     This built-in function can return an lvalue if the chosen argument
     is an lvalue.

     If EXP1 is returned, the return type is the same as EXP1's type.
     Similarly, if EXP2 is returned, its return type is the same as
     EXP2.

     Example:

          #define foo(x)                                                    \
            __builtin_choose_expr (                                         \
              __builtin_types_compatible_p (typeof (x), double),            \
              foo_double (x),                                               \
              __builtin_choose_expr (                                       \
                __builtin_types_compatible_p (typeof (x), float),           \
                foo_float (x),                                              \
                /* The void expression results in a compile-time error  \
                   when assigning the result to something.  */          \
                (void)0))

     _Note:_ This construct is only available for C.  Furthermore, the
     unused expression (EXP1 or EXP2 depending on the value of
     CONST_EXP) may still generate syntax errors.  This may change in
     future revisions.

 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG)

     The built-in function '__builtin_complex' is provided for use in
     implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'.
     REAL and IMAG must have the same type, a real binary floating-point
     type, and the result has the corresponding complex type with real
     and imaginary parts REAL and IMAG.  Unlike 'REAL + I * IMAG', this
     works even when infinities, NaNs and negative zeros are involved.

 -- Built-in Function: int __builtin_constant_p (EXP)
     You can use the built-in function '__builtin_constant_p' to
     determine if a value is known to be constant at compile time and
     hence that GCC can perform constant-folding on expressions
     involving that value.  The argument of the function is the value to
     test.  The function returns the integer 1 if the argument is known
     to be a compile-time constant and 0 if it is not known to be a
     compile-time constant.  A return of 0 does not indicate that the
     value is _not_ a constant, but merely that GCC cannot prove it is a
     constant with the specified value of the '-O' option.

     You typically use this function in an embedded application where
     memory is a critical resource.  If you have some complex
     calculation, you may want it to be folded if it involves constants,
     but need to call a function if it does not.  For example:

          #define Scale_Value(X)      \
            (__builtin_constant_p (X) \
            ? ((X) * SCALE + OFFSET) : Scale (X))

     You may use this built-in function in either a macro or an inline
     function.  However, if you use it in an inlined function and pass
     an argument of the function as the argument to the built-in, GCC
     never returns 1 when you call the inline function with a string
     constant or compound literal (*note Compound Literals::) and does
     not return 1 when you pass a constant numeric value to the inline
     function unless you specify the '-O' option.

     You may also use '__builtin_constant_p' in initializers for static
     data.  For instance, you can write

          static const int table[] = {
             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
             /* ... */
          };

     This is an acceptable initializer even if EXPRESSION is not a
     constant expression, including the case where
     '__builtin_constant_p' returns 1 because EXPRESSION can be folded
     to a constant but EXPRESSION contains operands that are not
     otherwise permitted in a static initializer (for example, '0 && foo
     ()').  GCC must be more conservative about evaluating the built-in
     in this case, because it has no opportunity to perform
     optimization.

 -- Built-in Function: long __builtin_expect (long EXP, long C)
     You may use '__builtin_expect' to provide the compiler with branch
     prediction information.  In general, you should prefer to use
     actual profile feedback for this ('-fprofile-arcs'), as programmers
     are notoriously bad at predicting how their programs actually
     perform.  However, there are applications in which this data is
     hard to collect.

     The return value is the value of EXP, which should be an integral
     expression.  The semantics of the built-in are that it is expected
     that EXP == C.  For example:

          if (__builtin_expect (x, 0))
            foo ();

     indicates that we do not expect to call 'foo', since we expect 'x'
     to be zero.  Since you are limited to integral expressions for EXP,
     you should use constructions such as

          if (__builtin_expect (ptr != NULL, 1))
            foo (*ptr);

     when testing pointer or floating-point values.

 -- Built-in Function: void __builtin_trap (void)
     This function causes the program to exit abnormally.  GCC
     implements this function by using a target-dependent mechanism
     (such as intentionally executing an illegal instruction) or by
     calling 'abort'.  The mechanism used may vary from release to
     release so you should not rely on any particular implementation.

 -- Built-in Function: void __builtin_unreachable (void)
     If control flow reaches the point of the '__builtin_unreachable',
     the program is undefined.  It is useful in situations where the
     compiler cannot deduce the unreachability of the code.

     One such case is immediately following an 'asm' statement that
     either never terminates, or one that transfers control elsewhere
     and never returns.  In this example, without the
     '__builtin_unreachable', GCC issues a warning that control reaches
     the end of a non-void function.  It also generates code to return
     after the 'asm'.

          int f (int c, int v)
          {
            if (c)
              {
                return v;
              }
            else
              {
                asm("jmp error_handler");
                __builtin_unreachable ();
              }
          }

     Because the 'asm' statement unconditionally transfers control out
     of the function, control never reaches the end of the function
     body.  The '__builtin_unreachable' is in fact unreachable and
     communicates this fact to the compiler.

     Another use for '__builtin_unreachable' is following a call a
     function that never returns but that is not declared
     '__attribute__((noreturn))', as in this example:

          void function_that_never_returns (void);

          int g (int c)
          {
            if (c)
              {
                return 1;
              }
            else
              {
                function_that_never_returns ();
                __builtin_unreachable ();
              }
          }

 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP,
          size_t ALIGN, ...)
     This function returns its first argument, and allows the compiler
     to assume that the returned pointer is at least ALIGN bytes
     aligned.  This built-in can have either two or three arguments, if
     it has three, the third argument should have integer type, and if
     it is nonzero means misalignment offset.  For example:

          void *x = __builtin_assume_aligned (arg, 16);

     means that the compiler can assume 'x', set to 'arg', is at least
     16-byte aligned, while:

          void *x = __builtin_assume_aligned (arg, 32, 8);

     means that the compiler can assume for 'x', set to 'arg', that
     '(char *) x - 8' is 32-byte aligned.

 -- Built-in Function: int __builtin_LINE ()
     This function is the equivalent to the preprocessor '__LINE__'
     macro and returns the line number of the invocation of the
     built-in.  In a C++ default argument for a function F, it gets the
     line number of the call to F.

 -- Built-in Function: const char * __builtin_FUNCTION ()
     This function is the equivalent to the preprocessor '__FUNCTION__'
     macro and returns the function name the invocation of the built-in
     is in.

 -- Built-in Function: const char * __builtin_FILE ()
     This function is the equivalent to the preprocessor '__FILE__'
     macro and returns the file name the invocation of the built-in is
     in.  In a C++ default argument for a function F, it gets the file
     name of the call to F.

 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char
          *END)
     This function is used to flush the processor's instruction cache
     for the region of memory between BEGIN inclusive and END exclusive.
     Some targets require that the instruction cache be flushed, after
     modifying memory containing code, in order to obtain deterministic
     behavior.

     If the target does not require instruction cache flushes,
     '__builtin___clear_cache' has no effect.  Otherwise either
     instructions are emitted in-line to clear the instruction cache or
     a call to the '__clear_cache' function in libgcc is made.

 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
     This function is used to minimize cache-miss latency by moving data
     into a cache before it is accessed.  You can insert calls to
     '__builtin_prefetch' into code for which you know addresses of data
     in memory that is likely to be accessed soon.  If the target
     supports them, data prefetch instructions are generated.  If the
     prefetch is done early enough before the access then the data will
     be in the cache by the time it is accessed.

     The value of ADDR is the address of the memory to prefetch.  There
     are two optional arguments, RW and LOCALITY.  The value of RW is a
     compile-time constant one or zero; one means that the prefetch is
     preparing for a write to the memory address and zero, the default,
     means that the prefetch is preparing for a read.  The value
     LOCALITY must be a compile-time constant integer between zero and
     three.  A value of zero means that the data has no temporal
     locality, so it need not be left in the cache after the access.  A
     value of three means that the data has a high degree of temporal
     locality and should be left in all levels of cache possible.
     Values of one and two mean, respectively, a low or moderate degree
     of temporal locality.  The default is three.

          for (i = 0; i < n; i++)
            {
              a[i] = a[i] + b[i];
              __builtin_prefetch (&a[i+j], 1, 1);
              __builtin_prefetch (&b[i+j], 0, 1);
              /* ... */
            }

     Data prefetch does not generate faults if ADDR is invalid, but the
     address expression itself must be valid.  For example, a prefetch
     of 'p->next' does not fault if 'p->next' is not a valid address,
     but evaluation faults if 'p' is not a valid address.

     If the target does not support data prefetch, the address
     expression is evaluated if it includes side effects but no other
     code is generated and GCC does not issue a warning.

 -- Built-in Function: double __builtin_huge_val (void)
     Returns a positive infinity, if supported by the floating-point
     format, else 'DBL_MAX'.  This function is suitable for implementing
     the ISO C macro 'HUGE_VAL'.

 -- Built-in Function: float __builtin_huge_valf (void)
     Similar to '__builtin_huge_val', except the return type is 'float'.

 -- Built-in Function: long double __builtin_huge_vall (void)
     Similar to '__builtin_huge_val', except the return type is 'long
     double'.

 -- Built-in Function: int __builtin_fpclassify (int, int, int, int,
          int, ...)
     This built-in implements the C99 fpclassify functionality.  The
     first five int arguments should be the target library's notion of
     the possible FP classes and are used for return values.  They must
     be constant values and they must appear in this order: 'FP_NAN',
     'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'.  The
     ellipsis is for exactly one floating-point value to classify.  GCC
     treats the last argument as type-generic, which means it does not
     do default promotion from float to double.

 -- Built-in Function: double __builtin_inf (void)
     Similar to '__builtin_huge_val', except a warning is generated if
     the target floating-point format does not support infinities.

 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
     Similar to '__builtin_inf', except the return type is '_Decimal32'.

 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
     Similar to '__builtin_inf', except the return type is '_Decimal64'.

 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
     Similar to '__builtin_inf', except the return type is
     '_Decimal128'.

 -- Built-in Function: float __builtin_inff (void)
     Similar to '__builtin_inf', except the return type is 'float'.
     This function is suitable for implementing the ISO C99 macro
     'INFINITY'.

 -- Built-in Function: long double __builtin_infl (void)
     Similar to '__builtin_inf', except the return type is 'long
     double'.

 -- Built-in Function: int __builtin_isinf_sign (...)
     Similar to 'isinf', except the return value is -1 for an argument
     of '-Inf' and 1 for an argument of '+Inf'.  Note while the
     parameter list is an ellipsis, this function only accepts exactly
     one floating-point argument.  GCC treats this parameter as
     type-generic, which means it does not do default promotion from
     float to double.

 -- Built-in Function: double __builtin_nan (const char *str)
     This is an implementation of the ISO C99 function 'nan'.

     Since ISO C99 defines this function in terms of 'strtod', which we
     do not implement, a description of the parsing is in order.  The
     string is parsed as by 'strtol'; that is, the base is recognized by
     leading '0' or '0x' prefixes.  The number parsed is placed in the
     significand such that the least significant bit of the number is at
     the least significant bit of the significand.  The number is
     truncated to fit the significand field provided.  The significand
     is forced to be a quiet NaN.

     This function, if given a string literal all of which would have
     been consumed by 'strtol', is evaluated early enough that it is
     considered a compile-time constant.

 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
     Similar to '__builtin_nan', except the return type is '_Decimal32'.

 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
     Similar to '__builtin_nan', except the return type is '_Decimal64'.

 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
     Similar to '__builtin_nan', except the return type is
     '_Decimal128'.

 -- Built-in Function: float __builtin_nanf (const char *str)
     Similar to '__builtin_nan', except the return type is 'float'.

 -- Built-in Function: long double __builtin_nanl (const char *str)
     Similar to '__builtin_nan', except the return type is 'long
     double'.

 -- Built-in Function: double __builtin_nans (const char *str)
     Similar to '__builtin_nan', except the significand is forced to be
     a signaling NaN.  The 'nans' function is proposed by WG14 N965.

 -- Built-in Function: float __builtin_nansf (const char *str)
     Similar to '__builtin_nans', except the return type is 'float'.

 -- Built-in Function: long double __builtin_nansl (const char *str)
     Similar to '__builtin_nans', except the return type is 'long
     double'.

 -- Built-in Function: int __builtin_ffs (int x)
     Returns one plus the index of the least significant 1-bit of X, or
     if X is zero, returns zero.

 -- Built-in Function: int __builtin_clz (unsigned int x)
     Returns the number of leading 0-bits in X, starting at the most
     significant bit position.  If X is 0, the result is undefined.

 -- Built-in Function: int __builtin_ctz (unsigned int x)
     Returns the number of trailing 0-bits in X, starting at the least
     significant bit position.  If X is 0, the result is undefined.

 -- Built-in Function: int __builtin_clrsb (int x)
     Returns the number of leading redundant sign bits in X, i.e. the
     number of bits following the most significant bit that are
     identical to it.  There are no special cases for 0 or other values.

 -- Built-in Function: int __builtin_popcount (unsigned int x)
     Returns the number of 1-bits in X.

 -- Built-in Function: int __builtin_parity (unsigned int x)
     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.

 -- Built-in Function: int __builtin_ffsl (long)
     Similar to '__builtin_ffs', except the argument type is 'long'.

 -- Built-in Function: int __builtin_clzl (unsigned long)
     Similar to '__builtin_clz', except the argument type is 'unsigned
     long'.

 -- Built-in Function: int __builtin_ctzl (unsigned long)
     Similar to '__builtin_ctz', except the argument type is 'unsigned
     long'.

 -- Built-in Function: int __builtin_clrsbl (long)
     Similar to '__builtin_clrsb', except the argument type is 'long'.

 -- Built-in Function: int __builtin_popcountl (unsigned long)
     Similar to '__builtin_popcount', except the argument type is
     'unsigned long'.

 -- Built-in Function: int __builtin_parityl (unsigned long)
     Similar to '__builtin_parity', except the argument type is
     'unsigned long'.

 -- Built-in Function: int __builtin_ffsll (long long)
     Similar to '__builtin_ffs', except the argument type is 'long
     long'.

 -- Built-in Function: int __builtin_clzll (unsigned long long)
     Similar to '__builtin_clz', except the argument type is 'unsigned
     long long'.

 -- Built-in Function: int __builtin_ctzll (unsigned long long)
     Similar to '__builtin_ctz', except the argument type is 'unsigned
     long long'.

 -- Built-in Function: int __builtin_clrsbll (long long)
     Similar to '__builtin_clrsb', except the argument type is 'long
     long'.

 -- Built-in Function: int __builtin_popcountll (unsigned long long)
     Similar to '__builtin_popcount', except the argument type is
     'unsigned long long'.

 -- Built-in Function: int __builtin_parityll (unsigned long long)
     Similar to '__builtin_parity', except the argument type is
     'unsigned long long'.

 -- Built-in Function: double __builtin_powi (double, int)
     Returns the first argument raised to the power of the second.
     Unlike the 'pow' function no guarantees about precision and
     rounding are made.

 -- Built-in Function: float __builtin_powif (float, int)
     Similar to '__builtin_powi', except the argument and return types
     are 'float'.

 -- Built-in Function: long double __builtin_powil (long double, int)
     Similar to '__builtin_powi', except the argument and return types
     are 'long double'.

 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)
     Returns X with the order of the bytes reversed; for example,
     '0xaabb' becomes '0xbbaa'.  Byte here always means exactly 8 bits.

 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)
     Similar to '__builtin_bswap16', except the argument and return
     types are 32 bit.

 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)
     Similar to '__builtin_bswap32', except the argument and return
     types are 64 bit.


File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions

6.58 Built-in Functions Specific to Particular Target Machines
==============================================================

On some target machines, GCC supports many built-in functions specific
to those machines.  Generally these generate calls to specific machine
instructions, but allow the compiler to schedule those calls.

* Menu:

* AArch64 Built-in Functions::
* Alpha Built-in Functions::
* Altera Nios II Built-in Functions::
* ARC Built-in Functions::
* ARC SIMD Built-in Functions::
* ARM iWMMXt Built-in Functions::
* ARM C Language Extensions (ACLE)::
* ARM Floating Point Status and Control Intrinsics::
* AVR Built-in Functions::
* Blackfin Built-in Functions::
* FR-V Built-in Functions::
* MIPS DSP Built-in Functions::
* MIPS Paired-Single Support::
* MIPS Loongson Built-in Functions::
* Other MIPS Built-in Functions::
* MSP430 Built-in Functions::
* NDS32 Built-in Functions::
* picoChip Built-in Functions::
* PowerPC Built-in Functions::
* PowerPC AltiVec/VSX Built-in Functions::
* PowerPC Hardware Transactional Memory Built-in Functions::
* RX Built-in Functions::
* S/390 System z Built-in Functions::
* SH Built-in Functions::
* SPARC VIS Built-in Functions::
* SPU Built-in Functions::
* TI C6X Built-in Functions::
* TILE-Gx Built-in Functions::
* TILEPro Built-in Functions::
* x86 Built-in Functions::
* x86 transactional memory intrinsics::


File: gcc.info,  Node: AArch64 Built-in Functions,  Next: Alpha Built-in Functions,  Up: Target Builtins

6.58.1 AArch64 Built-in Functions
---------------------------------

These built-in functions are available for the AArch64 family of
processors.
     unsigned int __builtin_aarch64_get_fpcr ()
     void __builtin_aarch64_set_fpcr (unsigned int)
     unsigned int __builtin_aarch64_get_fpsr ()
     void __builtin_aarch64_set_fpsr (unsigned int)


File: gcc.info,  Node: Alpha Built-in Functions,  Next: Altera Nios II Built-in Functions,  Prev: AArch64 Built-in Functions,  Up: Target Builtins

6.58.2 Alpha Built-in Functions
-------------------------------

These built-in functions are available for the Alpha family of
processors, depending on the command-line switches used.

 The following built-in functions are always available.  They all
generate the machine instruction that is part of the name.

     long __builtin_alpha_implver (void)
     long __builtin_alpha_rpcc (void)
     long __builtin_alpha_amask (long)
     long __builtin_alpha_cmpbge (long, long)
     long __builtin_alpha_extbl (long, long)
     long __builtin_alpha_extwl (long, long)
     long __builtin_alpha_extll (long, long)
     long __builtin_alpha_extql (long, long)
     long __builtin_alpha_extwh (long, long)
     long __builtin_alpha_extlh (long, long)
     long __builtin_alpha_extqh (long, long)
     long __builtin_alpha_insbl (long, long)
     long __builtin_alpha_inswl (long, long)
     long __builtin_alpha_insll (long, long)
     long __builtin_alpha_insql (long, long)
     long __builtin_alpha_inswh (long, long)
     long __builtin_alpha_inslh (long, long)
     long __builtin_alpha_insqh (long, long)
     long __builtin_alpha_mskbl (long, long)
     long __builtin_alpha_mskwl (long, long)
     long __builtin_alpha_mskll (long, long)
     long __builtin_alpha_mskql (long, long)
     long __builtin_alpha_mskwh (long, long)
     long __builtin_alpha_msklh (long, long)
     long __builtin_alpha_mskqh (long, long)
     long __builtin_alpha_umulh (long, long)
     long __builtin_alpha_zap (long, long)
     long __builtin_alpha_zapnot (long, long)

 The following built-in functions are always with '-mmax' or '-mcpu=CPU'
where CPU is 'pca56' or later.  They all generate the machine
instruction that is part of the name.

     long __builtin_alpha_pklb (long)
     long __builtin_alpha_pkwb (long)
     long __builtin_alpha_unpkbl (long)
     long __builtin_alpha_unpkbw (long)
     long __builtin_alpha_minub8 (long, long)
     long __builtin_alpha_minsb8 (long, long)
     long __builtin_alpha_minuw4 (long, long)
     long __builtin_alpha_minsw4 (long, long)
     long __builtin_alpha_maxub8 (long, long)
     long __builtin_alpha_maxsb8 (long, long)
     long __builtin_alpha_maxuw4 (long, long)
     long __builtin_alpha_maxsw4 (long, long)
     long __builtin_alpha_perr (long, long)

 The following built-in functions are always with '-mcix' or '-mcpu=CPU'
where CPU is 'ev67' or later.  They all generate the machine instruction
that is part of the name.

     long __builtin_alpha_cttz (long)
     long __builtin_alpha_ctlz (long)
     long __builtin_alpha_ctpop (long)

 The following built-in functions are available on systems that use the
OSF/1 PALcode.  Normally they invoke the 'rduniq' and 'wruniq' PAL
calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and
'wrval'.

     void *__builtin_thread_pointer (void)
     void __builtin_set_thread_pointer (void *)


File: gcc.info,  Node: Altera Nios II Built-in Functions,  Next: ARC Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins

6.58.3 Altera Nios II Built-in Functions
----------------------------------------

These built-in functions are available for the Altera Nios II family of
processors.

 The following built-in functions are always available.  They all
generate the machine instruction that is part of the name.

     int __builtin_ldbio (volatile const void *)
     int __builtin_ldbuio (volatile const void *)
     int __builtin_ldhio (volatile const void *)
     int __builtin_ldhuio (volatile const void *)
     int __builtin_ldwio (volatile const void *)
     void __builtin_stbio (volatile void *, int)
     void __builtin_sthio (volatile void *, int)
     void __builtin_stwio (volatile void *, int)
     void __builtin_sync (void)
     int __builtin_rdctl (int)
     void __builtin_wrctl (int, int)

 The following built-in functions are always available.  They all
generate a Nios II Custom Instruction.  The name of the function
represents the types that the function takes and returns.  The letter
before the 'n' is the return type or void if absent.  The 'n' represents
the first parameter to all the custom instructions, the custom
instruction number.  The two letters after the 'n' represent the up to
two parameters to the function.

 The letters represent the following data types:
'<no letter>'
     'void' for return type and no parameter for parameter types.

'i'
     'int' for return type and parameter type

'f'
     'float' for return type and parameter type

'p'
     'void *' for return type and parameter type

 And the function names are:
     void __builtin_custom_n (void)
     void __builtin_custom_ni (int)
     void __builtin_custom_nf (float)
     void __builtin_custom_np (void *)
     void __builtin_custom_nii (int, int)
     void __builtin_custom_nif (int, float)
     void __builtin_custom_nip (int, void *)
     void __builtin_custom_nfi (float, int)
     void __builtin_custom_nff (float, float)
     void __builtin_custom_nfp (float, void *)
     void __builtin_custom_npi (void *, int)
     void __builtin_custom_npf (void *, float)
     void __builtin_custom_npp (void *, void *)
     int __builtin_custom_in (void)
     int __builtin_custom_ini (int)
     int __builtin_custom_inf (float)
     int __builtin_custom_inp (void *)
     int __builtin_custom_inii (int, int)
     int __builtin_custom_inif (int, float)
     int __builtin_custom_inip (int, void *)
     int __builtin_custom_infi (float, int)
     int __builtin_custom_inff (float, float)
     int __builtin_custom_infp (float, void *)
     int __builtin_custom_inpi (void *, int)
     int __builtin_custom_inpf (void *, float)
     int __builtin_custom_inpp (void *, void *)
     float __builtin_custom_fn (void)
     float __builtin_custom_fni (int)
     float __builtin_custom_fnf (float)
     float __builtin_custom_fnp (void *)
     float __builtin_custom_fnii (int, int)
     float __builtin_custom_fnif (int, float)
     float __builtin_custom_fnip (int, void *)
     float __builtin_custom_fnfi (float, int)
     float __builtin_custom_fnff (float, float)
     float __builtin_custom_fnfp (float, void *)
     float __builtin_custom_fnpi (void *, int)
     float __builtin_custom_fnpf (void *, float)
     float __builtin_custom_fnpp (void *, void *)
     void * __builtin_custom_pn (void)
     void * __builtin_custom_pni (int)
     void * __builtin_custom_pnf (float)
     void * __builtin_custom_pnp (void *)
     void * __builtin_custom_pnii (int, int)
     void * __builtin_custom_pnif (int, float)
     void * __builtin_custom_pnip (int, void *)
     void * __builtin_custom_pnfi (float, int)
     void * __builtin_custom_pnff (float, float)
     void * __builtin_custom_pnfp (float, void *)
     void * __builtin_custom_pnpi (void *, int)
     void * __builtin_custom_pnpf (void *, float)
     void * __builtin_custom_pnpp (void *, void *)


File: gcc.info,  Node: ARC Built-in Functions,  Next: ARC SIMD Built-in Functions,  Prev: Altera Nios II Built-in Functions,  Up: Target Builtins

6.58.4 ARC Built-in Functions
-----------------------------

The following built-in functions are provided for ARC targets.  The
built-ins generate the corresponding assembly instructions.  In the
examples given below, the generated code often requires an operand or
result to be in a register.  Where necessary further code will be
generated to ensure this is true, but for brevity this is not described
in each case.

 _Note:_ Using a built-in to generate an instruction not supported by a
target may cause problems.  At present the compiler is not guaranteed to
detect such misuse, and as a result an internal compiler error may be
generated.

 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int
          ALIGNVAL)
     Return 1 if VAL is known to have the byte alignment given by
     ALIGNVAL, otherwise return 0.  Note that this is different from
          __alignof__(*(char *)VAL) >= alignval
     because __alignof__ sees only the type of the dereference, whereas
     __builtin_arc_align uses alignment information from the pointer as
     well as from the pointed-to type.  The information available will
     depend on optimization level.

 -- Built-in Function: void __builtin_arc_brk (void)
     Generates
          brk

 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned
          int REGNO)
     The operand is the number of a register to be read.  Generates:
          mov  DEST, rREGNO
     where the value in DEST will be the result returned from the
     built-in.

 -- Built-in Function: void __builtin_arc_core_write (unsigned int
          REGNO, unsigned int VAL)
     The first operand is the number of a register to be written, the
     second operand is a compile time constant to write into that
     register.  Generates:
          mov  rREGNO, VAL

 -- Built-in Function: int __builtin_arc_divaw (int A, int B)
     Only available if either '-mcpu=ARC700' or '-meA' is set.
     Generates:
          divaw  DEST, A, B
     where the value in DEST will be the result returned from the
     built-in.

 -- Built-in Function: void __builtin_arc_flag (unsigned int A)
     Generates
          flag  A

 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR)
     The operand, AUXV, is the address of an auxiliary register and must
     be a compile time constant.  Generates:
          lr  DEST, [AUXR]
     Where the value in DEST will be the result returned from the
     built-in.

 -- Built-in Function: void __builtin_arc_mul64 (int A, int B)
     Only available with '-mmul64'.  Generates:
          mul64  A, B

 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A,
          unsigned int B)
     Only available with '-mmul64'.  Generates:
          mulu64  A, B

 -- Built-in Function: void __builtin_arc_nop (void)
     Generates:
          nop

 -- Built-in Function: int __builtin_arc_norm (int SRC)
     Only valid if the 'norm' instruction is available through the
     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
          norm  DEST, SRC
     Where the value in DEST will be the result returned from the
     built-in.

 -- Built-in Function: short int __builtin_arc_normw (short int SRC)
     Only valid if the 'normw' instruction is available through the
     '-mnorm' option or by default with '-mcpu=ARC700'.  Generates:
          normw  DEST, SRC
     Where the value in DEST will be the result returned from the
     built-in.

 -- Built-in Function: void __builtin_arc_rtie (void)
     Generates:
          rtie

 -- Built-in Function: void __builtin_arc_sleep (int A
     Generates:
          sleep  A

 -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR,
          unsigned int VAL)
     The first argument, AUXV, is the address of an auxiliary register,
     the second argument, VAL, is a compile time constant to be written
     to the register.  Generates:
          sr  AUXR, [VAL]

 -- Built-in Function: int __builtin_arc_swap (int SRC)
     Only valid with '-mswap'.  Generates:
          swap  DEST, SRC
     Where the value in DEST will be the result returned from the
     built-in.

 -- Built-in Function: void __builtin_arc_swi (void)
     Generates:
          swi

 -- Built-in Function: void __builtin_arc_sync (void)
     Only available with '-mcpu=ARC700'.  Generates:
          sync

 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C)
     Only available with '-mcpu=ARC700'.  Generates:
          trap_s  C

 -- Built-in Function: void __builtin_arc_unimp_s (void)
     Only available with '-mcpu=ARC700'.  Generates:
          unimp_s

 The instructions generated by the following builtins are not considered
as candidates for scheduling.  They are not moved around by the compiler
during scheduling, and thus can be expected to appear where they are put
in the C code:
     __builtin_arc_brk()
     __builtin_arc_core_read()
     __builtin_arc_core_write()
     __builtin_arc_flag()
     __builtin_arc_lr()
     __builtin_arc_sleep()
     __builtin_arc_sr()
     __builtin_arc_swi()


File: gcc.info,  Node: ARC SIMD Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Prev: ARC Built-in Functions,  Up: Target Builtins

6.58.5 ARC SIMD Built-in Functions
----------------------------------

SIMD builtins provided by the compiler can be used to generate the
vector instructions.  This section describes the available builtins and
their usage in programs.  With the '-msimd' option, the compiler
provides 128-bit vector types, which can be specified using the
'vector_size' attribute.  The header file 'arc-simd.h' can be included
to use the following predefined types:
     typedef int __v4si   __attribute__((vector_size(16)));
     typedef short __v8hi __attribute__((vector_size(16)));

 These types can be used to define 128-bit variables.  The built-in
functions listed in the following section can be used on these variables
to generate the vector operations.

 For all builtins, '__builtin_arc_SOMEINSN', the header file
'arc-simd.h' also provides equivalent macros called '_SOMEINSN' that can
be used for programming ease and improved readability.  The following
macros for DMA control are also provided:
     #define _setup_dma_in_channel_reg _vdiwr
     #define _setup_dma_out_channel_reg _vdowr

 The following is a complete list of all the SIMD built-ins provided for
ARC, grouped by calling signature.

 The following take two '__v8hi' arguments and return a '__v8hi' result:
     __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vaddw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vand (__v8hi, __v8hi)
     __v8hi __builtin_arc_vandaw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vavb (__v8hi, __v8hi)
     __v8hi __builtin_arc_vavrb (__v8hi, __v8hi)
     __v8hi __builtin_arc_vbic (__v8hi, __v8hi)
     __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vdifw (__v8hi, __v8hi)
     __v8hi __builtin_arc_veqw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vh264f (__v8hi, __v8hi)
     __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi)
     __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vlew (__v8hi, __v8hi)
     __v8hi __builtin_arc_vltw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vminaw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vminw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmrb (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vmulw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vnew (__v8hi, __v8hi)
     __v8hi __builtin_arc_vor (__v8hi, __v8hi)
     __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vsubw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vsummw (__v8hi, __v8hi)
     __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi)
     __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi)
     __v8hi __builtin_arc_vxor (__v8hi, __v8hi)
     __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi)

 The following take one '__v8hi' and one 'int' argument and return a
'__v8hi' result:

     __v8hi __builtin_arc_vbaddw (__v8hi, int)
     __v8hi __builtin_arc_vbmaxw (__v8hi, int)
     __v8hi __builtin_arc_vbminw (__v8hi, int)
     __v8hi __builtin_arc_vbmulaw (__v8hi, int)
     __v8hi __builtin_arc_vbmulfw (__v8hi, int)
     __v8hi __builtin_arc_vbmulw (__v8hi, int)
     __v8hi __builtin_arc_vbrsubw (__v8hi, int)
     __v8hi __builtin_arc_vbsubw (__v8hi, int)

 The following take one '__v8hi' argument and one 'int' argument which
must be a 3-bit compile time constant indicating a register number
I0-I7.  They return a '__v8hi' result.
     __v8hi __builtin_arc_vasrw (__v8hi, const int)
     __v8hi __builtin_arc_vsr8 (__v8hi, const int)
     __v8hi __builtin_arc_vsr8aw (__v8hi, const int)

 The following take one '__v8hi' argument and one 'int' argument which
must be a 6-bit compile time constant.  They return a '__v8hi' result.
     __v8hi __builtin_arc_vasrpwbi (__v8hi, const int)
     __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int)
     __v8hi __builtin_arc_vasrrwi (__v8hi, const int)
     __v8hi __builtin_arc_vasrsrwi (__v8hi, const int)
     __v8hi __builtin_arc_vasrwi (__v8hi, const int)
     __v8hi __builtin_arc_vsr8awi (__v8hi, const int)
     __v8hi __builtin_arc_vsr8i (__v8hi, const int)

 The following take one '__v8hi' argument and one 'int' argument which
must be a 8-bit compile time constant.  They return a '__v8hi' result.
     __v8hi __builtin_arc_vd6tapf (__v8hi, const int)
     __v8hi __builtin_arc_vmvaw (__v8hi, const int)
     __v8hi __builtin_arc_vmvw (__v8hi, const int)
     __v8hi __builtin_arc_vmvzw (__v8hi, const int)

 The following take two 'int' arguments, the second of which which must
be a 8-bit compile time constant.  They return a '__v8hi' result:
     __v8hi __builtin_arc_vmovaw (int, const int)
     __v8hi __builtin_arc_vmovw (int, const int)
     __v8hi __builtin_arc_vmovzw (int, const int)

 The following take a single '__v8hi' argument and return a '__v8hi'
result:
     __v8hi __builtin_arc_vabsaw (__v8hi)
     __v8hi __builtin_arc_vabsw (__v8hi)
     __v8hi __builtin_arc_vaddsuw (__v8hi)
     __v8hi __builtin_arc_vexch1 (__v8hi)
     __v8hi __builtin_arc_vexch2 (__v8hi)
     __v8hi __builtin_arc_vexch4 (__v8hi)
     __v8hi __builtin_arc_vsignw (__v8hi)
     __v8hi __builtin_arc_vupbaw (__v8hi)
     __v8hi __builtin_arc_vupbw (__v8hi)
     __v8hi __builtin_arc_vupsbaw (__v8hi)
     __v8hi __builtin_arc_vupsbw (__v8hi)

 The following take two 'int' arguments and return no result:
     void __builtin_arc_vdirun (int, int)
     void __builtin_arc_vdorun (int, int)

 The following take two 'int' arguments and return no result.  The first
argument must a 3-bit compile time constant indicating one of the
DR0-DR7 DMA setup channels:
     void __builtin_arc_vdiwr (const int, int)
     void __builtin_arc_vdowr (const int, int)

 The following take an 'int' argument and return no result:
     void __builtin_arc_vendrec (int)
     void __builtin_arc_vrec (int)
     void __builtin_arc_vrecrun (int)
     void __builtin_arc_vrun (int)

 The following take a '__v8hi' argument and two 'int' arguments and
return a '__v8hi' result.  The second argument must be a 3-bit compile
time constants, indicating one the registers I0-I7, and the third
argument must be an 8-bit compile time constant.

 _Note:_ Although the equivalent hardware instructions do not take an
SIMD register as an operand, these builtins overwrite the relevant bits
of the '__v8hi' register provided as the first argument with the value
loaded from the '[Ib, u8]' location in the SDM.

     __v8hi __builtin_arc_vld32 (__v8hi, const int, const int)
     __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int)
     __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int)
     __v8hi __builtin_arc_vld64 (__v8hi, const int, const int)

 The following take two 'int' arguments and return a '__v8hi' result.
The first argument must be a 3-bit compile time constants, indicating
one the registers I0-I7, and the second argument must be an 8-bit
compile time constant.

     __v8hi __builtin_arc_vld128 (const int, const int)
     __v8hi __builtin_arc_vld64w (const int, const int)

 The following take a '__v8hi' argument and two 'int' arguments and
return no result.  The second argument must be a 3-bit compile time
constants, indicating one the registers I0-I7, and the third argument
must be an 8-bit compile time constant.

     void __builtin_arc_vst128 (__v8hi, const int, const int)
     void __builtin_arc_vst64 (__v8hi, const int, const int)

 The following take a '__v8hi' argument and three 'int' arguments and
return no result.  The second argument must be a 3-bit compile-time
constant, identifying the 16-bit sub-register to be stored, the third
argument must be a 3-bit compile time constants, indicating one the
registers I0-I7, and the fourth argument must be an 8-bit compile time
constant.

     void __builtin_arc_vst16_n (__v8hi, const int, const int, const int)
     void __builtin_arc_vst32_n (__v8hi, const int, const int, const int)


File: gcc.info,  Node: ARM iWMMXt Built-in Functions,  Next: ARM C Language Extensions (ACLE),  Prev: ARC SIMD Built-in Functions,  Up: Target Builtins

6.58.6 ARM iWMMXt Built-in Functions
------------------------------------

These built-in functions are available for the ARM family of processors
when the '-mcpu=iwmmxt' switch is used:

     typedef int v2si __attribute__ ((vector_size (8)));
     typedef short v4hi __attribute__ ((vector_size (8)));
     typedef char v8qi __attribute__ ((vector_size (8)));

     int __builtin_arm_getwcgr0 (void)
     void __builtin_arm_setwcgr0 (int)
     int __builtin_arm_getwcgr1 (void)
     void __builtin_arm_setwcgr1 (int)
     int __builtin_arm_getwcgr2 (void)
     void __builtin_arm_setwcgr2 (int)
     int __builtin_arm_getwcgr3 (void)
     void __builtin_arm_setwcgr3 (int)
     int __builtin_arm_textrmsb (v8qi, int)
     int __builtin_arm_textrmsh (v4hi, int)
     int __builtin_arm_textrmsw (v2si, int)
     int __builtin_arm_textrmub (v8qi, int)
     int __builtin_arm_textrmuh (v4hi, int)
     int __builtin_arm_textrmuw (v2si, int)
     v8qi __builtin_arm_tinsrb (v8qi, int, int)
     v4hi __builtin_arm_tinsrh (v4hi, int, int)
     v2si __builtin_arm_tinsrw (v2si, int, int)
     long long __builtin_arm_tmia (long long, int, int)
     long long __builtin_arm_tmiabb (long long, int, int)
     long long __builtin_arm_tmiabt (long long, int, int)
     long long __builtin_arm_tmiaph (long long, int, int)
     long long __builtin_arm_tmiatb (long long, int, int)
     long long __builtin_arm_tmiatt (long long, int, int)
     int __builtin_arm_tmovmskb (v8qi)
     int __builtin_arm_tmovmskh (v4hi)
     int __builtin_arm_tmovmskw (v2si)
     long long __builtin_arm_waccb (v8qi)
     long long __builtin_arm_wacch (v4hi)
     long long __builtin_arm_waccw (v2si)
     v8qi __builtin_arm_waddb (v8qi, v8qi)
     v8qi __builtin_arm_waddbss (v8qi, v8qi)
     v8qi __builtin_arm_waddbus (v8qi, v8qi)
     v4hi __builtin_arm_waddh (v4hi, v4hi)
     v4hi __builtin_arm_waddhss (v4hi, v4hi)
     v4hi __builtin_arm_waddhus (v4hi, v4hi)
     v2si __builtin_arm_waddw (v2si, v2si)
     v2si __builtin_arm_waddwss (v2si, v2si)
     v2si __builtin_arm_waddwus (v2si, v2si)
     v8qi __builtin_arm_walign (v8qi, v8qi, int)
     long long __builtin_arm_wand(long long, long long)
     long long __builtin_arm_wandn (long long, long long)
     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
     v2si __builtin_arm_wcmpeqw (v2si, v2si)
     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
     long long __builtin_arm_wmacsz (v4hi, v4hi)
     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
     long long __builtin_arm_wmacuz (v4hi, v4hi)
     v4hi __builtin_arm_wmadds (v4hi, v4hi)
     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
     v2si __builtin_arm_wmaxsw (v2si, v2si)
     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
     v2si __builtin_arm_wmaxuw (v2si, v2si)
     v8qi __builtin_arm_wminsb (v8qi, v8qi)
     v4hi __builtin_arm_wminsh (v4hi, v4hi)
     v2si __builtin_arm_wminsw (v2si, v2si)
     v8qi __builtin_arm_wminub (v8qi, v8qi)
     v4hi __builtin_arm_wminuh (v4hi, v4hi)
     v2si __builtin_arm_wminuw (v2si, v2si)
     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
     v4hi __builtin_arm_wmulul (v4hi, v4hi)
     v4hi __builtin_arm_wmulum (v4hi, v4hi)
     long long __builtin_arm_wor (long long, long long)
     v2si __builtin_arm_wpackdss (long long, long long)
     v2si __builtin_arm_wpackdus (long long, long long)
     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
     v4hi __builtin_arm_wpackwss (v2si, v2si)
     v4hi __builtin_arm_wpackwus (v2si, v2si)
     long long __builtin_arm_wrord (long long, long long)
     long long __builtin_arm_wrordi (long long, int)
     v4hi __builtin_arm_wrorh (v4hi, long long)
     v4hi __builtin_arm_wrorhi (v4hi, int)
     v2si __builtin_arm_wrorw (v2si, long long)
     v2si __builtin_arm_wrorwi (v2si, int)
     v2si __builtin_arm_wsadb (v2si, v8qi, v8qi)
     v2si __builtin_arm_wsadbz (v8qi, v8qi)
     v2si __builtin_arm_wsadh (v2si, v4hi, v4hi)
     v2si __builtin_arm_wsadhz (v4hi, v4hi)
     v4hi __builtin_arm_wshufh (v4hi, int)
     long long __builtin_arm_wslld (long long, long long)
     long long __builtin_arm_wslldi (long long, int)
     v4hi __builtin_arm_wsllh (v4hi, long long)
     v4hi __builtin_arm_wsllhi (v4hi, int)
     v2si __builtin_arm_wsllw (v2si, long long)
     v2si __builtin_arm_wsllwi (v2si, int)
     long long __builtin_arm_wsrad (long long, long long)
     long long __builtin_arm_wsradi (long long, int)
     v4hi __builtin_arm_wsrah (v4hi, long long)
     v4hi __builtin_arm_wsrahi (v4hi, int)
     v2si __builtin_arm_wsraw (v2si, long long)
     v2si __builtin_arm_wsrawi (v2si, int)
     long long __builtin_arm_wsrld (long long, long long)
     long long __builtin_arm_wsrldi (long long, int)
     v4hi __builtin_arm_wsrlh (v4hi, long long)
     v4hi __builtin_arm_wsrlhi (v4hi, int)
     v2si __builtin_arm_wsrlw (v2si, long long)
     v2si __builtin_arm_wsrlwi (v2si, int)
     v8qi __builtin_arm_wsubb (v8qi, v8qi)
     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
     v4hi __builtin_arm_wsubh (v4hi, v4hi)
     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
     v2si __builtin_arm_wsubw (v2si, v2si)
     v2si __builtin_arm_wsubwss (v2si, v2si)
     v2si __builtin_arm_wsubwus (v2si, v2si)
     v4hi __builtin_arm_wunpckehsb (v8qi)
     v2si __builtin_arm_wunpckehsh (v4hi)
     long long __builtin_arm_wunpckehsw (v2si)
     v4hi __builtin_arm_wunpckehub (v8qi)
     v2si __builtin_arm_wunpckehuh (v4hi)
     long long __builtin_arm_wunpckehuw (v2si)
     v4hi __builtin_arm_wunpckelsb (v8qi)
     v2si __builtin_arm_wunpckelsh (v4hi)
     long long __builtin_arm_wunpckelsw (v2si)
     v4hi __builtin_arm_wunpckelub (v8qi)
     v2si __builtin_arm_wunpckeluh (v4hi)
     long long __builtin_arm_wunpckeluw (v2si)
     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
     v2si __builtin_arm_wunpckihw (v2si, v2si)
     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
     v2si __builtin_arm_wunpckilw (v2si, v2si)
     long long __builtin_arm_wxor (long long, long long)
     long long __builtin_arm_wzero ()


File: 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

6.58.7 ARM C Language Extensions (ACLE)
---------------------------------------

GCC implements extensions for C as described in the ARM C Language
Extensions (ACLE) specification, which can be found at
<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>.

 As a part of ACLE, GCC implements extensions for Advanced SIMD as
described in the ARM C Language Extensions Specification.  The complete
list of Advanced SIMD intrinsics can be found at
<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0073a/IHI0073A_arm_neon_intrinsics_ref.pdf>.
The built-in intrinsics for the Advanced SIMD extension are available
when NEON is enabled.

 Currently, ARM and AArch64 back ends do not support ACLE 2.0 fully.
Both back ends support CRC32 intrinsics from 'arm_acle.h'.  The ARM back
end's 16-bit floating-point Advanced SIMD intrinsics currently comply to
ACLE v1.1.  AArch64's back end does not have support for 16-bit floating
point Advanced SIMD intrinsics yet.

 See *note ARM Options:: and *note AArch64 Options:: for more
information on the availability of extensions.


File: gcc.info,  Node: ARM Floating Point Status and Control Intrinsics,  Next: AVR Built-in Functions,  Prev: ARM C Language Extensions (ACLE),  Up: Target Builtins

6.58.8 ARM Floating Point Status and Control Intrinsics
-------------------------------------------------------

These built-in functions are available for the ARM family of processors
with floating-point unit.

     unsigned int __builtin_arm_get_fpscr ()
     void __builtin_arm_set_fpscr (unsigned int)


File: gcc.info,  Node: AVR Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: ARM Floating Point Status and Control Intrinsics,  Up: Target Builtins

6.58.9 AVR Built-in Functions
-----------------------------

For each built-in function for AVR, there is an equally named, uppercase
built-in macro defined.  That way users can easily query if or if not a
specific built-in is implemented or not.  For example, if
'__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is
defined to '1' and undefined otherwise.

 The following built-in functions map to the respective machine
instruction, i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul',
'fmuls' resp.  'fmulsu'.  The three 'fmul*' built-ins are implemented as
library call if no hardware multiplier is available.

     void __builtin_avr_nop (void)
     void __builtin_avr_sei (void)
     void __builtin_avr_cli (void)
     void __builtin_avr_sleep (void)
     void __builtin_avr_wdr (void)
     unsigned char __builtin_avr_swap (unsigned char)
     unsigned int __builtin_avr_fmul (unsigned char, unsigned char)
     int __builtin_avr_fmuls (char, char)
     int __builtin_avr_fmulsu (char, unsigned char)

 In order to delay execution for a specific number of cycles, GCC
implements
     void __builtin_avr_delay_cycles (unsigned long ticks)

'ticks' is the number of ticks to delay execution.  Note that this
built-in does not take into account the effect of interrupts that might
increase delay time.  'ticks' must be a compile-time integer constant;
delays with a variable number of cycles are not supported.

     char __builtin_avr_flash_segment (const __memx void*)

This built-in takes a byte address to the 24-bit *note address space:
AVR Named Address Spaces. '__memx' and returns the number of the flash
segment (the 64 KiB chunk) where the address points to.  Counting starts
at '0'.  If the address does not point to flash memory, return '-1'.

     unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val)

Insert bits from BITS into VAL and return the resulting value.  The
nibbles of MAP determine how the insertion is performed: Let X be the
N-th nibble of MAP
  1. If X is '0xf', then the N-th bit of VAL is returned unaltered.

  2. If X is in the range 0...7, then the N-th result bit is set to the
     X-th bit of BITS

  3. If X is in the range 8...'0xe', then the N-th result bit is
     undefined.

One typical use case for this built-in is adjusting input and output
values to non-contiguous port layouts.  Some examples:

     // same as val, bits is unused
     __builtin_avr_insert_bits (0xffffffff, bits, val)

     // same as bits, val is unused
     __builtin_avr_insert_bits (0x76543210, bits, val)

     // same as rotating bits by 4
     __builtin_avr_insert_bits (0x32107654, bits, 0)

     // high nibble of result is the high nibble of val
     // low nibble of result is the low nibble of bits
     __builtin_avr_insert_bits (0xffff3210, bits, val)

     // reverse the bit order of bits
     __builtin_avr_insert_bits (0x01234567, bits, 0)


File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: AVR Built-in Functions,  Up: Target Builtins

6.58.10 Blackfin Built-in Functions
-----------------------------------

Currently, there are two Blackfin-specific built-in functions.  These
are used for generating 'CSYNC' and 'SSYNC' machine insns without using
inline assembly; by using these built-in functions the compiler can
automatically add workarounds for hardware errata involving these
instructions.  These functions are named as follows:

     void __builtin_bfin_csync (void)
     void __builtin_bfin_ssync (void)


File: gcc.info,  Node: FR-V Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins

6.58.11 FR-V Built-in Functions
-------------------------------

GCC provides many FR-V-specific built-in functions.  In general, these
functions are intended to be compatible with those described by 'FR-V
Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.  The
two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which
pass 128-bit values by pointer rather than by value.

 Most of the functions are named after specific FR-V instructions.  Such
functions are said to be "directly mapped" and are summarized here in
tabular form.

* Menu:

* Argument Types::
* Directly-mapped Integer Functions::
* Directly-mapped Media Functions::
* Raw read/write Functions::
* Other Built-in Functions::


File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions

6.58.11.1 Argument Types
........................

The arguments to the built-in functions can be divided into three
groups: register numbers, compile-time constants and run-time values.
In order to make this classification clear at a glance, the arguments
and return values are given the following pseudo types:

Pseudo type    Real C type            Constant?   Description
'uh'           'unsigned short'       No          an unsigned halfword
'uw1'          'unsigned int'         No          an unsigned word
'sw1'          'int'                  No          a signed word
'uw2'          'unsigned long long'   No          an unsigned doubleword
'sw2'          'long long'            No          a signed doubleword
'const'        'int'                  Yes         an integer constant
'acc'          'int'                  Yes         an ACC register number
'iacc'         'int'                  Yes         an IACC register number

 These pseudo types are not defined by GCC, they are simply a notational
convenience used in this manual.

 Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at
run time.  They correspond to register operands in the underlying FR-V
instructions.

 'const' arguments represent immediate operands in the underlying FR-V
instructions.  They must be compile-time constants.

 'acc' arguments are evaluated at compile time and specify the number of
an accumulator register.  For example, an 'acc' argument of 2 selects
the ACC2 register.

 'iacc' arguments are similar to 'acc' arguments but specify the number
of an IACC register.  See *note Other Built-in Functions:: for more
details.


File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions

6.58.11.2 Directly-Mapped Integer Functions
...........................................

The functions listed below map directly to FR-V I-type instructions.

Function prototype               Example usage           Assembly output
'sw1 __ADDSS (sw1, sw1)'         'C = __ADDSS (A, B)'    'ADDSS A,B,C'
'sw1 __SCAN (sw1, sw1)'          'C = __SCAN (A, B)'     'SCAN A,B,C'
'sw1 __SCUTSS (sw1)'             'B = __SCUTSS (A)'      'SCUTSS A,B'
'sw1 __SLASS (sw1, sw1)'         'C = __SLASS (A, B)'    'SLASS A,B,C'
'void __SMASS (sw1, sw1)'        '__SMASS (A, B)'        'SMASS A,B'
'void __SMSSS (sw1, sw1)'        '__SMSSS (A, B)'        'SMSSS A,B'
'void __SMU (sw1, sw1)'          '__SMU (A, B)'          'SMU A,B'
'sw2 __SMUL (sw1, sw1)'          'C = __SMUL (A, B)'     'SMUL A,B,C'
'sw1 __SUBSS (sw1, sw1)'         'C = __SUBSS (A, B)'    'SUBSS A,B,C'
'uw2 __UMUL (uw1, uw1)'          'C = __UMUL (A, B)'     'UMUL A,B,C'


File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions

6.58.11.3 Directly-Mapped Media Functions
.........................................

The functions listed below map directly to FR-V M-type instructions.

Function prototype               Example usage           Assembly output
'uw1 __MABSHS (sw1)'             'B = __MABSHS (A)'      'MABSHS A,B'
'void __MADDACCS (acc, acc)'     '__MADDACCS (B, A)'     'MADDACCS A,B'
'sw1 __MADDHSS (sw1, sw1)'       'C = __MADDHSS (A,      'MADDHSS A,B,C'
                                 B)'
'uw1 __MADDHUS (uw1, uw1)'       'C = __MADDHUS (A,      'MADDHUS A,B,C'
                                 B)'
'uw1 __MAND (uw1, uw1)'          'C = __MAND (A, B)'     'MAND A,B,C'
'void __MASACCS (acc, acc)'      '__MASACCS (B, A)'      'MASACCS A,B'
'uw1 __MAVEH (uw1, uw1)'         'C = __MAVEH (A, B)'    'MAVEH A,B,C'
'uw2 __MBTOH (uw1)'              'B = __MBTOH (A)'       'MBTOH A,B'
'void __MBTOHE (uw1 *, uw1)'     '__MBTOHE (&B, A)'      'MBTOHE A,B'
'void __MCLRACC (acc)'           '__MCLRACC (A)'         'MCLRACC A'
'void __MCLRACCA (void)'         '__MCLRACCA ()'         'MCLRACCA'
'uw1 __Mcop1 (uw1, uw1)'         'C = __Mcop1 (A, B)'    'Mcop1 A,B,C'
'uw1 __Mcop2 (uw1, uw1)'         'C = __Mcop2 (A, B)'    'Mcop2 A,B,C'
'uw1 __MCPLHI (uw2, const)'      'C = __MCPLHI (A, B)'   'MCPLHI A,#B,C'
'uw1 __MCPLI (uw2, const)'       'C = __MCPLI (A, B)'    'MCPLI A,#B,C'
'void __MCPXIS (acc, sw1,        '__MCPXIS (C, A, B)'    'MCPXIS A,B,C'
sw1)'
'void __MCPXIU (acc, uw1,        '__MCPXIU (C, A, B)'    'MCPXIU A,B,C'
uw1)'
'void __MCPXRS (acc, sw1,        '__MCPXRS (C, A, B)'    'MCPXRS A,B,C'
sw1)'
'void __MCPXRU (acc, uw1,        '__MCPXRU (C, A, B)'    'MCPXRU A,B,C'
uw1)'
'uw1 __MCUT (acc, uw1)'          'C = __MCUT (A, B)'     'MCUT A,B,C'
'uw1 __MCUTSS (acc, sw1)'        'C = __MCUTSS (A, B)'   'MCUTSS A,B,C'
'void __MDADDACCS (acc, acc)'    '__MDADDACCS (B, A)'    'MDADDACCS A,B'
'void __MDASACCS (acc, acc)'     '__MDASACCS (B, A)'     'MDASACCS A,B'
'uw2 __MDCUTSSI (acc, const)'    'C = __MDCUTSSI (A,     'MDCUTSSI
                                 B)'                     A,#B,C'
'uw2 __MDPACKH (uw2, uw2)'       'C = __MDPACKH (A,      'MDPACKH A,B,C'
                                 B)'
'uw2 __MDROTLI (uw2, const)'     'C = __MDROTLI (A,      'MDROTLI
                                 B)'                     A,#B,C'
'void __MDSUBACCS (acc, acc)'    '__MDSUBACCS (B, A)'    'MDSUBACCS A,B'
'void __MDUNPACKH (uw1 *,        '__MDUNPACKH (&B, A)'   'MDUNPACKH A,B'
uw2)'
'uw2 __MEXPDHD (uw1, const)'     'C = __MEXPDHD (A,      'MEXPDHD
                                 B)'                     A,#B,C'
'uw1 __MEXPDHW (uw1, const)'     'C = __MEXPDHW (A,      'MEXPDHW
                                 B)'                     A,#B,C'
'uw1 __MHDSETH (uw1, const)'     'C = __MHDSETH (A,      'MHDSETH
                                 B)'                     A,#B,C'
'sw1 __MHDSETS (const)'          'B = __MHDSETS (A)'     'MHDSETS #A,B'
'uw1 __MHSETHIH (uw1, const)'    'B = __MHSETHIH (B,     'MHSETHIH #A,B'
                                 A)'
'sw1 __MHSETHIS (sw1, const)'    'B = __MHSETHIS (B,     'MHSETHIS #A,B'
                                 A)'
'uw1 __MHSETLOH (uw1, const)'    'B = __MHSETLOH (B,     'MHSETLOH #A,B'
                                 A)'
'sw1 __MHSETLOS (sw1, const)'    'B = __MHSETLOS (B,     'MHSETLOS #A,B'
                                 A)'
'uw1 __MHTOB (uw2)'              'B = __MHTOB (A)'       'MHTOB A,B'
'void __MMACHS (acc, sw1,        '__MMACHS (C, A, B)'    'MMACHS A,B,C'
sw1)'
'void __MMACHU (acc, uw1,        '__MMACHU (C, A, B)'    'MMACHU A,B,C'
uw1)'
'void __MMRDHS (acc, sw1,        '__MMRDHS (C, A, B)'    'MMRDHS A,B,C'
sw1)'
'void __MMRDHU (acc, uw1,        '__MMRDHU (C, A, B)'    'MMRDHU A,B,C'
uw1)'
'void __MMULHS (acc, sw1,        '__MMULHS (C, A, B)'    'MMULHS A,B,C'
sw1)'
'void __MMULHU (acc, uw1,        '__MMULHU (C, A, B)'    'MMULHU A,B,C'
uw1)'
'void __MMULXHS (acc, sw1,       '__MMULXHS (C, A, B)'   'MMULXHS A,B,C'
sw1)'
'void __MMULXHU (acc, uw1,       '__MMULXHU (C, A, B)'   'MMULXHU A,B,C'
uw1)'
'uw1 __MNOT (uw1)'               'B = __MNOT (A)'        'MNOT A,B'
'uw1 __MOR (uw1, uw1)'           'C = __MOR (A, B)'      'MOR A,B,C'
'uw1 __MPACKH (uh, uh)'          'C = __MPACKH (A, B)'   'MPACKH A,B,C'
'sw2 __MQADDHSS (sw2, sw2)'      'C = __MQADDHSS (A,     'MQADDHSS
                                 B)'                     A,B,C'
'uw2 __MQADDHUS (uw2, uw2)'      'C = __MQADDHUS (A,     'MQADDHUS
                                 B)'                     A,B,C'
'void __MQCPXIS (acc, sw2,       '__MQCPXIS (C, A, B)'   'MQCPXIS A,B,C'
sw2)'
'void __MQCPXIU (acc, uw2,       '__MQCPXIU (C, A, B)'   'MQCPXIU A,B,C'
uw2)'
'void __MQCPXRS (acc, sw2,       '__MQCPXRS (C, A, B)'   'MQCPXRS A,B,C'
sw2)'
'void __MQCPXRU (acc, uw2,       '__MQCPXRU (C, A, B)'   'MQCPXRU A,B,C'
uw2)'
'sw2 __MQLCLRHS (sw2, sw2)'      'C = __MQLCLRHS (A,     'MQLCLRHS
                                 B)'                     A,B,C'
'sw2 __MQLMTHS (sw2, sw2)'       'C = __MQLMTHS (A,      'MQLMTHS A,B,C'
                                 B)'
'void __MQMACHS (acc, sw2,       '__MQMACHS (C, A, B)'   'MQMACHS A,B,C'
sw2)'
'void __MQMACHU (acc, uw2,       '__MQMACHU (C, A, B)'   'MQMACHU A,B,C'
uw2)'
'void __MQMACXHS (acc, sw2,      '__MQMACXHS (C, A,      'MQMACXHS
sw2)'                            B)'                     A,B,C'
'void __MQMULHS (acc, sw2,       '__MQMULHS (C, A, B)'   'MQMULHS A,B,C'
sw2)'
'void __MQMULHU (acc, uw2,       '__MQMULHU (C, A, B)'   'MQMULHU A,B,C'
uw2)'
'void __MQMULXHS (acc, sw2,      '__MQMULXHS (C, A,      'MQMULXHS
sw2)'                            B)'                     A,B,C'
'void __MQMULXHU (acc, uw2,      '__MQMULXHU (C, A,      'MQMULXHU
uw2)'                            B)'                     A,B,C'
'sw2 __MQSATHS (sw2, sw2)'       'C = __MQSATHS (A,      'MQSATHS A,B,C'
                                 B)'
'uw2 __MQSLLHI (uw2, int)'       'C = __MQSLLHI (A,      'MQSLLHI A,B,C'
                                 B)'
'sw2 __MQSRAHI (sw2, int)'       'C = __MQSRAHI (A,      'MQSRAHI A,B,C'
                                 B)'
'sw2 __MQSUBHSS (sw2, sw2)'      'C = __MQSUBHSS (A,     'MQSUBHSS
                                 B)'                     A,B,C'
'uw2 __MQSUBHUS (uw2, uw2)'      'C = __MQSUBHUS (A,     'MQSUBHUS
                                 B)'                     A,B,C'
'void __MQXMACHS (acc, sw2,      '__MQXMACHS (C, A,      'MQXMACHS
sw2)'                            B)'                     A,B,C'
'void __MQXMACXHS (acc, sw2,     '__MQXMACXHS (C, A,     'MQXMACXHS
sw2)'                            B)'                     A,B,C'
'uw1 __MRDACC (acc)'             'B = __MRDACC (A)'      'MRDACC A,B'
'uw1 __MRDACCG (acc)'            'B = __MRDACCG (A)'     'MRDACCG A,B'
'uw1 __MROTLI (uw1, const)'      'C = __MROTLI (A, B)'   'MROTLI A,#B,C'
'uw1 __MROTRI (uw1, const)'      'C = __MROTRI (A, B)'   'MROTRI A,#B,C'
'sw1 __MSATHS (sw1, sw1)'        'C = __MSATHS (A, B)'   'MSATHS A,B,C'
'uw1 __MSATHU (uw1, uw1)'        'C = __MSATHU (A, B)'   'MSATHU A,B,C'
'uw1 __MSLLHI (uw1, const)'      'C = __MSLLHI (A, B)'   'MSLLHI A,#B,C'
'sw1 __MSRAHI (sw1, const)'      'C = __MSRAHI (A, B)'   'MSRAHI A,#B,C'
'uw1 __MSRLHI (uw1, const)'      'C = __MSRLHI (A, B)'   'MSRLHI A,#B,C'
'void __MSUBACCS (acc, acc)'     '__MSUBACCS (B, A)'     'MSUBACCS A,B'
'sw1 __MSUBHSS (sw1, sw1)'       'C = __MSUBHSS (A,      'MSUBHSS A,B,C'
                                 B)'
'uw1 __MSUBHUS (uw1, uw1)'       'C = __MSUBHUS (A,      'MSUBHUS A,B,C'
                                 B)'
'void __MTRAP (void)'            '__MTRAP ()'            'MTRAP'
'uw2 __MUNPACKH (uw1)'           'B = __MUNPACKH (A)'    'MUNPACKH A,B'
'uw1 __MWCUT (uw2, uw1)'         'C = __MWCUT (A, B)'    'MWCUT A,B,C'
'void __MWTACC (acc, uw1)'       '__MWTACC (B, A)'       'MWTACC A,B'
'void __MWTACCG (acc, uw1)'      '__MWTACCG (B, A)'      'MWTACCG A,B'
'uw1 __MXOR (uw1, uw1)'          'C = __MXOR (A, B)'     'MXOR A,B,C'


File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions

6.58.11.4 Raw Read/Write Functions
..................................

This sections describes built-in functions related to read and write
instructions to access memory.  These functions generate 'membar'
instructions to flush the I/O load and stores where appropriate, as
described in Fujitsu's manual described above.

'unsigned char __builtin_read8 (void *DATA)'
'unsigned short __builtin_read16 (void *DATA)'
'unsigned long __builtin_read32 (void *DATA)'
'unsigned long long __builtin_read64 (void *DATA)'

'void __builtin_write8 (void *DATA, unsigned char DATUM)'
'void __builtin_write16 (void *DATA, unsigned short DATUM)'
'void __builtin_write32 (void *DATA, unsigned long DATUM)'
'void __builtin_write64 (void *DATA, unsigned long long DATUM)'


File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions

6.58.11.5 Other Built-in Functions
..................................

This section describes built-in functions that are not named after a
specific FR-V instruction.

'sw2 __IACCreadll (iacc REG)'
     Return the full 64-bit value of IACC0.  The REG argument is
     reserved for future expansion and must be 0.

'sw1 __IACCreadl (iacc REG)'
     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
     Other values of REG are rejected as invalid.

'void __IACCsetll (iacc REG, sw2 X)'
     Set the full 64-bit value of IACC0 to X.  The REG argument is
     reserved for future expansion and must be 0.

'void __IACCsetl (iacc REG, sw1 X)'
     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
     values of REG are rejected as invalid.

'void __data_prefetch0 (const void *X)'
     Use the 'dcpl' instruction to load the contents of address X into
     the data cache.

'void __data_prefetch (const void *X)'
     Use the 'nldub' instruction to load the contents of address X into
     the data cache.  The instruction is issued in slot I1.


File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: FR-V Built-in Functions,  Up: Target Builtins

6.58.12 MIPS DSP Built-in Functions
-----------------------------------

The MIPS DSP Application-Specific Extension (ASE) includes new
instructions that are designed to improve the performance of DSP and
media applications.  It provides instructions that operate on packed
8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data.

 GCC supports MIPS DSP operations using both the generic vector
extensions (*note Vector Extensions::) and a collection of MIPS-specific
built-in functions.  Both kinds of support are enabled by the '-mdsp'
command-line option.

 Revision 2 of the ASE was introduced in the second half of 2006.  This
revision adds extra instructions to the original ASE, but is otherwise
backwards-compatible with it.  You can select revision 2 using the
command-line option '-mdspr2'; this option implies '-mdsp'.

 The SCOUNT and POS bits of the DSP control register are global.  The
WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS
bits.  During optimization, the compiler does not delete these
instructions and it does not delete calls to functions containing these
instructions.

 At present, GCC only provides support for operations on 32-bit vectors.
The vector type associated with 8-bit integer data is usually called
'v4i8', the vector type associated with Q7 is usually called 'v4q7', the
vector type associated with 16-bit integer data is usually called
'v2i16', and the vector type associated with Q15 is usually called
'v2q15'.  They can be defined in C as follows:

     typedef signed char v4i8 __attribute__ ((vector_size(4)));
     typedef signed char v4q7 __attribute__ ((vector_size(4)));
     typedef short v2i16 __attribute__ ((vector_size(4)));
     typedef short v2q15 __attribute__ ((vector_size(4)));

 'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same
way as aggregates.  For example:

     v4i8 a = {1, 2, 3, 4};
     v4i8 b;
     b = (v4i8) {5, 6, 7, 8};

     v2q15 c = {0x0fcb, 0x3a75};
     v2q15 d;
     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};

 _Note:_ The CPU's endianness determines the order in which values are
packed.  On little-endian targets, the first value is the least
significant and the last value is the most significant.  The opposite
order applies to big-endian targets.  For example, the code above sets
the lowest byte of 'a' to '1' on little-endian targets and '4' on
big-endian targets.

 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer
representation.  As shown in this example, the integer representation of
a Q7 value can be obtained by multiplying the fractional value by
'0x1.0p7'.  The equivalent for Q15 values is to multiply by '0x1.0p15'.
The equivalent for Q31 values is to multiply by '0x1.0p31'.

 The table below lists the 'v4i8' and 'v2q15' operations for which
hardware support exists.  'a' and 'b' are 'v4i8' values, and 'c' and 'd'
are 'v2q15' values.

C code                               MIPS instruction
'a + b'                              'addu.qb'
'c + d'                              'addq.ph'
'a - b'                              'subu.qb'
'c - d'                              'subq.ph'

 The table below lists the 'v2i16' operation for which hardware support
exists for the DSP ASE REV 2.  'e' and 'f' are 'v2i16' values.

C code                               MIPS instruction
'e * f'                              'mul.ph'

 It is easier to describe the DSP built-in functions if we first define
the following types:

     typedef int q31;
     typedef int i32;
     typedef unsigned int ui32;
     typedef long long a64;

 'q31' and 'i32' are actually the same as 'int', but we use 'q31' to
indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer
value.  Similarly, 'a64' is the same as 'long long', but we use 'a64' to
indicate values that are placed in one of the four DSP accumulators
('$ac0', '$ac1', '$ac2' or '$ac3').

 Also, some built-in functions prefer or require immediate numbers as
parameters, because the corresponding DSP instructions accept both
immediate numbers and register operands, or accept immediate numbers
only.  The immediate parameters are listed as follows.

     imm0_3: 0 to 3.
     imm0_7: 0 to 7.
     imm0_15: 0 to 15.
     imm0_31: 0 to 31.
     imm0_63: 0 to 63.
     imm0_255: 0 to 255.
     imm_n32_31: -32 to 31.
     imm_n512_511: -512 to 511.

 The following built-in functions map directly to a particular MIPS DSP
instruction.  Please refer to the architecture specification for details
on what each instruction does.

     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
     q31 __builtin_mips_addq_s_w (q31, q31)
     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
     q31 __builtin_mips_subq_s_w (q31, q31)
     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
     i32 __builtin_mips_addsc (i32, i32)
     i32 __builtin_mips_addwc (i32, i32)
     i32 __builtin_mips_modsub (i32, i32)
     i32 __builtin_mips_raddu_w_qb (v4i8)
     v2q15 __builtin_mips_absq_s_ph (v2q15)
     q31 __builtin_mips_absq_s_w (q31)
     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
     q31 __builtin_mips_preceq_w_phl (v2q15)
     q31 __builtin_mips_preceq_w_phr (v2q15)
     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
     v4i8 __builtin_mips_shll_qb (v4i8, i32)
     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
     v2q15 __builtin_mips_shll_ph (v2q15, i32)
     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
     q31 __builtin_mips_shll_s_w (q31, imm0_31)
     q31 __builtin_mips_shll_s_w (q31, i32)
     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
     v2q15 __builtin_mips_shra_ph (v2q15, i32)
     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
     q31 __builtin_mips_shra_r_w (q31, imm0_31)
     q31 __builtin_mips_shra_r_w (q31, i32)
     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
     i32 __builtin_mips_bitrev (i32)
     i32 __builtin_mips_insv (i32, i32)
     v4i8 __builtin_mips_repl_qb (imm0_255)
     v4i8 __builtin_mips_repl_qb (i32)
     v2q15 __builtin_mips_repl_ph (imm_n512_511)
     v2q15 __builtin_mips_repl_ph (i32)
     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
     i32 __builtin_mips_extr_w (a64, imm0_31)
     i32 __builtin_mips_extr_w (a64, i32)
     i32 __builtin_mips_extr_r_w (a64, imm0_31)
     i32 __builtin_mips_extr_s_h (a64, i32)
     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
     i32 __builtin_mips_extr_rs_w (a64, i32)
     i32 __builtin_mips_extr_s_h (a64, imm0_31)
     i32 __builtin_mips_extr_r_w (a64, i32)
     i32 __builtin_mips_extp (a64, imm0_31)
     i32 __builtin_mips_extp (a64, i32)
     i32 __builtin_mips_extpdp (a64, imm0_31)
     i32 __builtin_mips_extpdp (a64, i32)
     a64 __builtin_mips_shilo (a64, imm_n32_31)
     a64 __builtin_mips_shilo (a64, i32)
     a64 __builtin_mips_mthlip (a64, i32)
     void __builtin_mips_wrdsp (i32, imm0_63)
     i32 __builtin_mips_rddsp (imm0_63)
     i32 __builtin_mips_lbux (void *, i32)
     i32 __builtin_mips_lhx (void *, i32)
     i32 __builtin_mips_lwx (void *, i32)
     a64 __builtin_mips_ldx (void *, i32) [MIPS64 only]
     i32 __builtin_mips_bposge32 (void)
     a64 __builtin_mips_madd (a64, i32, i32);
     a64 __builtin_mips_maddu (a64, ui32, ui32);
     a64 __builtin_mips_msub (a64, i32, i32);
     a64 __builtin_mips_msubu (a64, ui32, ui32);
     a64 __builtin_mips_mult (i32, i32);
     a64 __builtin_mips_multu (ui32, ui32);

 The following built-in functions map directly to a particular MIPS DSP
REV 2 instruction.  Please refer to the architecture specification for
details on what each instruction does.

     v4q7 __builtin_mips_absq_s_qb (v4q7);
     v2i16 __builtin_mips_addu_ph (v2i16, v2i16);
     v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16);
     v4i8 __builtin_mips_adduh_qb (v4i8, v4i8);
     v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8);
     i32 __builtin_mips_append (i32, i32, imm0_31);
     i32 __builtin_mips_balign (i32, i32, imm0_3);
     i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8);
     i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8);
     i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8);
     a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16);
     a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16);
     v2i16 __builtin_mips_mul_ph (v2i16, v2i16);
     v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16);
     q31 __builtin_mips_mulq_rs_w (q31, q31);
     v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15);
     q31 __builtin_mips_mulq_s_w (q31, q31);
     a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16);
     v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16);
     v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31);
     v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31);
     i32 __builtin_mips_prepend (i32, i32, imm0_31);
     v4i8 __builtin_mips_shra_qb (v4i8, imm0_7);
     v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7);
     v4i8 __builtin_mips_shra_qb (v4i8, i32);
     v4i8 __builtin_mips_shra_r_qb (v4i8, i32);
     v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15);
     v2i16 __builtin_mips_shrl_ph (v2i16, i32);
     v2i16 __builtin_mips_subu_ph (v2i16, v2i16);
     v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16);
     v4i8 __builtin_mips_subuh_qb (v4i8, v4i8);
     v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8);
     v2q15 __builtin_mips_addqh_ph (v2q15, v2q15);
     v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15);
     q31 __builtin_mips_addqh_w (q31, q31);
     q31 __builtin_mips_addqh_r_w (q31, q31);
     v2q15 __builtin_mips_subqh_ph (v2q15, v2q15);
     v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15);
     q31 __builtin_mips_subqh_w (q31, q31);
     q31 __builtin_mips_subqh_r_w (q31, q31);
     a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16);
     a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16);
     a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15);
     a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15);
     a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15);
     a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15);


File: gcc.info,  Node: MIPS Paired-Single Support,  Next: MIPS Loongson Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins

6.58.13 MIPS Paired-Single Support
----------------------------------

The MIPS64 architecture includes a number of instructions that operate
on pairs of single-precision floating-point values.  Each pair is packed
into a 64-bit floating-point register, with one element being designated
the "upper half" and the other being designated the "lower half".

 GCC supports paired-single operations using both the generic vector
extensions (*note Vector Extensions::) and a collection of MIPS-specific
built-in functions.  Both kinds of support are enabled by the
'-mpaired-single' command-line option.

 The vector type associated with paired-single values is usually called
'v2sf'.  It can be defined in C as follows:

     typedef float v2sf __attribute__ ((vector_size (8)));

 'v2sf' values are initialized in the same way as aggregates.  For
example:

     v2sf a = {1.5, 9.1};
     v2sf b;
     float e, f;
     b = (v2sf) {e, f};

 _Note:_ The CPU's endianness determines which value is stored in the
upper half of a register and which value is stored in the lower half.
On little-endian targets, the first value is the lower one and the
second value is the upper one.  The opposite order applies to big-endian
targets.  For example, the code above sets the lower half of 'a' to
'1.5' on little-endian targets and '9.1' on big-endian targets.


File: gcc.info,  Node: MIPS Loongson Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins

6.58.14 MIPS Loongson Built-in Functions
----------------------------------------

GCC provides intrinsics to access the SIMD instructions provided by the
ST Microelectronics Loongson-2E and -2F processors.  These intrinsics,
available after inclusion of the 'loongson.h' header file, operate on
the following 64-bit vector types:

   * 'uint8x8_t', a vector of eight unsigned 8-bit integers;
   * 'uint16x4_t', a vector of four unsigned 16-bit integers;
   * 'uint32x2_t', a vector of two unsigned 32-bit integers;
   * 'int8x8_t', a vector of eight signed 8-bit integers;
   * 'int16x4_t', a vector of four signed 16-bit integers;
   * 'int32x2_t', a vector of two signed 32-bit integers.

 The intrinsics provided are listed below; each is named after the
machine instruction to which it corresponds, with suffixes added as
appropriate to distinguish intrinsics that expand to the same machine
instruction yet have different argument types.  Refer to the
architecture documentation for a description of the functionality of
each instruction.

     int16x4_t packsswh (int32x2_t s, int32x2_t t);
     int8x8_t packsshb (int16x4_t s, int16x4_t t);
     uint8x8_t packushb (uint16x4_t s, uint16x4_t t);
     uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t);
     uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t);
     uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t);
     int32x2_t paddw_s (int32x2_t s, int32x2_t t);
     int16x4_t paddh_s (int16x4_t s, int16x4_t t);
     int8x8_t paddb_s (int8x8_t s, int8x8_t t);
     uint64_t paddd_u (uint64_t s, uint64_t t);
     int64_t paddd_s (int64_t s, int64_t t);
     int16x4_t paddsh (int16x4_t s, int16x4_t t);
     int8x8_t paddsb (int8x8_t s, int8x8_t t);
     uint16x4_t paddush (uint16x4_t s, uint16x4_t t);
     uint8x8_t paddusb (uint8x8_t s, uint8x8_t t);
     uint64_t pandn_ud (uint64_t s, uint64_t t);
     uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t);
     uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t);
     uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t);
     int64_t pandn_sd (int64_t s, int64_t t);
     int32x2_t pandn_sw (int32x2_t s, int32x2_t t);
     int16x4_t pandn_sh (int16x4_t s, int16x4_t t);
     int8x8_t pandn_sb (int8x8_t s, int8x8_t t);
     uint16x4_t pavgh (uint16x4_t s, uint16x4_t t);
     uint8x8_t pavgb (uint8x8_t s, uint8x8_t t);
     uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t);
     uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t);
     uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t);
     int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t);
     int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t);
     int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t);
     uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t);
     uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t);
     uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t);
     int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t);
     int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t);
     int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t);
     uint16x4_t pextrh_u (uint16x4_t s, int field);
     int16x4_t pextrh_s (int16x4_t s, int field);
     uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t);
     uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t);
     uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t);
     uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t);
     int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t);
     int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t);
     int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t);
     int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t);
     int32x2_t pmaddhw (int16x4_t s, int16x4_t t);
     int16x4_t pmaxsh (int16x4_t s, int16x4_t t);
     uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t);
     int16x4_t pminsh (int16x4_t s, int16x4_t t);
     uint8x8_t pminub (uint8x8_t s, uint8x8_t t);
     uint8x8_t pmovmskb_u (uint8x8_t s);
     int8x8_t pmovmskb_s (int8x8_t s);
     uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t);
     int16x4_t pmulhh (int16x4_t s, int16x4_t t);
     int16x4_t pmullh (int16x4_t s, int16x4_t t);
     int64_t pmuluw (uint32x2_t s, uint32x2_t t);
     uint8x8_t pasubub (uint8x8_t s, uint8x8_t t);
     uint16x4_t biadd (uint8x8_t s);
     uint16x4_t psadbh (uint8x8_t s, uint8x8_t t);
     uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order);
     int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order);
     uint16x4_t psllh_u (uint16x4_t s, uint8_t amount);
     int16x4_t psllh_s (int16x4_t s, uint8_t amount);
     uint32x2_t psllw_u (uint32x2_t s, uint8_t amount);
     int32x2_t psllw_s (int32x2_t s, uint8_t amount);
     uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount);
     int16x4_t psrlh_s (int16x4_t s, uint8_t amount);
     uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount);
     int32x2_t psrlw_s (int32x2_t s, uint8_t amount);
     uint16x4_t psrah_u (uint16x4_t s, uint8_t amount);
     int16x4_t psrah_s (int16x4_t s, uint8_t amount);
     uint32x2_t psraw_u (uint32x2_t s, uint8_t amount);
     int32x2_t psraw_s (int32x2_t s, uint8_t amount);
     uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t);
     uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t);
     uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t);
     int32x2_t psubw_s (int32x2_t s, int32x2_t t);
     int16x4_t psubh_s (int16x4_t s, int16x4_t t);
     int8x8_t psubb_s (int8x8_t s, int8x8_t t);
     uint64_t psubd_u (uint64_t s, uint64_t t);
     int64_t psubd_s (int64_t s, int64_t t);
     int16x4_t psubsh (int16x4_t s, int16x4_t t);
     int8x8_t psubsb (int8x8_t s, int8x8_t t);
     uint16x4_t psubush (uint16x4_t s, uint16x4_t t);
     uint8x8_t psubusb (uint8x8_t s, uint8x8_t t);
     uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t);
     uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t);
     uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t);
     int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t);
     int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t);
     int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t);
     uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t);
     uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t);
     uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t);
     int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t);
     int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t);
     int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t);

* Menu:

* Paired-Single Arithmetic::
* Paired-Single Built-in Functions::
* MIPS-3D Built-in Functions::


File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions

6.58.14.1 Paired-Single Arithmetic
..................................

The table below lists the 'v2sf' operations for which hardware support
exists.  'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral
value.

C code                               MIPS instruction
'a + b'                              'add.ps'
'a - b'                              'sub.ps'
'-a'                                 'neg.ps'
'a * b'                              'mul.ps'
'a * b + c'                          'madd.ps'
'a * b - c'                          'msub.ps'
'-(a * b + c)'                       'nmadd.ps'
'-(a * b - c)'                       'nmsub.ps'
'x ? a : b'                          'movn.ps'/'movz.ps'

 Note that the multiply-accumulate instructions can be disabled using
the command-line option '-mno-fused-madd'.


File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Loongson Built-in Functions

6.58.14.2 Paired-Single Built-in Functions
..........................................

The following paired-single functions map directly to a particular MIPS
instruction.  Please refer to the architecture specification for details
on what each instruction does.

'v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
     Pair lower lower ('pll.ps').

'v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
     Pair upper lower ('pul.ps').

'v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
     Pair lower upper ('plu.ps').

'v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
     Pair upper upper ('puu.ps').

'v2sf __builtin_mips_cvt_ps_s (float, float)'
     Convert pair to paired single ('cvt.ps.s').

'float __builtin_mips_cvt_s_pl (v2sf)'
     Convert pair lower to single ('cvt.s.pl').

'float __builtin_mips_cvt_s_pu (v2sf)'
     Convert pair upper to single ('cvt.s.pu').

'v2sf __builtin_mips_abs_ps (v2sf)'
     Absolute value ('abs.ps').

'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
     Align variable ('alnv.ps').

     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
     otherwise the result is unpredictable.  Please read the instruction
     description for details.

 The following multi-instruction functions are also available.  In each
case, COND can be any of the 16 floating-point conditions: 'f', 'un',
'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
'lt', 'nge', 'le' or 'ngt'.

'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
     Conditional move based on floating-point comparison ('c.COND.ps',
     'movt.ps'/'movf.ps').

     The 'movt' functions return the value X computed by:

          c.COND.ps CC,A,B
          mov.ps X,C
          movt.ps X,D,CC

     The 'movf' functions are similar but use 'movf.ps' instead of
     'movt.ps'.

'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
     Comparison of two paired-single values ('c.COND.ps',
     'bc1t'/'bc1f').

     These functions compare A and B using 'c.COND.ps' and return either
     the upper or lower half of the result.  For example:

          v2sf a, b;
          if (__builtin_mips_upper_c_eq_ps (a, b))
            upper_halves_are_equal ();
          else
            upper_halves_are_unequal ();

          if (__builtin_mips_lower_c_eq_ps (a, b))
            lower_halves_are_equal ();
          else
            lower_halves_are_unequal ();


File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Loongson Built-in Functions

6.58.14.3 MIPS-3D Built-in Functions
....................................

The MIPS-3D Application-Specific Extension (ASE) includes additional
paired-single instructions that are designed to improve the performance
of 3D graphics operations.  Support for these instructions is controlled
by the '-mips3d' command-line option.

 The functions listed below map directly to a particular MIPS-3D
instruction.  Please refer to the architecture specification for more
details on what each instruction does.

'v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
     Reduction add ('addr.ps').

'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
     Reduction multiply ('mulr.ps').

'v2sf __builtin_mips_cvt_pw_ps (v2sf)'
     Convert paired single to paired word ('cvt.pw.ps').

'v2sf __builtin_mips_cvt_ps_pw (v2sf)'
     Convert paired word to paired single ('cvt.ps.pw').

'float __builtin_mips_recip1_s (float)'
'double __builtin_mips_recip1_d (double)'
'v2sf __builtin_mips_recip1_ps (v2sf)'
     Reduced-precision reciprocal (sequence step 1) ('recip1.FMT').

'float __builtin_mips_recip2_s (float, float)'
'double __builtin_mips_recip2_d (double, double)'
'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
     Reduced-precision reciprocal (sequence step 2) ('recip2.FMT').

'float __builtin_mips_rsqrt1_s (float)'
'double __builtin_mips_rsqrt1_d (double)'
'v2sf __builtin_mips_rsqrt1_ps (v2sf)'
     Reduced-precision reciprocal square root (sequence step 1)
     ('rsqrt1.FMT').

'float __builtin_mips_rsqrt2_s (float, float)'
'double __builtin_mips_rsqrt2_d (double, double)'
'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
     Reduced-precision reciprocal square root (sequence step 2)
     ('rsqrt2.FMT').

 The following multi-instruction functions are also available.  In each
case, COND can be any of the 16 floating-point conditions: 'f', 'un',
'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl',
'lt', 'nge', 'le' or 'ngt'.

'int __builtin_mips_cabs_COND_s (float A, float B)'
'int __builtin_mips_cabs_COND_d (double A, double B)'
     Absolute comparison of two scalar values ('cabs.COND.FMT',
     'bc1t'/'bc1f').

     These functions compare A and B using 'cabs.COND.s' or
     'cabs.COND.d' and return the result as a boolean value.  For
     example:

          float a, b;
          if (__builtin_mips_cabs_eq_s (a, b))
            true ();
          else
            false ();

'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
     Absolute comparison of two paired-single values ('cabs.COND.ps',
     'bc1t'/'bc1f').

     These functions compare A and B using 'cabs.COND.ps' and return
     either the upper or lower half of the result.  For example:

          v2sf a, b;
          if (__builtin_mips_upper_cabs_eq_ps (a, b))
            upper_halves_are_equal ();
          else
            upper_halves_are_unequal ();

          if (__builtin_mips_lower_cabs_eq_ps (a, b))
            lower_halves_are_equal ();
          else
            lower_halves_are_unequal ();

'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
     Conditional move based on absolute comparison ('cabs.COND.ps',
     'movt.ps'/'movf.ps').

     The 'movt' functions return the value X computed by:

          cabs.COND.ps CC,A,B
          mov.ps X,C
          movt.ps X,D,CC

     The 'movf' functions are similar but use 'movf.ps' instead of
     'movt.ps'.

'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
     Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps',
     'bc1any2t'/'bc1any2f').

     These functions compare A and B using 'c.COND.ps' or
     'cabs.COND.ps'.  The 'any' forms return true if either result is
     true and the 'all' forms return true if both results are true.  For
     example:

          v2sf a, b;
          if (__builtin_mips_any_c_eq_ps (a, b))
            one_is_true ();
          else
            both_are_false ();

          if (__builtin_mips_all_c_eq_ps (a, b))
            both_are_true ();
          else
            one_is_false ();

'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
     Comparison of four paired-single values
     ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f').

     These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with
     B and to compare C with D.  The 'any' forms return true if any of
     the four results are true and the 'all' forms return true if all
     four results are true.  For example:

          v2sf a, b, c, d;
          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
            some_are_true ();
          else
            all_are_false ();

          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
            all_are_true ();
          else
            some_are_false ();


File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: MSP430 Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins

6.58.15 Other MIPS Built-in Functions
-------------------------------------

GCC provides other MIPS-specific built-in functions:

'void __builtin_mips_cache (int OP, const volatile void *ADDR)'
     Insert a 'cache' instruction with operands OP and ADDR.  GCC
     defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE'
     when this function is available.

'unsigned int __builtin_mips_get_fcsr (void)'
'void __builtin_mips_set_fcsr (unsigned int VALUE)'
     Get and set the contents of the floating-point control and status
     register (FPU control register 31).  These functions are only
     available in hard-float code but can be called in both MIPS16 and
     non-MIPS16 contexts.

     '__builtin_mips_set_fcsr' can be used to change any bit of the
     register except the condition codes, which GCC assumes are
     preserved.


File: gcc.info,  Node: MSP430 Built-in Functions,  Next: NDS32 Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins

6.58.16 MSP430 Built-in Functions
---------------------------------

GCC provides a couple of special builtin functions to aid in the writing
of interrupt handlers in C.

'__bic_SR_register_on_exit (int MASK)'
     This clears the indicated bits in the saved copy of the status
     register currently residing on the stack.  This only works inside
     interrupt handlers and the changes to the status register will only
     take affect once the handler returns.

'__bis_SR_register_on_exit (int MASK)'
     This sets the indicated bits in the saved copy of the status
     register currently residing on the stack.  This only works inside
     interrupt handlers and the changes to the status register will only
     take affect once the handler returns.

'__delay_cycles (long long CYCLES)'
     This inserts an instruction sequence that takes exactly CYCLES
     cycles (between 0 and about 17E9) to complete.  The inserted
     sequence may use jumps, loops, or no-ops, and does not interfere
     with any other instructions.  Note that CYCLES must be a
     compile-time constant integer - that is, you must pass a number,
     not a variable that may be optimized to a constant later.  The
     number of cycles delayed by this builtin is exact.


File: gcc.info,  Node: NDS32 Built-in Functions,  Next: picoChip Built-in Functions,  Prev: MSP430 Built-in Functions,  Up: Target Builtins

6.58.17 NDS32 Built-in Functions
--------------------------------

These built-in functions are available for the NDS32 target:

 -- Built-in Function: void __builtin_nds32_isync (int *ADDR)
     Insert an ISYNC instruction into the instruction stream where ADDR
     is an instruction address for serialization.

 -- Built-in Function: void __builtin_nds32_isb (void)
     Insert an ISB instruction into the instruction stream.

 -- Built-in Function: int __builtin_nds32_mfsr (int SR)
     Return the content of a system register which is mapped by SR.

 -- Built-in Function: int __builtin_nds32_mfusr (int USR)
     Return the content of a user space register which is mapped by USR.

 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR)
     Move the VALUE to a system register which is mapped by SR.

 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR)
     Move the VALUE to a user space register which is mapped by USR.

 -- Built-in Function: void __builtin_nds32_setgie_en (void)
     Enable global interrupt.

 -- Built-in Function: void __builtin_nds32_setgie_dis (void)
     Disable global interrupt.


File: gcc.info,  Node: picoChip Built-in Functions,  Next: PowerPC Built-in Functions,  Prev: NDS32 Built-in Functions,  Up: Target Builtins

6.58.18 picoChip Built-in Functions
-----------------------------------

GCC provides an interface to selected machine instructions from the
picoChip instruction set.

'int __builtin_sbc (int VALUE)'
     Sign bit count.  Return the number of consecutive bits in VALUE
     that have the same value as the sign bit.  The result is the number
     of leading sign bits minus one, giving the number of redundant sign
     bits in VALUE.

'int __builtin_byteswap (int VALUE)'
     Byte swap.  Return the result of swapping the upper and lower bytes
     of VALUE.

'int __builtin_brev (int VALUE)'
     Bit reversal.  Return the result of reversing the bits in VALUE.
     Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so
     on.

'int __builtin_adds (int X, int Y)'
     Saturating addition.  Return the result of adding X and Y, storing
     the value 32767 if the result overflows.

'int __builtin_subs (int X, int Y)'
     Saturating subtraction.  Return the result of subtracting Y from X,
     storing the value -32768 if the result overflows.

'void __builtin_halt (void)'
     Halt.  The processor stops execution.  This built-in is useful for
     implementing assertions.


File: gcc.info,  Node: PowerPC Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins

6.58.19 PowerPC Built-in Functions
----------------------------------

These built-in functions are available for the PowerPC family of
processors:
     float __builtin_recipdivf (float, float);
     float __builtin_rsqrtf (float);
     double __builtin_recipdiv (double, double);
     double __builtin_rsqrt (double);
     uint64_t __builtin_ppc_get_timebase ();
     unsigned long __builtin_ppc_mftb ();
     double __builtin_unpack_longdouble (long double, int);
     long double __builtin_pack_longdouble (double, double);

 The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions
generate multiple instructions to implement the reciprocal sqrt
functionality using reciprocal sqrt estimate instructions.

 The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate
multiple instructions to implement division using the reciprocal
estimate instructions.

 The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions
generate instructions to read the Time Base Register.  The
'__builtin_ppc_get_timebase' function may generate multiple instructions
and always returns the 64 bits of the Time Base Register.  The
'__builtin_ppc_mftb' function always generates one instruction and
returns the Time Base Register value as an unsigned long, throwing away
the most significant word on 32-bit environments.

 The following built-in functions are available for the PowerPC family
of processors, starting with ISA 2.06 or later ('-mcpu=power7' or
'-mpopcntd'):
     long __builtin_bpermd (long, long);
     int __builtin_divwe (int, int);
     int __builtin_divweo (int, int);
     unsigned int __builtin_divweu (unsigned int, unsigned int);
     unsigned int __builtin_divweuo (unsigned int, unsigned int);
     long __builtin_divde (long, long);
     long __builtin_divdeo (long, long);
     unsigned long __builtin_divdeu (unsigned long, unsigned long);
     unsigned long __builtin_divdeuo (unsigned long, unsigned long);
     unsigned int cdtbcd (unsigned int);
     unsigned int cbcdtd (unsigned int);
     unsigned int addg6s (unsigned int, unsigned int);

 The '__builtin_divde', '__builtin_divdeo', '__builtin_divdeu',
'__builtin_divdeou' functions require a 64-bit environment support ISA
2.06 or later.

 The following built-in functions are available for the PowerPC family
of processors when hardware decimal floating point ('-mhard-dfp') is
available:
     _Decimal64 __builtin_dxex (_Decimal64);
     _Decimal128 __builtin_dxexq (_Decimal128);
     _Decimal64 __builtin_ddedpd (int, _Decimal64);
     _Decimal128 __builtin_ddedpdq (int, _Decimal128);
     _Decimal64 __builtin_denbcd (int, _Decimal64);
     _Decimal128 __builtin_denbcdq (int, _Decimal128);
     _Decimal64 __builtin_diex (_Decimal64, _Decimal64);
     _Decimal128 _builtin_diexq (_Decimal128, _Decimal128);
     _Decimal64 __builtin_dscli (_Decimal64, int);
     _Decimal128 __builtin_dscliq (_Decimal128, int);
     _Decimal64 __builtin_dscri (_Decimal64, int);
     _Decimal128 __builtin_dscriq (_Decimal128, int);
     unsigned long long __builtin_unpack_dec128 (_Decimal128, int);
     _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long);

 The following built-in functions are available for the PowerPC family
of processors when the Vector Scalar (vsx) instruction set is available:
     unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int);
     vector __int128_t __builtin_pack_vector_int128 (unsigned long long,
                                                     unsigned long long);


File: 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

6.58.20 PowerPC AltiVec Built-in Functions
------------------------------------------

GCC provides an interface for the PowerPC family of processors to access
the AltiVec operations described in Motorola's AltiVec Programming
Interface Manual.  The interface is made available by including
'<altivec.h>' and using '-maltivec' and '-mabi=altivec'.  The interface
supports the following vector types.

     vector unsigned char
     vector signed char
     vector bool char

     vector unsigned short
     vector signed short
     vector bool short
     vector pixel

     vector unsigned int
     vector signed int
     vector bool int
     vector float

 If '-mvsx' is used the following additional vector types are
implemented.

     vector unsigned long
     vector signed long
     vector double

 The long types are only implemented for 64-bit code generation, and the
long type is only used in the floating point/integer conversion
instructions.

 GCC's implementation of the high-level language interface available
from C and C++ code differs from Motorola's documentation in several
ways.

   * A vector constant is a list of constant expressions within curly
     braces.

   * A vector initializer requires no cast if the vector constant is of
     the same type as the variable it is initializing.

   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
     type is the default signedness of the base type.  The default
     varies depending on the operating system, so a portable program
     should always specify the signedness.

   * Compiling with '-maltivec' adds keywords '__vector', 'vector',
     '__pixel', 'pixel', '__bool' and 'bool'.  When compiling ISO C, the
     context-sensitive substitution of the keywords 'vector', 'pixel'
     and 'bool' is disabled.  To use them, you must include
     '<altivec.h>' instead.

   * GCC allows using a 'typedef' name as the type specifier for a
     vector type.

   * For C, overloaded functions are implemented with macros so the
     following does not work:

            vec_add ((vector signed int){1, 2, 3, 4}, foo);

     Since 'vec_add' is a macro, the vector constant in the example is
     treated as four separate arguments.  Wrap the entire argument in
     parentheses for this to work.

 _Note:_ Only the '<altivec.h>' interface is supported.  Internally, GCC
uses built-in functions to achieve the functionality in the
aforementioned header file, but they are not supported and are subject
to change without notice.

 The following interfaces are supported for the generic and specific
AltiVec operations and the AltiVec predicates.  In cases where there is
a direct mapping between generic and specific operations, only the
generic names are shown here, although the specific operations can also
be used.

 Arguments that are documented as 'const int' require literal integral
values within the range required for that operation.

     vector signed char vec_abs (vector signed char);
     vector signed short vec_abs (vector signed short);
     vector signed int vec_abs (vector signed int);
     vector float vec_abs (vector float);

     vector signed char vec_abss (vector signed char);
     vector signed short vec_abss (vector signed short);
     vector signed int vec_abss (vector signed int);

     vector signed char vec_add (vector bool char, vector signed char);
     vector signed char vec_add (vector signed char, vector bool char);
     vector signed char vec_add (vector signed char, vector signed char);
     vector unsigned char vec_add (vector bool char, vector unsigned char);
     vector unsigned char vec_add (vector unsigned char, vector bool char);
     vector unsigned char vec_add (vector unsigned char,
                                   vector unsigned char);
     vector signed short vec_add (vector bool short, vector signed short);
     vector signed short vec_add (vector signed short, vector bool short);
     vector signed short vec_add (vector signed short, vector signed short);
     vector unsigned short vec_add (vector bool short,
                                    vector unsigned short);
     vector unsigned short vec_add (vector unsigned short,
                                    vector bool short);
     vector unsigned short vec_add (vector unsigned short,
                                    vector unsigned short);
     vector signed int vec_add (vector bool int, vector signed int);
     vector signed int vec_add (vector signed int, vector bool int);
     vector signed int vec_add (vector signed int, vector signed int);
     vector unsigned int vec_add (vector bool int, vector unsigned int);
     vector unsigned int vec_add (vector unsigned int, vector bool int);
     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
     vector float vec_add (vector float, vector float);

     vector float vec_vaddfp (vector float, vector float);

     vector signed int vec_vadduwm (vector bool int, vector signed int);
     vector signed int vec_vadduwm (vector signed int, vector bool int);
     vector signed int vec_vadduwm (vector signed int, vector signed int);
     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
     vector unsigned int vec_vadduwm (vector unsigned int,
                                      vector unsigned int);

     vector signed short vec_vadduhm (vector bool short,
                                      vector signed short);
     vector signed short vec_vadduhm (vector signed short,
                                      vector bool short);
     vector signed short vec_vadduhm (vector signed short,
                                      vector signed short);
     vector unsigned short vec_vadduhm (vector bool short,
                                        vector unsigned short);
     vector unsigned short vec_vadduhm (vector unsigned short,
                                        vector bool short);
     vector unsigned short vec_vadduhm (vector unsigned short,
                                        vector unsigned short);

     vector signed char vec_vaddubm (vector bool char, vector signed char);
     vector signed char vec_vaddubm (vector signed char, vector bool char);
     vector signed char vec_vaddubm (vector signed char, vector signed char);
     vector unsigned char vec_vaddubm (vector bool char,
                                       vector unsigned char);
     vector unsigned char vec_vaddubm (vector unsigned char,
                                       vector bool char);
     vector unsigned char vec_vaddubm (vector unsigned char,
                                       vector unsigned char);

     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);

     vector unsigned char vec_adds (vector bool char, vector unsigned char);
     vector unsigned char vec_adds (vector unsigned char, vector bool char);
     vector unsigned char vec_adds (vector unsigned char,
                                    vector unsigned char);
     vector signed char vec_adds (vector bool char, vector signed char);
     vector signed char vec_adds (vector signed char, vector bool char);
     vector signed char vec_adds (vector signed char, vector signed char);
     vector unsigned short vec_adds (vector bool short,
                                     vector unsigned short);
     vector unsigned short vec_adds (vector unsigned short,
                                     vector bool short);
     vector unsigned short vec_adds (vector unsigned short,
                                     vector unsigned short);
     vector signed short vec_adds (vector bool short, vector signed short);
     vector signed short vec_adds (vector signed short, vector bool short);
     vector signed short vec_adds (vector signed short, vector signed short);
     vector unsigned int vec_adds (vector bool int, vector unsigned int);
     vector unsigned int vec_adds (vector unsigned int, vector bool int);
     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
     vector signed int vec_adds (vector bool int, vector signed int);
     vector signed int vec_adds (vector signed int, vector bool int);
     vector signed int vec_adds (vector signed int, vector signed int);

     vector signed int vec_vaddsws (vector bool int, vector signed int);
     vector signed int vec_vaddsws (vector signed int, vector bool int);
     vector signed int vec_vaddsws (vector signed int, vector signed int);

     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
     vector unsigned int vec_vadduws (vector unsigned int,
                                      vector unsigned int);

     vector signed short vec_vaddshs (vector bool short,
                                      vector signed short);
     vector signed short vec_vaddshs (vector signed short,
                                      vector bool short);
     vector signed short vec_vaddshs (vector signed short,
                                      vector signed short);

     vector unsigned short vec_vadduhs (vector bool short,
                                        vector unsigned short);
     vector unsigned short vec_vadduhs (vector unsigned short,
                                        vector bool short);
     vector unsigned short vec_vadduhs (vector unsigned short,
                                        vector unsigned short);

     vector signed char vec_vaddsbs (vector bool char, vector signed char);
     vector signed char vec_vaddsbs (vector signed char, vector bool char);
     vector signed char vec_vaddsbs (vector signed char, vector signed char);

     vector unsigned char vec_vaddubs (vector bool char,
                                       vector unsigned char);
     vector unsigned char vec_vaddubs (vector unsigned char,
                                       vector bool char);
     vector unsigned char vec_vaddubs (vector unsigned char,
                                       vector unsigned char);

     vector float vec_and (vector float, vector float);
     vector float vec_and (vector float, vector bool int);
     vector float vec_and (vector bool int, vector float);
     vector bool int vec_and (vector bool int, vector bool int);
     vector signed int vec_and (vector bool int, vector signed int);
     vector signed int vec_and (vector signed int, vector bool int);
     vector signed int vec_and (vector signed int, vector signed int);
     vector unsigned int vec_and (vector bool int, vector unsigned int);
     vector unsigned int vec_and (vector unsigned int, vector bool int);
     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
     vector bool short vec_and (vector bool short, vector bool short);
     vector signed short vec_and (vector bool short, vector signed short);
     vector signed short vec_and (vector signed short, vector bool short);
     vector signed short vec_and (vector signed short, vector signed short);
     vector unsigned short vec_and (vector bool short,
                                    vector unsigned short);
     vector unsigned short vec_and (vector unsigned short,
                                    vector bool short);
     vector unsigned short vec_and (vector unsigned short,
                                    vector unsigned short);
     vector signed char vec_and (vector bool char, vector signed char);
     vector bool char vec_and (vector bool char, vector bool char);
     vector signed char vec_and (vector signed char, vector bool char);
     vector signed char vec_and (vector signed char, vector signed char);
     vector unsigned char vec_and (vector bool char, vector unsigned char);
     vector unsigned char vec_and (vector unsigned char, vector bool char);
     vector unsigned char vec_and (vector unsigned char,
                                   vector unsigned char);

     vector float vec_andc (vector float, vector float);
     vector float vec_andc (vector float, vector bool int);
     vector float vec_andc (vector bool int, vector float);
     vector bool int vec_andc (vector bool int, vector bool int);
     vector signed int vec_andc (vector bool int, vector signed int);
     vector signed int vec_andc (vector signed int, vector bool int);
     vector signed int vec_andc (vector signed int, vector signed int);
     vector unsigned int vec_andc (vector bool int, vector unsigned int);
     vector unsigned int vec_andc (vector unsigned int, vector bool int);
     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
     vector bool short vec_andc (vector bool short, vector bool short);
     vector signed short vec_andc (vector bool short, vector signed short);
     vector signed short vec_andc (vector signed short, vector bool short);
     vector signed short vec_andc (vector signed short, vector signed short);
     vector unsigned short vec_andc (vector bool short,
                                     vector unsigned short);
     vector unsigned short vec_andc (vector unsigned short,
                                     vector bool short);
     vector unsigned short vec_andc (vector unsigned short,
                                     vector unsigned short);
     vector signed char vec_andc (vector bool char, vector signed char);
     vector bool char vec_andc (vector bool char, vector bool char);
     vector signed char vec_andc (vector signed char, vector bool char);
     vector signed char vec_andc (vector signed char, vector signed char);
     vector unsigned char vec_andc (vector bool char, vector unsigned char);
     vector unsigned char vec_andc (vector unsigned char, vector bool char);
     vector unsigned char vec_andc (vector unsigned char,
                                    vector unsigned char);

     vector unsigned char vec_avg (vector unsigned char,
                                   vector unsigned char);
     vector signed char vec_avg (vector signed char, vector signed char);
     vector unsigned short vec_avg (vector unsigned short,
                                    vector unsigned short);
     vector signed short vec_avg (vector signed short, vector signed short);
     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
     vector signed int vec_avg (vector signed int, vector signed int);

     vector signed int vec_vavgsw (vector signed int, vector signed int);

     vector unsigned int vec_vavguw (vector unsigned int,
                                     vector unsigned int);

     vector signed short vec_vavgsh (vector signed short,
                                     vector signed short);

     vector unsigned short vec_vavguh (vector unsigned short,
                                       vector unsigned short);

     vector signed char vec_vavgsb (vector signed char, vector signed char);

     vector unsigned char vec_vavgub (vector unsigned char,
                                      vector unsigned char);

     vector float vec_copysign (vector float);

     vector float vec_ceil (vector float);

     vector signed int vec_cmpb (vector float, vector float);

     vector bool char vec_cmpeq (vector signed char, vector signed char);
     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
     vector bool short vec_cmpeq (vector signed short, vector signed short);
     vector bool short vec_cmpeq (vector unsigned short,
                                  vector unsigned short);
     vector bool int vec_cmpeq (vector signed int, vector signed int);
     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
     vector bool int vec_cmpeq (vector float, vector float);

     vector bool int vec_vcmpeqfp (vector float, vector float);

     vector bool int vec_vcmpequw (vector signed int, vector signed int);
     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);

     vector bool short vec_vcmpequh (vector signed short,
                                     vector signed short);
     vector bool short vec_vcmpequh (vector unsigned short,
                                     vector unsigned short);

     vector bool char vec_vcmpequb (vector signed char, vector signed char);
     vector bool char vec_vcmpequb (vector unsigned char,
                                    vector unsigned char);

     vector bool int vec_cmpge (vector float, vector float);

     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
     vector bool char vec_cmpgt (vector signed char, vector signed char);
     vector bool short vec_cmpgt (vector unsigned short,
                                  vector unsigned short);
     vector bool short vec_cmpgt (vector signed short, vector signed short);
     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
     vector bool int vec_cmpgt (vector signed int, vector signed int);
     vector bool int vec_cmpgt (vector float, vector float);

     vector bool int vec_vcmpgtfp (vector float, vector float);

     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);

     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);

     vector bool short vec_vcmpgtsh (vector signed short,
                                     vector signed short);

     vector bool short vec_vcmpgtuh (vector unsigned short,
                                     vector unsigned short);

     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);

     vector bool char vec_vcmpgtub (vector unsigned char,
                                    vector unsigned char);

     vector bool int vec_cmple (vector float, vector float);

     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
     vector bool char vec_cmplt (vector signed char, vector signed char);
     vector bool short vec_cmplt (vector unsigned short,
                                  vector unsigned short);
     vector bool short vec_cmplt (vector signed short, vector signed short);
     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
     vector bool int vec_cmplt (vector signed int, vector signed int);
     vector bool int vec_cmplt (vector float, vector float);

     vector float vec_cpsgn (vector float, vector float);

     vector float vec_ctf (vector unsigned int, const int);
     vector float vec_ctf (vector signed int, const int);
     vector double vec_ctf (vector unsigned long, const int);
     vector double vec_ctf (vector signed long, const int);

     vector float vec_vcfsx (vector signed int, const int);

     vector float vec_vcfux (vector unsigned int, const int);

     vector signed int vec_cts (vector float, const int);
     vector signed long vec_cts (vector double, const int);

     vector unsigned int vec_ctu (vector float, const int);
     vector unsigned long vec_ctu (vector double, const int);

     void vec_dss (const int);

     void vec_dssall (void);

     void vec_dst (const vector unsigned char *, int, const int);
     void vec_dst (const vector signed char *, int, const int);
     void vec_dst (const vector bool char *, int, const int);
     void vec_dst (const vector unsigned short *, int, const int);
     void vec_dst (const vector signed short *, int, const int);
     void vec_dst (const vector bool short *, int, const int);
     void vec_dst (const vector pixel *, int, const int);
     void vec_dst (const vector unsigned int *, int, const int);
     void vec_dst (const vector signed int *, int, const int);
     void vec_dst (const vector bool int *, int, const int);
     void vec_dst (const vector float *, int, const int);
     void vec_dst (const unsigned char *, int, const int);
     void vec_dst (const signed char *, int, const int);
     void vec_dst (const unsigned short *, int, const int);
     void vec_dst (const short *, int, const int);
     void vec_dst (const unsigned int *, int, const int);
     void vec_dst (const int *, int, const int);
     void vec_dst (const unsigned long *, int, const int);
     void vec_dst (const long *, int, const int);
     void vec_dst (const float *, int, const int);

     void vec_dstst (const vector unsigned char *, int, const int);
     void vec_dstst (const vector signed char *, int, const int);
     void vec_dstst (const vector bool char *, int, const int);
     void vec_dstst (const vector unsigned short *, int, const int);
     void vec_dstst (const vector signed short *, int, const int);
     void vec_dstst (const vector bool short *, int, const int);
     void vec_dstst (const vector pixel *, int, const int);
     void vec_dstst (const vector unsigned int *, int, const int);
     void vec_dstst (const vector signed int *, int, const int);
     void vec_dstst (const vector bool int *, int, const int);
     void vec_dstst (const vector float *, int, const int);
     void vec_dstst (const unsigned char *, int, const int);
     void vec_dstst (const signed char *, int, const int);
     void vec_dstst (const unsigned short *, int, const int);
     void vec_dstst (const short *, int, const int);
     void vec_dstst (const unsigned int *, int, const int);
     void vec_dstst (const int *, int, const int);
     void vec_dstst (const unsigned long *, int, const int);
     void vec_dstst (const long *, int, const int);
     void vec_dstst (const float *, int, const int);

     void vec_dststt (const vector unsigned char *, int, const int);
     void vec_dststt (const vector signed char *, int, const int);
     void vec_dststt (const vector bool char *, int, const int);
     void vec_dststt (const vector unsigned short *, int, const int);
     void vec_dststt (const vector signed short *, int, const int);
     void vec_dststt (const vector bool short *, int, const int);
     void vec_dststt (const vector pixel *, int, const int);
     void vec_dststt (const vector unsigned int *, int, const int);
     void vec_dststt (const vector signed int *, int, const int);
     void vec_dststt (const vector bool int *, int, const int);
     void vec_dststt (const vector float *, int, const int);
     void vec_dststt (const unsigned char *, int, const int);
     void vec_dststt (const signed char *, int, const int);
     void vec_dststt (const unsigned short *, int, const int);
     void vec_dststt (const short *, int, const int);
     void vec_dststt (const unsigned int *, int, const int);
     void vec_dststt (const int *, int, const int);
     void vec_dststt (const unsigned long *, int, const int);
     void vec_dststt (const long *, int, const int);
     void vec_dststt (const float *, int, const int);

     void vec_dstt (const vector unsigned char *, int, const int);
     void vec_dstt (const vector signed char *, int, const int);
     void vec_dstt (const vector bool char *, int, const int);
     void vec_dstt (const vector unsigned short *, int, const int);
     void vec_dstt (const vector signed short *, int, const int);
     void vec_dstt (const vector bool short *, int, const int);
     void vec_dstt (const vector pixel *, int, const int);
     void vec_dstt (const vector unsigned int *, int, const int);
     void vec_dstt (const vector signed int *, int, const int);
     void vec_dstt (const vector bool int *, int, const int);
     void vec_dstt (const vector float *, int, const int);
     void vec_dstt (const unsigned char *, int, const int);
     void vec_dstt (const signed char *, int, const int);
     void vec_dstt (const unsigned short *, int, const int);
     void vec_dstt (const short *, int, const int);
     void vec_dstt (const unsigned int *, int, const int);
     void vec_dstt (const int *, int, const int);
     void vec_dstt (const unsigned long *, int, const int);
     void vec_dstt (const long *, int, const int);
     void vec_dstt (const float *, int, const int);

     vector float vec_expte (vector float);

     vector float vec_floor (vector float);

     vector float vec_ld (int, const vector float *);
     vector float vec_ld (int, const float *);
     vector bool int vec_ld (int, const vector bool int *);
     vector signed int vec_ld (int, const vector signed int *);
     vector signed int vec_ld (int, const int *);
     vector signed int vec_ld (int, const long *);
     vector unsigned int vec_ld (int, const vector unsigned int *);
     vector unsigned int vec_ld (int, const unsigned int *);
     vector unsigned int vec_ld (int, const unsigned long *);
     vector bool short vec_ld (int, const vector bool short *);
     vector pixel vec_ld (int, const vector pixel *);
     vector signed short vec_ld (int, const vector signed short *);
     vector signed short vec_ld (int, const short *);
     vector unsigned short vec_ld (int, const vector unsigned short *);
     vector unsigned short vec_ld (int, const unsigned short *);
     vector bool char vec_ld (int, const vector bool char *);
     vector signed char vec_ld (int, const vector signed char *);
     vector signed char vec_ld (int, const signed char *);
     vector unsigned char vec_ld (int, const vector unsigned char *);
     vector unsigned char vec_ld (int, const unsigned char *);

     vector signed char vec_lde (int, const signed char *);
     vector unsigned char vec_lde (int, const unsigned char *);
     vector signed short vec_lde (int, const short *);
     vector unsigned short vec_lde (int, const unsigned short *);
     vector float vec_lde (int, const float *);
     vector signed int vec_lde (int, const int *);
     vector unsigned int vec_lde (int, const unsigned int *);
     vector signed int vec_lde (int, const long *);
     vector unsigned int vec_lde (int, const unsigned long *);

     vector float vec_lvewx (int, float *);
     vector signed int vec_lvewx (int, int *);
     vector unsigned int vec_lvewx (int, unsigned int *);
     vector signed int vec_lvewx (int, long *);
     vector unsigned int vec_lvewx (int, unsigned long *);

     vector signed short vec_lvehx (int, short *);
     vector unsigned short vec_lvehx (int, unsigned short *);

     vector signed char vec_lvebx (int, char *);
     vector unsigned char vec_lvebx (int, unsigned char *);

     vector float vec_ldl (int, const vector float *);
     vector float vec_ldl (int, const float *);
     vector bool int vec_ldl (int, const vector bool int *);
     vector signed int vec_ldl (int, const vector signed int *);
     vector signed int vec_ldl (int, const int *);
     vector signed int vec_ldl (int, const long *);
     vector unsigned int vec_ldl (int, const vector unsigned int *);
     vector unsigned int vec_ldl (int, const unsigned int *);
     vector unsigned int vec_ldl (int, const unsigned long *);
     vector bool short vec_ldl (int, const vector bool short *);
     vector pixel vec_ldl (int, const vector pixel *);
     vector signed short vec_ldl (int, const vector signed short *);
     vector signed short vec_ldl (int, const short *);
     vector unsigned short vec_ldl (int, const vector unsigned short *);
     vector unsigned short vec_ldl (int, const unsigned short *);
     vector bool char vec_ldl (int, const vector bool char *);
     vector signed char vec_ldl (int, const vector signed char *);
     vector signed char vec_ldl (int, const signed char *);
     vector unsigned char vec_ldl (int, const vector unsigned char *);
     vector unsigned char vec_ldl (int, const unsigned char *);

     vector float vec_loge (vector float);

     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
     vector unsigned char vec_lvsl (int, const volatile signed char *);
     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
     vector unsigned char vec_lvsl (int, const volatile short *);
     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
     vector unsigned char vec_lvsl (int, const volatile int *);
     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
     vector unsigned char vec_lvsl (int, const volatile long *);
     vector unsigned char vec_lvsl (int, const volatile float *);

     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
     vector unsigned char vec_lvsr (int, const volatile signed char *);
     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
     vector unsigned char vec_lvsr (int, const volatile short *);
     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
     vector unsigned char vec_lvsr (int, const volatile int *);
     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
     vector unsigned char vec_lvsr (int, const volatile long *);
     vector unsigned char vec_lvsr (int, const volatile float *);

     vector float vec_madd (vector float, vector float, vector float);

     vector signed short vec_madds (vector signed short,
                                    vector signed short,
                                    vector signed short);

     vector unsigned char vec_max (vector bool char, vector unsigned char);
     vector unsigned char vec_max (vector unsigned char, vector bool char);
     vector unsigned char vec_max (vector unsigned char,
                                   vector unsigned char);
     vector signed char vec_max (vector bool char, vector signed char);
     vector signed char vec_max (vector signed char, vector bool char);
     vector signed char vec_max (vector signed char, vector signed char);
     vector unsigned short vec_max (vector bool short,
                                    vector unsigned short);
     vector unsigned short vec_max (vector unsigned short,
                                    vector bool short);
     vector unsigned short vec_max (vector unsigned short,
                                    vector unsigned short);
     vector signed short vec_max (vector bool short, vector signed short);
     vector signed short vec_max (vector signed short, vector bool short);
     vector signed short vec_max (vector signed short, vector signed short);
     vector unsigned int vec_max (vector bool int, vector unsigned int);
     vector unsigned int vec_max (vector unsigned int, vector bool int);
     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
     vector signed int vec_max (vector bool int, vector signed int);
     vector signed int vec_max (vector signed int, vector bool int);
     vector signed int vec_max (vector signed int, vector signed int);
     vector float vec_max (vector float, vector float);

     vector float vec_vmaxfp (vector float, vector float);

     vector signed int vec_vmaxsw (vector bool int, vector signed int);
     vector signed int vec_vmaxsw (vector signed int, vector bool int);
     vector signed int vec_vmaxsw (vector signed int, vector signed int);

     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
     vector unsigned int vec_vmaxuw (vector unsigned int,
                                     vector unsigned int);

     vector signed short vec_vmaxsh (vector bool short, vector signed short);
     vector signed short vec_vmaxsh (vector signed short, vector bool short);
     vector signed short vec_vmaxsh (vector signed short,
                                     vector signed short);

     vector unsigned short vec_vmaxuh (vector bool short,
                                       vector unsigned short);
     vector unsigned short vec_vmaxuh (vector unsigned short,
                                       vector bool short);
     vector unsigned short vec_vmaxuh (vector unsigned short,
                                       vector unsigned short);

     vector signed char vec_vmaxsb (vector bool char, vector signed char);
     vector signed char vec_vmaxsb (vector signed char, vector bool char);
     vector signed char vec_vmaxsb (vector signed char, vector signed char);

     vector unsigned char vec_vmaxub (vector bool char,
                                      vector unsigned char);
     vector unsigned char vec_vmaxub (vector unsigned char,
                                      vector bool char);
     vector unsigned char vec_vmaxub (vector unsigned char,
                                      vector unsigned char);

     vector bool char vec_mergeh (vector bool char, vector bool char);
     vector signed char vec_mergeh (vector signed char, vector signed char);
     vector unsigned char vec_mergeh (vector unsigned char,
                                      vector unsigned char);
     vector bool short vec_mergeh (vector bool short, vector bool short);
     vector pixel vec_mergeh (vector pixel, vector pixel);
     vector signed short vec_mergeh (vector signed short,
                                     vector signed short);
     vector unsigned short vec_mergeh (vector unsigned short,
                                       vector unsigned short);
     vector float vec_mergeh (vector float, vector float);
     vector bool int vec_mergeh (vector bool int, vector bool int);
     vector signed int vec_mergeh (vector signed int, vector signed int);
     vector unsigned int vec_mergeh (vector unsigned int,
                                     vector unsigned int);

     vector float vec_vmrghw (vector float, vector float);
     vector bool int vec_vmrghw (vector bool int, vector bool int);
     vector signed int vec_vmrghw (vector signed int, vector signed int);
     vector unsigned int vec_vmrghw (vector unsigned int,
                                     vector unsigned int);

     vector bool short vec_vmrghh (vector bool short, vector bool short);
     vector signed short vec_vmrghh (vector signed short,
                                     vector signed short);
     vector unsigned short vec_vmrghh (vector unsigned short,
                                       vector unsigned short);
     vector pixel vec_vmrghh (vector pixel, vector pixel);

     vector bool char vec_vmrghb (vector bool char, vector bool char);
     vector signed char vec_vmrghb (vector signed char, vector signed char);
     vector unsigned char vec_vmrghb (vector unsigned char,
                                      vector unsigned char);

     vector bool char vec_mergel (vector bool char, vector bool char);
     vector signed char vec_mergel (vector signed char, vector signed char);
     vector unsigned char vec_mergel (vector unsigned char,
                                      vector unsigned char);
     vector bool short vec_mergel (vector bool short, vector bool short);
     vector pixel vec_mergel (vector pixel, vector pixel);
     vector signed short vec_mergel (vector signed short,
                                     vector signed short);
     vector unsigned short vec_mergel (vector unsigned short,
                                       vector unsigned short);
     vector float vec_mergel (vector float, vector float);
     vector bool int vec_mergel (vector bool int, vector bool int);
     vector signed int vec_mergel (vector signed int, vector signed int);
     vector unsigned int vec_mergel (vector unsigned int,
                                     vector unsigned int);

     vector float vec_vmrglw (vector float, vector float);
     vector signed int vec_vmrglw (vector signed int, vector signed int);
     vector unsigned int vec_vmrglw (vector unsigned int,
                                     vector unsigned int);
     vector bool int vec_vmrglw (vector bool int, vector bool int);

     vector bool short vec_vmrglh (vector bool short, vector bool short);
     vector signed short vec_vmrglh (vector signed short,
                                     vector signed short);
     vector unsigned short vec_vmrglh (vector unsigned short,
                                       vector unsigned short);
     vector pixel vec_vmrglh (vector pixel, vector pixel);

     vector bool char vec_vmrglb (vector bool char, vector bool char);
     vector signed char vec_vmrglb (vector signed char, vector signed char);
     vector unsigned char vec_vmrglb (vector unsigned char,
                                      vector unsigned char);

     vector unsigned short vec_mfvscr (void);

     vector unsigned char vec_min (vector bool char, vector unsigned char);
     vector unsigned char vec_min (vector unsigned char, vector bool char);
     vector unsigned char vec_min (vector unsigned char,
                                   vector unsigned char);
     vector signed char vec_min (vector bool char, vector signed char);
     vector signed char vec_min (vector signed char, vector bool char);
     vector signed char vec_min (vector signed char, vector signed char);
     vector unsigned short vec_min (vector bool short,
                                    vector unsigned short);
     vector unsigned short vec_min (vector unsigned short,
                                    vector bool short);
     vector unsigned short vec_min (vector unsigned short,
                                    vector unsigned short);
     vector signed short vec_min (vector bool short, vector signed short);
     vector signed short vec_min (vector signed short, vector bool short);
     vector signed short vec_min (vector signed short, vector signed short);
     vector unsigned int vec_min (vector bool int, vector unsigned int);
     vector unsigned int vec_min (vector unsigned int, vector bool int);
     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
     vector signed int vec_min (vector bool int, vector signed int);
     vector signed int vec_min (vector signed int, vector bool int);
     vector signed int vec_min (vector signed int, vector signed int);
     vector float vec_min (vector float, vector float);

     vector float vec_vminfp (vector float, vector float);

     vector signed int vec_vminsw (vector bool int, vector signed int);
     vector signed int vec_vminsw (vector signed int, vector bool int);
     vector signed int vec_vminsw (vector signed int, vector signed int);

     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
     vector unsigned int vec_vminuw (vector unsigned int,
                                     vector unsigned int);

     vector signed short vec_vminsh (vector bool short, vector signed short);
     vector signed short vec_vminsh (vector signed short, vector bool short);
     vector signed short vec_vminsh (vector signed short,
                                     vector signed short);

     vector unsigned short vec_vminuh (vector bool short,
                                       vector unsigned short);
     vector unsigned short vec_vminuh (vector unsigned short,
                                       vector bool short);
     vector unsigned short vec_vminuh (vector unsigned short,
                                       vector unsigned short);

     vector signed char vec_vminsb (vector bool char, vector signed char);
     vector signed char vec_vminsb (vector signed char, vector bool char);
     vector signed char vec_vminsb (vector signed char, vector signed char);

     vector unsigned char vec_vminub (vector bool char,
                                      vector unsigned char);
     vector unsigned char vec_vminub (vector unsigned char,
                                      vector bool char);
     vector unsigned char vec_vminub (vector unsigned char,
                                      vector unsigned char);

     vector signed short vec_mladd (vector signed short,
                                    vector signed short,
                                    vector signed short);
     vector signed short vec_mladd (vector signed short,
                                    vector unsigned short,
                                    vector unsigned short);
     vector signed short vec_mladd (vector unsigned short,
                                    vector signed short,
                                    vector signed short);
     vector unsigned short vec_mladd (vector unsigned short,
                                      vector unsigned short,
                                      vector unsigned short);

     vector signed short vec_mradds (vector signed short,
                                     vector signed short,
                                     vector signed short);

     vector unsigned int vec_msum (vector unsigned char,
                                   vector unsigned char,
                                   vector unsigned int);
     vector signed int vec_msum (vector signed char,
                                 vector unsigned char,
                                 vector signed int);
     vector unsigned int vec_msum (vector unsigned short,
                                   vector unsigned short,
                                   vector unsigned int);
     vector signed int vec_msum (vector signed short,
                                 vector signed short,
                                 vector signed int);

     vector signed int vec_vmsumshm (vector signed short,
                                     vector signed short,
                                     vector signed int);

     vector unsigned int vec_vmsumuhm (vector unsigned short,
                                       vector unsigned short,
                                       vector unsigned int);

     vector signed int vec_vmsummbm (vector signed char,
                                     vector unsigned char,
                                     vector signed int);

     vector unsigned int vec_vmsumubm (vector unsigned char,
                                       vector unsigned char,
                                       vector unsigned int);

     vector unsigned int vec_msums (vector unsigned short,
                                    vector unsigned short,
                                    vector unsigned int);
     vector signed int vec_msums (vector signed short,
                                  vector signed short,
                                  vector signed int);

     vector signed int vec_vmsumshs (vector signed short,
                                     vector signed short,
                                     vector signed int);

     vector unsigned int vec_vmsumuhs (vector unsigned short,
                                       vector unsigned short,
                                       vector unsigned int);

     void vec_mtvscr (vector signed int);
     void vec_mtvscr (vector unsigned int);
     void vec_mtvscr (vector bool int);
     void vec_mtvscr (vector signed short);
     void vec_mtvscr (vector unsigned short);
     void vec_mtvscr (vector bool short);
     void vec_mtvscr (vector pixel);
     void vec_mtvscr (vector signed char);
     void vec_mtvscr (vector unsigned char);
     void vec_mtvscr (vector bool char);

     vector unsigned short vec_mule (vector unsigned char,
                                     vector unsigned char);
     vector signed short vec_mule (vector signed char,
                                   vector signed char);
     vector unsigned int vec_mule (vector unsigned short,
                                   vector unsigned short);
     vector signed int vec_mule (vector signed short, vector signed short);

     vector signed int vec_vmulesh (vector signed short,
                                    vector signed short);

     vector unsigned int vec_vmuleuh (vector unsigned short,
                                      vector unsigned short);

     vector signed short vec_vmulesb (vector signed char,
                                      vector signed char);

     vector unsigned short vec_vmuleub (vector unsigned char,
                                       vector unsigned char);

     vector unsigned short vec_mulo (vector unsigned char,
                                     vector unsigned char);
     vector signed short vec_mulo (vector signed char, vector signed char);
     vector unsigned int vec_mulo (vector unsigned short,
                                   vector unsigned short);
     vector signed int vec_mulo (vector signed short, vector signed short);

     vector signed int vec_vmulosh (vector signed short,
                                    vector signed short);

     vector unsigned int vec_vmulouh (vector unsigned short,
                                      vector unsigned short);

     vector signed short vec_vmulosb (vector signed char,
                                      vector signed char);

     vector unsigned short vec_vmuloub (vector unsigned char,
                                        vector unsigned char);

     vector float vec_nmsub (vector float, vector float, vector float);

     vector float vec_nor (vector float, vector float);
     vector signed int vec_nor (vector signed int, vector signed int);
     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
     vector bool int vec_nor (vector bool int, vector bool int);
     vector signed short vec_nor (vector signed short, vector signed short);
     vector unsigned short vec_nor (vector unsigned short,
                                    vector unsigned short);
     vector bool short vec_nor (vector bool short, vector bool short);
     vector signed char vec_nor (vector signed char, vector signed char);
     vector unsigned char vec_nor (vector unsigned char,
                                   vector unsigned char);
     vector bool char vec_nor (vector bool char, vector bool char);

     vector float vec_or (vector float, vector float);
     vector float vec_or (vector float, vector bool int);
     vector float vec_or (vector bool int, vector float);
     vector bool int vec_or (vector bool int, vector bool int);
     vector signed int vec_or (vector bool int, vector signed int);
     vector signed int vec_or (vector signed int, vector bool int);
     vector signed int vec_or (vector signed int, vector signed int);
     vector unsigned int vec_or (vector bool int, vector unsigned int);
     vector unsigned int vec_or (vector unsigned int, vector bool int);
     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
     vector bool short vec_or (vector bool short, vector bool short);
     vector signed short vec_or (vector bool short, vector signed short);
     vector signed short vec_or (vector signed short, vector bool short);
     vector signed short vec_or (vector signed short, vector signed short);
     vector unsigned short vec_or (vector bool short, vector unsigned short);
     vector unsigned short vec_or (vector unsigned short, vector bool short);
     vector unsigned short vec_or (vector unsigned short,
                                   vector unsigned short);
     vector signed char vec_or (vector bool char, vector signed char);
     vector bool char vec_or (vector bool char, vector bool char);
     vector signed char vec_or (vector signed char, vector bool char);
     vector signed char vec_or (vector signed char, vector signed char);
     vector unsigned char vec_or (vector bool char, vector unsigned char);
     vector unsigned char vec_or (vector unsigned char, vector bool char);
     vector unsigned char vec_or (vector unsigned char,
                                  vector unsigned char);

     vector signed char vec_pack (vector signed short, vector signed short);
     vector unsigned char vec_pack (vector unsigned short,
                                    vector unsigned short);
     vector bool char vec_pack (vector bool short, vector bool short);
     vector signed short vec_pack (vector signed int, vector signed int);
     vector unsigned short vec_pack (vector unsigned int,
                                     vector unsigned int);
     vector bool short vec_pack (vector bool int, vector bool int);

     vector bool short vec_vpkuwum (vector bool int, vector bool int);
     vector signed short vec_vpkuwum (vector signed int, vector signed int);
     vector unsigned short vec_vpkuwum (vector unsigned int,
                                        vector unsigned int);

     vector bool char vec_vpkuhum (vector bool short, vector bool short);
     vector signed char vec_vpkuhum (vector signed short,
                                     vector signed short);
     vector unsigned char vec_vpkuhum (vector unsigned short,
                                       vector unsigned short);

     vector pixel vec_packpx (vector unsigned int, vector unsigned int);

     vector unsigned char vec_packs (vector unsigned short,
                                     vector unsigned short);
     vector signed char vec_packs (vector signed short, vector signed short);
     vector unsigned short vec_packs (vector unsigned int,
                                      vector unsigned int);
     vector signed short vec_packs (vector signed int, vector signed int);

     vector signed short vec_vpkswss (vector signed int, vector signed int);

     vector unsigned short vec_vpkuwus (vector unsigned int,
                                        vector unsigned int);

     vector signed char vec_vpkshss (vector signed short,
                                     vector signed short);

     vector unsigned char vec_vpkuhus (vector unsigned short,
                                       vector unsigned short);

     vector unsigned char vec_packsu (vector unsigned short,
                                      vector unsigned short);
     vector unsigned char vec_packsu (vector signed short,
                                      vector signed short);
     vector unsigned short vec_packsu (vector unsigned int,
                                       vector unsigned int);
     vector unsigned short vec_packsu (vector signed int, vector signed int);

     vector unsigned short vec_vpkswus (vector signed int,
                                        vector signed int);

     vector unsigned char vec_vpkshus (vector signed short,
                                       vector signed short);

     vector float vec_perm (vector float,
                            vector float,
                            vector unsigned char);
     vector signed int vec_perm (vector signed int,
                                 vector signed int,
                                 vector unsigned char);
     vector unsigned int vec_perm (vector unsigned int,
                                   vector unsigned int,
                                   vector unsigned char);
     vector bool int vec_perm (vector bool int,
                               vector bool int,
                               vector unsigned char);
     vector signed short vec_perm (vector signed short,
                                   vector signed short,
                                   vector unsigned char);
     vector unsigned short vec_perm (vector unsigned short,
                                     vector unsigned short,
                                     vector unsigned char);
     vector bool short vec_perm (vector bool short,
                                 vector bool short,
                                 vector unsigned char);
     vector pixel vec_perm (vector pixel,
                            vector pixel,
                            vector unsigned char);
     vector signed char vec_perm (vector signed char,
                                  vector signed char,
                                  vector unsigned char);
     vector unsigned char vec_perm (vector unsigned char,
                                    vector unsigned char,
                                    vector unsigned char);
     vector bool char vec_perm (vector bool char,
                                vector bool char,
                                vector unsigned char);

     vector float vec_re (vector float);

     vector signed char vec_rl (vector signed char,
                                vector unsigned char);
     vector unsigned char vec_rl (vector unsigned char,
                                  vector unsigned char);
     vector signed short vec_rl (vector signed short, vector unsigned short);
     vector unsigned short vec_rl (vector unsigned short,
                                   vector unsigned short);
     vector signed int vec_rl (vector signed int, vector unsigned int);
     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);

     vector signed int vec_vrlw (vector signed int, vector unsigned int);
     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);

     vector signed short vec_vrlh (vector signed short,
                                   vector unsigned short);
     vector unsigned short vec_vrlh (vector unsigned short,
                                     vector unsigned short);

     vector signed char vec_vrlb (vector signed char, vector unsigned char);
     vector unsigned char vec_vrlb (vector unsigned char,
                                    vector unsigned char);

     vector float vec_round (vector float);

     vector float vec_recip (vector float, vector float);

     vector float vec_rsqrt (vector float);

     vector float vec_rsqrte (vector float);

     vector float vec_sel (vector float, vector float, vector bool int);
     vector float vec_sel (vector float, vector float, vector unsigned int);
     vector signed int vec_sel (vector signed int,
                                vector signed int,
                                vector bool int);
     vector signed int vec_sel (vector signed int,
                                vector signed int,
                                vector unsigned int);
     vector unsigned int vec_sel (vector unsigned int,
                                  vector unsigned int,
                                  vector bool int);
     vector unsigned int vec_sel (vector unsigned int,
                                  vector unsigned int,
                                  vector unsigned int);
     vector bool int vec_sel (vector bool int,
                              vector bool int,
                              vector bool int);
     vector bool int vec_sel (vector bool int,
                              vector bool int,
                              vector unsigned int);
     vector signed short vec_sel (vector signed short,
                                  vector signed short,
                                  vector bool short);
     vector signed short vec_sel (vector signed short,
                                  vector signed short,
                                  vector unsigned short);
     vector unsigned short vec_sel (vector unsigned short,
                                    vector unsigned short,
                                    vector bool short);
     vector unsigned short vec_sel (vector unsigned short,
                                    vector unsigned short,
                                    vector unsigned short);
     vector bool short vec_sel (vector bool short,
                                vector bool short,
                                vector bool short);
     vector bool short vec_sel (vector bool short,
                                vector bool short,
                                vector unsigned short);
     vector signed char vec_sel (vector signed char,
                                 vector signed char,
                                 vector bool char);
     vector signed char vec_sel (vector signed char,
                                 vector signed char,
                                 vector unsigned char);
     vector unsigned char vec_sel (vector unsigned char,
                                   vector unsigned char,
                                   vector bool char);
     vector unsigned char vec_sel (vector unsigned char,
                                   vector unsigned char,
                                   vector unsigned char);
     vector bool char vec_sel (vector bool char,
                               vector bool char,
                               vector bool char);
     vector bool char vec_sel (vector bool char,
                               vector bool char,
                               vector unsigned char);

     vector signed char vec_sl (vector signed char,
                                vector unsigned char);
     vector unsigned char vec_sl (vector unsigned char,
                                  vector unsigned char);
     vector signed short vec_sl (vector signed short, vector unsigned short);
     vector unsigned short vec_sl (vector unsigned short,
                                   vector unsigned short);
     vector signed int vec_sl (vector signed int, vector unsigned int);
     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);

     vector signed int vec_vslw (vector signed int, vector unsigned int);
     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);

     vector signed short vec_vslh (vector signed short,
                                   vector unsigned short);
     vector unsigned short vec_vslh (vector unsigned short,
                                     vector unsigned short);

     vector signed char vec_vslb (vector signed char, vector unsigned char);
     vector unsigned char vec_vslb (vector unsigned char,
                                    vector unsigned char);

     vector float vec_sld (vector float, vector float, const int);
     vector signed int vec_sld (vector signed int,
                                vector signed int,
                                const int);
     vector unsigned int vec_sld (vector unsigned int,
                                  vector unsigned int,
                                  const int);
     vector bool int vec_sld (vector bool int,
                              vector bool int,
                              const int);
     vector signed short vec_sld (vector signed short,
                                  vector signed short,
                                  const int);
     vector unsigned short vec_sld (vector unsigned short,
                                    vector unsigned short,
                                    const int);
     vector bool short vec_sld (vector bool short,
                                vector bool short,
                                const int);
     vector pixel vec_sld (vector pixel,
                           vector pixel,
                           const int);
     vector signed char vec_sld (vector signed char,
                                 vector signed char,
                                 const int);
     vector unsigned char vec_sld (vector unsigned char,
                                   vector unsigned char,
                                   const int);
     vector bool char vec_sld (vector bool char,
                               vector bool char,
                               const int);

     vector signed int vec_sll (vector signed int,
                                vector unsigned int);
     vector signed int vec_sll (vector signed int,
                                vector unsigned short);
     vector signed int vec_sll (vector signed int,
                                vector unsigned char);
     vector unsigned int vec_sll (vector unsigned int,
                                  vector unsigned int);
     vector unsigned int vec_sll (vector unsigned int,
                                  vector unsigned short);
     vector unsigned int vec_sll (vector unsigned int,
                                  vector unsigned char);
     vector bool int vec_sll (vector bool int,
                              vector unsigned int);
     vector bool int vec_sll (vector bool int,
                              vector unsigned short);
     vector bool int vec_sll (vector bool int,
                              vector unsigned char);
     vector signed short vec_sll (vector signed short,
                                  vector unsigned int);
     vector signed short vec_sll (vector signed short,
                                  vector unsigned short);
     vector signed short vec_sll (vector signed short,
                                  vector unsigned char);
     vector unsigned short vec_sll (vector unsigned short,
                                    vector unsigned int);
     vector unsigned short vec_sll (vector unsigned short,
                                    vector unsigned short);
     vector unsigned short vec_sll (vector unsigned short,
                                    vector unsigned char);
     vector bool short vec_sll (vector bool short, vector unsigned int);
     vector bool short vec_sll (vector bool short, vector unsigned short);
     vector bool short vec_sll (vector bool short, vector unsigned char);
     vector pixel vec_sll (vector pixel, vector unsigned int);
     vector pixel vec_sll (vector pixel, vector unsigned short);
     vector pixel vec_sll (vector pixel, vector unsigned char);
     vector signed char vec_sll (vector signed char, vector unsigned int);
     vector signed char vec_sll (vector signed char, vector unsigned short);
     vector signed char vec_sll (vector signed char, vector unsigned char);
     vector unsigned char vec_sll (vector unsigned char,
                                   vector unsigned int);
     vector unsigned char vec_sll (vector unsigned char,
                                   vector unsigned short);
     vector unsigned char vec_sll (vector unsigned char,
                                   vector unsigned char);
     vector bool char vec_sll (vector bool char, vector unsigned int);
     vector bool char vec_sll (vector bool char, vector unsigned short);
     vector bool char vec_sll (vector bool char, vector unsigned char);

     vector float vec_slo (vector float, vector signed char);
     vector float vec_slo (vector float, vector unsigned char);
     vector signed int vec_slo (vector signed int, vector signed char);
     vector signed int vec_slo (vector signed int, vector unsigned char);
     vector unsigned int vec_slo (vector unsigned int, vector signed char);
     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
     vector signed short vec_slo (vector signed short, vector signed char);
     vector signed short vec_slo (vector signed short, vector unsigned char);
     vector unsigned short vec_slo (vector unsigned short,
                                    vector signed char);
     vector unsigned short vec_slo (vector unsigned short,
                                    vector unsigned char);
     vector pixel vec_slo (vector pixel, vector signed char);
     vector pixel vec_slo (vector pixel, vector unsigned char);
     vector signed char vec_slo (vector signed char, vector signed char);
     vector signed char vec_slo (vector signed char, vector unsigned char);
     vector unsigned char vec_slo (vector unsigned char, vector signed char);
     vector unsigned char vec_slo (vector unsigned char,
                                   vector unsigned char);

     vector signed char vec_splat (vector signed char, const int);
     vector unsigned char vec_splat (vector unsigned char, const int);
     vector bool char vec_splat (vector bool char, const int);
     vector signed short vec_splat (vector signed short, const int);
     vector unsigned short vec_splat (vector unsigned short, const int);
     vector bool short vec_splat (vector bool short, const int);
     vector pixel vec_splat (vector pixel, const int);
     vector float vec_splat (vector float, const int);
     vector signed int vec_splat (vector signed int, const int);
     vector unsigned int vec_splat (vector unsigned int, const int);
     vector bool int vec_splat (vector bool int, const int);
     vector signed long vec_splat (vector signed long, const int);
     vector unsigned long vec_splat (vector unsigned long, const int);

     vector signed char vec_splats (signed char);
     vector unsigned char vec_splats (unsigned char);
     vector signed short vec_splats (signed short);
     vector unsigned short vec_splats (unsigned short);
     vector signed int vec_splats (signed int);
     vector unsigned int vec_splats (unsigned int);
     vector float vec_splats (float);

     vector float vec_vspltw (vector float, const int);
     vector signed int vec_vspltw (vector signed int, const int);
     vector unsigned int vec_vspltw (vector unsigned int, const int);
     vector bool int vec_vspltw (vector bool int, const int);

     vector bool short vec_vsplth (vector bool short, const int);
     vector signed short vec_vsplth (vector signed short, const int);
     vector unsigned short vec_vsplth (vector unsigned short, const int);
     vector pixel vec_vsplth (vector pixel, const int);

     vector signed char vec_vspltb (vector signed char, const int);
     vector unsigned char vec_vspltb (vector unsigned char, const int);
     vector bool char vec_vspltb (vector bool char, const int);

     vector signed char vec_splat_s8 (const int);

     vector signed short vec_splat_s16 (const int);

     vector signed int vec_splat_s32 (const int);

     vector unsigned char vec_splat_u8 (const int);

     vector unsigned short vec_splat_u16 (const int);

     vector unsigned int vec_splat_u32 (const int);

     vector signed char vec_sr (vector signed char, vector unsigned char);
     vector unsigned char vec_sr (vector unsigned char,
                                  vector unsigned char);
     vector signed short vec_sr (vector signed short,
                                 vector unsigned short);
     vector unsigned short vec_sr (vector unsigned short,
                                   vector unsigned short);
     vector signed int vec_sr (vector signed int, vector unsigned int);
     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);

     vector signed int vec_vsrw (vector signed int, vector unsigned int);
     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);

     vector signed short vec_vsrh (vector signed short,
                                   vector unsigned short);
     vector unsigned short vec_vsrh (vector unsigned short,
                                     vector unsigned short);

     vector signed char vec_vsrb (vector signed char, vector unsigned char);
     vector unsigned char vec_vsrb (vector unsigned char,
                                    vector unsigned char);

     vector signed char vec_sra (vector signed char, vector unsigned char);
     vector unsigned char vec_sra (vector unsigned char,
                                   vector unsigned char);
     vector signed short vec_sra (vector signed short,
                                  vector unsigned short);
     vector unsigned short vec_sra (vector unsigned short,
                                    vector unsigned short);
     vector signed int vec_sra (vector signed int, vector unsigned int);
     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);

     vector signed int vec_vsraw (vector signed int, vector unsigned int);
     vector unsigned int vec_vsraw (vector unsigned int,
                                    vector unsigned int);

     vector signed short vec_vsrah (vector signed short,
                                    vector unsigned short);
     vector unsigned short vec_vsrah (vector unsigned short,
                                      vector unsigned short);

     vector signed char vec_vsrab (vector signed char, vector unsigned char);
     vector unsigned char vec_vsrab (vector unsigned char,
                                     vector unsigned char);

     vector signed int vec_srl (vector signed int, vector unsigned int);
     vector signed int vec_srl (vector signed int, vector unsigned short);
     vector signed int vec_srl (vector signed int, vector unsigned char);
     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
     vector unsigned int vec_srl (vector unsigned int,
                                  vector unsigned short);
     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
     vector bool int vec_srl (vector bool int, vector unsigned int);
     vector bool int vec_srl (vector bool int, vector unsigned short);
     vector bool int vec_srl (vector bool int, vector unsigned char);
     vector signed short vec_srl (vector signed short, vector unsigned int);
     vector signed short vec_srl (vector signed short,
                                  vector unsigned short);
     vector signed short vec_srl (vector signed short, vector unsigned char);
     vector unsigned short vec_srl (vector unsigned short,
                                    vector unsigned int);
     vector unsigned short vec_srl (vector unsigned short,
                                    vector unsigned short);
     vector unsigned short vec_srl (vector unsigned short,
                                    vector unsigned char);
     vector bool short vec_srl (vector bool short, vector unsigned int);
     vector bool short vec_srl (vector bool short, vector unsigned short);
     vector bool short vec_srl (vector bool short, vector unsigned char);
     vector pixel vec_srl (vector pixel, vector unsigned int);
     vector pixel vec_srl (vector pixel, vector unsigned short);
     vector pixel vec_srl (vector pixel, vector unsigned char);
     vector signed char vec_srl (vector signed char, vector unsigned int);
     vector signed char vec_srl (vector signed char, vector unsigned short);
     vector signed char vec_srl (vector signed char, vector unsigned char);
     vector unsigned char vec_srl (vector unsigned char,
                                   vector unsigned int);
     vector unsigned char vec_srl (vector unsigned char,
                                   vector unsigned short);
     vector unsigned char vec_srl (vector unsigned char,
                                   vector unsigned char);
     vector bool char vec_srl (vector bool char, vector unsigned int);
     vector bool char vec_srl (vector bool char, vector unsigned short);
     vector bool char vec_srl (vector bool char, vector unsigned char);

     vector float vec_sro (vector float, vector signed char);
     vector float vec_sro (vector float, vector unsigned char);
     vector signed int vec_sro (vector signed int, vector signed char);
     vector signed int vec_sro (vector signed int, vector unsigned char);
     vector unsigned int vec_sro (vector unsigned int, vector signed char);
     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
     vector signed short vec_sro (vector signed short, vector signed char);
     vector signed short vec_sro (vector signed short, vector unsigned char);
     vector unsigned short vec_sro (vector unsigned short,
                                    vector signed char);
     vector unsigned short vec_sro (vector unsigned short,
                                    vector unsigned char);
     vector pixel vec_sro (vector pixel, vector signed char);
     vector pixel vec_sro (vector pixel, vector unsigned char);
     vector signed char vec_sro (vector signed char, vector signed char);
     vector signed char vec_sro (vector signed char, vector unsigned char);
     vector unsigned char vec_sro (vector unsigned char, vector signed char);
     vector unsigned char vec_sro (vector unsigned char,
                                   vector unsigned char);

     void vec_st (vector float, int, vector float *);
     void vec_st (vector float, int, float *);
     void vec_st (vector signed int, int, vector signed int *);
     void vec_st (vector signed int, int, int *);
     void vec_st (vector unsigned int, int, vector unsigned int *);
     void vec_st (vector unsigned int, int, unsigned int *);
     void vec_st (vector bool int, int, vector bool int *);
     void vec_st (vector bool int, int, unsigned int *);
     void vec_st (vector bool int, int, int *);
     void vec_st (vector signed short, int, vector signed short *);
     void vec_st (vector signed short, int, short *);
     void vec_st (vector unsigned short, int, vector unsigned short *);
     void vec_st (vector unsigned short, int, unsigned short *);
     void vec_st (vector bool short, int, vector bool short *);
     void vec_st (vector bool short, int, unsigned short *);
     void vec_st (vector pixel, int, vector pixel *);
     void vec_st (vector pixel, int, unsigned short *);
     void vec_st (vector pixel, int, short *);
     void vec_st (vector bool short, int, short *);
     void vec_st (vector signed char, int, vector signed char *);
     void vec_st (vector signed char, int, signed char *);
     void vec_st (vector unsigned char, int, vector unsigned char *);
     void vec_st (vector unsigned char, int, unsigned char *);
     void vec_st (vector bool char, int, vector bool char *);
     void vec_st (vector bool char, int, unsigned char *);
     void vec_st (vector bool char, int, signed char *);

     void vec_ste (vector signed char, int, signed char *);
     void vec_ste (vector unsigned char, int, unsigned char *);
     void vec_ste (vector bool char, int, signed char *);
     void vec_ste (vector bool char, int, unsigned char *);
     void vec_ste (vector signed short, int, short *);
     void vec_ste (vector unsigned short, int, unsigned short *);
     void vec_ste (vector bool short, int, short *);
     void vec_ste (vector bool short, int, unsigned short *);
     void vec_ste (vector pixel, int, short *);
     void vec_ste (vector pixel, int, unsigned short *);
     void vec_ste (vector float, int, float *);
     void vec_ste (vector signed int, int, int *);
     void vec_ste (vector unsigned int, int, unsigned int *);
     void vec_ste (vector bool int, int, int *);
     void vec_ste (vector bool int, int, unsigned int *);

     void vec_stvewx (vector float, int, float *);
     void vec_stvewx (vector signed int, int, int *);
     void vec_stvewx (vector unsigned int, int, unsigned int *);
     void vec_stvewx (vector bool int, int, int *);
     void vec_stvewx (vector bool int, int, unsigned int *);

     void vec_stvehx (vector signed short, int, short *);
     void vec_stvehx (vector unsigned short, int, unsigned short *);
     void vec_stvehx (vector bool short, int, short *);
     void vec_stvehx (vector bool short, int, unsigned short *);
     void vec_stvehx (vector pixel, int, short *);
     void vec_stvehx (vector pixel, int, unsigned short *);

     void vec_stvebx (vector signed char, int, signed char *);
     void vec_stvebx (vector unsigned char, int, unsigned char *);
     void vec_stvebx (vector bool char, int, signed char *);
     void vec_stvebx (vector bool char, int, unsigned char *);

     void vec_stl (vector float, int, vector float *);
     void vec_stl (vector float, int, float *);
     void vec_stl (vector signed int, int, vector signed int *);
     void vec_stl (vector signed int, int, int *);
     void vec_stl (vector unsigned int, int, vector unsigned int *);
     void vec_stl (vector unsigned int, int, unsigned int *);
     void vec_stl (vector bool int, int, vector bool int *);
     void vec_stl (vector bool int, int, unsigned int *);
     void vec_stl (vector bool int, int, int *);
     void vec_stl (vector signed short, int, vector signed short *);
     void vec_stl (vector signed short, int, short *);
     void vec_stl (vector unsigned short, int, vector unsigned short *);
     void vec_stl (vector unsigned short, int, unsigned short *);
     void vec_stl (vector bool short, int, vector bool short *);
     void vec_stl (vector bool short, int, unsigned short *);
     void vec_stl (vector bool short, int, short *);
     void vec_stl (vector pixel, int, vector pixel *);
     void vec_stl (vector pixel, int, unsigned short *);
     void vec_stl (vector pixel, int, short *);
     void vec_stl (vector signed char, int, vector signed char *);
     void vec_stl (vector signed char, int, signed char *);
     void vec_stl (vector unsigned char, int, vector unsigned char *);
     void vec_stl (vector unsigned char, int, unsigned char *);
     void vec_stl (vector bool char, int, vector bool char *);
     void vec_stl (vector bool char, int, unsigned char *);
     void vec_stl (vector bool char, int, signed char *);

     vector signed char vec_sub (vector bool char, vector signed char);
     vector signed char vec_sub (vector signed char, vector bool char);
     vector signed char vec_sub (vector signed char, vector signed char);
     vector unsigned char vec_sub (vector bool char, vector unsigned char);
     vector unsigned char vec_sub (vector unsigned char, vector bool char);
     vector unsigned char vec_sub (vector unsigned char,
                                   vector unsigned char);
     vector signed short vec_sub (vector bool short, vector signed short);
     vector signed short vec_sub (vector signed short, vector bool short);
     vector signed short vec_sub (vector signed short, vector signed short);
     vector unsigned short vec_sub (vector bool short,
                                    vector unsigned short);
     vector unsigned short vec_sub (vector unsigned short,
                                    vector bool short);
     vector unsigned short vec_sub (vector unsigned short,
                                    vector unsigned short);
     vector signed int vec_sub (vector bool int, vector signed int);
     vector signed int vec_sub (vector signed int, vector bool int);
     vector signed int vec_sub (vector signed int, vector signed int);
     vector unsigned int vec_sub (vector bool int, vector unsigned int);
     vector unsigned int vec_sub (vector unsigned int, vector bool int);
     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
     vector float vec_sub (vector float, vector float);

     vector float vec_vsubfp (vector float, vector float);

     vector signed int vec_vsubuwm (vector bool int, vector signed int);
     vector signed int vec_vsubuwm (vector signed int, vector bool int);
     vector signed int vec_vsubuwm (vector signed int, vector signed int);
     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
     vector unsigned int vec_vsubuwm (vector unsigned int,
                                      vector unsigned int);

     vector signed short vec_vsubuhm (vector bool short,
                                      vector signed short);
     vector signed short vec_vsubuhm (vector signed short,
                                      vector bool short);
     vector signed short vec_vsubuhm (vector signed short,
                                      vector signed short);
     vector unsigned short vec_vsubuhm (vector bool short,
                                        vector unsigned short);
     vector unsigned short vec_vsubuhm (vector unsigned short,
                                        vector bool short);
     vector unsigned short vec_vsubuhm (vector unsigned short,
                                        vector unsigned short);

     vector signed char vec_vsububm (vector bool char, vector signed char);
     vector signed char vec_vsububm (vector signed char, vector bool char);
     vector signed char vec_vsububm (vector signed char, vector signed char);
     vector unsigned char vec_vsububm (vector bool char,
                                       vector unsigned char);
     vector unsigned char vec_vsububm (vector unsigned char,
                                       vector bool char);
     vector unsigned char vec_vsububm (vector unsigned char,
                                       vector unsigned char);

     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);

     vector unsigned char vec_subs (vector bool char, vector unsigned char);
     vector unsigned char vec_subs (vector unsigned char, vector bool char);
     vector unsigned char vec_subs (vector unsigned char,
                                    vector unsigned char);
     vector signed char vec_subs (vector bool char, vector signed char);
     vector signed char vec_subs (vector signed char, vector bool char);
     vector signed char vec_subs (vector signed char, vector signed char);
     vector unsigned short vec_subs (vector bool short,
                                     vector unsigned short);
     vector unsigned short vec_subs (vector unsigned short,
                                     vector bool short);
     vector unsigned short vec_subs (vector unsigned short,
                                     vector unsigned short);
     vector signed short vec_subs (vector bool short, vector signed short);
     vector signed short vec_subs (vector signed short, vector bool short);
     vector signed short vec_subs (vector signed short, vector signed short);
     vector unsigned int vec_subs (vector bool int, vector unsigned int);
     vector unsigned int vec_subs (vector unsigned int, vector bool int);
     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
     vector signed int vec_subs (vector bool int, vector signed int);
     vector signed int vec_subs (vector signed int, vector bool int);
     vector signed int vec_subs (vector signed int, vector signed int);

     vector signed int vec_vsubsws (vector bool int, vector signed int);
     vector signed int vec_vsubsws (vector signed int, vector bool int);
     vector signed int vec_vsubsws (vector signed int, vector signed int);

     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
     vector unsigned int vec_vsubuws (vector unsigned int,
                                      vector unsigned int);

     vector signed short vec_vsubshs (vector bool short,
                                      vector signed short);
     vector signed short vec_vsubshs (vector signed short,
                                      vector bool short);
     vector signed short vec_vsubshs (vector signed short,
                                      vector signed short);

     vector unsigned short vec_vsubuhs (vector bool short,
                                        vector unsigned short);
     vector unsigned short vec_vsubuhs (vector unsigned short,
                                        vector bool short);
     vector unsigned short vec_vsubuhs (vector unsigned short,
                                        vector unsigned short);

     vector signed char vec_vsubsbs (vector bool char, vector signed char);
     vector signed char vec_vsubsbs (vector signed char, vector bool char);
     vector signed char vec_vsubsbs (vector signed char, vector signed char);

     vector unsigned char vec_vsububs (vector bool char,
                                       vector unsigned char);
     vector unsigned char vec_vsububs (vector unsigned char,
                                       vector bool char);
     vector unsigned char vec_vsububs (vector unsigned char,
                                       vector unsigned char);

     vector unsigned int vec_sum4s (vector unsigned char,
                                    vector unsigned int);
     vector signed int vec_sum4s (vector signed char, vector signed int);
     vector signed int vec_sum4s (vector signed short, vector signed int);

     vector signed int vec_vsum4shs (vector signed short, vector signed int);

     vector signed int vec_vsum4sbs (vector signed char, vector signed int);

     vector unsigned int vec_vsum4ubs (vector unsigned char,
                                       vector unsigned int);

     vector signed int vec_sum2s (vector signed int, vector signed int);

     vector signed int vec_sums (vector signed int, vector signed int);

     vector float vec_trunc (vector float);

     vector signed short vec_unpackh (vector signed char);
     vector bool short vec_unpackh (vector bool char);
     vector signed int vec_unpackh (vector signed short);
     vector bool int vec_unpackh (vector bool short);
     vector unsigned int vec_unpackh (vector pixel);

     vector bool int vec_vupkhsh (vector bool short);
     vector signed int vec_vupkhsh (vector signed short);

     vector unsigned int vec_vupkhpx (vector pixel);

     vector bool short vec_vupkhsb (vector bool char);
     vector signed short vec_vupkhsb (vector signed char);

     vector signed short vec_unpackl (vector signed char);
     vector bool short vec_unpackl (vector bool char);
     vector unsigned int vec_unpackl (vector pixel);
     vector signed int vec_unpackl (vector signed short);
     vector bool int vec_unpackl (vector bool short);

     vector unsigned int vec_vupklpx (vector pixel);

     vector bool int vec_vupklsh (vector bool short);
     vector signed int vec_vupklsh (vector signed short);

     vector bool short vec_vupklsb (vector bool char);
     vector signed short vec_vupklsb (vector signed char);

     vector float vec_xor (vector float, vector float);
     vector float vec_xor (vector float, vector bool int);
     vector float vec_xor (vector bool int, vector float);
     vector bool int vec_xor (vector bool int, vector bool int);
     vector signed int vec_xor (vector bool int, vector signed int);
     vector signed int vec_xor (vector signed int, vector bool int);
     vector signed int vec_xor (vector signed int, vector signed int);
     vector unsigned int vec_xor (vector bool int, vector unsigned int);
     vector unsigned int vec_xor (vector unsigned int, vector bool int);
     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
     vector bool short vec_xor (vector bool short, vector bool short);
     vector signed short vec_xor (vector bool short, vector signed short);
     vector signed short vec_xor (vector signed short, vector bool short);
     vector signed short vec_xor (vector signed short, vector signed short);
     vector unsigned short vec_xor (vector bool short,
                                    vector unsigned short);
     vector unsigned short vec_xor (vector unsigned short,
                                    vector bool short);
     vector unsigned short vec_xor (vector unsigned short,
                                    vector unsigned short);
     vector signed char vec_xor (vector bool char, vector signed char);
     vector bool char vec_xor (vector bool char, vector bool char);
     vector signed char vec_xor (vector signed char, vector bool char);
     vector signed char vec_xor (vector signed char, vector signed char);
     vector unsigned char vec_xor (vector bool char, vector unsigned char);
     vector unsigned char vec_xor (vector unsigned char, vector bool char);
     vector unsigned char vec_xor (vector unsigned char,
                                   vector unsigned char);

     int vec_all_eq (vector signed char, vector bool char);
     int vec_all_eq (vector signed char, vector signed char);
     int vec_all_eq (vector unsigned char, vector bool char);
     int vec_all_eq (vector unsigned char, vector unsigned char);
     int vec_all_eq (vector bool char, vector bool char);
     int vec_all_eq (vector bool char, vector unsigned char);
     int vec_all_eq (vector bool char, vector signed char);
     int vec_all_eq (vector signed short, vector bool short);
     int vec_all_eq (vector signed short, vector signed short);
     int vec_all_eq (vector unsigned short, vector bool short);
     int vec_all_eq (vector unsigned short, vector unsigned short);
     int vec_all_eq (vector bool short, vector bool short);
     int vec_all_eq (vector bool short, vector unsigned short);
     int vec_all_eq (vector bool short, vector signed short);
     int vec_all_eq (vector pixel, vector pixel);
     int vec_all_eq (vector signed int, vector bool int);
     int vec_all_eq (vector signed int, vector signed int);
     int vec_all_eq (vector unsigned int, vector bool int);
     int vec_all_eq (vector unsigned int, vector unsigned int);
     int vec_all_eq (vector bool int, vector bool int);
     int vec_all_eq (vector bool int, vector unsigned int);
     int vec_all_eq (vector bool int, vector signed int);
     int vec_all_eq (vector float, vector float);

     int vec_all_ge (vector bool char, vector unsigned char);
     int vec_all_ge (vector unsigned char, vector bool char);
     int vec_all_ge (vector unsigned char, vector unsigned char);
     int vec_all_ge (vector bool char, vector signed char);
     int vec_all_ge (vector signed char, vector bool char);
     int vec_all_ge (vector signed char, vector signed char);
     int vec_all_ge (vector bool short, vector unsigned short);
     int vec_all_ge (vector unsigned short, vector bool short);
     int vec_all_ge (vector unsigned short, vector unsigned short);
     int vec_all_ge (vector signed short, vector signed short);
     int vec_all_ge (vector bool short, vector signed short);
     int vec_all_ge (vector signed short, vector bool short);
     int vec_all_ge (vector bool int, vector unsigned int);
     int vec_all_ge (vector unsigned int, vector bool int);
     int vec_all_ge (vector unsigned int, vector unsigned int);
     int vec_all_ge (vector bool int, vector signed int);
     int vec_all_ge (vector signed int, vector bool int);
     int vec_all_ge (vector signed int, vector signed int);
     int vec_all_ge (vector float, vector float);

     int vec_all_gt (vector bool char, vector unsigned char);
     int vec_all_gt (vector unsigned char, vector bool char);
     int vec_all_gt (vector unsigned char, vector unsigned char);
     int vec_all_gt (vector bool char, vector signed char);
     int vec_all_gt (vector signed char, vector bool char);
     int vec_all_gt (vector signed char, vector signed char);
     int vec_all_gt (vector bool short, vector unsigned short);
     int vec_all_gt (vector unsigned short, vector bool short);
     int vec_all_gt (vector unsigned short, vector unsigned short);
     int vec_all_gt (vector bool short, vector signed short);
     int vec_all_gt (vector signed short, vector bool short);
     int vec_all_gt (vector signed short, vector signed short);
     int vec_all_gt (vector bool int, vector unsigned int);
     int vec_all_gt (vector unsigned int, vector bool int);
     int vec_all_gt (vector unsigned int, vector unsigned int);
     int vec_all_gt (vector bool int, vector signed int);
     int vec_all_gt (vector signed int, vector bool int);
     int vec_all_gt (vector signed int, vector signed int);
     int vec_all_gt (vector float, vector float);

     int vec_all_in (vector float, vector float);

     int vec_all_le (vector bool char, vector unsigned char);
     int vec_all_le (vector unsigned char, vector bool char);
     int vec_all_le (vector unsigned char, vector unsigned char);
     int vec_all_le (vector bool char, vector signed char);
     int vec_all_le (vector signed char, vector bool char);
     int vec_all_le (vector signed char, vector signed char);
     int vec_all_le (vector bool short, vector unsigned short);
     int vec_all_le (vector unsigned short, vector bool short);
     int vec_all_le (vector unsigned short, vector unsigned short);
     int vec_all_le (vector bool short, vector signed short);
     int vec_all_le (vector signed short, vector bool short);
     int vec_all_le (vector signed short, vector signed short);
     int vec_all_le (vector bool int, vector unsigned int);
     int vec_all_le (vector unsigned int, vector bool int);
     int vec_all_le (vector unsigned int, vector unsigned int);
     int vec_all_le (vector bool int, vector signed int);
     int vec_all_le (vector signed int, vector bool int);
     int vec_all_le (vector signed int, vector signed int);
     int vec_all_le (vector float, vector float);

     int vec_all_lt (vector bool char, vector unsigned char);
     int vec_all_lt (vector unsigned char, vector bool char);
     int vec_all_lt (vector unsigned char, vector unsigned char);
     int vec_all_lt (vector bool char, vector signed char);
     int vec_all_lt (vector signed char, vector bool char);
     int vec_all_lt (vector signed char, vector signed char);
     int vec_all_lt (vector bool short, vector unsigned short);
     int vec_all_lt (vector unsigned short, vector bool short);
     int vec_all_lt (vector unsigned short, vector unsigned short);
     int vec_all_lt (vector bool short, vector signed short);
     int vec_all_lt (vector signed short, vector bool short);
     int vec_all_lt (vector signed short, vector signed short);
     int vec_all_lt (vector bool int, vector unsigned int);
     int vec_all_lt (vector unsigned int, vector bool int);
     int vec_all_lt (vector unsigned int, vector unsigned int);
     int vec_all_lt (vector bool int, vector signed int);
     int vec_all_lt (vector signed int, vector bool int);
     int vec_all_lt (vector signed int, vector signed int);
     int vec_all_lt (vector float, vector float);

     int vec_all_nan (vector float);

     int vec_all_ne (vector signed char, vector bool char);
     int vec_all_ne (vector signed char, vector signed char);
     int vec_all_ne (vector unsigned char, vector bool char);
     int vec_all_ne (vector unsigned char, vector unsigned char);
     int vec_all_ne (vector bool char, vector bool char);
     int vec_all_ne (vector bool char, vector unsigned char);
     int vec_all_ne (vector bool char, vector signed char);
     int vec_all_ne (vector signed short, vector bool short);
     int vec_all_ne (vector signed short, vector signed short);
     int vec_all_ne (vector unsigned short, vector bool short);
     int vec_all_ne (vector unsigned short, vector unsigned short);
     int vec_all_ne (vector bool short, vector bool short);
     int vec_all_ne (vector bool short, vector unsigned short);
     int vec_all_ne (vector bool short, vector signed short);
     int vec_all_ne (vector pixel, vector pixel);
     int vec_all_ne (vector signed int, vector bool int);
     int vec_all_ne (vector signed int, vector signed int);
     int vec_all_ne (vector unsigned int, vector bool int);
     int vec_all_ne (vector unsigned int, vector unsigned int);
     int vec_all_ne (vector bool int, vector bool int);
     int vec_all_ne (vector bool int, vector unsigned int);
     int vec_all_ne (vector bool int, vector signed int);
     int vec_all_ne (vector float, vector float);

     int vec_all_nge (vector float, vector float);

     int vec_all_ngt (vector float, vector float);

     int vec_all_nle (vector float, vector float);

     int vec_all_nlt (vector float, vector float);

     int vec_all_numeric (vector float);

     int vec_any_eq (vector signed char, vector bool char);
     int vec_any_eq (vector signed char, vector signed char);
     int vec_any_eq (vector unsigned char, vector bool char);
     int vec_any_eq (vector unsigned char, vector unsigned char);
     int vec_any_eq (vector bool char, vector bool char);
     int vec_any_eq (vector bool char, vector unsigned char);
     int vec_any_eq (vector bool char, vector signed char);
     int vec_any_eq (vector signed short, vector bool short);
     int vec_any_eq (vector signed short, vector signed short);
     int vec_any_eq (vector unsigned short, vector bool short);
     int vec_any_eq (vector unsigned short, vector unsigned short);
     int vec_any_eq (vector bool short, vector bool short);
     int vec_any_eq (vector bool short, vector unsigned short);
     int vec_any_eq (vector bool short, vector signed short);
     int vec_any_eq (vector pixel, vector pixel);
     int vec_any_eq (vector signed int, vector bool int);
     int vec_any_eq (vector signed int, vector signed int);
     int vec_any_eq (vector unsigned int, vector bool int);
     int vec_any_eq (vector unsigned int, vector unsigned int);
     int vec_any_eq (vector bool int, vector bool int);
     int vec_any_eq (vector bool int, vector unsigned int);
     int vec_any_eq (vector bool int, vector signed int);
     int vec_any_eq (vector float, vector float);

     int vec_any_ge (vector signed char, vector bool char);
     int vec_any_ge (vector unsigned char, vector bool char);
     int vec_any_ge (vector unsigned char, vector unsigned char);
     int vec_any_ge (vector signed char, vector signed char);
     int vec_any_ge (vector bool char, vector unsigned char);
     int vec_any_ge (vector bool char, vector signed char);
     int vec_any_ge (vector unsigned short, vector bool short);
     int vec_any_ge (vector unsigned short, vector unsigned short);
     int vec_any_ge (vector signed short, vector signed short);
     int vec_any_ge (vector signed short, vector bool short);
     int vec_any_ge (vector bool short, vector unsigned short);
     int vec_any_ge (vector bool short, vector signed short);
     int vec_any_ge (vector signed int, vector bool int);
     int vec_any_ge (vector unsigned int, vector bool int);
     int vec_any_ge (vector unsigned int, vector unsigned int);
     int vec_any_ge (vector signed int, vector signed int);
     int vec_any_ge (vector bool int, vector unsigned int);
     int vec_any_ge (vector bool int, vector signed int);
     int vec_any_ge (vector float, vector float);

     int vec_any_gt (vector bool char, vector unsigned char);
     int vec_any_gt (vector unsigned char, vector bool char);
     int vec_any_gt (vector unsigned char, vector unsigned char);
     int vec_any_gt (vector bool char, vector signed char);
     int vec_any_gt (vector signed char, vector bool char);
     int vec_any_gt (vector signed char, vector signed char);
     int vec_any_gt (vector bool short, vector unsigned short);
     int vec_any_gt (vector unsigned short, vector bool short);
     int vec_any_gt (vector unsigned short, vector unsigned short);
     int vec_any_gt (vector bool short, vector signed short);
     int vec_any_gt (vector signed short, vector bool short);
     int vec_any_gt (vector signed short, vector signed short);
     int vec_any_gt (vector bool int, vector unsigned int);
     int vec_any_gt (vector unsigned int, vector bool int);
     int vec_any_gt (vector unsigned int, vector unsigned int);
     int vec_any_gt (vector bool int, vector signed int);
     int vec_any_gt (vector signed int, vector bool int);
     int vec_any_gt (vector signed int, vector signed int);
     int vec_any_gt (vector float, vector float);

     int vec_any_le (vector bool char, vector unsigned char);
     int vec_any_le (vector unsigned char, vector bool char);
     int vec_any_le (vector unsigned char, vector unsigned char);
     int vec_any_le (vector bool char, vector signed char);
     int vec_any_le (vector signed char, vector bool char);
     int vec_any_le (vector signed char, vector signed char);
     int vec_any_le (vector bool short, vector unsigned short);
     int vec_any_le (vector unsigned short, vector bool short);
     int vec_any_le (vector unsigned short, vector unsigned short);
     int vec_any_le (vector bool short, vector signed short);
     int vec_any_le (vector signed short, vector bool short);
     int vec_any_le (vector signed short, vector signed short);
     int vec_any_le (vector bool int, vector unsigned int);
     int vec_any_le (vector unsigned int, vector bool int);
     int vec_any_le (vector unsigned int, vector unsigned int);
     int vec_any_le (vector bool int, vector signed int);
     int vec_any_le (vector signed int, vector bool int);
     int vec_any_le (vector signed int, vector signed int);
     int vec_any_le (vector float, vector float);

     int vec_any_lt (vector bool char, vector unsigned char);
     int vec_any_lt (vector unsigned char, vector bool char);
     int vec_any_lt (vector unsigned char, vector unsigned char);
     int vec_any_lt (vector bool char, vector signed char);
     int vec_any_lt (vector signed char, vector bool char);
     int vec_any_lt (vector signed char, vector signed char);
     int vec_any_lt (vector bool short, vector unsigned short);
     int vec_any_lt (vector unsigned short, vector bool short);
     int vec_any_lt (vector unsigned short, vector unsigned short);
     int vec_any_lt (vector bool short, vector signed short);
     int vec_any_lt (vector signed short, vector bool short);
     int vec_any_lt (vector signed short, vector signed short);
     int vec_any_lt (vector bool int, vector unsigned int);
     int vec_any_lt (vector unsigned int, vector bool int);
     int vec_any_lt (vector unsigned int, vector unsigned int);
     int vec_any_lt (vector bool int, vector signed int);
     int vec_any_lt (vector signed int, vector bool int);
     int vec_any_lt (vector signed int, vector signed int);
     int vec_any_lt (vector float, vector float);

     int vec_any_nan (vector float);

     int vec_any_ne (vector signed char, vector bool char);
     int vec_any_ne (vector signed char, vector signed char);
     int vec_any_ne (vector unsigned char, vector bool char);
     int vec_any_ne (vector unsigned char, vector unsigned char);
     int vec_any_ne (vector bool char, vector bool char);
     int vec_any_ne (vector bool char, vector unsigned char);
     int vec_any_ne (vector bool char, vector signed char);
     int vec_any_ne (vector signed short, vector bool short);
     int vec_any_ne (vector signed short, vector signed short);
     int vec_any_ne (vector unsigned short, vector bool short);
     int vec_any_ne (vector unsigned short, vector unsigned short);
     int vec_any_ne (vector bool short, vector bool short);
     int vec_any_ne (vector bool short, vector unsigned short);
     int vec_any_ne (vector bool short, vector signed short);
     int vec_any_ne (vector pixel, vector pixel);
     int vec_any_ne (vector signed int, vector bool int);
     int vec_any_ne (vector signed int, vector signed int);
     int vec_any_ne (vector unsigned int, vector bool int);
     int vec_any_ne (vector unsigned int, vector unsigned int);
     int vec_any_ne (vector bool int, vector bool int);
     int vec_any_ne (vector bool int, vector unsigned int);
     int vec_any_ne (vector bool int, vector signed int);
     int vec_any_ne (vector float, vector float);

     int vec_any_nge (vector float, vector float);

     int vec_any_ngt (vector float, vector float);

     int vec_any_nle (vector float, vector float);

     int vec_any_nlt (vector float, vector float);

     int vec_any_numeric (vector float);

     int vec_any_out (vector float, vector float);

 If the vector/scalar (VSX) instruction set is available, the following
additional functions are available:

     vector double vec_abs (vector double);
     vector double vec_add (vector double, vector double);
     vector double vec_and (vector double, vector double);
     vector double vec_and (vector double, vector bool long);
     vector double vec_and (vector bool long, vector double);
     vector long vec_and (vector long, vector long);
     vector long vec_and (vector long, vector bool long);
     vector long vec_and (vector bool long, vector long);
     vector unsigned long vec_and (vector unsigned long, vector unsigned long);
     vector unsigned long vec_and (vector unsigned long, vector bool long);
     vector unsigned long vec_and (vector bool long, vector unsigned long);
     vector double vec_andc (vector double, vector double);
     vector double vec_andc (vector double, vector bool long);
     vector double vec_andc (vector bool long, vector double);
     vector long vec_andc (vector long, vector long);
     vector long vec_andc (vector long, vector bool long);
     vector long vec_andc (vector bool long, vector long);
     vector unsigned long vec_andc (vector unsigned long, vector unsigned long);
     vector unsigned long vec_andc (vector unsigned long, vector bool long);
     vector unsigned long vec_andc (vector bool long, vector unsigned long);
     vector double vec_ceil (vector double);
     vector bool long vec_cmpeq (vector double, vector double);
     vector bool long vec_cmpge (vector double, vector double);
     vector bool long vec_cmpgt (vector double, vector double);
     vector bool long vec_cmple (vector double, vector double);
     vector bool long vec_cmplt (vector double, vector double);
     vector double vec_cpsgn (vector double, vector double);
     vector float vec_div (vector float, vector float);
     vector double vec_div (vector double, vector double);
     vector long vec_div (vector long, vector long);
     vector unsigned long vec_div (vector unsigned long, vector unsigned long);
     vector double vec_floor (vector double);
     vector double vec_ld (int, const vector double *);
     vector double vec_ld (int, const double *);
     vector double vec_ldl (int, const vector double *);
     vector double vec_ldl (int, const double *);
     vector unsigned char vec_lvsl (int, const volatile double *);
     vector unsigned char vec_lvsr (int, const volatile double *);
     vector double vec_madd (vector double, vector double, vector double);
     vector double vec_max (vector double, vector double);
     vector signed long vec_mergeh (vector signed long, vector signed long);
     vector signed long vec_mergeh (vector signed long, vector bool long);
     vector signed long vec_mergeh (vector bool long, vector signed long);
     vector unsigned long vec_mergeh (vector unsigned long, vector unsigned long);
     vector unsigned long vec_mergeh (vector unsigned long, vector bool long);
     vector unsigned long vec_mergeh (vector bool long, vector unsigned long);
     vector signed long vec_mergel (vector signed long, vector signed long);
     vector signed long vec_mergel (vector signed long, vector bool long);
     vector signed long vec_mergel (vector bool long, vector signed long);
     vector unsigned long vec_mergel (vector unsigned long, vector unsigned long);
     vector unsigned long vec_mergel (vector unsigned long, vector bool long);
     vector unsigned long vec_mergel (vector bool long, vector unsigned long);
     vector double vec_min (vector double, vector double);
     vector float vec_msub (vector float, vector float, vector float);
     vector double vec_msub (vector double, vector double, vector double);
     vector float vec_mul (vector float, vector float);
     vector double vec_mul (vector double, vector double);
     vector long vec_mul (vector long, vector long);
     vector unsigned long vec_mul (vector unsigned long, vector unsigned long);
     vector float vec_nearbyint (vector float);
     vector double vec_nearbyint (vector double);
     vector float vec_nmadd (vector float, vector float, vector float);
     vector double vec_nmadd (vector double, vector double, vector double);
     vector double vec_nmsub (vector double, vector double, vector double);
     vector double vec_nor (vector double, vector double);
     vector long vec_nor (vector long, vector long);
     vector long vec_nor (vector long, vector bool long);
     vector long vec_nor (vector bool long, vector long);
     vector unsigned long vec_nor (vector unsigned long, vector unsigned long);
     vector unsigned long vec_nor (vector unsigned long, vector bool long);
     vector unsigned long vec_nor (vector bool long, vector unsigned long);
     vector double vec_or (vector double, vector double);
     vector double vec_or (vector double, vector bool long);
     vector double vec_or (vector bool long, vector double);
     vector long vec_or (vector long, vector long);
     vector long vec_or (vector long, vector bool long);
     vector long vec_or (vector bool long, vector long);
     vector unsigned long vec_or (vector unsigned long, vector unsigned long);
     vector unsigned long vec_or (vector unsigned long, vector bool long);
     vector unsigned long vec_or (vector bool long, vector unsigned long);
     vector double vec_perm (vector double, vector double, vector unsigned char);
     vector long vec_perm (vector long, vector long, vector unsigned char);
     vector unsigned long vec_perm (vector unsigned long, vector unsigned long,
                                    vector unsigned char);
     vector double vec_rint (vector double);
     vector double vec_recip (vector double, vector double);
     vector double vec_rsqrt (vector double);
     vector double vec_rsqrte (vector double);
     vector double vec_sel (vector double, vector double, vector bool long);
     vector double vec_sel (vector double, vector double, vector unsigned long);
     vector long vec_sel (vector long, vector long, vector long);
     vector long vec_sel (vector long, vector long, vector unsigned long);
     vector long vec_sel (vector long, vector long, vector bool long);
     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
                                   vector long);
     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
                                   vector unsigned long);
     vector unsigned long vec_sel (vector unsigned long, vector unsigned long,
                                   vector bool long);
     vector double vec_splats (double);
     vector signed long vec_splats (signed long);
     vector unsigned long vec_splats (unsigned long);
     vector float vec_sqrt (vector float);
     vector double vec_sqrt (vector double);
     void vec_st (vector double, int, vector double *);
     void vec_st (vector double, int, double *);
     vector double vec_sub (vector double, vector double);
     vector double vec_trunc (vector double);
     vector double vec_xor (vector double, vector double);
     vector double vec_xor (vector double, vector bool long);
     vector double vec_xor (vector bool long, vector double);
     vector long vec_xor (vector long, vector long);
     vector long vec_xor (vector long, vector bool long);
     vector long vec_xor (vector bool long, vector long);
     vector unsigned long vec_xor (vector unsigned long, vector unsigned long);
     vector unsigned long vec_xor (vector unsigned long, vector bool long);
     vector unsigned long vec_xor (vector bool long, vector unsigned long);
     int vec_all_eq (vector double, vector double);
     int vec_all_ge (vector double, vector double);
     int vec_all_gt (vector double, vector double);
     int vec_all_le (vector double, vector double);
     int vec_all_lt (vector double, vector double);
     int vec_all_nan (vector double);
     int vec_all_ne (vector double, vector double);
     int vec_all_nge (vector double, vector double);
     int vec_all_ngt (vector double, vector double);
     int vec_all_nle (vector double, vector double);
     int vec_all_nlt (vector double, vector double);
     int vec_all_numeric (vector double);
     int vec_any_eq (vector double, vector double);
     int vec_any_ge (vector double, vector double);
     int vec_any_gt (vector double, vector double);
     int vec_any_le (vector double, vector double);
     int vec_any_lt (vector double, vector double);
     int vec_any_nan (vector double);
     int vec_any_ne (vector double, vector double);
     int vec_any_nge (vector double, vector double);
     int vec_any_ngt (vector double, vector double);
     int vec_any_nle (vector double, vector double);
     int vec_any_nlt (vector double, vector double);
     int vec_any_numeric (vector double);

     vector double vec_vsx_ld (int, const vector double *);
     vector double vec_vsx_ld (int, const double *);
     vector float vec_vsx_ld (int, const vector float *);
     vector float vec_vsx_ld (int, const float *);
     vector bool int vec_vsx_ld (int, const vector bool int *);
     vector signed int vec_vsx_ld (int, const vector signed int *);
     vector signed int vec_vsx_ld (int, const int *);
     vector signed int vec_vsx_ld (int, const long *);
     vector unsigned int vec_vsx_ld (int, const vector unsigned int *);
     vector unsigned int vec_vsx_ld (int, const unsigned int *);
     vector unsigned int vec_vsx_ld (int, const unsigned long *);
     vector bool short vec_vsx_ld (int, const vector bool short *);
     vector pixel vec_vsx_ld (int, const vector pixel *);
     vector signed short vec_vsx_ld (int, const vector signed short *);
     vector signed short vec_vsx_ld (int, const short *);
     vector unsigned short vec_vsx_ld (int, const vector unsigned short *);
     vector unsigned short vec_vsx_ld (int, const unsigned short *);
     vector bool char vec_vsx_ld (int, const vector bool char *);
     vector signed char vec_vsx_ld (int, const vector signed char *);
     vector signed char vec_vsx_ld (int, const signed char *);
     vector unsigned char vec_vsx_ld (int, const vector unsigned char *);
     vector unsigned char vec_vsx_ld (int, const unsigned char *);

     void vec_vsx_st (vector double, int, vector double *);
     void vec_vsx_st (vector double, int, double *);
     void vec_vsx_st (vector float, int, vector float *);
     void vec_vsx_st (vector float, int, float *);
     void vec_vsx_st (vector signed int, int, vector signed int *);
     void vec_vsx_st (vector signed int, int, int *);
     void vec_vsx_st (vector unsigned int, int, vector unsigned int *);
     void vec_vsx_st (vector unsigned int, int, unsigned int *);
     void vec_vsx_st (vector bool int, int, vector bool int *);
     void vec_vsx_st (vector bool int, int, unsigned int *);
     void vec_vsx_st (vector bool int, int, int *);
     void vec_vsx_st (vector signed short, int, vector signed short *);
     void vec_vsx_st (vector signed short, int, short *);
     void vec_vsx_st (vector unsigned short, int, vector unsigned short *);
     void vec_vsx_st (vector unsigned short, int, unsigned short *);
     void vec_vsx_st (vector bool short, int, vector bool short *);
     void vec_vsx_st (vector bool short, int, unsigned short *);
     void vec_vsx_st (vector pixel, int, vector pixel *);
     void vec_vsx_st (vector pixel, int, unsigned short *);
     void vec_vsx_st (vector pixel, int, short *);
     void vec_vsx_st (vector bool short, int, short *);
     void vec_vsx_st (vector signed char, int, vector signed char *);
     void vec_vsx_st (vector signed char, int, signed char *);
     void vec_vsx_st (vector unsigned char, int, vector unsigned char *);
     void vec_vsx_st (vector unsigned char, int, unsigned char *);
     void vec_vsx_st (vector bool char, int, vector bool char *);
     void vec_vsx_st (vector bool char, int, unsigned char *);
     void vec_vsx_st (vector bool char, int, signed char *);

     vector double vec_xxpermdi (vector double, vector double, int);
     vector float vec_xxpermdi (vector float, vector float, int);
     vector long long vec_xxpermdi (vector long long, vector long long, int);
     vector unsigned long long vec_xxpermdi (vector unsigned long long,
                                             vector unsigned long long, int);
     vector int vec_xxpermdi (vector int, vector int, int);
     vector unsigned int vec_xxpermdi (vector unsigned int,
                                       vector unsigned int, int);
     vector short vec_xxpermdi (vector short, vector short, int);
     vector unsigned short vec_xxpermdi (vector unsigned short,
                                         vector unsigned short, int);
     vector signed char vec_xxpermdi (vector signed char, vector signed char, int);
     vector unsigned char vec_xxpermdi (vector unsigned char,
                                        vector unsigned char, int);

     vector double vec_xxsldi (vector double, vector double, int);
     vector float vec_xxsldi (vector float, vector float, int);
     vector long long vec_xxsldi (vector long long, vector long long, int);
     vector unsigned long long vec_xxsldi (vector unsigned long long,
                                           vector unsigned long long, int);
     vector int vec_xxsldi (vector int, vector int, int);
     vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int);
     vector short vec_xxsldi (vector short, vector short, int);
     vector unsigned short vec_xxsldi (vector unsigned short,
                                       vector unsigned short, int);
     vector signed char vec_xxsldi (vector signed char, vector signed char, int);
     vector unsigned char vec_xxsldi (vector unsigned char,
                                      vector unsigned char, int);

 Note that the 'vec_ld' and 'vec_st' built-in functions always generate
the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction
set is available.  The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions
always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X'
instructions.

 If the ISA 2.07 additions to the vector/scalar (power8-vector)
instruction set is available, the following additional functions are
available for both 32-bit and 64-bit targets.  For 64-bit targets, you
can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG
instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of
VECTOR UNSIGNED LONG LONG.

     vector long long vec_abs (vector long long);

     vector long long vec_add (vector long long, vector long long);
     vector unsigned long long vec_add (vector unsigned long long,
                                        vector unsigned long long);

     int vec_all_eq (vector long long, vector long long);
     int vec_all_eq (vector unsigned long long, vector unsigned long long);
     int vec_all_ge (vector long long, vector long long);
     int vec_all_ge (vector unsigned long long, vector unsigned long long);
     int vec_all_gt (vector long long, vector long long);
     int vec_all_gt (vector unsigned long long, vector unsigned long long);
     int vec_all_le (vector long long, vector long long);
     int vec_all_le (vector unsigned long long, vector unsigned long long);
     int vec_all_lt (vector long long, vector long long);
     int vec_all_lt (vector unsigned long long, vector unsigned long long);
     int vec_all_ne (vector long long, vector long long);
     int vec_all_ne (vector unsigned long long, vector unsigned long long);

     int vec_any_eq (vector long long, vector long long);
     int vec_any_eq (vector unsigned long long, vector unsigned long long);
     int vec_any_ge (vector long long, vector long long);
     int vec_any_ge (vector unsigned long long, vector unsigned long long);
     int vec_any_gt (vector long long, vector long long);
     int vec_any_gt (vector unsigned long long, vector unsigned long long);
     int vec_any_le (vector long long, vector long long);
     int vec_any_le (vector unsigned long long, vector unsigned long long);
     int vec_any_lt (vector long long, vector long long);
     int vec_any_lt (vector unsigned long long, vector unsigned long long);
     int vec_any_ne (vector long long, vector long long);
     int vec_any_ne (vector unsigned long long, vector unsigned long long);

     vector long long vec_eqv (vector long long, vector long long);
     vector long long vec_eqv (vector bool long long, vector long long);
     vector long long vec_eqv (vector long long, vector bool long long);
     vector unsigned long long vec_eqv (vector unsigned long long,
                                        vector unsigned long long);
     vector unsigned long long vec_eqv (vector bool long long,
                                        vector unsigned long long);
     vector unsigned long long vec_eqv (vector unsigned long long,
                                        vector bool long long);
     vector int vec_eqv (vector int, vector int);
     vector int vec_eqv (vector bool int, vector int);
     vector int vec_eqv (vector int, vector bool int);
     vector unsigned int vec_eqv (vector unsigned int, vector unsigned int);
     vector unsigned int vec_eqv (vector bool unsigned int,
                                  vector unsigned int);
     vector unsigned int vec_eqv (vector unsigned int,
                                  vector bool unsigned int);
     vector short vec_eqv (vector short, vector short);
     vector short vec_eqv (vector bool short, vector short);
     vector short vec_eqv (vector short, vector bool short);
     vector unsigned short vec_eqv (vector unsigned short, vector unsigned short);
     vector unsigned short vec_eqv (vector bool unsigned short,
                                    vector unsigned short);
     vector unsigned short vec_eqv (vector unsigned short,
                                    vector bool unsigned short);
     vector signed char vec_eqv (vector signed char, vector signed char);
     vector signed char vec_eqv (vector bool signed char, vector signed char);
     vector signed char vec_eqv (vector signed char, vector bool signed char);
     vector unsigned char vec_eqv (vector unsigned char, vector unsigned char);
     vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char);
     vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char);

     vector long long vec_max (vector long long, vector long long);
     vector unsigned long long vec_max (vector unsigned long long,
                                        vector unsigned long long);

     vector signed int vec_mergee (vector signed int, vector signed int);
     vector unsigned int vec_mergee (vector unsigned int, vector unsigned int);
     vector bool int vec_mergee (vector bool int, vector bool int);

     vector signed int vec_mergeo (vector signed int, vector signed int);
     vector unsigned int vec_mergeo (vector unsigned int, vector unsigned int);
     vector bool int vec_mergeo (vector bool int, vector bool int);

     vector long long vec_min (vector long long, vector long long);
     vector unsigned long long vec_min (vector unsigned long long,
                                        vector unsigned long long);

     vector long long vec_nand (vector long long, vector long long);
     vector long long vec_nand (vector bool long long, vector long long);
     vector long long vec_nand (vector long long, vector bool long long);
     vector unsigned long long vec_nand (vector unsigned long long,
                                         vector unsigned long long);
     vector unsigned long long vec_nand (vector bool long long,
                                        vector unsigned long long);
     vector unsigned long long vec_nand (vector unsigned long long,
                                         vector bool long long);
     vector int vec_nand (vector int, vector int);
     vector int vec_nand (vector bool int, vector int);
     vector int vec_nand (vector int, vector bool int);
     vector unsigned int vec_nand (vector unsigned int, vector unsigned int);
     vector unsigned int vec_nand (vector bool unsigned int,
                                   vector unsigned int);
     vector unsigned int vec_nand (vector unsigned int,
                                   vector bool unsigned int);
     vector short vec_nand (vector short, vector short);
     vector short vec_nand (vector bool short, vector short);
     vector short vec_nand (vector short, vector bool short);
     vector unsigned short vec_nand (vector unsigned short, vector unsigned short);
     vector unsigned short vec_nand (vector bool unsigned short,
                                     vector unsigned short);
     vector unsigned short vec_nand (vector unsigned short,
                                     vector bool unsigned short);
     vector signed char vec_nand (vector signed char, vector signed char);
     vector signed char vec_nand (vector bool signed char, vector signed char);
     vector signed char vec_nand (vector signed char, vector bool signed char);
     vector unsigned char vec_nand (vector unsigned char, vector unsigned char);
     vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char);
     vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char);

     vector long long vec_orc (vector long long, vector long long);
     vector long long vec_orc (vector bool long long, vector long long);
     vector long long vec_orc (vector long long, vector bool long long);
     vector unsigned long long vec_orc (vector unsigned long long,
                                        vector unsigned long long);
     vector unsigned long long vec_orc (vector bool long long,
                                        vector unsigned long long);
     vector unsigned long long vec_orc (vector unsigned long long,
                                        vector bool long long);
     vector int vec_orc (vector int, vector int);
     vector int vec_orc (vector bool int, vector int);
     vector int vec_orc (vector int, vector bool int);
     vector unsigned int vec_orc (vector unsigned int, vector unsigned int);
     vector unsigned int vec_orc (vector bool unsigned int,
                                  vector unsigned int);
     vector unsigned int vec_orc (vector unsigned int,
                                  vector bool unsigned int);
     vector short vec_orc (vector short, vector short);
     vector short vec_orc (vector bool short, vector short);
     vector short vec_orc (vector short, vector bool short);
     vector unsigned short vec_orc (vector unsigned short, vector unsigned short);
     vector unsigned short vec_orc (vector bool unsigned short,
                                    vector unsigned short);
     vector unsigned short vec_orc (vector unsigned short,
                                    vector bool unsigned short);
     vector signed char vec_orc (vector signed char, vector signed char);
     vector signed char vec_orc (vector bool signed char, vector signed char);
     vector signed char vec_orc (vector signed char, vector bool signed char);
     vector unsigned char vec_orc (vector unsigned char, vector unsigned char);
     vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char);
     vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char);

     vector int vec_pack (vector long long, vector long long);
     vector unsigned int vec_pack (vector unsigned long long,
                                   vector unsigned long long);
     vector bool int vec_pack (vector bool long long, vector bool long long);

     vector int vec_packs (vector long long, vector long long);
     vector unsigned int vec_packs (vector unsigned long long,
                                    vector unsigned long long);

     vector unsigned int vec_packsu (vector long long, vector long long);
     vector unsigned int vec_packsu (vector unsigned long long,
                                     vector unsigned long long);

     vector long long vec_rl (vector long long,
                              vector unsigned long long);
     vector long long vec_rl (vector unsigned long long,
                              vector unsigned long long);

     vector long long vec_sl (vector long long, vector unsigned long long);
     vector long long vec_sl (vector unsigned long long,
                              vector unsigned long long);

     vector long long vec_sr (vector long long, vector unsigned long long);
     vector unsigned long long char vec_sr (vector unsigned long long,
                                            vector unsigned long long);

     vector long long vec_sra (vector long long, vector unsigned long long);
     vector unsigned long long vec_sra (vector unsigned long long,
                                        vector unsigned long long);

     vector long long vec_sub (vector long long, vector long long);
     vector unsigned long long vec_sub (vector unsigned long long,
                                        vector unsigned long long);

     vector long long vec_unpackh (vector int);
     vector unsigned long long vec_unpackh (vector unsigned int);

     vector long long vec_unpackl (vector int);
     vector unsigned long long vec_unpackl (vector unsigned int);

     vector long long vec_vaddudm (vector long long, vector long long);
     vector long long vec_vaddudm (vector bool long long, vector long long);
     vector long long vec_vaddudm (vector long long, vector bool long long);
     vector unsigned long long vec_vaddudm (vector unsigned long long,
                                            vector unsigned long long);
     vector unsigned long long vec_vaddudm (vector bool unsigned long long,
                                            vector unsigned long long);
     vector unsigned long long vec_vaddudm (vector unsigned long long,
                                            vector bool unsigned long long);

     vector long long vec_vbpermq (vector signed char, vector signed char);
     vector long long vec_vbpermq (vector unsigned char, vector unsigned char);

     vector long long vec_cntlz (vector long long);
     vector unsigned long long vec_cntlz (vector unsigned long long);
     vector int vec_cntlz (vector int);
     vector unsigned int vec_cntlz (vector int);
     vector short vec_cntlz (vector short);
     vector unsigned short vec_cntlz (vector unsigned short);
     vector signed char vec_cntlz (vector signed char);
     vector unsigned char vec_cntlz (vector unsigned char);

     vector long long vec_vclz (vector long long);
     vector unsigned long long vec_vclz (vector unsigned long long);
     vector int vec_vclz (vector int);
     vector unsigned int vec_vclz (vector int);
     vector short vec_vclz (vector short);
     vector unsigned short vec_vclz (vector unsigned short);
     vector signed char vec_vclz (vector signed char);
     vector unsigned char vec_vclz (vector unsigned char);

     vector signed char vec_vclzb (vector signed char);
     vector unsigned char vec_vclzb (vector unsigned char);

     vector long long vec_vclzd (vector long long);
     vector unsigned long long vec_vclzd (vector unsigned long long);

     vector short vec_vclzh (vector short);
     vector unsigned short vec_vclzh (vector unsigned short);

     vector int vec_vclzw (vector int);
     vector unsigned int vec_vclzw (vector int);

     vector signed char vec_vgbbd (vector signed char);
     vector unsigned char vec_vgbbd (vector unsigned char);

     vector long long vec_vmaxsd (vector long long, vector long long);

     vector unsigned long long vec_vmaxud (vector unsigned long long,
                                           unsigned vector long long);

     vector long long vec_vminsd (vector long long, vector long long);

     vector unsigned long long vec_vminud (vector long long,
                                           vector long long);

     vector int vec_vpksdss (vector long long, vector long long);
     vector unsigned int vec_vpksdss (vector long long, vector long long);

     vector unsigned int vec_vpkudus (vector unsigned long long,
                                      vector unsigned long long);

     vector int vec_vpkudum (vector long long, vector long long);
     vector unsigned int vec_vpkudum (vector unsigned long long,
                                      vector unsigned long long);
     vector bool int vec_vpkudum (vector bool long long, vector bool long long);

     vector long long vec_vpopcnt (vector long long);
     vector unsigned long long vec_vpopcnt (vector unsigned long long);
     vector int vec_vpopcnt (vector int);
     vector unsigned int vec_vpopcnt (vector int);
     vector short vec_vpopcnt (vector short);
     vector unsigned short vec_vpopcnt (vector unsigned short);
     vector signed char vec_vpopcnt (vector signed char);
     vector unsigned char vec_vpopcnt (vector unsigned char);

     vector signed char vec_vpopcntb (vector signed char);
     vector unsigned char vec_vpopcntb (vector unsigned char);

     vector long long vec_vpopcntd (vector long long);
     vector unsigned long long vec_vpopcntd (vector unsigned long long);

     vector short vec_vpopcnth (vector short);
     vector unsigned short vec_vpopcnth (vector unsigned short);

     vector int vec_vpopcntw (vector int);
     vector unsigned int vec_vpopcntw (vector int);

     vector long long vec_vrld (vector long long, vector unsigned long long);
     vector unsigned long long vec_vrld (vector unsigned long long,
                                         vector unsigned long long);

     vector long long vec_vsld (vector long long, vector unsigned long long);
     vector long long vec_vsld (vector unsigned long long,
                                vector unsigned long long);

     vector long long vec_vsrad (vector long long, vector unsigned long long);
     vector unsigned long long vec_vsrad (vector unsigned long long,
                                          vector unsigned long long);

     vector long long vec_vsrd (vector long long, vector unsigned long long);
     vector unsigned long long char vec_vsrd (vector unsigned long long,
                                              vector unsigned long long);

     vector long long vec_vsubudm (vector long long, vector long long);
     vector long long vec_vsubudm (vector bool long long, vector long long);
     vector long long vec_vsubudm (vector long long, vector bool long long);
     vector unsigned long long vec_vsubudm (vector unsigned long long,
                                            vector unsigned long long);
     vector unsigned long long vec_vsubudm (vector bool long long,
                                            vector unsigned long long);
     vector unsigned long long vec_vsubudm (vector unsigned long long,
                                            vector bool long long);

     vector long long vec_vupkhsw (vector int);
     vector unsigned long long vec_vupkhsw (vector unsigned int);

     vector long long vec_vupklsw (vector int);
     vector unsigned long long vec_vupklsw (vector int);

 If the ISA 2.07 additions to the vector/scalar (power8-vector)
instruction set is available, the following additional functions are
available for 64-bit targets.  New vector types (VECTOR __INT128_T and
VECTOR __UINT128_T) are available to hold the __INT128_T and __UINT128_T
types to use these builtins.

 The normal vector extract, and set operations work on VECTOR __INT128_T
and VECTOR __UINT128_T types, but the index value must be 0.

     vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t);
     vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t);

     vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t);
     vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t);

     vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t,
                                     vector __int128_t);
     vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t,
                                      vector __uint128_t);

     vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t,
                                     vector __int128_t);
     vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t,
                                      vector __uint128_t);

     vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t,
                                     vector __int128_t);
     vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t,
                                      vector __uint128_t);

     vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t,
                                     vector __int128_t);
     vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t,
                                      vector __uint128_t);

     vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t);
     vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t);

     __int128_t vec_vsubuqm (__int128_t, __int128_t);
     __uint128_t vec_vsubuqm (__uint128_t, __uint128_t);

     vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t);
     int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t);
     int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t);
     int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t);
     int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t);
     vector __int128_t bcdsub (vector __int128_t, vector__int128_t);
     int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t);
     int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t);
     int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t);
     int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t);

 If the cryptographic instructions are enabled ('-mcrypto' or
'-mcpu=power8'), the following builtins are enabled.

     vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long);

     vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long,
                                                         vector unsigned long long);

     vector unsigned long long __builtin_crypto_vcipherlast
                                          (vector unsigned long long,
                                           vector unsigned long long);

     vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long,
                                                          vector unsigned long long);

     vector unsigned long long __builtin_crypto_vncipherlast
                                          (vector unsigned long long,
                                           vector unsigned long long);

     vector unsigned char __builtin_crypto_vpermxor (vector unsigned char,
                                                     vector unsigned char,
                                                     vector unsigned char);

     vector unsigned short __builtin_crypto_vpermxor (vector unsigned short,
                                                      vector unsigned short,
                                                      vector unsigned short);

     vector unsigned int __builtin_crypto_vpermxor (vector unsigned int,
                                                    vector unsigned int,
                                                    vector unsigned int);

     vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long,
                                                          vector unsigned long long,
                                                          vector unsigned long long);

     vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char,
                                                    vector unsigned char);

     vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short,
                                                     vector unsigned short);

     vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int,
                                                   vector unsigned int);

     vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long,
                                                         vector unsigned long long);

     vector unsigned long long __builtin_crypto_vshasigmad
                                    (vector unsigned long long, int, int);

     vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int,
                                                      int, int);

 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and
__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant integer
that is 0 or 1.  The third argument to these builtin functions must be a
constant integer in the range of 0 to 15.


File: 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

6.58.21 PowerPC Hardware Transactional Memory Built-in Functions
----------------------------------------------------------------

GCC provides two interfaces for accessing the Hardware Transactional
Memory (HTM) instructions available on some of the PowerPC family of
processors (eg, POWER8).  The two interfaces come in a low level
interface, consisting of built-in functions specific to PowerPC and a
higher level interface consisting of inline functions that are common
between PowerPC and S/390.

6.58.21.1 PowerPC HTM Low Level Built-in Functions
..................................................

The following low level built-in functions are available with '-mhtm' or
'-mcpu=CPU' where CPU is 'power8' or later.  They all generate the
machine instruction that is part of the name.

 The HTM builtins (with the exception of '__builtin_tbegin') return the
full 4-bit condition register value set by their associated hardware
instruction.  The header file 'htmintrin.h' defines some macros that can
be used to decipher the return value.  The '__builtin_tbegin' builtin
returns a simple true or false value depending on whether a transaction
was successfully started or not.  The arguments of the builtins match
exactly the type and order of the associated hardware instruction's
operands, except for the '__builtin_tcheck' builtin, which does not take
any input arguments.  Refer to the ISA manual for a description of each
instruction's operands.

     unsigned int __builtin_tbegin (unsigned int)
     unsigned int __builtin_tend (unsigned int)

     unsigned int __builtin_tabort (unsigned int)
     unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int)
     unsigned int __builtin_tabortdci (unsigned int, unsigned int, int)
     unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int)
     unsigned int __builtin_tabortwci (unsigned int, unsigned int, int)

     unsigned int __builtin_tcheck (void)
     unsigned int __builtin_treclaim (unsigned int)
     unsigned int __builtin_trechkpt (void)
     unsigned int __builtin_tsr (unsigned int)

 In addition to the above HTM built-ins, we have added built-ins for
some common extended mnemonics of the HTM instructions:

     unsigned int __builtin_tendall (void)
     unsigned int __builtin_tresume (void)
     unsigned int __builtin_tsuspend (void)

 The following set of built-in functions are available to gain access to
the HTM specific special purpose registers.

     unsigned long __builtin_get_texasr (void)
     unsigned long __builtin_get_texasru (void)
     unsigned long __builtin_get_tfhar (void)
     unsigned long __builtin_get_tfiar (void)

     void __builtin_set_texasr (unsigned long);
     void __builtin_set_texasru (unsigned long);
     void __builtin_set_tfhar (unsigned long);
     void __builtin_set_tfiar (unsigned long);

 Example usage of these low level built-in functions may look like:

     #include <htmintrin.h>

     int num_retries = 10;

     while (1)
       {
         if (__builtin_tbegin (0))
           {
             /* Transaction State Initiated.  */
             if (is_locked (lock))
               __builtin_tabort (0);
             ... transaction code...
             __builtin_tend (0);
             break;
           }
         else
           {
             /* Transaction State Failed.  Use locks if the transaction
                failure is "persistent" or we've tried too many times.  */
             if (num_retries-- <= 0
                 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ()))
               {
                 acquire_lock (lock);
                 ... non transactional fallback path...
                 release_lock (lock);
                 break;
               }
           }
       }

 One final built-in function has been added that returns the value of
the 2-bit Transaction State field of the Machine Status Register (MSR)
as stored in 'CR0'.

     unsigned long __builtin_ttest (void)

 This built-in can be used to determine the current transaction state
using the following code example:

     #include <htmintrin.h>

     unsigned char tx_state = _HTM_STATE (__builtin_ttest ());

     if (tx_state == _HTM_TRANSACTIONAL)
       {
         /* Code to use in transactional state.  */
       }
     else if (tx_state == _HTM_NONTRANSACTIONAL)
       {
         /* Code to use in non-transactional state.  */
       }
     else if (tx_state == _HTM_SUSPENDED)
       {
         /* Code to use in transaction suspended state.  */
       }

6.58.21.2 PowerPC HTM High Level Inline Functions
.................................................

The following high level HTM interface is made available by including
'<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8'
or later.  This interface is common between PowerPC and S/390, allowing
users to write one HTM source implementation that can be compiled and
executed on either system.

     long __TM_simple_begin (void)
     long __TM_begin (void* const TM_buff)
     long __TM_end (void)
     void __TM_abort (void)
     void __TM_named_abort (unsigned char const code)
     void __TM_resume (void)
     void __TM_suspend (void)

     long __TM_is_user_abort (void* const TM_buff)
     long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code)
     long __TM_is_illegal (void* const TM_buff)
     long __TM_is_footprint_exceeded (void* const TM_buff)
     long __TM_nesting_depth (void* const TM_buff)
     long __TM_is_nested_too_deep(void* const TM_buff)
     long __TM_is_conflict(void* const TM_buff)
     long __TM_is_failure_persistent(void* const TM_buff)
     long __TM_failure_address(void* const TM_buff)
     long long __TM_failure_code(void* const TM_buff)

 Using these common set of HTM inline functions, we can create a more
portable version of the HTM example in the previous section that will
work on either PowerPC or S/390:

     #include <htmxlintrin.h>

     int num_retries = 10;
     TM_buff_type TM_buff;

     while (1)
       {
         if (__TM_begin (TM_buff) == _HTM_TBEGIN_STARTED)
           {
             /* Transaction State Initiated.  */
             if (is_locked (lock))
               __TM_abort ();
             ... transaction code...
             __TM_end ();
             break;
           }
         else
           {
             /* Transaction State Failed.  Use locks if the transaction
                failure is "persistent" or we've tried too many times.  */
             if (num_retries-- <= 0
                 || __TM_is_failure_persistent (TM_buff))
               {
                 acquire_lock (lock);
                 ... non transactional fallback path...
                 release_lock (lock);
                 break;
               }
           }
       }


File: 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

6.58.22 RX Built-in Functions
-----------------------------

GCC supports some of the RX instructions which cannot be expressed in
the C programming language via the use of built-in functions.  The
following functions are supported:

 -- Built-in Function: void __builtin_rx_brk (void)
     Generates the 'brk' machine instruction.

 -- Built-in Function: void __builtin_rx_clrpsw (int)
     Generates the 'clrpsw' machine instruction to clear the specified
     bit in the processor status word.

 -- Built-in Function: void __builtin_rx_int (int)
     Generates the 'int' machine instruction to generate an interrupt
     with the specified value.

 -- Built-in Function: void __builtin_rx_machi (int, int)
     Generates the 'machi' machine instruction to add the result of
     multiplying the top 16 bits of the two arguments into the
     accumulator.

 -- Built-in Function: void __builtin_rx_maclo (int, int)
     Generates the 'maclo' machine instruction to add the result of
     multiplying the bottom 16 bits of the two arguments into the
     accumulator.

 -- Built-in Function: void __builtin_rx_mulhi (int, int)
     Generates the 'mulhi' machine instruction to place the result of
     multiplying the top 16 bits of the two arguments into the
     accumulator.

 -- Built-in Function: void __builtin_rx_mullo (int, int)
     Generates the 'mullo' machine instruction to place the result of
     multiplying the bottom 16 bits of the two arguments into the
     accumulator.

 -- Built-in Function: int __builtin_rx_mvfachi (void)
     Generates the 'mvfachi' machine instruction to read the top 32 bits
     of the accumulator.

 -- Built-in Function: int __builtin_rx_mvfacmi (void)
     Generates the 'mvfacmi' machine instruction to read the middle 32
     bits of the accumulator.

 -- Built-in Function: int __builtin_rx_mvfc (int)
     Generates the 'mvfc' machine instruction which reads the control
     register specified in its argument and returns its value.

 -- Built-in Function: void __builtin_rx_mvtachi (int)
     Generates the 'mvtachi' machine instruction to set the top 32 bits
     of the accumulator.

 -- Built-in Function: void __builtin_rx_mvtaclo (int)
     Generates the 'mvtaclo' machine instruction to set the bottom 32
     bits of the accumulator.

 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val)
     Generates the 'mvtc' machine instruction which sets control
     register number 'reg' to 'val'.

 -- Built-in Function: void __builtin_rx_mvtipl (int)
     Generates the 'mvtipl' machine instruction set the interrupt
     priority level.

 -- Built-in Function: void __builtin_rx_racw (int)
     Generates the 'racw' machine instruction to round the accumulator
     according to the specified mode.

 -- Built-in Function: int __builtin_rx_revw (int)
     Generates the 'revw' machine instruction which swaps the bytes in
     the argument so that bits 0-7 now occupy bits 8-15 and vice versa,
     and also bits 16-23 occupy bits 24-31 and vice versa.

 -- Built-in Function: void __builtin_rx_rmpa (void)
     Generates the 'rmpa' machine instruction which initiates a repeated
     multiply and accumulate sequence.

 -- Built-in Function: void __builtin_rx_round (float)
     Generates the 'round' machine instruction which returns the
     floating-point argument rounded according to the current rounding
     mode set in the floating-point status word register.

 -- Built-in Function: int __builtin_rx_sat (int)
     Generates the 'sat' machine instruction which returns the saturated
     value of the argument.

 -- Built-in Function: void __builtin_rx_setpsw (int)
     Generates the 'setpsw' machine instruction to set the specified bit
     in the processor status word.

 -- Built-in Function: void __builtin_rx_wait (void)
     Generates the 'wait' machine instruction.


File: gcc.info,  Node: S/390 System z Built-in Functions,  Next: SH Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins

6.58.23 S/390 System z Built-in Functions
-----------------------------------------

 -- Built-in Function: int __builtin_tbegin (void*)
     Generates the 'tbegin' machine instruction starting a
     non-constraint hardware transaction.  If the parameter is non-NULL
     the memory area is used to store the transaction diagnostic buffer
     and will be passed as first operand to 'tbegin'.  This buffer can
     be defined using the 'struct __htm_tdb' C struct defined in
     'htmintrin.h' and must reside on a double-word boundary.  The
     second tbegin operand is set to '0xff0c'.  This enables
     save/restore of all GPRs and disables aborts for FPR and AR
     manipulations inside the transaction body.  The condition code set
     by the tbegin instruction is returned as integer value.  The tbegin
     instruction by definition overwrites the content of all FPRs.  The
     compiler will generate code which saves and restores the FPRs.  For
     soft-float code it is recommended to used the '*_nofloat' variant.
     In order to prevent a TDB from being written it is required to pass
     an constant zero value as parameter.  Passing the zero value
     through a variable is not sufficient.  Although modifications of
     access registers inside the transaction will not trigger an
     transaction abort it is not supported to actually modify them.
     Access registers do not get saved when entering a transaction.
     They will have undefined state when reaching the abort code.

 Macros for the possible return codes of tbegin are defined in the
'htmintrin.h' header file:

'_HTM_TBEGIN_STARTED'
     'tbegin' has been executed as part of normal processing.  The
     transaction body is supposed to be executed.
'_HTM_TBEGIN_INDETERMINATE'
     The transaction was aborted due to an indeterminate condition which
     might be persistent.
'_HTM_TBEGIN_TRANSIENT'
     The transaction aborted due to a transient failure.  The
     transaction should be re-executed in that case.
'_HTM_TBEGIN_PERSISTENT'
     The transaction aborted due to a persistent failure.  Re-execution
     under same circumstances will not be productive.

 -- Macro: _HTM_FIRST_USER_ABORT_CODE
     The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies
     the first abort code which can be used for '__builtin_tabort'.
     Values below this threshold are reserved for machine use.

 -- Data type: struct __htm_tdb
     The 'struct __htm_tdb' defined in 'htmintrin.h' describes the
     structure of the transaction diagnostic block as specified in the
     Principles of Operation manual chapter 5-91.

 -- Built-in Function: int __builtin_tbegin_nofloat (void*)
     Same as '__builtin_tbegin' but without FPR saves and restores.
     Using this variant in code making use of FPRs will leave the FPRs
     in undefined state when entering the transaction abort handler
     code.

 -- Built-in Function: int __builtin_tbegin_retry (void*, int)
     In addition to '__builtin_tbegin' a loop for transient failures is
     generated.  If tbegin returns a condition code of 2 the transaction
     will be retried as often as specified in the second argument.  The
     perform processor assist instruction is used to tell the CPU about
     the number of fails so far.

 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int)
     Same as '__builtin_tbegin_retry' but without FPR saves and
     restores.  Using this variant in code making use of FPRs will leave
     the FPRs in undefined state when entering the transaction abort
     handler code.

 -- Built-in Function: void __builtin_tbeginc (void)
     Generates the 'tbeginc' machine instruction starting a constraint
     hardware transaction.  The second operand is set to '0xff08'.

 -- Built-in Function: int __builtin_tend (void)
     Generates the 'tend' machine instruction finishing a transaction
     and making the changes visible to other threads.  The condition
     code generated by tend is returned as integer value.

 -- Built-in Function: void __builtin_tabort (int)
     Generates the 'tabort' machine instruction with the specified abort
     code.  Abort codes from 0 through 255 are reserved and will result
     in an error message.

 -- Built-in Function: void __builtin_tx_assist (int)
     Generates the 'ppa rX,rY,1' machine instruction.  Where the integer
     parameter is loaded into rX and a value of zero is loaded into rY.
     The integer parameter specifies the number of times the transaction
     repeatedly aborted.

 -- Built-in Function: int __builtin_tx_nesting_depth (void)
     Generates the 'etnd' machine instruction.  The current nesting
     depth is returned as integer value.  For a nesting depth of 0 the
     code is not executed as part of an transaction.

 -- Built-in Function: void __builtin_non_tx_store (uint64_t *,
          uint64_t)

     Generates the 'ntstg' machine instruction.  The second argument is
     written to the first arguments location.  The store operation will
     not be rolled-back in case of an transaction abort.


File: gcc.info,  Node: SH Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: S/390 System z Built-in Functions,  Up: Target Builtins

6.58.24 SH Built-in Functions
-----------------------------

The following built-in functions are supported on the SH1, SH2, SH3 and
SH4 families of processors:

 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR)
     Sets the 'GBR' register to the specified value PTR.  This is
     usually used by system code that manages threads and execution
     contexts.  The compiler normally does not generate code that
     modifies the contents of 'GBR' and thus the value is preserved
     across function calls.  Changing the 'GBR' value in user code must
     be done with caution, since the compiler might use 'GBR' in order
     to access thread local variables.

 -- Built-in Function: void * __builtin_thread_pointer (void)
     Returns the value that is currently set in the 'GBR' register.
     Memory loads and stores that use the thread pointer as a base
     address are turned into 'GBR' based displacement loads and stores,
     if possible.  For example:
          struct my_tcb
          {
             int a, b, c, d, e;
          };

          int get_tcb_value (void)
          {
            // Generate 'mov.l @(8,gbr),r0' instruction
            return ((my_tcb*)__builtin_thread_pointer ())->c;
          }


 -- Built-in Function: unsigned int __builtin_sh_get_fpscr (void)
     Returns the value that is currently set in the 'FPSCR' register.

 -- Built-in Function: void __builtin_sh_set_fpscr (unsigned int VAL)
     Sets the 'FPSCR' register to the specified value VAL, while
     preserving the current values of the FR, SZ and PR bits.


File: gcc.info,  Node: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: SH Built-in Functions,  Up: Target Builtins

6.58.25 SPARC VIS Built-in Functions
------------------------------------

GCC supports SIMD operations on the SPARC using both the generic vector
extensions (*note Vector Extensions::) as well as built-in functions for
the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch,
the VIS extension is exposed as the following built-in functions:

     typedef int v1si __attribute__ ((vector_size (4)));
     typedef int v2si __attribute__ ((vector_size (8)));
     typedef short v4hi __attribute__ ((vector_size (8)));
     typedef short v2hi __attribute__ ((vector_size (4)));
     typedef unsigned char v8qi __attribute__ ((vector_size (8)));
     typedef unsigned char v4qi __attribute__ ((vector_size (4)));

     void __builtin_vis_write_gsr (int64_t);
     int64_t __builtin_vis_read_gsr (void);

     void * __builtin_vis_alignaddr (void *, long);
     void * __builtin_vis_alignaddrl (void *, long);
     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
     v2si __builtin_vis_faligndatav2si (v2si, v2si);
     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);

     v4hi __builtin_vis_fexpand (v4qi);

     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
     v4hi __builtin_vis_fmul8x16au (v4qi, v2hi);
     v4hi __builtin_vis_fmul8x16al (v4qi, v2hi);
     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);

     v4qi __builtin_vis_fpack16 (v4hi);
     v8qi __builtin_vis_fpack32 (v2si, v8qi);
     v2hi __builtin_vis_fpackfix (v2si);
     v8qi __builtin_vis_fpmerge (v4qi, v4qi);

     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);

     long __builtin_vis_edge8 (void *, void *);
     long __builtin_vis_edge8l (void *, void *);
     long __builtin_vis_edge16 (void *, void *);
     long __builtin_vis_edge16l (void *, void *);
     long __builtin_vis_edge32 (void *, void *);
     long __builtin_vis_edge32l (void *, void *);

     long __builtin_vis_fcmple16 (v4hi, v4hi);
     long __builtin_vis_fcmple32 (v2si, v2si);
     long __builtin_vis_fcmpne16 (v4hi, v4hi);
     long __builtin_vis_fcmpne32 (v2si, v2si);
     long __builtin_vis_fcmpgt16 (v4hi, v4hi);
     long __builtin_vis_fcmpgt32 (v2si, v2si);
     long __builtin_vis_fcmpeq16 (v4hi, v4hi);
     long __builtin_vis_fcmpeq32 (v2si, v2si);

     v4hi __builtin_vis_fpadd16 (v4hi, v4hi);
     v2hi __builtin_vis_fpadd16s (v2hi, v2hi);
     v2si __builtin_vis_fpadd32 (v2si, v2si);
     v1si __builtin_vis_fpadd32s (v1si, v1si);
     v4hi __builtin_vis_fpsub16 (v4hi, v4hi);
     v2hi __builtin_vis_fpsub16s (v2hi, v2hi);
     v2si __builtin_vis_fpsub32 (v2si, v2si);
     v1si __builtin_vis_fpsub32s (v1si, v1si);

     long __builtin_vis_array8 (long, long);
     long __builtin_vis_array16 (long, long);
     long __builtin_vis_array32 (long, long);

 When you use the '-mvis2' switch, the VIS version 2.0 built-in
functions also become available:

     long __builtin_vis_bmask (long, long);
     int64_t __builtin_vis_bshuffledi (int64_t, int64_t);
     v2si __builtin_vis_bshufflev2si (v2si, v2si);
     v4hi __builtin_vis_bshufflev2si (v4hi, v4hi);
     v8qi __builtin_vis_bshufflev2si (v8qi, v8qi);

     long __builtin_vis_edge8n (void *, void *);
     long __builtin_vis_edge8ln (void *, void *);
     long __builtin_vis_edge16n (void *, void *);
     long __builtin_vis_edge16ln (void *, void *);
     long __builtin_vis_edge32n (void *, void *);
     long __builtin_vis_edge32ln (void *, void *);

 When you use the '-mvis3' switch, the VIS version 3.0 built-in
functions also become available:

     void __builtin_vis_cmask8 (long);
     void __builtin_vis_cmask16 (long);
     void __builtin_vis_cmask32 (long);

     v4hi __builtin_vis_fchksm16 (v4hi, v4hi);

     v4hi __builtin_vis_fsll16 (v4hi, v4hi);
     v4hi __builtin_vis_fslas16 (v4hi, v4hi);
     v4hi __builtin_vis_fsrl16 (v4hi, v4hi);
     v4hi __builtin_vis_fsra16 (v4hi, v4hi);
     v2si __builtin_vis_fsll16 (v2si, v2si);
     v2si __builtin_vis_fslas16 (v2si, v2si);
     v2si __builtin_vis_fsrl16 (v2si, v2si);
     v2si __builtin_vis_fsra16 (v2si, v2si);

     long __builtin_vis_pdistn (v8qi, v8qi);

     v4hi __builtin_vis_fmean16 (v4hi, v4hi);

     int64_t __builtin_vis_fpadd64 (int64_t, int64_t);
     int64_t __builtin_vis_fpsub64 (int64_t, int64_t);

     v4hi __builtin_vis_fpadds16 (v4hi, v4hi);
     v2hi __builtin_vis_fpadds16s (v2hi, v2hi);
     v4hi __builtin_vis_fpsubs16 (v4hi, v4hi);
     v2hi __builtin_vis_fpsubs16s (v2hi, v2hi);
     v2si __builtin_vis_fpadds32 (v2si, v2si);
     v1si __builtin_vis_fpadds32s (v1si, v1si);
     v2si __builtin_vis_fpsubs32 (v2si, v2si);
     v1si __builtin_vis_fpsubs32s (v1si, v1si);

     long __builtin_vis_fucmple8 (v8qi, v8qi);
     long __builtin_vis_fucmpne8 (v8qi, v8qi);
     long __builtin_vis_fucmpgt8 (v8qi, v8qi);
     long __builtin_vis_fucmpeq8 (v8qi, v8qi);

     float __builtin_vis_fhadds (float, float);
     double __builtin_vis_fhaddd (double, double);
     float __builtin_vis_fhsubs (float, float);
     double __builtin_vis_fhsubd (double, double);
     float __builtin_vis_fnhadds (float, float);
     double __builtin_vis_fnhaddd (double, double);

     int64_t __builtin_vis_umulxhi (int64_t, int64_t);
     int64_t __builtin_vis_xmulx (int64_t, int64_t);
     int64_t __builtin_vis_xmulxhi (int64_t, int64_t);


File: gcc.info,  Node: SPU Built-in Functions,  Next: TI C6X Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins

6.58.26 SPU Built-in Functions
------------------------------

GCC provides extensions for the SPU processor as described in the
Sony/Toshiba/IBM SPU Language Extensions Specification, which can be
found at <http://cell.scei.co.jp/> or
<http://www.ibm.com/developerworks/power/cell/>.  GCC's implementation
differs in several ways.

   * The optional extension of specifying vector constants in
     parentheses is not supported.

   * A vector initializer requires no cast if the vector constant is of
     the same type as the variable it is initializing.

   * If 'signed' or 'unsigned' is omitted, the signedness of the vector
     type is the default signedness of the base type.  The default
     varies depending on the operating system, so a portable program
     should always specify the signedness.

   * By default, the keyword '__vector' is added.  The macro 'vector' is
     defined in '<spu_intrinsics.h>' and can be undefined.

   * GCC allows using a 'typedef' name as the type specifier for a
     vector type.

   * For C, overloaded functions are implemented with macros so the
     following does not work:

            spu_add ((vector signed int){1, 2, 3, 4}, foo);

     Since 'spu_add' is a macro, the vector constant in the example is
     treated as four separate arguments.  Wrap the entire argument in
     parentheses for this to work.

   * The extended version of '__builtin_expect' is not supported.

 _Note:_ Only the interface described in the aforementioned
specification is supported.  Internally, GCC uses built-in functions to
implement the required functionality, but these are not supported and
are subject to change without notice.


File: gcc.info,  Node: TI C6X Built-in Functions,  Next: TILE-Gx Built-in Functions,  Prev: SPU Built-in Functions,  Up: Target Builtins

6.58.27 TI C6X Built-in Functions
---------------------------------

GCC provides intrinsics to access certain instructions of the TI C6X
processors.  These intrinsics, listed below, are available after
inclusion of the 'c6x_intrinsics.h' header file.  They map directly to
C6X instructions.


     int _sadd (int, int)
     int _ssub (int, int)
     int _sadd2 (int, int)
     int _ssub2 (int, int)
     long long _mpy2 (int, int)
     long long _smpy2 (int, int)
     int _add4 (int, int)
     int _sub4 (int, int)
     int _saddu4 (int, int)

     int _smpy (int, int)
     int _smpyh (int, int)
     int _smpyhl (int, int)
     int _smpylh (int, int)

     int _sshl (int, int)
     int _subc (int, int)

     int _avg2 (int, int)
     int _avgu4 (int, int)

     int _clrr (int, int)
     int _extr (int, int)
     int _extru (int, int)
     int _abs (int)
     int _abs2 (int)



File: gcc.info,  Node: TILE-Gx Built-in Functions,  Next: TILEPro Built-in Functions,  Prev: TI C6X Built-in Functions,  Up: Target Builtins

6.58.28 TILE-Gx Built-in Functions
----------------------------------

GCC provides intrinsics to access every instruction of the TILE-Gx
processor.  The intrinsics are of the form:


     unsigned long long __insn_OP (...)


 Where OP is the name of the instruction.  Refer to the ISA manual for
the complete list of instructions.

 GCC also provides intrinsics to directly access the network registers.
The intrinsics are:


     unsigned long long __tile_idn0_receive (void)
     unsigned long long __tile_idn1_receive (void)
     unsigned long long __tile_udn0_receive (void)
     unsigned long long __tile_udn1_receive (void)
     unsigned long long __tile_udn2_receive (void)
     unsigned long long __tile_udn3_receive (void)
     void __tile_idn_send (unsigned long long)
     void __tile_udn_send (unsigned long long)


 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
that no network operations before it are reordered with those after it.


File: gcc.info,  Node: TILEPro Built-in Functions,  Next: x86 Built-in Functions,  Prev: TILE-Gx Built-in Functions,  Up: Target Builtins

6.58.29 TILEPro Built-in Functions
----------------------------------

GCC provides intrinsics to access every instruction of the TILEPro
processor.  The intrinsics are of the form:


     unsigned __insn_OP (...)


where OP is the name of the instruction.  Refer to the ISA manual for
the complete list of instructions.

 GCC also provides intrinsics to directly access the network registers.
The intrinsics are:


     unsigned __tile_idn0_receive (void)
     unsigned __tile_idn1_receive (void)
     unsigned __tile_sn_receive (void)
     unsigned __tile_udn0_receive (void)
     unsigned __tile_udn1_receive (void)
     unsigned __tile_udn2_receive (void)
     unsigned __tile_udn3_receive (void)
     void __tile_idn_send (unsigned)
     void __tile_sn_send (unsigned)
     void __tile_udn_send (unsigned)


 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee
that no network operations before it are reordered with those after it.


File: gcc.info,  Node: x86 Built-in Functions,  Next: x86 transactional memory intrinsics,  Prev: TILEPro Built-in Functions,  Up: Target Builtins

6.58.30 x86 Built-in Functions
------------------------------

These built-in functions are available for the x86-32 and x86-64 family
of computers, depending on the command-line switches used.

 If you specify command-line switches such as '-msse', the compiler
could use the extended instruction sets even if the built-ins are not
used explicitly in the program.  For this reason, applications that
perform run-time CPU detection must compile separate files for each
supported architecture, using the appropriate flags.  In particular, the
file containing the CPU detection code should be compiled without these
options.

 The following machine modes are available for use with MMX built-in
functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit
integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a
vector of eight 8-bit integers.  Some of the built-in functions operate
on MMX registers as a whole 64-bit entity, these use 'V1DI' as their
mode.

 If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector
of two 32-bit floating-point values.

 If SSE extensions are enabled, 'V4SF' is used for a vector of four
32-bit floating-point values.  Some instructions use a vector of four
32-bit integers, these use 'V4SI'.  Finally, some instructions operate
on an entire vector register, interpreting it as a 128-bit integer,
these use mode 'TI'.

 In 64-bit mode, the x86-64 family of processors uses additional
built-in functions for efficient use of 'TF' ('__float128') 128-bit
floating point and 'TC' 128-bit complex floating-point values.

 The following floating-point built-in functions are available in 64-bit
mode.  All of them implement the function that is part of the name.

     __float128 __builtin_fabsq (__float128)
     __float128 __builtin_copysignq (__float128, __float128)

 The following built-in function is always available.

'void __builtin_ia32_pause (void)'
     Generates the 'pause' machine instruction with a compiler memory
     barrier.

 The following floating-point built-in functions are made available in
the 64-bit mode.

'__float128 __builtin_infq (void)'
     Similar to '__builtin_inf', except the return type is '__float128'.

'__float128 __builtin_huge_valq (void)'
     Similar to '__builtin_huge_val', except the return type is
     '__float128'.

 The following built-in functions are always available and can be used
to check the target platform type.

 -- Built-in Function: void __builtin_cpu_init (void)
     This function runs the CPU detection code to check the type of CPU
     and the features supported.  This built-in function needs to be
     invoked along with the built-in functions to check CPU type and
     features, '__builtin_cpu_is' and '__builtin_cpu_supports', only
     when used in a function that is executed before any constructors
     are called.  The CPU detection code is automatically executed in a
     very high priority constructor.

     For example, this function has to be used in 'ifunc' resolvers that
     check for CPU type using the built-in functions '__builtin_cpu_is'
     and '__builtin_cpu_supports', or in constructors on targets that
     don't support constructor priority.

          static void (*resolve_memcpy (void)) (void)
          {
            // ifunc resolvers fire before constructors, explicitly call the init
            // function.
            __builtin_cpu_init ();
            if (__builtin_cpu_supports ("ssse3"))
              return ssse3_memcpy; // super fast memcpy with ssse3 instructions.
            else
              return default_memcpy;
          }

          void *memcpy (void *, const void *, size_t)
               __attribute__ ((ifunc ("resolve_memcpy")));

 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME)
     This function returns a positive integer if the run-time CPU is of
     type CPUNAME and returns '0' otherwise.  The following CPU names
     can be detected:

     'intel'
          Intel CPU.

     'atom'
          Intel Atom CPU.

     'core2'
          Intel Core 2 CPU.

     'corei7'
          Intel Core i7 CPU.

     'nehalem'
          Intel Core i7 Nehalem CPU.

     'westmere'
          Intel Core i7 Westmere CPU.

     'sandybridge'
          Intel Core i7 Sandy Bridge CPU.

     'amd'
          AMD CPU.

     'amdfam10h'
          AMD Family 10h CPU.

     'barcelona'
          AMD Family 10h Barcelona CPU.

     'shanghai'
          AMD Family 10h Shanghai CPU.

     'istanbul'
          AMD Family 10h Istanbul CPU.

     'btver1'
          AMD Family 14h CPU.

     'amdfam15h'
          AMD Family 15h CPU.

     'bdver1'
          AMD Family 15h Bulldozer version 1.

     'bdver2'
          AMD Family 15h Bulldozer version 2.

     'bdver3'
          AMD Family 15h Bulldozer version 3.

     'bdver4'
          AMD Family 15h Bulldozer version 4.

     'btver2'
          AMD Family 16h CPU.

     Here is an example:
          if (__builtin_cpu_is ("corei7"))
            {
               do_corei7 (); // Core i7 specific implementation.
            }
          else
            {
               do_generic (); // Generic implementation.
            }

 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE)
     This function returns a positive integer if the run-time CPU
     supports FEATURE and returns '0' otherwise.  The following features
     can be detected:

     'cmov'
          CMOV instruction.
     'mmx'
          MMX instructions.
     'popcnt'
          POPCNT instruction.
     'sse'
          SSE instructions.
     'sse2'
          SSE2 instructions.
     'sse3'
          SSE3 instructions.
     'ssse3'
          SSSE3 instructions.
     'sse4.1'
          SSE4.1 instructions.
     'sse4.2'
          SSE4.2 instructions.
     'avx'
          AVX instructions.
     'avx2'
          AVX2 instructions.
     'avx512f'
          AVX512F instructions.

     Here is an example:
          if (__builtin_cpu_supports ("popcnt"))
            {
               asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc");
            }
          else
            {
               count = generic_countbits (n); //generic implementation.
            }

 The following built-in functions are made available by '-mmmx'.  All of
them generate the machine instruction that is part of the name.

     v8qi __builtin_ia32_paddb (v8qi, v8qi)
     v4hi __builtin_ia32_paddw (v4hi, v4hi)
     v2si __builtin_ia32_paddd (v2si, v2si)
     v8qi __builtin_ia32_psubb (v8qi, v8qi)
     v4hi __builtin_ia32_psubw (v4hi, v4hi)
     v2si __builtin_ia32_psubd (v2si, v2si)
     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
     di __builtin_ia32_pand (di, di)
     di __builtin_ia32_pandn (di,di)
     di __builtin_ia32_por (di, di)
     di __builtin_ia32_pxor (di, di)
     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
     v2si __builtin_ia32_punpckhdq (v2si, v2si)
     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
     v2si __builtin_ia32_punpckldq (v2si, v2si)
     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
     v4hi __builtin_ia32_packssdw (v2si, v2si)
     v8qi __builtin_ia32_packuswb (v4hi, v4hi)

     v4hi __builtin_ia32_psllw (v4hi, v4hi)
     v2si __builtin_ia32_pslld (v2si, v2si)
     v1di __builtin_ia32_psllq (v1di, v1di)
     v4hi __builtin_ia32_psrlw (v4hi, v4hi)
     v2si __builtin_ia32_psrld (v2si, v2si)
     v1di __builtin_ia32_psrlq (v1di, v1di)
     v4hi __builtin_ia32_psraw (v4hi, v4hi)
     v2si __builtin_ia32_psrad (v2si, v2si)
     v4hi __builtin_ia32_psllwi (v4hi, int)
     v2si __builtin_ia32_pslldi (v2si, int)
     v1di __builtin_ia32_psllqi (v1di, int)
     v4hi __builtin_ia32_psrlwi (v4hi, int)
     v2si __builtin_ia32_psrldi (v2si, int)
     v1di __builtin_ia32_psrlqi (v1di, int)
     v4hi __builtin_ia32_psrawi (v4hi, int)
     v2si __builtin_ia32_psradi (v2si, int)


 The following built-in functions are made available either with
'-msse', or with a combination of '-m3dnow' and '-march=athlon'.  All of
them generate the machine instruction that is part of the name.

     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
     v1di __builtin_ia32_psadbw (v8qi, v8qi)
     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
     v8qi __builtin_ia32_pminub (v8qi, v8qi)
     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
     int __builtin_ia32_pmovmskb (v8qi)
     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
     void __builtin_ia32_movntq (di *, di)
     void __builtin_ia32_sfence (void)

 The following built-in functions are available when '-msse' is used.
All of them generate the machine instruction that is part of the name.

     int __builtin_ia32_comieq (v4sf, v4sf)
     int __builtin_ia32_comineq (v4sf, v4sf)
     int __builtin_ia32_comilt (v4sf, v4sf)
     int __builtin_ia32_comile (v4sf, v4sf)
     int __builtin_ia32_comigt (v4sf, v4sf)
     int __builtin_ia32_comige (v4sf, v4sf)
     int __builtin_ia32_ucomieq (v4sf, v4sf)
     int __builtin_ia32_ucomineq (v4sf, v4sf)
     int __builtin_ia32_ucomilt (v4sf, v4sf)
     int __builtin_ia32_ucomile (v4sf, v4sf)
     int __builtin_ia32_ucomigt (v4sf, v4sf)
     int __builtin_ia32_ucomige (v4sf, v4sf)
     v4sf __builtin_ia32_addps (v4sf, v4sf)
     v4sf __builtin_ia32_subps (v4sf, v4sf)
     v4sf __builtin_ia32_mulps (v4sf, v4sf)
     v4sf __builtin_ia32_divps (v4sf, v4sf)
     v4sf __builtin_ia32_addss (v4sf, v4sf)
     v4sf __builtin_ia32_subss (v4sf, v4sf)
     v4sf __builtin_ia32_mulss (v4sf, v4sf)
     v4sf __builtin_ia32_divss (v4sf, v4sf)
     v4sf __builtin_ia32_cmpeqps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpltps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpleps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpgtps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpgeps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpunordps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpneqps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpnltps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpnleps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpngtps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpngeps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpordps (v4sf, v4sf)
     v4sf __builtin_ia32_cmpeqss (v4sf, v4sf)
     v4sf __builtin_ia32_cmpltss (v4sf, v4sf)
     v4sf __builtin_ia32_cmpless (v4sf, v4sf)
     v4sf __builtin_ia32_cmpunordss (v4sf, v4sf)
     v4sf __builtin_ia32_cmpneqss (v4sf, v4sf)
     v4sf __builtin_ia32_cmpnltss (v4sf, v4sf)
     v4sf __builtin_ia32_cmpnless (v4sf, v4sf)
     v4sf __builtin_ia32_cmpordss (v4sf, v4sf)
     v4sf __builtin_ia32_maxps (v4sf, v4sf)
     v4sf __builtin_ia32_maxss (v4sf, v4sf)
     v4sf __builtin_ia32_minps (v4sf, v4sf)
     v4sf __builtin_ia32_minss (v4sf, v4sf)
     v4sf __builtin_ia32_andps (v4sf, v4sf)
     v4sf __builtin_ia32_andnps (v4sf, v4sf)
     v4sf __builtin_ia32_orps (v4sf, v4sf)
     v4sf __builtin_ia32_xorps (v4sf, v4sf)
     v4sf __builtin_ia32_movss (v4sf, v4sf)
     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
     v2si __builtin_ia32_cvtps2pi (v4sf)
     int __builtin_ia32_cvtss2si (v4sf)
     v2si __builtin_ia32_cvttps2pi (v4sf)
     int __builtin_ia32_cvttss2si (v4sf)
     v4sf __builtin_ia32_rcpps (v4sf)
     v4sf __builtin_ia32_rsqrtps (v4sf)
     v4sf __builtin_ia32_sqrtps (v4sf)
     v4sf __builtin_ia32_rcpss (v4sf)
     v4sf __builtin_ia32_rsqrtss (v4sf)
     v4sf __builtin_ia32_sqrtss (v4sf)
     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
     void __builtin_ia32_movntps (float *, v4sf)
     int __builtin_ia32_movmskps (v4sf)

 The following built-in functions are available when '-msse' is used.

'v4sf __builtin_ia32_loadups (float *)'
     Generates the 'movups' machine instruction as a load from memory.
'void __builtin_ia32_storeups (float *, v4sf)'
     Generates the 'movups' machine instruction as a store to memory.
'v4sf __builtin_ia32_loadss (float *)'
     Generates the 'movss' machine instruction as a load from memory.
'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)'
     Generates the 'movhps' machine instruction as a load from memory.
'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)'
     Generates the 'movlps' machine instruction as a load from memory
'void __builtin_ia32_storehps (v2sf *, v4sf)'
     Generates the 'movhps' machine instruction as a store to memory.
'void __builtin_ia32_storelps (v2sf *, v4sf)'
     Generates the 'movlps' machine instruction as a store to memory.

 The following built-in functions are available when '-msse2' is used.
All of them generate the machine instruction that is part of the name.

     int __builtin_ia32_comisdeq (v2df, v2df)
     int __builtin_ia32_comisdlt (v2df, v2df)
     int __builtin_ia32_comisdle (v2df, v2df)
     int __builtin_ia32_comisdgt (v2df, v2df)
     int __builtin_ia32_comisdge (v2df, v2df)
     int __builtin_ia32_comisdneq (v2df, v2df)
     int __builtin_ia32_ucomisdeq (v2df, v2df)
     int __builtin_ia32_ucomisdlt (v2df, v2df)
     int __builtin_ia32_ucomisdle (v2df, v2df)
     int __builtin_ia32_ucomisdgt (v2df, v2df)
     int __builtin_ia32_ucomisdge (v2df, v2df)
     int __builtin_ia32_ucomisdneq (v2df, v2df)
     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
     v2df __builtin_ia32_cmpltpd (v2df, v2df)
     v2df __builtin_ia32_cmplepd (v2df, v2df)
     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
     v2df __builtin_ia32_cmpgepd (v2df, v2df)
     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
     v2df __builtin_ia32_cmpngepd (v2df, v2df)
     v2df __builtin_ia32_cmpordpd (v2df, v2df)
     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
     v2df __builtin_ia32_cmpltsd (v2df, v2df)
     v2df __builtin_ia32_cmplesd (v2df, v2df)
     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
     v2df __builtin_ia32_cmpordsd (v2df, v2df)
     v2di __builtin_ia32_paddq (v2di, v2di)
     v2di __builtin_ia32_psubq (v2di, v2di)
     v2df __builtin_ia32_addpd (v2df, v2df)
     v2df __builtin_ia32_subpd (v2df, v2df)
     v2df __builtin_ia32_mulpd (v2df, v2df)
     v2df __builtin_ia32_divpd (v2df, v2df)
     v2df __builtin_ia32_addsd (v2df, v2df)
     v2df __builtin_ia32_subsd (v2df, v2df)
     v2df __builtin_ia32_mulsd (v2df, v2df)
     v2df __builtin_ia32_divsd (v2df, v2df)
     v2df __builtin_ia32_minpd (v2df, v2df)
     v2df __builtin_ia32_maxpd (v2df, v2df)
     v2df __builtin_ia32_minsd (v2df, v2df)
     v2df __builtin_ia32_maxsd (v2df, v2df)
     v2df __builtin_ia32_andpd (v2df, v2df)
     v2df __builtin_ia32_andnpd (v2df, v2df)
     v2df __builtin_ia32_orpd (v2df, v2df)
     v2df __builtin_ia32_xorpd (v2df, v2df)
     v2df __builtin_ia32_movsd (v2df, v2df)
     v2df __builtin_ia32_unpckhpd (v2df, v2df)
     v2df __builtin_ia32_unpcklpd (v2df, v2df)
     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
     v4si __builtin_ia32_paddd128 (v4si, v4si)
     v2di __builtin_ia32_paddq128 (v2di, v2di)
     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
     v4si __builtin_ia32_psubd128 (v4si, v4si)
     v2di __builtin_ia32_psubq128 (v2di, v2di)
     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
     v2di __builtin_ia32_pand128 (v2di, v2di)
     v2di __builtin_ia32_pandn128 (v2di, v2di)
     v2di __builtin_ia32_por128 (v2di, v2di)
     v2di __builtin_ia32_pxor128 (v2di, v2di)
     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
     v2df __builtin_ia32_loadupd (double *)
     void __builtin_ia32_storeupd (double *, v2df)
     v2df __builtin_ia32_loadhpd (v2df, double const *)
     v2df __builtin_ia32_loadlpd (v2df, double const *)
     int __builtin_ia32_movmskpd (v2df)
     int __builtin_ia32_pmovmskb128 (v16qi)
     void __builtin_ia32_movnti (int *, int)
     void __builtin_ia32_movnti64 (long long int *, long long int)
     void __builtin_ia32_movntpd (double *, v2df)
     void __builtin_ia32_movntdq (v2df *, v2df)
     v4si __builtin_ia32_pshufd (v4si, int)
     v8hi __builtin_ia32_pshuflw (v8hi, int)
     v8hi __builtin_ia32_pshufhw (v8hi, int)
     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
     v2df __builtin_ia32_sqrtpd (v2df)
     v2df __builtin_ia32_sqrtsd (v2df)
     v2df __builtin_ia32_shufpd (v2df, v2df, int)
     v2df __builtin_ia32_cvtdq2pd (v4si)
     v4sf __builtin_ia32_cvtdq2ps (v4si)
     v4si __builtin_ia32_cvtpd2dq (v2df)
     v2si __builtin_ia32_cvtpd2pi (v2df)
     v4sf __builtin_ia32_cvtpd2ps (v2df)
     v4si __builtin_ia32_cvttpd2dq (v2df)
     v2si __builtin_ia32_cvttpd2pi (v2df)
     v2df __builtin_ia32_cvtpi2pd (v2si)
     int __builtin_ia32_cvtsd2si (v2df)
     int __builtin_ia32_cvttsd2si (v2df)
     long long __builtin_ia32_cvtsd2si64 (v2df)
     long long __builtin_ia32_cvttsd2si64 (v2df)
     v4si __builtin_ia32_cvtps2dq (v4sf)
     v2df __builtin_ia32_cvtps2pd (v4sf)
     v4si __builtin_ia32_cvttps2dq (v4sf)
     v2df __builtin_ia32_cvtsi2sd (v2df, int)
     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
     void __builtin_ia32_clflush (const void *)
     void __builtin_ia32_lfence (void)
     void __builtin_ia32_mfence (void)
     v16qi __builtin_ia32_loaddqu (const char *)
     void __builtin_ia32_storedqu (char *, v16qi)
     v1di __builtin_ia32_pmuludq (v2si, v2si)
     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
     v4si __builtin_ia32_pslld128 (v4si, v4si)
     v2di __builtin_ia32_psllq128 (v2di, v2di)
     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
     v4si __builtin_ia32_psrld128 (v4si, v4si)
     v2di __builtin_ia32_psrlq128 (v2di, v2di)
     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
     v4si __builtin_ia32_psrad128 (v4si, v4si)
     v2di __builtin_ia32_pslldqi128 (v2di, int)
     v8hi __builtin_ia32_psllwi128 (v8hi, int)
     v4si __builtin_ia32_pslldi128 (v4si, int)
     v2di __builtin_ia32_psllqi128 (v2di, int)
     v2di __builtin_ia32_psrldqi128 (v2di, int)
     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
     v4si __builtin_ia32_psrldi128 (v4si, int)
     v2di __builtin_ia32_psrlqi128 (v2di, int)
     v8hi __builtin_ia32_psrawi128 (v8hi, int)
     v4si __builtin_ia32_psradi128 (v4si, int)
     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
     v2di __builtin_ia32_movq128 (v2di)

 The following built-in functions are available when '-msse3' is used.
All of them generate the machine instruction that is part of the name.

     v2df __builtin_ia32_addsubpd (v2df, v2df)
     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
     v2df __builtin_ia32_haddpd (v2df, v2df)
     v4sf __builtin_ia32_haddps (v4sf, v4sf)
     v2df __builtin_ia32_hsubpd (v2df, v2df)
     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
     v16qi __builtin_ia32_lddqu (char const *)
     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
     v4sf __builtin_ia32_movshdup (v4sf)
     v4sf __builtin_ia32_movsldup (v4sf)
     void __builtin_ia32_mwait (unsigned int, unsigned int)

 The following built-in functions are available when '-mssse3' is used.
All of them generate the machine instruction that is part of the name.

     v2si __builtin_ia32_phaddd (v2si, v2si)
     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
     v2si __builtin_ia32_phsubd (v2si, v2si)
     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
     v8qi __builtin_ia32_psignb (v8qi, v8qi)
     v2si __builtin_ia32_psignd (v2si, v2si)
     v4hi __builtin_ia32_psignw (v4hi, v4hi)
     v1di __builtin_ia32_palignr (v1di, v1di, int)
     v8qi __builtin_ia32_pabsb (v8qi)
     v2si __builtin_ia32_pabsd (v2si)
     v4hi __builtin_ia32_pabsw (v4hi)

 The following built-in functions are available when '-mssse3' is used.
All of them generate the machine instruction that is part of the name.

     v4si __builtin_ia32_phaddd128 (v4si, v4si)
     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
     v4si __builtin_ia32_phsubd128 (v4si, v4si)
     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
     v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
     v4si __builtin_ia32_psignd128 (v4si, v4si)
     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
     v16qi __builtin_ia32_pabsb128 (v16qi)
     v4si __builtin_ia32_pabsd128 (v4si)
     v8hi __builtin_ia32_pabsw128 (v8hi)

 The following built-in functions are available when '-msse4.1' is used.
All of them generate the machine instruction that is part of the name.

     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_dppd (v2df, v2df, const int)
     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
     v2di __builtin_ia32_movntdqa (v2di *);
     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
     v8hi __builtin_ia32_phminposuw128 (v8hi)
     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
     v4si __builtin_ia32_pminsd128 (v4si, v4si)
     v4si __builtin_ia32_pminud128 (v4si, v4si)
     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
     v4si __builtin_ia32_pmovsxbd128 (v16qi)
     v2di __builtin_ia32_pmovsxbq128 (v16qi)
     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
     v2di __builtin_ia32_pmovsxdq128 (v4si)
     v4si __builtin_ia32_pmovsxwd128 (v8hi)
     v2di __builtin_ia32_pmovsxwq128 (v8hi)
     v4si __builtin_ia32_pmovzxbd128 (v16qi)
     v2di __builtin_ia32_pmovzxbq128 (v16qi)
     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
     v2di __builtin_ia32_pmovzxdq128 (v4si)
     v4si __builtin_ia32_pmovzxwd128 (v8hi)
     v2di __builtin_ia32_pmovzxwq128 (v8hi)
     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
     v4si __builtin_ia32_pmulld128 (v4si, v4si)
     int __builtin_ia32_ptestc128 (v2di, v2di)
     int __builtin_ia32_ptestnzc128 (v2di, v2di)
     int __builtin_ia32_ptestz128 (v2di, v2di)
     v2df __builtin_ia32_roundpd (v2df, const int)
     v4sf __builtin_ia32_roundps (v4sf, const int)
     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)

 The following built-in functions are available when '-msse4.1' is used.

'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)'
     Generates the 'insertps' machine instruction.
'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)'
     Generates the 'pextrb' machine instruction.
'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)'
     Generates the 'pinsrb' machine instruction.
'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)'
     Generates the 'pinsrd' machine instruction.
'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)'
     Generates the 'pinsrq' machine instruction in 64bit mode.

 The following built-in functions are changed to generate new SSE4.1
instructions when '-msse4.1' is used.

'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)'
     Generates the 'extractps' machine instruction.
'int __builtin_ia32_vec_ext_v4si (v4si, const int)'
     Generates the 'pextrd' machine instruction.
'long long __builtin_ia32_vec_ext_v2di (v2di, const int)'
     Generates the 'pextrq' machine instruction in 64bit mode.

 The following built-in functions are available when '-msse4.2' is used.
All of them generate the machine instruction that is part of the name.

     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
     v2di __builtin_ia32_pcmpgtq (v2di, v2di)

 The following built-in functions are available when '-msse4.2' is used.

'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)'
     Generates the 'crc32b' machine instruction.
'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)'
     Generates the 'crc32w' machine instruction.
'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)'
     Generates the 'crc32l' machine instruction.
'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)'
     Generates the 'crc32q' machine instruction.

 The following built-in functions are changed to generate new SSE4.2
instructions when '-msse4.2' is used.

'int __builtin_popcount (unsigned int)'
     Generates the 'popcntl' machine instruction.
'int __builtin_popcountl (unsigned long)'
     Generates the 'popcntl' or 'popcntq' machine instruction, depending
     on the size of 'unsigned long'.
'int __builtin_popcountll (unsigned long long)'
     Generates the 'popcntq' machine instruction.

 The following built-in functions are available when '-mavx' is used.
All of them generate the machine instruction that is part of the name.

     v4df __builtin_ia32_addpd256 (v4df,v4df)
     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
     v4df __builtin_ia32_andnpd256 (v4df,v4df)
     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
     v4df __builtin_ia32_andpd256 (v4df,v4df)
     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
     v2df __builtin_ia32_cmppd (v2df,v2df,int)
     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
     v4df __builtin_ia32_cvtdq2pd256 (v4si)
     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
     v4si __builtin_ia32_cvtpd2dq256 (v4df)
     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
     v8si __builtin_ia32_cvtps2dq256 (v8sf)
     v4df __builtin_ia32_cvtps2pd256 (v4sf)
     v4si __builtin_ia32_cvttpd2dq256 (v4df)
     v8si __builtin_ia32_cvttps2dq256 (v8sf)
     v4df __builtin_ia32_divpd256 (v4df,v4df)
     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
     v4df __builtin_ia32_haddpd256 (v4df,v4df)
     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
     v32qi __builtin_ia32_lddqu256 (pcchar)
     v32qi __builtin_ia32_loaddqu256 (pcchar)
     v4df __builtin_ia32_loadupd256 (pcdouble)
     v8sf __builtin_ia32_loadups256 (pcfloat)
     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
     v4df __builtin_ia32_maxpd256 (v4df,v4df)
     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
     v4df __builtin_ia32_minpd256 (v4df,v4df)
     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
     v4df __builtin_ia32_movddup256 (v4df)
     int __builtin_ia32_movmskpd256 (v4df)
     int __builtin_ia32_movmskps256 (v8sf)
     v8sf __builtin_ia32_movshdup256 (v8sf)
     v8sf __builtin_ia32_movsldup256 (v8sf)
     v4df __builtin_ia32_mulpd256 (v4df,v4df)
     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
     v4df __builtin_ia32_orpd256 (v4df,v4df)
     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
     v2df __builtin_ia32_pd_pd256 (v4df)
     v4df __builtin_ia32_pd256_pd (v2df)
     v4sf __builtin_ia32_ps_ps256 (v8sf)
     v8sf __builtin_ia32_ps256_ps (v4sf)
     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
     v8sf __builtin_ia32_rcpps256 (v8sf)
     v4df __builtin_ia32_roundpd256 (v4df,int)
     v8sf __builtin_ia32_roundps256 (v8sf,int)
     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
     v8sf __builtin_ia32_rsqrtps256 (v8sf)
     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
     v4si __builtin_ia32_si_si256 (v8si)
     v8si __builtin_ia32_si256_si (v4si)
     v4df __builtin_ia32_sqrtpd256 (v4df)
     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
     v8sf __builtin_ia32_sqrtps256 (v8sf)
     void __builtin_ia32_storedqu256 (pchar,v32qi)
     void __builtin_ia32_storeupd256 (pdouble,v4df)
     void __builtin_ia32_storeups256 (pfloat,v8sf)
     v4df __builtin_ia32_subpd256 (v4df,v4df)
     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
     v4sf __builtin_ia32_vbroadcastss (pcfloat)
     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
     v2df __builtin_ia32_vpermilpd (v2df,int)
     v4df __builtin_ia32_vpermilpd256 (v4df,int)
     v4sf __builtin_ia32_vpermilps (v4sf,int)
     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
     void __builtin_ia32_vzeroall (void)
     void __builtin_ia32_vzeroupper (void)
     v4df __builtin_ia32_xorpd256 (v4df,v4df)
     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)

 The following built-in functions are available when '-mavx2' is used.
All of them generate the machine instruction that is part of the name.

     v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int)
     v32qi __builtin_ia32_pabsb256 (v32qi)
     v16hi __builtin_ia32_pabsw256 (v16hi)
     v8si __builtin_ia32_pabsd256 (v8si)
     v16hi __builtin_ia32_packssdw256 (v8si,v8si)
     v32qi __builtin_ia32_packsswb256 (v16hi,v16hi)
     v16hi __builtin_ia32_packusdw256 (v8si,v8si)
     v32qi __builtin_ia32_packuswb256 (v16hi,v16hi)
     v32qi __builtin_ia32_paddb256 (v32qi,v32qi)
     v16hi __builtin_ia32_paddw256 (v16hi,v16hi)
     v8si __builtin_ia32_paddd256 (v8si,v8si)
     v4di __builtin_ia32_paddq256 (v4di,v4di)
     v32qi __builtin_ia32_paddsb256 (v32qi,v32qi)
     v16hi __builtin_ia32_paddsw256 (v16hi,v16hi)
     v32qi __builtin_ia32_paddusb256 (v32qi,v32qi)
     v16hi __builtin_ia32_paddusw256 (v16hi,v16hi)
     v4di __builtin_ia32_palignr256 (v4di,v4di,int)
     v4di __builtin_ia32_andsi256 (v4di,v4di)
     v4di __builtin_ia32_andnotsi256 (v4di,v4di)
     v32qi __builtin_ia32_pavgb256 (v32qi,v32qi)
     v16hi __builtin_ia32_pavgw256 (v16hi,v16hi)
     v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi)
     v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int)
     v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi)
     v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi)
     v8si __builtin_ia32_pcmpeqd256 (c8si,v8si)
     v4di __builtin_ia32_pcmpeqq256 (v4di,v4di)
     v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi)
     v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi)
     v8si __builtin_ia32_pcmpgtd256 (v8si,v8si)
     v4di __builtin_ia32_pcmpgtq256 (v4di,v4di)
     v16hi __builtin_ia32_phaddw256 (v16hi,v16hi)
     v8si __builtin_ia32_phaddd256 (v8si,v8si)
     v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi)
     v16hi __builtin_ia32_phsubw256 (v16hi,v16hi)
     v8si __builtin_ia32_phsubd256 (v8si,v8si)
     v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi)
     v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi)
     v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi)
     v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi)
     v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi)
     v8si __builtin_ia32_pmaxsd256 (v8si,v8si)
     v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi)
     v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi)
     v8si __builtin_ia32_pmaxud256 (v8si,v8si)
     v32qi __builtin_ia32_pminsb256 (v32qi,v32qi)
     v16hi __builtin_ia32_pminsw256 (v16hi,v16hi)
     v8si __builtin_ia32_pminsd256 (v8si,v8si)
     v32qi __builtin_ia32_pminub256 (v32qi,v32qi)
     v16hi __builtin_ia32_pminuw256 (v16hi,v16hi)
     v8si __builtin_ia32_pminud256 (v8si,v8si)
     int __builtin_ia32_pmovmskb256 (v32qi)
     v16hi __builtin_ia32_pmovsxbw256 (v16qi)
     v8si __builtin_ia32_pmovsxbd256 (v16qi)
     v4di __builtin_ia32_pmovsxbq256 (v16qi)
     v8si __builtin_ia32_pmovsxwd256 (v8hi)
     v4di __builtin_ia32_pmovsxwq256 (v8hi)
     v4di __builtin_ia32_pmovsxdq256 (v4si)
     v16hi __builtin_ia32_pmovzxbw256 (v16qi)
     v8si __builtin_ia32_pmovzxbd256 (v16qi)
     v4di __builtin_ia32_pmovzxbq256 (v16qi)
     v8si __builtin_ia32_pmovzxwd256 (v8hi)
     v4di __builtin_ia32_pmovzxwq256 (v8hi)
     v4di __builtin_ia32_pmovzxdq256 (v4si)
     v4di __builtin_ia32_pmuldq256 (v8si,v8si)
     v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi)
     v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi)
     v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi)
     v16hi __builtin_ia32_pmullw256 (v16hi,v16hi)
     v8si __builtin_ia32_pmulld256 (v8si,v8si)
     v4di __builtin_ia32_pmuludq256 (v8si,v8si)
     v4di __builtin_ia32_por256 (v4di,v4di)
     v16hi __builtin_ia32_psadbw256 (v32qi,v32qi)
     v32qi __builtin_ia32_pshufb256 (v32qi,v32qi)
     v8si __builtin_ia32_pshufd256 (v8si,int)
     v16hi __builtin_ia32_pshufhw256 (v16hi,int)
     v16hi __builtin_ia32_pshuflw256 (v16hi,int)
     v32qi __builtin_ia32_psignb256 (v32qi,v32qi)
     v16hi __builtin_ia32_psignw256 (v16hi,v16hi)
     v8si __builtin_ia32_psignd256 (v8si,v8si)
     v4di __builtin_ia32_pslldqi256 (v4di,int)
     v16hi __builtin_ia32_psllwi256 (16hi,int)
     v16hi __builtin_ia32_psllw256(v16hi,v8hi)
     v8si __builtin_ia32_pslldi256 (v8si,int)
     v8si __builtin_ia32_pslld256(v8si,v4si)
     v4di __builtin_ia32_psllqi256 (v4di,int)
     v4di __builtin_ia32_psllq256(v4di,v2di)
     v16hi __builtin_ia32_psrawi256 (v16hi,int)
     v16hi __builtin_ia32_psraw256 (v16hi,v8hi)
     v8si __builtin_ia32_psradi256 (v8si,int)
     v8si __builtin_ia32_psrad256 (v8si,v4si)
     v4di __builtin_ia32_psrldqi256 (v4di, int)
     v16hi __builtin_ia32_psrlwi256 (v16hi,int)
     v16hi __builtin_ia32_psrlw256 (v16hi,v8hi)
     v8si __builtin_ia32_psrldi256 (v8si,int)
     v8si __builtin_ia32_psrld256 (v8si,v4si)
     v4di __builtin_ia32_psrlqi256 (v4di,int)
     v4di __builtin_ia32_psrlq256(v4di,v2di)
     v32qi __builtin_ia32_psubb256 (v32qi,v32qi)
     v32hi __builtin_ia32_psubw256 (v16hi,v16hi)
     v8si __builtin_ia32_psubd256 (v8si,v8si)
     v4di __builtin_ia32_psubq256 (v4di,v4di)
     v32qi __builtin_ia32_psubsb256 (v32qi,v32qi)
     v16hi __builtin_ia32_psubsw256 (v16hi,v16hi)
     v32qi __builtin_ia32_psubusb256 (v32qi,v32qi)
     v16hi __builtin_ia32_psubusw256 (v16hi,v16hi)
     v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi)
     v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi)
     v8si __builtin_ia32_punpckhdq256 (v8si,v8si)
     v4di __builtin_ia32_punpckhqdq256 (v4di,v4di)
     v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi)
     v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi)
     v8si __builtin_ia32_punpckldq256 (v8si,v8si)
     v4di __builtin_ia32_punpcklqdq256 (v4di,v4di)
     v4di __builtin_ia32_pxor256 (v4di,v4di)
     v4di __builtin_ia32_movntdqa256 (pv4di)
     v4sf __builtin_ia32_vbroadcastss_ps (v4sf)
     v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf)
     v4df __builtin_ia32_vbroadcastsd_pd256 (v2df)
     v4di __builtin_ia32_vbroadcastsi256 (v2di)
     v4si __builtin_ia32_pblendd128 (v4si,v4si)
     v8si __builtin_ia32_pblendd256 (v8si,v8si)
     v32qi __builtin_ia32_pbroadcastb256 (v16qi)
     v16hi __builtin_ia32_pbroadcastw256 (v8hi)
     v8si __builtin_ia32_pbroadcastd256 (v4si)
     v4di __builtin_ia32_pbroadcastq256 (v2di)
     v16qi __builtin_ia32_pbroadcastb128 (v16qi)
     v8hi __builtin_ia32_pbroadcastw128 (v8hi)
     v4si __builtin_ia32_pbroadcastd128 (v4si)
     v2di __builtin_ia32_pbroadcastq128 (v2di)
     v8si __builtin_ia32_permvarsi256 (v8si,v8si)
     v4df __builtin_ia32_permdf256 (v4df,int)
     v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf)
     v4di __builtin_ia32_permdi256 (v4di,int)
     v4di __builtin_ia32_permti256 (v4di,v4di,int)
     v4di __builtin_ia32_extract128i256 (v4di,int)
     v4di __builtin_ia32_insert128i256 (v4di,v2di,int)
     v8si __builtin_ia32_maskloadd256 (pcv8si,v8si)
     v4di __builtin_ia32_maskloadq256 (pcv4di,v4di)
     v4si __builtin_ia32_maskloadd (pcv4si,v4si)
     v2di __builtin_ia32_maskloadq (pcv2di,v2di)
     void __builtin_ia32_maskstored256 (pv8si,v8si,v8si)
     void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di)
     void __builtin_ia32_maskstored (pv4si,v4si,v4si)
     void __builtin_ia32_maskstoreq (pv2di,v2di,v2di)
     v8si __builtin_ia32_psllv8si (v8si,v8si)
     v4si __builtin_ia32_psllv4si (v4si,v4si)
     v4di __builtin_ia32_psllv4di (v4di,v4di)
     v2di __builtin_ia32_psllv2di (v2di,v2di)
     v8si __builtin_ia32_psrav8si (v8si,v8si)
     v4si __builtin_ia32_psrav4si (v4si,v4si)
     v8si __builtin_ia32_psrlv8si (v8si,v8si)
     v4si __builtin_ia32_psrlv4si (v4si,v4si)
     v4di __builtin_ia32_psrlv4di (v4di,v4di)
     v2di __builtin_ia32_psrlv2di (v2di,v2di)
     v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int)
     v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int)
     v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int)
     v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int)
     v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int)
     v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int)
     v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int)
     v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int)
     v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int)
     v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int)
     v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int)
     v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int)
     v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int)
     v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int)
     v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int)
     v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int)

 The following built-in functions are available when '-maes' is used.
All of them generate the machine instruction that is part of the name.

     v2di __builtin_ia32_aesenc128 (v2di, v2di)
     v2di __builtin_ia32_aesenclast128 (v2di, v2di)
     v2di __builtin_ia32_aesdec128 (v2di, v2di)
     v2di __builtin_ia32_aesdeclast128 (v2di, v2di)
     v2di __builtin_ia32_aeskeygenassist128 (v2di, const int)
     v2di __builtin_ia32_aesimc128 (v2di)

 The following built-in function is available when '-mpclmul' is used.

'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)'
     Generates the 'pclmulqdq' machine instruction.

 The following built-in function is available when '-mfsgsbase' is used.
All of them generate the machine instruction that is part of the name.

     unsigned int __builtin_ia32_rdfsbase32 (void)
     unsigned long long __builtin_ia32_rdfsbase64 (void)
     unsigned int __builtin_ia32_rdgsbase32 (void)
     unsigned long long __builtin_ia32_rdgsbase64 (void)
     void _writefsbase_u32 (unsigned int)
     void _writefsbase_u64 (unsigned long long)
     void _writegsbase_u32 (unsigned int)
     void _writegsbase_u64 (unsigned long long)

 The following built-in function is available when '-mrdrnd' is used.
All of them generate the machine instruction that is part of the name.

     unsigned int __builtin_ia32_rdrand16_step (unsigned short *)
     unsigned int __builtin_ia32_rdrand32_step (unsigned int *)
     unsigned int __builtin_ia32_rdrand64_step (unsigned long long *)

 The following built-in functions are available when '-msse4a' is used.
All of them generate the machine instruction that is part of the name.

     void __builtin_ia32_movntsd (double *, v2df)
     void __builtin_ia32_movntss (float *, v4sf)
     v2di __builtin_ia32_extrq  (v2di, v16qi)
     v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int)
     v2di __builtin_ia32_insertq (v2di, v2di)
     v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int)

 The following built-in functions are available when '-mxop' is used.
     v2df __builtin_ia32_vfrczpd (v2df)
     v4sf __builtin_ia32_vfrczps (v4sf)
     v2df __builtin_ia32_vfrczsd (v2df)
     v4sf __builtin_ia32_vfrczss (v4sf)
     v4df __builtin_ia32_vfrczpd256 (v4df)
     v8sf __builtin_ia32_vfrczps256 (v8sf)
     v2di __builtin_ia32_vpcmov (v2di, v2di, v2di)
     v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di)
     v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si)
     v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi)
     v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi)
     v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df)
     v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf)
     v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di)
     v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si)
     v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi)
     v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi)
     v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf)
     v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi)
     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
     v4si __builtin_ia32_vpcomeqd (v4si, v4si)
     v2di __builtin_ia32_vpcomeqq (v2di, v2di)
     v16qi __builtin_ia32_vpcomequb (v16qi, v16qi)
     v4si __builtin_ia32_vpcomequd (v4si, v4si)
     v2di __builtin_ia32_vpcomequq (v2di, v2di)
     v8hi __builtin_ia32_vpcomequw (v8hi, v8hi)
     v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi)
     v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi)
     v4si __builtin_ia32_vpcomfalsed (v4si, v4si)
     v2di __builtin_ia32_vpcomfalseq (v2di, v2di)
     v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi)
     v4si __builtin_ia32_vpcomfalseud (v4si, v4si)
     v2di __builtin_ia32_vpcomfalseuq (v2di, v2di)
     v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi)
     v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi)
     v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi)
     v4si __builtin_ia32_vpcomged (v4si, v4si)
     v2di __builtin_ia32_vpcomgeq (v2di, v2di)
     v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi)
     v4si __builtin_ia32_vpcomgeud (v4si, v4si)
     v2di __builtin_ia32_vpcomgeuq (v2di, v2di)
     v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi)
     v8hi __builtin_ia32_vpcomgew (v8hi, v8hi)
     v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi)
     v4si __builtin_ia32_vpcomgtd (v4si, v4si)
     v2di __builtin_ia32_vpcomgtq (v2di, v2di)
     v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi)
     v4si __builtin_ia32_vpcomgtud (v4si, v4si)
     v2di __builtin_ia32_vpcomgtuq (v2di, v2di)
     v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi)
     v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi)
     v16qi __builtin_ia32_vpcomleb (v16qi, v16qi)
     v4si __builtin_ia32_vpcomled (v4si, v4si)
     v2di __builtin_ia32_vpcomleq (v2di, v2di)
     v16qi __builtin_ia32_vpcomleub (v16qi, v16qi)
     v4si __builtin_ia32_vpcomleud (v4si, v4si)
     v2di __builtin_ia32_vpcomleuq (v2di, v2di)
     v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi)
     v8hi __builtin_ia32_vpcomlew (v8hi, v8hi)
     v16qi __builtin_ia32_vpcomltb (v16qi, v16qi)
     v4si __builtin_ia32_vpcomltd (v4si, v4si)
     v2di __builtin_ia32_vpcomltq (v2di, v2di)
     v16qi __builtin_ia32_vpcomltub (v16qi, v16qi)
     v4si __builtin_ia32_vpcomltud (v4si, v4si)
     v2di __builtin_ia32_vpcomltuq (v2di, v2di)
     v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi)
     v8hi __builtin_ia32_vpcomltw (v8hi, v8hi)
     v16qi __builtin_ia32_vpcomneb (v16qi, v16qi)
     v4si __builtin_ia32_vpcomned (v4si, v4si)
     v2di __builtin_ia32_vpcomneq (v2di, v2di)
     v16qi __builtin_ia32_vpcomneub (v16qi, v16qi)
     v4si __builtin_ia32_vpcomneud (v4si, v4si)
     v2di __builtin_ia32_vpcomneuq (v2di, v2di)
     v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi)
     v8hi __builtin_ia32_vpcomnew (v8hi, v8hi)
     v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi)
     v4si __builtin_ia32_vpcomtrued (v4si, v4si)
     v2di __builtin_ia32_vpcomtrueq (v2di, v2di)
     v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi)
     v4si __builtin_ia32_vpcomtrueud (v4si, v4si)
     v2di __builtin_ia32_vpcomtrueuq (v2di, v2di)
     v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi)
     v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi)
     v4si __builtin_ia32_vphaddbd (v16qi)
     v2di __builtin_ia32_vphaddbq (v16qi)
     v8hi __builtin_ia32_vphaddbw (v16qi)
     v2di __builtin_ia32_vphadddq (v4si)
     v4si __builtin_ia32_vphaddubd (v16qi)
     v2di __builtin_ia32_vphaddubq (v16qi)
     v8hi __builtin_ia32_vphaddubw (v16qi)
     v2di __builtin_ia32_vphaddudq (v4si)
     v4si __builtin_ia32_vphadduwd (v8hi)
     v2di __builtin_ia32_vphadduwq (v8hi)
     v4si __builtin_ia32_vphaddwd (v8hi)
     v2di __builtin_ia32_vphaddwq (v8hi)
     v8hi __builtin_ia32_vphsubbw (v16qi)
     v2di __builtin_ia32_vphsubdq (v4si)
     v4si __builtin_ia32_vphsubwd (v8hi)
     v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si)
     v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di)
     v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di)
     v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si)
     v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di)
     v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di)
     v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si)
     v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi)
     v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si)
     v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi)
     v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si)
     v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si)
     v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi)
     v16qi __builtin_ia32_vprotb (v16qi, v16qi)
     v4si __builtin_ia32_vprotd (v4si, v4si)
     v2di __builtin_ia32_vprotq (v2di, v2di)
     v8hi __builtin_ia32_vprotw (v8hi, v8hi)
     v16qi __builtin_ia32_vpshab (v16qi, v16qi)
     v4si __builtin_ia32_vpshad (v4si, v4si)
     v2di __builtin_ia32_vpshaq (v2di, v2di)
     v8hi __builtin_ia32_vpshaw (v8hi, v8hi)
     v16qi __builtin_ia32_vpshlb (v16qi, v16qi)
     v4si __builtin_ia32_vpshld (v4si, v4si)
     v2di __builtin_ia32_vpshlq (v2di, v2di)
     v8hi __builtin_ia32_vpshlw (v8hi, v8hi)

 The following built-in functions are available when '-mfma4' is used.
All of them generate the machine instruction that is part of the name.

     v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df)
     v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df)
     v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df)
     v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df)
     v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df)
     v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df)
     v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df)
     v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df)
     v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_vfmaddsubpd  (v2df, v2df, v2df)
     v4sf __builtin_ia32_vfmaddsubps  (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_vfmsubaddpd  (v2df, v2df, v2df)
     v4sf __builtin_ia32_vfmsubaddps  (v4sf, v4sf, v4sf)
     v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf)
     v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf)
     v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf)
     v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf)
     v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf)
     v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf)


 The following built-in functions are available when '-mlwp' is used.

     void __builtin_ia32_llwpcb16 (void *);
     void __builtin_ia32_llwpcb32 (void *);
     void __builtin_ia32_llwpcb64 (void *);
     void * __builtin_ia32_llwpcb16 (void);
     void * __builtin_ia32_llwpcb32 (void);
     void * __builtin_ia32_llwpcb64 (void);
     void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short)
     void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int)
     void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int)
     unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short)
     unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int)
     unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int)

 The following built-in functions are available when '-mbmi' is used.
All of them generate the machine instruction that is part of the name.
     unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int);
     unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long);

 The following built-in functions are available when '-mbmi2' is used.
All of them generate the machine instruction that is part of the name.
     unsigned int _bzhi_u32 (unsigned int, unsigned int)
     unsigned int _pdep_u32 (unsigned int, unsigned int)
     unsigned int _pext_u32 (unsigned int, unsigned int)
     unsigned long long _bzhi_u64 (unsigned long long, unsigned long long)
     unsigned long long _pdep_u64 (unsigned long long, unsigned long long)
     unsigned long long _pext_u64 (unsigned long long, unsigned long long)

 The following built-in functions are available when '-mlzcnt' is used.
All of them generate the machine instruction that is part of the name.
     unsigned short __builtin_ia32_lzcnt_16(unsigned short);
     unsigned int __builtin_ia32_lzcnt_u32(unsigned int);
     unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long);

 The following built-in functions are available when '-mfxsr' is used.
All of them generate the machine instruction that is part of the name.
     void __builtin_ia32_fxsave (void *)
     void __builtin_ia32_fxrstor (void *)
     void __builtin_ia32_fxsave64 (void *)
     void __builtin_ia32_fxrstor64 (void *)

 The following built-in functions are available when '-mxsave' is used.
All of them generate the machine instruction that is part of the name.
     void __builtin_ia32_xsave (void *, long long)
     void __builtin_ia32_xrstor (void *, long long)
     void __builtin_ia32_xsave64 (void *, long long)
     void __builtin_ia32_xrstor64 (void *, long long)

 The following built-in functions are available when '-mxsaveopt' is
used.  All of them generate the machine instruction that is part of the
name.
     void __builtin_ia32_xsaveopt (void *, long long)
     void __builtin_ia32_xsaveopt64 (void *, long long)

 The following built-in functions are available when '-mtbm' is used.
Both of them generate the immediate form of the bextr machine
instruction.
     unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int);
     unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long);

 The following built-in functions are available when '-m3dnow' is used.
All of them generate the machine instruction that is part of the name.

     void __builtin_ia32_femms (void)
     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
     v2si __builtin_ia32_pf2id (v2sf)
     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
     v2sf __builtin_ia32_pfrcp (v2sf)
     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
     v2sf __builtin_ia32_pfrsqrt (v2sf)
     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
     v2sf __builtin_ia32_pi2fd (v2si)
     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)

 The following built-in functions are available when both '-m3dnow' and
'-march=athlon' are used.  All of them generate the machine instruction
that is part of the name.

     v2si __builtin_ia32_pf2iw (v2sf)
     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
     v2sf __builtin_ia32_pi2fw (v2si)
     v2sf __builtin_ia32_pswapdsf (v2sf)
     v2si __builtin_ia32_pswapdsi (v2si)

 The following built-in functions are available when '-mrtm' is used
They are used for restricted transactional memory.  These are the
internal low level functions.  Normally the functions in *note x86
transactional memory intrinsics:: should be used instead.

     int __builtin_ia32_xbegin ()
     void __builtin_ia32_xend ()
     void __builtin_ia32_xabort (status)
     int __builtin_ia32_xtest ()


File: gcc.info,  Node: x86 transactional memory intrinsics,  Prev: x86 Built-in Functions,  Up: Target Builtins

6.58.31 x86 Transactional Memory Intrinsics
-------------------------------------------

These hardware transactional memory intrinsics for x86 allow you to use
memory transactions with RTM (Restricted Transactional Memory).  This
support is enabled with the '-mrtm' option.  For using HLE (Hardware
Lock Elision) see *note x86 specific memory model extensions for
transactional memory:: instead.

 A memory transaction commits all changes to memory in an atomic way, as
visible to other threads.  If the transaction fails it is rolled back
and all side effects discarded.

 Generally there is no guarantee that a memory transaction ever succeeds
and suitable fallback code always needs to be supplied.

 -- RTM Function: unsigned _xbegin ()
     Start a RTM (Restricted Transactional Memory) transaction.  Returns
     '_XBEGIN_STARTED' when the transaction started successfully (note
     this is not 0, so the constant has to be explicitly tested).

     If the transaction aborts, all side-effects are undone and an abort
     code encoded as a bit mask is returned.  The following macros are
     defined:

     '_XABORT_EXPLICIT'
          Transaction was explicitly aborted with '_xabort'.  The
          parameter passed to '_xabort' is available with
          '_XABORT_CODE(status)'.
     '_XABORT_RETRY'
          Transaction retry is possible.
     '_XABORT_CONFLICT'
          Transaction abort due to a memory conflict with another
          thread.
     '_XABORT_CAPACITY'
          Transaction abort due to the transaction using too much
          memory.
     '_XABORT_DEBUG'
          Transaction abort due to a debug trap.
     '_XABORT_NESTED'
          Transaction abort in an inner nested transaction.

     There is no guarantee any transaction ever succeeds, so there
     always needs to be a valid fallback path.

 -- RTM Function: void _xend ()
     Commit the current transaction.  When no transaction is active this
     faults.  All memory side-effects of the transaction become visible
     to other threads in an atomic manner.

 -- RTM Function: int _xtest ()
     Return a nonzero value if a transaction is currently active,
     otherwise 0.

 -- RTM Function: void _xabort (status)
     Abort the current transaction.  When no transaction is active this
     is a no-op.  The STATUS is an 8-bit constant; its value is encoded
     in the return value from '_xbegin'.

 Here is an example showing handling for '_XABORT_RETRY' and a fallback
path for other failures:

     #include <immintrin.h>

     int n_tries, max_tries;
     unsigned status = _XABORT_EXPLICIT;
     ...

     for (n_tries = 0; n_tries < max_tries; n_tries++)
       {
         status = _xbegin ();
         if (status == _XBEGIN_STARTED || !(status & _XABORT_RETRY))
           break;
       }
     if (status == _XBEGIN_STARTED)
       {
         ... transaction code...
         _xend ();
       }
     else
       {
         ... non-transactional fallback path...
       }

Note that, in most cases, the transactional and non-transactional code
must synchronize together to ensure consistency.


File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions

6.59 Format Checks Specific to Particular Target Machines
=========================================================

For some target machines, GCC supports additional options to the format
attribute (*note Declaring Attributes of Functions: Function
Attributes.).

* Menu:

* Solaris Format Checks::
* Darwin Format Checks::


File: gcc.info,  Node: Solaris Format Checks,  Next: Darwin Format Checks,  Up: Target Format Checks

6.59.1 Solaris Format Checks
----------------------------

Solaris targets support the 'cmn_err' (or '__cmn_err__') format check.
'cmn_err' accepts a subset of the standard 'printf' conversions, and the
two-argument '%b' conversion for displaying bit-fields.  See the Solaris
man page for 'cmn_err' for more information.


File: gcc.info,  Node: Darwin Format Checks,  Prev: Solaris Format Checks,  Up: Target Format Checks

6.59.2 Darwin Format Checks
---------------------------

Darwin targets support the 'CFString' (or '__CFString__') in the format
attribute context.  Declarations made with such attribution are parsed
for correct syntax and format argument types.  However, parsing of the
format string itself is currently undefined and is not carried out by
this version of the compiler.

 Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers)
may also be used as format arguments.  Note that the relevant headers
are only likely to be available on Darwin (OSX) installations.  On such
installations, the XCode and system documentation provide descriptions
of 'CFString', 'CFStringRefs' and associated functions.


File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions

6.60 Pragmas Accepted by GCC
============================

GCC supports several types of pragmas, primarily in order to compile
code originally written for other compilers.  Note that in general we do
not recommend the use of pragmas; *Note Function Attributes::, for
further explanation.

* Menu:

* ARM Pragmas::
* M32C Pragmas::
* MeP Pragmas::
* RS/6000 and PowerPC Pragmas::
* Darwin Pragmas::
* Solaris Pragmas::
* Symbol-Renaming Pragmas::
* Structure-Packing Pragmas::
* Weak Pragmas::
* Diagnostic Pragmas::
* Visibility Pragmas::
* Push/Pop Macro Pragmas::
* Function Specific Option Pragmas::
* Loop-Specific Pragmas::


File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas

6.60.1 ARM Pragmas
------------------

The ARM target defines pragmas for controlling the default addition of
'long_call' and 'short_call' attributes to functions.  *Note Function
Attributes::, for information about the effects of these attributes.

'long_calls'
     Set all subsequent functions to have the 'long_call' attribute.

'no_long_calls'
     Set all subsequent functions to have the 'short_call' attribute.

'long_calls_off'
     Do not affect the 'long_call' or 'short_call' attributes of
     subsequent functions.


File: gcc.info,  Node: M32C Pragmas,  Next: MeP Pragmas,  Prev: ARM Pragmas,  Up: Pragmas

6.60.2 M32C Pragmas
-------------------

'GCC memregs NUMBER'
     Overrides the command-line option '-memregs=' for the current file.
     Use with care!  This pragma must be before any function in the
     file, and mixing different memregs values in different objects may
     make them incompatible.  This pragma is useful when a
     performance-critical function uses a memreg for temporary values,
     as it may allow you to reduce the number of memregs used.

'ADDRESS NAME ADDRESS'
     For any declared symbols matching NAME, this does three things to
     that symbol: it forces the symbol to be located at the given
     address (a number), it forces the symbol to be volatile, and it
     changes the symbol's scope to be static.  This pragma exists for
     compatibility with other compilers, but note that the common
     '1234H' numeric syntax is not supported (use '0x1234' instead).
     Example:

          #pragma ADDRESS port3 0x103
          char port3;


File: gcc.info,  Node: MeP Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: M32C Pragmas,  Up: Pragmas

6.60.3 MeP Pragmas
------------------

'custom io_volatile (on|off)'
     Overrides the command-line option '-mio-volatile' for the current
     file.  Note that for compatibility with future GCC releases, this
     option should only be used once before any 'io' variables in each
     file.

'GCC coprocessor available REGISTERS'
     Specifies which coprocessor registers are available to the register
     allocator.  REGISTERS may be a single register, register range
     separated by ellipses, or comma-separated list of those.  Example:

          #pragma GCC coprocessor available $c0...$c10, $c28

'GCC coprocessor call_saved REGISTERS'
     Specifies which coprocessor registers are to be saved and restored
     by any function using them.  REGISTERS may be a single register,
     register range separated by ellipses, or comma-separated list of
     those.  Example:

          #pragma GCC coprocessor call_saved $c4...$c6, $c31

'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS'
     Creates and defines a register class.  These register classes can
     be used by inline 'asm' constructs.  REGISTERS may be a single
     register, register range separated by ellipses, or comma-separated
     list of those.  Example:

          #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6

          asm ("cpfoo %0" : "=B" (x));

'GCC disinterrupt NAME , NAME ...'
     For the named functions, the compiler adds code to disable
     interrupts for the duration of those functions.  If any functions
     so named are not encountered in the source, a warning is emitted
     that the pragma is not used.  Examples:

          #pragma disinterrupt foo
          #pragma disinterrupt bar, grill
          int foo () { ... }

'GCC call NAME , NAME ...'
     For the named functions, the compiler always uses a
     register-indirect call model when calling the named functions.
     Examples:

          extern int foo ();
          #pragma call foo


File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: MeP Pragmas,  Up: Pragmas

6.60.4 RS/6000 and PowerPC Pragmas
----------------------------------

The RS/6000 and PowerPC targets define one pragma for controlling
whether or not the 'longcall' attribute is added to function
declarations by default.  This pragma overrides the '-mlongcall' option,
but not the 'longcall' and 'shortcall' attributes.  *Note RS/6000 and
PowerPC Options::, for more information about when long calls are and
are not necessary.

'longcall (1)'
     Apply the 'longcall' attribute to all subsequent function
     declarations.

'longcall (0)'
     Do not apply the 'longcall' attribute to subsequent function
     declarations.


File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas

6.60.5 Darwin Pragmas
---------------------

The following pragmas are available for all architectures running the
Darwin operating system.  These are useful for compatibility with other
Mac OS compilers.

'mark TOKENS...'
     This pragma is accepted, but has no effect.

'options align=ALIGNMENT'
     This pragma sets the alignment of fields in structures.  The values
     of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or
     'power', to emulate PowerPC alignment.  Uses of this pragma nest
     properly; to restore the previous setting, use 'reset' for the
     ALIGNMENT.

'segment TOKENS...'
     This pragma is accepted, but has no effect.

'unused (VAR [, VAR]...)'
     This pragma declares variables to be possibly unused.  GCC does not
     produce warnings for the listed variables.  The effect is similar
     to that of the 'unused' attribute, except that this pragma may
     appear anywhere within the variables' scopes.


File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas

6.60.6 Solaris Pragmas
----------------------

The Solaris target supports '#pragma redefine_extname' (*note
Symbol-Renaming Pragmas::).  It also supports additional '#pragma'
directives for compatibility with the system compiler.

'align ALIGNMENT (VARIABLE [, VARIABLE]...)'

     Increase the minimum alignment of each VARIABLE to ALIGNMENT.  This
     is the same as GCC's 'aligned' attribute *note Variable
     Attributes::).  Macro expansion occurs on the arguments to this
     pragma when compiling C and Objective-C.  It does not currently
     occur when compiling C++, but this is a bug which may be fixed in a
     future release.

'fini (FUNCTION [, FUNCTION]...)'

     This pragma causes each listed FUNCTION to be called after main, or
     during shared module unloading, by adding a call to the '.fini'
     section.

'init (FUNCTION [, FUNCTION]...)'

     This pragma causes each listed FUNCTION to be called during
     initialization (before 'main') or during shared module loading, by
     adding a call to the '.init' section.


File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas

6.60.7 Symbol-Renaming Pragmas
------------------------------

GCC supports a '#pragma' directive that changes the name used in
assembly for a given declaration.  While this pragma is supported on all
platforms, it is intended primarily to provide compatibility with the
Solaris system headers.  This effect can also be achieved using the asm
labels extension (*note Asm Labels::).

'redefine_extname OLDNAME NEWNAME'

     This pragma gives the C function OLDNAME the assembly symbol
     NEWNAME.  The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is
     defined if this pragma is available (currently on all platforms).

 This pragma and the asm labels extension interact in a complicated
manner.  Here are some corner cases you may want to be aware of:

  1. This pragma silently applies only to declarations with external
     linkage.  Asm labels do not have this restriction.

  2. In C++, this pragma silently applies only to declarations with "C"
     linkage.  Again, asm labels do not have this restriction.

  3. If either of the ways of changing the assembly name of a
     declaration are applied to a declaration whose assembly name has
     already been determined (either by a previous use of one of these
     features, or because the compiler needed the assembly name in order
     to generate code), and the new name is different, a warning issues
     and the name does not change.

  4. The OLDNAME used by '#pragma redefine_extname' is always the
     C-language name.


File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas

6.60.8 Structure-Packing Pragmas
--------------------------------

For compatibility with Microsoft Windows compilers, GCC supports a set
of '#pragma' directives that change the maximum alignment of members of
structures (other than zero-width bit-fields), unions, and classes
subsequently defined.  The N value below always is required to be a
small power of two and specifies the new alignment in bytes.

  1. '#pragma pack(N)' simply sets the new alignment.
  2. '#pragma pack()' sets the alignment to the one that was in effect
     when compilation started (see also command-line option
     '-fpack-struct[=N]' *note Code Gen Options::).
  3. '#pragma pack(push[,N])' pushes the current alignment setting on an
     internal stack and then optionally sets the new alignment.
  4. '#pragma pack(pop)' restores the alignment setting to the one saved
     at the top of the internal stack (and removes that stack entry).
     Note that '#pragma pack([N])' does not influence this internal
     stack; thus it is possible to have '#pragma pack(push)' followed by
     multiple '#pragma pack(N)' instances and finalized by a single
     '#pragma pack(pop)'.

 Some targets, e.g. x86 and PowerPC, support the 'ms_struct' '#pragma'
which lays out a structure as the documented '__attribute__
((ms_struct))'.
  1. '#pragma ms_struct on' turns on the layout for structures declared.
  2. '#pragma ms_struct off' turns off the layout for structures
     declared.
  3. '#pragma ms_struct reset' goes back to the default layout.


File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas

6.60.9 Weak Pragmas
-------------------

For compatibility with SVR4, GCC supports a set of '#pragma' directives
for declaring symbols to be weak, and defining weak aliases.

'#pragma weak SYMBOL'
     This pragma declares SYMBOL to be weak, as if the declaration had
     the attribute of the same name.  The pragma may appear before or
     after the declaration of SYMBOL.  It is not an error for SYMBOL to
     never be defined at all.

'#pragma weak SYMBOL1 = SYMBOL2'
     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
     an error if SYMBOL2 is not defined in the current translation unit.


File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas

6.60.10 Diagnostic Pragmas
--------------------------

GCC allows the user to selectively enable or disable certain types of
diagnostics, and change the kind of the diagnostic.  For example, a
project's policy might require that all sources compile with '-Werror'
but certain files might have exceptions allowing specific types of
warnings.  Or, a project might selectively enable diagnostics and treat
them as errors depending on which preprocessor macros are defined.

'#pragma GCC diagnostic KIND OPTION'

     Modifies the disposition of a diagnostic.  Note that not all
     diagnostics are modifiable; at the moment only warnings (normally
     controlled by '-W...') can be controlled, and not all of them.  Use
     '-fdiagnostics-show-option' to determine which diagnostics are
     controllable and which option controls them.

     KIND is 'error' to treat this diagnostic as an error, 'warning' to
     treat it like a warning (even if '-Werror' is in effect), or
     'ignored' if the diagnostic is to be ignored.  OPTION is a double
     quoted string that matches the command-line option.

          #pragma GCC diagnostic warning "-Wformat"
          #pragma GCC diagnostic error "-Wformat"
          #pragma GCC diagnostic ignored "-Wformat"

     Note that these pragmas override any command-line options.  GCC
     keeps track of the location of each pragma, and issues diagnostics
     according to the state as of that point in the source file.  Thus,
     pragmas occurring after a line do not affect diagnostics caused by
     that line.

'#pragma GCC diagnostic push'
'#pragma GCC diagnostic pop'

     Causes GCC to remember the state of the diagnostics as of each
     'push', and restore to that point at each 'pop'.  If a 'pop' has no
     matching 'push', the command-line options are restored.

          #pragma GCC diagnostic error "-Wuninitialized"
            foo(a);                       /* error is given for this one */
          #pragma GCC diagnostic push
          #pragma GCC diagnostic ignored "-Wuninitialized"
            foo(b);                       /* no diagnostic for this one */
          #pragma GCC diagnostic pop
            foo(c);                       /* error is given for this one */
          #pragma GCC diagnostic pop
            foo(d);                       /* depends on command-line options */

 GCC also offers a simple mechanism for printing messages during
compilation.

'#pragma message STRING'

     Prints STRING as a compiler message on compilation.  The message is
     informational only, and is neither a compilation warning nor an
     error.

          #pragma message "Compiling " __FILE__ "..."

     STRING may be parenthesized, and is printed with location
     information.  For example,

          #define DO_PRAGMA(x) _Pragma (#x)
          #define TODO(x) DO_PRAGMA(message ("TODO - " #x))

          TODO(Remember to fix this)

     prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to
     fix this'.


File: gcc.info,  Node: Visibility Pragmas,  Next: Push/Pop Macro Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas

6.60.11 Visibility Pragmas
--------------------------

'#pragma GCC visibility push(VISIBILITY)'
'#pragma GCC visibility pop'

     This pragma allows the user to set the visibility for multiple
     declarations without having to give each a visibility attribute
     (*note Function Attributes::).

     In C++, '#pragma GCC visibility' affects only namespace-scope
     declarations.  Class members and template specializations are not
     affected; if you want to override the visibility for a particular
     member or instantiation, you must use an attribute.


File: gcc.info,  Node: Push/Pop Macro Pragmas,  Next: Function Specific Option Pragmas,  Prev: Visibility Pragmas,  Up: Pragmas

6.60.12 Push/Pop Macro Pragmas
------------------------------

For compatibility with Microsoft Windows compilers, GCC supports
'#pragma push_macro("MACRO_NAME")' and '#pragma
pop_macro("MACRO_NAME")'.

'#pragma push_macro("MACRO_NAME")'
     This pragma saves the value of the macro named as MACRO_NAME to the
     top of the stack for this macro.

'#pragma pop_macro("MACRO_NAME")'
     This pragma sets the value of the macro named as MACRO_NAME to the
     value on top of the stack for this macro.  If the stack for
     MACRO_NAME is empty, the value of the macro remains unchanged.

 For example:

     #define X  1
     #pragma push_macro("X")
     #undef X
     #define X -1
     #pragma pop_macro("X")
     int x [X];

In this example, the definition of X as 1 is saved by '#pragma
push_macro' and restored by '#pragma pop_macro'.


File: gcc.info,  Node: Function Specific Option Pragmas,  Next: Loop-Specific Pragmas,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas

6.60.13 Function Specific Option Pragmas
----------------------------------------

'#pragma GCC target ("STRING"...)'

     This pragma allows you to set target specific options for functions
     defined later in the source file.  One or more strings can be
     specified.  Each function that is defined after this point is as if
     'attribute((target("STRING")))' was specified for that function.
     The parenthesis around the options is optional.  *Note Function
     Attributes::, for more information about the 'target' attribute and
     the attribute syntax.

     The '#pragma GCC target' pragma is presently implemented for x86,
     PowerPC, and Nios II targets only.

'#pragma GCC optimize ("STRING"...)'

     This pragma allows you to set global optimization options for
     functions defined later in the source file.  One or more strings
     can be specified.  Each function that is defined after this point
     is as if 'attribute((optimize("STRING")))' was specified for that
     function.  The parenthesis around the options is optional.  *Note
     Function Attributes::, for more information about the 'optimize'
     attribute and the attribute syntax.

'#pragma GCC push_options'
'#pragma GCC pop_options'

     These pragmas maintain a stack of the current target and
     optimization options.  It is intended for include files where you
     temporarily want to switch to using a different '#pragma GCC
     target' or '#pragma GCC optimize' and then to pop back to the
     previous options.

'#pragma GCC reset_options'

     This pragma clears the current '#pragma GCC target' and '#pragma
     GCC optimize' to use the default switches as specified on the
     command line.


File: gcc.info,  Node: Loop-Specific Pragmas,  Prev: Function Specific Option Pragmas,  Up: Pragmas

6.60.14 Loop-Specific Pragmas
-----------------------------

'#pragma GCC ivdep'

 With this pragma, the programmer asserts that there are no loop-carried
dependencies which would prevent consecutive iterations of the following
loop from executing concurrently with SIMD (single instruction multiple
data) instructions.

 For example, the compiler can only unconditionally vectorize the
following loop with the pragma:

     void foo (int n, int *a, int *b, int *c)
     {
       int i, j;
     #pragma GCC ivdep
       for (i = 0; i < n; ++i)
         a[i] = b[i] + c[i];
     }

In this example, using the 'restrict' qualifier had the same effect.  In
the following example, that would not be possible.  Assume k < -m or k
>= m.  Only with the pragma, the compiler knows that it can
unconditionally vectorize the following loop:

     void ignore_vec_dep (int *a, int k, int c, int m)
     {
     #pragma GCC ivdep
       for (int i = 0; i < m; i++)
         a[i] = a[i + k] * c;
     }


File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions

6.61 Unnamed Structure and Union Fields
=======================================

As permitted by ISO C11 and for compatibility with other compilers, GCC
allows you to define a structure or union that contains, as fields,
structures and unions without names.  For example:

     struct {
       int a;
       union {
         int b;
         float c;
       };
       int d;
     } foo;

In this example, you are able to access members of the unnamed union
with code like 'foo.b'.  Note that only unnamed structs and unions are
allowed, you may not have, for example, an unnamed 'int'.

 You must never create such structures that cause ambiguous field
definitions.  For example, in this structure:

     struct {
       int a;
       struct {
         int a;
       };
     } foo;

it is ambiguous which 'a' is being referred to with 'foo.a'.  The
compiler gives errors for such constructs.

 Unless '-fms-extensions' is used, the unnamed field must be a structure
or union definition without a tag (for example, 'struct { int a; };').
If '-fms-extensions' is used, the field may also be a definition with a
tag such as 'struct foo { int a; };', a reference to a previously
defined structure or union such as 'struct foo;', or a reference to a
'typedef' name for a previously defined structure or union type.

 The option '-fplan9-extensions' enables '-fms-extensions' as well as
two other extensions.  First, a pointer to a structure is automatically
converted to a pointer to an anonymous field for assignments and
function calls.  For example:

     struct s1 { int a; };
     struct s2 { struct s1; };
     extern void f1 (struct s1 *);
     void f2 (struct s2 *p) { f1 (p); }

In the call to 'f1' inside 'f2', the pointer 'p' is converted into a
pointer to the anonymous field.

 Second, when the type of an anonymous field is a 'typedef' for a
'struct' or 'union', code may refer to the field using the name of the
'typedef'.

     typedef struct { int a; } s1;
     struct s2 { s1; };
     s1 f1 (struct s2 *p) { return p->s1; }

 These usages are only permitted when they are not ambiguous.


File: gcc.info,  Node: Thread-Local,  Next: Binary constants,  Prev: Unnamed Fields,  Up: C Extensions

6.62 Thread-Local Storage
=========================

Thread-local storage (TLS) is a mechanism by which variables are
allocated such that there is one instance of the variable per extant
thread.  The runtime model GCC uses to implement this originates in the
IA-64 processor-specific ABI, but has since been migrated to other
processors as well.  It requires significant support from the linker
('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and
'libpthread.so'), so it is not available everywhere.

 At the user level, the extension is visible with a new storage class
keyword: '__thread'.  For example:

     __thread int i;
     extern __thread struct state s;
     static __thread char *p;

 The '__thread' specifier may be used alone, with the 'extern' or
'static' specifiers, but with no other storage class specifier.  When
used with 'extern' or 'static', '__thread' must appear immediately after
the other storage class specifier.

 The '__thread' specifier may be applied to any global, file-scoped
static, function-scoped static, or static data member of a class.  It
may not be applied to block-scoped automatic or non-static data member.

 When the address-of operator is applied to a thread-local variable, it
is evaluated at run time and returns the address of the current thread's
instance of that variable.  An address so obtained may be used by any
thread.  When a thread terminates, any pointers to thread-local
variables in that thread become invalid.

 No static initialization may refer to the address of a thread-local
variable.

 In C++, if an initializer is present for a thread-local variable, it
must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
standard.

 See ELF Handling For Thread-Local Storage
(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of
the four thread-local storage addressing models, and how the runtime is
expected to function.

* Menu:

* C99 Thread-Local Edits::
* C++98 Thread-Local Edits::


File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local

6.62.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
-------------------------------------------------------

The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
document the exact semantics of the language extension.

   * '5.1.2 Execution environments'

     Add new text after paragraph 1

          Within either execution environment, a "thread" is a flow of
          control within a program.  It is implementation defined
          whether or not there may be more than one thread associated
          with a program.  It is implementation defined how threads
          beyond the first are created, the name and type of the
          function called at thread startup, and how threads may be
          terminated.  However, objects with thread storage duration
          shall be initialized before thread startup.

   * '6.2.4 Storage durations of objects'

     Add new text before paragraph 3

          An object whose identifier is declared with the storage-class
          specifier '__thread' has "thread storage duration".  Its
          lifetime is the entire execution of the thread, and its stored
          value is initialized only once, prior to thread startup.

   * '6.4.1 Keywords'

     Add '__thread'.

   * '6.7.1 Storage-class specifiers'

     Add '__thread' to the list of storage class specifiers in paragraph
     1.

     Change paragraph 2 to

          With the exception of '__thread', at most one storage-class
          specifier may be given [...].  The '__thread' specifier may be
          used alone, or immediately following 'extern' or 'static'.

     Add new text after paragraph 6

          The declaration of an identifier for a variable that has block
          scope that specifies '__thread' shall also specify either
          'extern' or 'static'.

          The '__thread' specifier shall be used only with variables.


File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local

6.62.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
--------------------------------------------------------

The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
that document the exact semantics of the language extension.

   * [intro.execution]

     New text after paragraph 4

          A "thread" is a flow of control within the abstract machine.
          It is implementation defined whether or not there may be more
          than one thread.

     New text after paragraph 7

          It is unspecified whether additional action must be taken to
          ensure when and whether side effects are visible to other
          threads.

   * [lex.key]

     Add '__thread'.

   * [basic.start.main]

     Add after paragraph 5

          The thread that begins execution at the 'main' function is
          called the "main thread".  It is implementation defined how
          functions beginning threads other than the main thread are
          designated or typed.  A function so designated, as well as the
          'main' function, is called a "thread startup function".  It is
          implementation defined what happens if a thread startup
          function returns.  It is implementation defined what happens
          to other threads when any thread calls 'exit'.

   * [basic.start.init]

     Add after paragraph 4

          The storage for an object of thread storage duration shall be
          statically initialized before the first statement of the
          thread startup function.  An object of thread storage duration
          shall not require dynamic initialization.

   * [basic.start.term]

     Add after paragraph 3

          The type of an object with thread storage duration shall not
          have a non-trivial destructor, nor shall it be an array type
          whose elements (directly or indirectly) have non-trivial
          destructors.

   * [basic.stc]

     Add "thread storage duration" to the list in paragraph 1.

     Change paragraph 2

          Thread, static, and automatic storage durations are associated
          with objects introduced by declarations [...].

     Add '__thread' to the list of specifiers in paragraph 3.

   * [basic.stc.thread]

     New section before [basic.stc.static]

          The keyword '__thread' applied to a non-local object gives the
          object thread storage duration.

          A local variable or class data member declared both 'static'
          and '__thread' gives the variable or member thread storage
          duration.

   * [basic.stc.static]

     Change paragraph 1

          All objects that have neither thread storage duration, dynamic
          storage duration nor are local [...].

   * [dcl.stc]

     Add '__thread' to the list in paragraph 1.

     Change paragraph 1

          With the exception of '__thread', at most one
          STORAGE-CLASS-SPECIFIER shall appear in a given
          DECL-SPECIFIER-SEQ.  The '__thread' specifier may be used
          alone, or immediately following the 'extern' or 'static'
          specifiers.  [...]

     Add after paragraph 5

          The '__thread' specifier can be applied only to the names of
          objects and to anonymous unions.

   * [class.mem]

     Add after paragraph 6

          Non-'static' members shall not be '__thread'.


File: gcc.info,  Node: Binary constants,  Prev: Thread-Local,  Up: C Extensions

6.63 Binary Constants using the '0b' Prefix
===========================================

Integer constants can be written as binary constants, consisting of a
sequence of '0' and '1' digits, prefixed by '0b' or '0B'.  This is
particularly useful in environments that operate a lot on the bit level
(like microcontrollers).

 The following statements are identical:

     i =       42;
     i =     0x2a;
     i =      052;
     i = 0b101010;

 The type of these constants follows the same rules as for octal or
hexadecimal integer constants, so suffixes like 'L' or 'UL' can be
applied.


File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top

7 Extensions to the C++ Language
********************************

The GNU compiler provides these extensions to the C++ language (and you
can also use most of the C language extensions in your C++ programs).
If you want to write code that checks whether these features are
available, you can test for the GNU compiler the same way as for C
programs: check for a predefined macro '__GNUC__'.  You can also use
'__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
(cpp)Common Predefined Macros.).

* Menu:

* C++ Volatiles::       What constitutes an access to a volatile object.
* Restricted Pointers:: C99 restricted pointers and references.
* Vague Linkage::       Where G++ puts inlines, vtables and such.
* C++ Interface::       You can use a single C++ header file for both
                        declarations and definitions.
* Template Instantiation:: Methods for ensuring that exactly one copy of
                        each needed template instantiation is emitted.
* Bound member functions:: You can extract a function pointer to the
                        method denoted by a '->*' or '.*' expression.
* C++ Attributes::      Variable, function, and type attributes for C++ only.
* Function Multiversioning::   Declaring multiple function versions.
* Namespace Association:: Strong using-directives for namespace association.
* Type Traits::         Compiler support for type traits
* Java Exceptions::     Tweaking exception handling to work with Java.
* Deprecated Features:: Things will disappear from G++.
* Backwards Compatibility:: Compatibilities with earlier definitions of C++.


File: gcc.info,  Node: C++ Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions

7.1 When is a Volatile C++ Object Accessed?
===========================================

The C++ standard differs from the C standard in its treatment of
volatile objects.  It fails to specify what constitutes a volatile
access, except to say that C++ should behave in a similar manner to C
with respect to volatiles, where possible.  However, the different
lvalueness of expressions between C and C++ complicate the behavior.
G++ behaves the same as GCC for volatile access, *Note Volatiles: C
Extensions, for a description of GCC's behavior.

 The C and C++ language specifications differ when an object is accessed
in a void context:

     volatile int *src = SOMEVALUE;
     *src;

 The C++ standard specifies that such expressions do not undergo lvalue
to rvalue conversion, and that the type of the dereferenced object may
be incomplete.  The C++ standard does not specify explicitly that it is
lvalue to rvalue conversion that is responsible for causing an access.
There is reason to believe that it is, because otherwise certain simple
expressions become undefined.  However, because it would surprise most
programmers, G++ treats dereferencing a pointer to volatile object of
complete type as GCC would do for an equivalent type in C.  When the
object has incomplete type, G++ issues a warning; if you wish to force
an error, you must force a conversion to rvalue with, for instance, a
static cast.

 When using a reference to volatile, G++ does not treat equivalent
expressions as accesses to volatiles, but instead issues a warning that
no volatile is accessed.  The rationale for this is that otherwise it
becomes difficult to determine where volatile access occur, and not
possible to ignore the return value from functions returning volatile
references.  Again, if you wish to force a read, cast the reference to
an rvalue.

 G++ implements the same behavior as GCC does when assigning to a
volatile object--there is no reread of the assigned-to object, the
assigned rvalue is reused.  Note that in C++ assignment expressions are
lvalues, and if used as an lvalue, the volatile object is referred to.
For instance, VREF refers to VOBJ, as expected, in the following
example:

     volatile int vobj;
     volatile int &vref = vobj = SOMETHING;


File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: C++ Volatiles,  Up: C++ Extensions

7.2 Restricting Pointer Aliasing
================================

As with the C front end, G++ understands the C99 feature of restricted
pointers, specified with the '__restrict__', or '__restrict' type
qualifier.  Because you cannot compile C++ by specifying the '-std=c99'
language flag, 'restrict' is not a keyword in C++.

 In addition to allowing restricted pointers, you can specify restricted
references, which indicate that the reference is not aliased in the
local context.

     void fn (int *__restrict__ rptr, int &__restrict__ rref)
     {
       /* ... */
     }

In the body of 'fn', RPTR points to an unaliased integer and RREF refers
to a (different) unaliased integer.

 You may also specify whether a member function's THIS pointer is
unaliased by using '__restrict__' as a member function qualifier.

     void T::fn () __restrict__
     {
       /* ... */
     }

Within the body of 'T::fn', THIS has the effective definition 'T
*__restrict__ const this'.  Notice that the interpretation of a
'__restrict__' member function qualifier is different to that of 'const'
or 'volatile' qualifier, in that it is applied to the pointer rather
than the object.  This is consistent with other compilers that implement
restricted pointers.

 As with all outermost parameter qualifiers, '__restrict__' is ignored
in function definition matching.  This means you only need to specify
'__restrict__' in a function definition, rather than in a function
prototype as well.


File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions

7.3 Vague Linkage
=================

There are several constructs in C++ that require space in the object
file but are not clearly tied to a single translation unit.  We say that
these constructs have "vague linkage".  Typically such constructs are
emitted wherever they are needed, though sometimes we can be more
clever.

Inline Functions
     Inline functions are typically defined in a header file which can
     be included in many different compilations.  Hopefully they can
     usually be inlined, but sometimes an out-of-line copy is necessary,
     if the address of the function is taken or if inlining fails.  In
     general, we emit an out-of-line copy in all translation units where
     one is needed.  As an exception, we only emit inline virtual
     functions with the vtable, since it always requires a copy.

     Local static variables and string constants used in an inline
     function are also considered to have vague linkage, since they must
     be shared between all inlined and out-of-line instances of the
     function.

VTables
     C++ virtual functions are implemented in most compilers using a
     lookup table, known as a vtable.  The vtable contains pointers to
     the virtual functions provided by a class, and each object of the
     class contains a pointer to its vtable (or vtables, in some
     multiple-inheritance situations).  If the class declares any
     non-inline, non-pure virtual functions, the first one is chosen as
     the "key method" for the class, and the vtable is only emitted in
     the translation unit where the key method is defined.

     _Note:_ If the chosen key method is later defined as inline, the
     vtable is still emitted in every translation unit that defines it.
     Make sure that any inline virtuals are declared inline in the class
     body, even if they are not defined there.

'type_info' objects
     C++ requires information about types to be written out in order to
     implement 'dynamic_cast', 'typeid' and exception handling.  For
     polymorphic classes (classes with virtual functions), the
     'type_info' object is written out along with the vtable so that
     'dynamic_cast' can determine the dynamic type of a class object at
     run time.  For all other types, we write out the 'type_info' object
     when it is used: when applying 'typeid' to an expression, throwing
     an object, or referring to a type in a catch clause or exception
     specification.

Template Instantiations
     Most everything in this section also applies to template
     instantiations, but there are other options as well.  *Note Where's
     the Template?: Template Instantiation.

 When used with GNU ld version 2.8 or later on an ELF system such as
GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
these constructs will be discarded at link time.  This is known as
COMDAT support.

 On targets that don't support COMDAT, but do support weak symbols, GCC
uses them.  This way one copy overrides all the others, but the unused
copies still take up space in the executable.

 For targets that do not support either COMDAT or weak symbols, most
entities with vague linkage are emitted as local symbols to avoid
duplicate definition errors from the linker.  This does not happen for
local statics in inlines, however, as having multiple copies almost
certainly breaks things.

 *Note Declarations and Definitions in One Header: C++ Interface, for
another way to control placement of these constructs.


File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions

7.4 C++ Interface and Implementation Pragmas
============================================

'#pragma interface' and '#pragma implementation' provide the user with a
way of explicitly directing the compiler to emit entities with vague
linkage (and debugging information) in a particular translation unit.

 _Note:_ These '#pragma's have been superceded as of GCC 2.7.2 by COMDAT
support and the "key method" heuristic mentioned in *note Vague
Linkage::.  Using them can actually cause your program to grow due to
unnecessary out-of-line copies of inline functions.

'#pragma interface'
'#pragma interface "SUBDIR/OBJECTS.h"'
     Use this directive in _header files_ that define object classes, to
     save space in most of the object files that use those classes.
     Normally, local copies of certain information (backup copies of
     inline member functions, debugging information, and the internal
     tables that implement virtual functions) must be kept in each
     object file that includes class definitions.  You can use this
     pragma to avoid such duplication.  When a header file containing
     '#pragma interface' is included in a compilation, this auxiliary
     information is not generated (unless the main input source file
     itself uses '#pragma implementation').  Instead, the object files
     contain references to be resolved at link time.

     The second form of this directive is useful for the case where you
     have multiple headers with the same name in different directories.
     If you use this form, you must specify the same string to '#pragma
     implementation'.

'#pragma implementation'
'#pragma implementation "OBJECTS.h"'
     Use this pragma in a _main input file_, when you want full output
     from included header files to be generated (and made globally
     visible).  The included header file, in turn, should use '#pragma
     interface'.  Backup copies of inline member functions, debugging
     information, and the internal tables used to implement virtual
     functions are all generated in implementation files.

     If you use '#pragma implementation' with no argument, it applies to
     an include file with the same basename(1) as your source file.  For
     example, in 'allclass.cc', giving just '#pragma implementation' by
     itself is equivalent to '#pragma implementation "allclass.h"'.

     Use the string argument if you want a single implementation file to
     include code from multiple header files.  (You must also use
     '#include' to include the header file; '#pragma implementation'
     only specifies how to use the file--it doesn't actually include
     it.)

     There is no way to split up the contents of a single header file
     into multiple implementation files.

 '#pragma implementation' and '#pragma interface' also have an effect on
function inlining.

 If you define a class in a header file marked with '#pragma interface',
the effect on an inline function defined in that class is similar to an
explicit 'extern' declaration--the compiler emits no code at all to
define an independent version of the function.  Its definition is used
only for inlining with its callers.

 Conversely, when you include the same header file in a main source file
that declares it as '#pragma implementation', the compiler emits code
for the function itself; this defines a version of the function that can
be found via pointers (or by callers compiled without inlining).  If all
calls to the function can be inlined, you can avoid emitting the
function by compiling with '-fno-implement-inlines'.  If any calls are
not inlined, you will get linker errors.

   ---------- Footnotes ----------

   (1) A file's "basename" is the name stripped of all leading path
information and of trailing suffixes, such as '.h' or '.C' or '.cc'.


File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions

7.5 Where's the Template?
=========================

C++ templates are the first language feature to require more
intelligence from the environment than one usually finds on a UNIX
system.  Somehow the compiler and linker have to make sure that each
template instance occurs exactly once in the executable if it is needed,
and not at all otherwise.  There are two basic approaches to this
problem, which are referred to as the Borland model and the Cfront
model.

Borland model
     Borland C++ solved the template instantiation problem by adding the
     code equivalent of common blocks to their linker; the compiler
     emits template instances in each translation unit that uses them,
     and the linker collapses them together.  The advantage of this
     model is that the linker only has to consider the object files
     themselves; there is no external complexity to worry about.  This
     disadvantage is that compilation time is increased because the
     template code is being compiled repeatedly.  Code written for this
     model tends to include definitions of all templates in the header
     file, since they must be seen to be instantiated.

Cfront model
     The AT&T C++ translator, Cfront, solved the template instantiation
     problem by creating the notion of a template repository, an
     automatically maintained place where template instances are stored.
     A more modern version of the repository works as follows: As
     individual object files are built, the compiler places any template
     definitions and instantiations encountered in the repository.  At
     link time, the link wrapper adds in the objects in the repository
     and compiles any needed instances that were not previously emitted.
     The advantages of this model are more optimal compilation speed and
     the ability to use the system linker; to implement the Borland
     model a compiler vendor also needs to replace the linker.  The
     disadvantages are vastly increased complexity, and thus potential
     for error; for some code this can be just as transparent, but in
     practice it can been very difficult to build multiple programs in
     one directory and one program in multiple directories.  Code
     written for this model tends to separate definitions of non-inline
     member templates into a separate file, which should be compiled
     separately.

 When used with GNU ld version 2.8 or later on an ELF system such as
GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
Borland model.  On other systems, G++ implements neither automatic
model.

 You have the following options for dealing with template
instantiations:

  1. Compile your template-using code with '-frepo'.  The compiler
     generates files with the extension '.rpo' listing all of the
     template instantiations used in the corresponding object files that
     could be instantiated there; the link wrapper, 'collect2', then
     updates the '.rpo' files to tell the compiler where to place those
     instantiations and rebuild any affected object files.  The
     link-time overhead is negligible after the first pass, as the
     compiler continues to place the instantiations in the same files.

     This is your best option for application code written for the
     Borland model, as it just works.  Code written for the Cfront model
     needs to be modified so that the template definitions are available
     at one or more points of instantiation; usually this is as simple
     as adding '#include <tmethods.cc>' to the end of each template
     header.

     For library code, if you want the library to provide all of the
     template instantiations it needs, just try to link all of its
     object files together; the link will fail, but cause the
     instantiations to be generated as a side effect.  Be warned,
     however, that this may cause conflicts if multiple libraries try to
     provide the same instantiations.  For greater control, use explicit
     instantiation as described in the next option.

  2. Compile your code with '-fno-implicit-templates' to disable the
     implicit generation of template instances, and explicitly
     instantiate all the ones you use.  This approach requires more
     knowledge of exactly which instances you need than do the others,
     but it's less mysterious and allows greater control.  You can
     scatter the explicit instantiations throughout your program,
     perhaps putting them in the translation units where the instances
     are used or the translation units that define the templates
     themselves; you can put all of the explicit instantiations you need
     into one big file; or you can create small files like

          #include "Foo.h"
          #include "Foo.cc"

          template class Foo<int>;
          template ostream& operator <<
                          (ostream&, const Foo<int>&);

     for each of the instances you need, and create a template
     instantiation library from those.

     If you are using Cfront-model code, you can probably get away with
     not using '-fno-implicit-templates' when compiling files that don't
     '#include' the member template definitions.

     If you use one big file to do the instantiations, you may want to
     compile it without '-fno-implicit-templates' so you get all of the
     instances required by your explicit instantiations (but not by any
     other files) without having to specify them as well.

     The ISO C++ 2011 standard allows forward declaration of explicit
     instantiations (with 'extern').  G++ supports explicit
     instantiation declarations in C++98 mode and has extended the
     template instantiation syntax to support instantiation of the
     compiler support data for a template class (i.e. the vtable)
     without instantiating any of its members (with 'inline'), and
     instantiation of only the static data members of a template class,
     without the support data or member functions (with 'static'):

          extern template int max (int, int);
          inline template class Foo<int>;
          static template class Foo<int>;

  3. Do nothing.  Pretend G++ does implement automatic instantiation
     management.  Code written for the Borland model works fine, but
     each translation unit contains instances of each of the templates
     it uses.  In a large program, this can lead to an unacceptable
     amount of code duplication.


File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions

7.6 Extracting the Function Pointer from a Bound Pointer to Member Function
===========================================================================

In C++, pointer to member functions (PMFs) are implemented using a wide
pointer of sorts to handle all the possible call mechanisms; the PMF
needs to store information about how to adjust the 'this' pointer, and
if the function pointed to is virtual, where to find the vtable, and
where in the vtable to look for the member function.  If you are using
PMFs in an inner loop, you should really reconsider that decision.  If
that is not an option, you can extract the pointer to the function that
would be called for a given object/PMF pair and call it directly inside
the inner loop, to save a bit of time.

 Note that you still pay the penalty for the call through a function
pointer; on most modern architectures, such a call defeats the branch
prediction features of the CPU.  This is also true of normal virtual
function calls.

 The syntax for this extension is

     extern A a;
     extern int (A::*fp)();
     typedef int (*fptr)(A *);

     fptr p = (fptr)(a.*fp);

 For PMF constants (i.e. expressions of the form '&Klasse::Member'), no
object is needed to obtain the address of the function.  They can be
converted to function pointers directly:

     fptr p1 = (fptr)(&A::foo);

 You must specify '-Wno-pmf-conversions' to use this extension.


File: gcc.info,  Node: C++ Attributes,  Next: Function Multiversioning,  Prev: Bound member functions,  Up: C++ Extensions

7.7 C++-Specific Variable, Function, and Type Attributes
========================================================

Some attributes only make sense for C++ programs.

'abi_tag ("TAG", ...)'
     The 'abi_tag' attribute can be applied to a function, variable, or
     class declaration.  It modifies the mangled name of the entity to
     incorporate the tag name, in order to distinguish the function or
     class from an earlier version with a different ABI; perhaps the
     class has changed size, or the function has a different return type
     that is not encoded in the mangled name.

     The attribute can also be applied to an inline namespace, but does
     not affect the mangled name of the namespace; in this case it is
     only used for '-Wabi-tag' warnings and automatic tagging of
     functions and variables.  Tagging inline namespaces is generally
     preferable to tagging individual declarations, but the latter is
     sometimes necessary, such as when only certain members of a class
     need to be tagged.

     The argument can be a list of strings of arbitrary length.  The
     strings are sorted on output, so the order of the list is
     unimportant.

     A redeclaration of an entity must not add new ABI tags, since doing
     so would change the mangled name.

     The ABI tags apply to a name, so all instantiations and
     specializations of a template have the same tags.  The attribute
     will be ignored if applied to an explicit specialization or
     instantiation.

     The '-Wabi-tag' flag enables a warning about a class which does not
     have all the ABI tags used by its subobjects and virtual functions;
     for users with code that needs to coexist with an earlier ABI,
     using this option can help to find all affected types that need to
     be tagged.

     When a type involving an ABI tag is used as the type of a variable
     or return type of a function where that tag is not already present
     in the signature of the function, the tag is automatically applied
     to the variable or function.  '-Wabi-tag' also warns about this
     situation; this warning can be avoided by explicitly tagging the
     variable or function or moving it into a tagged inline namespace.

'init_priority (PRIORITY)'

     In Standard C++, objects defined at namespace scope are guaranteed
     to be initialized in an order in strict accordance with that of
     their definitions _in a given translation unit_.  No guarantee is
     made for initializations across translation units.  However, GNU
     C++ allows users to control the order of initialization of objects
     defined at namespace scope with the 'init_priority' attribute by
     specifying a relative PRIORITY, a constant integral expression
     currently bounded between 101 and 65535 inclusive.  Lower numbers
     indicate a higher priority.

     In the following example, 'A' would normally be created before 'B',
     but the 'init_priority' attribute reverses that order:

          Some_Class  A  __attribute__ ((init_priority (2000)));
          Some_Class  B  __attribute__ ((init_priority (543)));

     Note that the particular values of PRIORITY do not matter; only
     their relative ordering.

'java_interface'

     This type attribute informs C++ that the class is a Java interface.
     It may only be applied to classes declared within an 'extern
     "Java"' block.  Calls to methods declared in this interface are
     dispatched using GCJ's interface table mechanism, instead of
     regular virtual table dispatch.

'warn_unused'

     For C++ types with non-trivial constructors and/or destructors it
     is impossible for the compiler to determine whether a variable of
     this type is truly unused if it is not referenced.  This type
     attribute informs the compiler that variables of this type should
     be warned about if they appear to be unused, just like variables of
     fundamental types.

     This attribute is appropriate for types which just represent a
     value, such as 'std::string'; it is not appropriate for types which
     control a resource, such as 'std::mutex'.

     This attribute is also accepted in C, but it is unnecessary because
     C does not have constructors or destructors.

 See also *note Namespace Association::.


File: gcc.info,  Node: Function Multiversioning,  Next: Namespace Association,  Prev: C++ Attributes,  Up: C++ Extensions

7.8 Function Multiversioning
============================

With the GNU C++ front end, for x86 targets, you may specify multiple
versions of a function, where each function is specialized for a
specific target feature.  At runtime, the appropriate version of the
function is automatically executed depending on the characteristics of
the execution platform.  Here is an example.

     __attribute__ ((target ("default")))
     int foo ()
     {
       // The default version of foo.
       return 0;
     }

     __attribute__ ((target ("sse4.2")))
     int foo ()
     {
       // foo version for SSE4.2
       return 1;
     }

     __attribute__ ((target ("arch=atom")))
     int foo ()
     {
       // foo version for the Intel ATOM processor
       return 2;
     }

     __attribute__ ((target ("arch=amdfam10")))
     int foo ()
     {
       // foo version for the AMD Family 0x10 processors.
       return 3;
     }

     int main ()
     {
       int (*p)() = &foo;
       assert ((*p) () == foo ());
       return 0;
     }

 In the above example, four versions of function foo are created.  The
first version of foo with the target attribute "default" is the default
version.  This version gets executed when no other target specific
version qualifies for execution on a particular platform.  A new version
of foo is created by using the same function signature but with a
different target string.  Function foo is called or a pointer to it is
taken just like a regular function.  GCC takes care of doing the
dispatching to call the right version at runtime.  Refer to the GCC wiki
on Function Multiversioning
(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details.


File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: Function Multiversioning,  Up: C++ Extensions

7.9 Namespace Association
=========================

*Caution:* The semantics of this extension are equivalent to C++ 2011
inline namespaces.  Users should use inline namespaces instead as this
extension will be removed in future versions of G++.

 A using-directive with '__attribute ((strong))' is stronger than a
normal using-directive in two ways:

   * Templates from the used namespace can be specialized and explicitly
     instantiated as though they were members of the using namespace.

   * The using namespace is considered an associated namespace of all
     templates in the used namespace for purposes of argument-dependent
     name lookup.

 The used namespace must be nested within the using namespace so that
normal unqualified lookup works properly.

 This is useful for composing a namespace transparently from
implementation namespaces.  For example:

     namespace std {
       namespace debug {
         template <class T> struct A { };
       }
       using namespace debug __attribute ((__strong__));
       template <> struct A<int> { };   // OK to specialize

       template <class T> void f (A<T>);
     }

     int main()
     {
       f (std::A<float>());             // lookup finds std::f
       f (std::A<int>());
     }


File: gcc.info,  Node: Type Traits,  Next: Java Exceptions,  Prev: Namespace Association,  Up: C++ Extensions

7.10 Type Traits
================

The C++ front end implements syntactic extensions that allow
compile-time determination of various characteristics of a type (or of a
pair of types).

'__has_nothrow_assign (type)'
     If 'type' is const qualified or is a reference type then the trait
     is false.  Otherwise if '__has_trivial_assign (type)' is true then
     the trait is true, else if 'type' is a cv class or union type with
     copy assignment operators that are known not to throw an exception
     then the trait is true, else it is false.  Requires: 'type' shall
     be a complete type, (possibly cv-qualified) 'void', or an array of
     unknown bound.

'__has_nothrow_copy (type)'
     If '__has_trivial_copy (type)' is true then the trait is true, else
     if 'type' is a cv class or union type with copy constructors that
     are known not to throw an exception then the trait is true, else it
     is false.  Requires: 'type' shall be a complete type, (possibly
     cv-qualified) 'void', or an array of unknown bound.

'__has_nothrow_constructor (type)'
     If '__has_trivial_constructor (type)' is true then the trait is
     true, else if 'type' is a cv class or union type (or array thereof)
     with a default constructor that is known not to throw an exception
     then the trait is true, else it is false.  Requires: 'type' shall
     be a complete type, (possibly cv-qualified) 'void', or an array of
     unknown bound.

'__has_trivial_assign (type)'
     If 'type' is const qualified or is a reference type then the trait
     is false.  Otherwise if '__is_pod (type)' is true then the trait is
     true, else if 'type' is a cv class or union type with a trivial
     copy assignment ([class.copy]) then the trait is true, else it is
     false.  Requires: 'type' shall be a complete type, (possibly
     cv-qualified) 'void', or an array of unknown bound.

'__has_trivial_copy (type)'
     If '__is_pod (type)' is true or 'type' is a reference type then the
     trait is true, else if 'type' is a cv class or union type with a
     trivial copy constructor ([class.copy]) then the trait is true,
     else it is false.  Requires: 'type' shall be a complete type,
     (possibly cv-qualified) 'void', or an array of unknown bound.

'__has_trivial_constructor (type)'
     If '__is_pod (type)' is true then the trait is true, else if 'type'
     is a cv class or union type (or array thereof) with a trivial
     default constructor ([class.ctor]) then the trait is true, else it
     is false.  Requires: 'type' shall be a complete type, (possibly
     cv-qualified) 'void', or an array of unknown bound.

'__has_trivial_destructor (type)'
     If '__is_pod (type)' is true or 'type' is a reference type then the
     trait is true, else if 'type' is a cv class or union type (or array
     thereof) with a trivial destructor ([class.dtor]) then the trait is
     true, else it is false.  Requires: 'type' shall be a complete type,
     (possibly cv-qualified) 'void', or an array of unknown bound.

'__has_virtual_destructor (type)'
     If 'type' is a class type with a virtual destructor ([class.dtor])
     then the trait is true, else it is false.  Requires: 'type' shall
     be a complete type, (possibly cv-qualified) 'void', or an array of
     unknown bound.

'__is_abstract (type)'
     If 'type' is an abstract class ([class.abstract]) then the trait is
     true, else it is false.  Requires: 'type' shall be a complete type,
     (possibly cv-qualified) 'void', or an array of unknown bound.

'__is_base_of (base_type, derived_type)'
     If 'base_type' is a base class of 'derived_type' ([class.derived])
     then the trait is true, otherwise it is false.  Top-level cv
     qualifications of 'base_type' and 'derived_type' are ignored.  For
     the purposes of this trait, a class type is considered is own base.
     Requires: if '__is_class (base_type)' and '__is_class
     (derived_type)' are true and 'base_type' and 'derived_type' are not
     the same type (disregarding cv-qualifiers), 'derived_type' shall be
     a complete type.  Diagnostic is produced if this requirement is not
     met.

'__is_class (type)'
     If 'type' is a cv class type, and not a union type
     ([basic.compound]) the trait is true, else it is false.

'__is_empty (type)'
     If '__is_class (type)' is false then the trait is false.  Otherwise
     'type' is considered empty if and only if: 'type' has no non-static
     data members, or all non-static data members, if any, are
     bit-fields of length 0, and 'type' has no virtual members, and
     'type' has no virtual base classes, and 'type' has no base classes
     'base_type' for which '__is_empty (base_type)' is false.  Requires:
     'type' shall be a complete type, (possibly cv-qualified) 'void', or
     an array of unknown bound.

'__is_enum (type)'
     If 'type' is a cv enumeration type ([basic.compound]) the trait is
     true, else it is false.

'__is_literal_type (type)'
     If 'type' is a literal type ([basic.types]) the trait is true, else
     it is false.  Requires: 'type' shall be a complete type, (possibly
     cv-qualified) 'void', or an array of unknown bound.

'__is_pod (type)'
     If 'type' is a cv POD type ([basic.types]) then the trait is true,
     else it is false.  Requires: 'type' shall be a complete type,
     (possibly cv-qualified) 'void', or an array of unknown bound.

'__is_polymorphic (type)'
     If 'type' is a polymorphic class ([class.virtual]) then the trait
     is true, else it is false.  Requires: 'type' shall be a complete
     type, (possibly cv-qualified) 'void', or an array of unknown bound.

'__is_standard_layout (type)'
     If 'type' is a standard-layout type ([basic.types]) the trait is
     true, else it is false.  Requires: 'type' shall be a complete type,
     (possibly cv-qualified) 'void', or an array of unknown bound.

'__is_trivial (type)'
     If 'type' is a trivial type ([basic.types]) the trait is true, else
     it is false.  Requires: 'type' shall be a complete type, (possibly
     cv-qualified) 'void', or an array of unknown bound.

'__is_union (type)'
     If 'type' is a cv union type ([basic.compound]) the trait is true,
     else it is false.

'__underlying_type (type)'
     The underlying type of 'type'.  Requires: 'type' shall be an
     enumeration type ([dcl.enum]).


File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions

7.11 Java Exceptions
====================

The Java language uses a slightly different exception handling model
from C++.  Normally, GNU C++ automatically detects when you are writing
C++ code that uses Java exceptions, and handle them appropriately.
However, if C++ code only needs to execute destructors when Java
exceptions are thrown through it, GCC guesses incorrectly.  Sample
problematic code is:

       struct S { ~S(); };
       extern void bar();    // is written in Java, and may throw exceptions
       void foo()
       {
         S s;
         bar();
       }

The usual effect of an incorrect guess is a link failure, complaining of
a missing routine called '__gxx_personality_v0'.

 You can inform the compiler that Java exceptions are to be used in a
translation unit, irrespective of what it might think, by writing
'#pragma GCC java_exceptions' at the head of the file.  This '#pragma'
must appear before any functions that throw or catch exceptions, or run
destructors when exceptions are thrown through them.

 You cannot mix Java and C++ exceptions in the same translation unit.
It is believed to be safe to throw a C++ exception from one file through
another file compiled for the Java exception model, or vice versa, but
there may be bugs in this area.


File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions

7.12 Deprecated Features
========================

In the past, the GNU C++ compiler was extended to experiment with new
features, at a time when the C++ language was still evolving.  Now that
the C++ standard is complete, some of those features are superseded by
superior alternatives.  Using the old features might cause a warning in
some cases that the feature will be dropped in the future.  In other
cases, the feature might be gone already.

 While the list below is not exhaustive, it documents some of the
options that are now deprecated:

'-fexternal-templates'
'-falt-external-templates'
     These are two of the many ways for G++ to implement template
     instantiation.  *Note Template Instantiation::.  The C++ standard
     clearly defines how template definitions have to be organized
     across implementation units.  G++ has an implicit instantiation
     mechanism that should work just fine for standard-conforming code.

'-fstrict-prototype'
'-fno-strict-prototype'
     Previously it was possible to use an empty prototype parameter list
     to indicate an unspecified number of parameters (like C), rather
     than no parameters, as C++ demands.  This feature has been removed,
     except where it is required for backwards compatibility.  *Note
     Backwards Compatibility::.

 G++ allows a virtual function returning 'void *' to be overridden by
one returning a different pointer type.  This extension to the covariant
return type rules is now deprecated and will be removed from a future
version.

 The G++ minimum and maximum operators ('<?' and '>?') and their
compound forms ('<?=') and '>?=') have been deprecated and are now
removed from G++.  Code using these operators should be modified to use
'std::min' and 'std::max' instead.

 The named return value extension has been deprecated, and is now
removed from G++.

 The use of initializer lists with new expressions has been deprecated,
and is now removed from G++.

 Floating and complex non-type template parameters have been deprecated,
and are now removed from G++.

 The implicit typename extension has been deprecated and is now removed
from G++.

 The use of default arguments in function pointers, function typedefs
and other places where they are not permitted by the standard is
deprecated and will be removed from a future version of G++.

 G++ allows floating-point literals to appear in integral constant
expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is
deprecated and will be removed from a future version.

 G++ allows static data members of const floating-point type to be
declared with an initializer in a class definition.  The standard only
allows initializers for static members of const integral types and const
enumeration types so this extension has been deprecated and will be
removed from a future version.


File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions

7.13 Backwards Compatibility
============================

Now that there is a definitive ISO standard C++, G++ has a specification
to adhere to.  The C++ language evolved over time, and features that
used to be acceptable in previous drafts of the standard, such as the
ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
to allow compilation of C++ written to such drafts, G++ contains some
backwards compatibilities.  _All such backwards compatibility features
are liable to disappear in future versions of G++._  They should be
considered deprecated.  *Note Deprecated Features::.

'For scope'
     If a variable is declared at for scope, it used to remain in scope
     until the end of the scope that contained the for statement (rather
     than just within the for scope).  G++ retains this, but issues a
     warning, if such a variable is accessed outside the for scope.

'Implicit C language'
     Old C system header files did not contain an 'extern "C" {...}'
     scope to set the language.  On such systems, all header files are
     implicitly scoped inside a C language scope.  Also, an empty
     prototype '()' is treated as an unspecified number of arguments,
     rather than no arguments, as C++ demands.


File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top

8 GNU Objective-C Features
**************************

This document is meant to describe some of the GNU Objective-C features.
It is not intended to teach you Objective-C. There are several resources
on the Internet that present the language.

* Menu:

* GNU Objective-C runtime API::
* Executing code before main::
* Type encoding::
* Garbage Collection::
* Constant string objects::
* compatibility_alias::
* Exceptions::
* Synchronization::
* Fast enumeration::
* Messaging with the GNU Objective-C runtime::


File: gcc.info,  Node: GNU Objective-C runtime API,  Next: Executing code before main,  Up: Objective-C

8.1 GNU Objective-C Runtime API
===============================

This section is specific for the GNU Objective-C runtime.  If you are
using a different runtime, you can skip it.

 The GNU Objective-C runtime provides an API that allows you to interact
with the Objective-C runtime system, querying the live runtime
structures and even manipulating them.  This allows you for example to
inspect and navigate classes, methods and protocols; to define new
classes or new methods, and even to modify existing classes or
protocols.

 If you are using a "Foundation" library such as GNUstep-Base, this
library will provide you with a rich set of functionality to do most of
the inspection tasks, and you probably will only need direct access to
the GNU Objective-C runtime API to define new classes or methods.

* Menu:

* Modern GNU Objective-C runtime API::
* Traditional GNU Objective-C runtime API::


File: gcc.info,  Node: Modern GNU Objective-C runtime API,  Next: Traditional GNU Objective-C runtime API,  Up: GNU Objective-C runtime API

8.1.1 Modern GNU Objective-C Runtime API
----------------------------------------

The GNU Objective-C runtime provides an API which is similar to the one
provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime.  The
API is documented in the public header files of the GNU Objective-C
runtime:

   * 'objc/objc.h': this is the basic Objective-C header file, defining
     the basic Objective-C types such as 'id', 'Class' and 'BOOL'.  You
     have to include this header to do almost anything with Objective-C.

   * 'objc/runtime.h': this header declares most of the public runtime
     API functions allowing you to inspect and manipulate the
     Objective-C runtime data structures.  These functions are fairly
     standardized across Objective-C runtimes and are almost identical
     to the Apple/NeXT Objective-C runtime ones.  It does not declare
     functions in some specialized areas (constructing and forwarding
     message invocations, threading) which are in the other headers
     below.  You have to include 'objc/objc.h' and 'objc/runtime.h' to
     use any of the functions, such as 'class_getName()', declared in
     'objc/runtime.h'.

   * 'objc/message.h': this header declares public functions used to
     construct, deconstruct and forward message invocations.  Because
     messaging is done in quite a different way on different runtimes,
     functions in this header are specific to the GNU Objective-C
     runtime implementation.

   * 'objc/objc-exception.h': this header declares some public functions
     related to Objective-C exceptions.  For example functions in this
     header allow you to throw an Objective-C exception from plain C/C++
     code.

   * 'objc/objc-sync.h': this header declares some public functions
     related to the Objective-C '@synchronized()' syntax, allowing you
     to emulate an Objective-C '@synchronized()' block in plain C/C++
     code.

   * 'objc/thr.h': this header declares a public runtime API threading
     layer that is only provided by the GNU Objective-C runtime.  It
     declares functions such as 'objc_mutex_lock()', which provide a
     platform-independent set of threading functions.

 The header files contain detailed documentation for each function in
the GNU Objective-C runtime API.


File: gcc.info,  Node: Traditional GNU Objective-C runtime API,  Prev: Modern GNU Objective-C runtime API,  Up: GNU Objective-C runtime API

8.1.2 Traditional GNU Objective-C Runtime API
---------------------------------------------

The GNU Objective-C runtime used to provide a different API, which we
call the "traditional" GNU Objective-C runtime API. Functions belonging
to this API are easy to recognize because they use a different naming
convention, such as 'class_get_super_class()' (traditional API) instead
of 'class_getSuperclass()' (modern API). Software using this API
includes the file 'objc/objc-api.h' where it is declared.

 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer
available.


File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: GNU Objective-C runtime API,  Up: Objective-C

8.2 '+load': Executing Code before 'main'
=========================================

This section is specific for the GNU Objective-C runtime.  If you are
using a different runtime, you can skip it.

 The GNU Objective-C runtime provides a way that allows you to execute
code before the execution of the program enters the 'main' function.
The code is executed on a per-class and a per-category basis, through a
special class method '+load'.

 This facility is very useful if you want to initialize global variables
which can be accessed by the program directly, without sending a message
to the class first.  The usual way to initialize global variables, in
the '+initialize' method, might not be useful because '+initialize' is
only called when the first message is sent to a class object, which in
some cases could be too late.

 Suppose for example you have a 'FileStream' class that declares
'Stdin', 'Stdout' and 'Stderr' as global variables, like below:


     FileStream *Stdin = nil;
     FileStream *Stdout = nil;
     FileStream *Stderr = nil;

     @implementation FileStream

     + (void)initialize
     {
         Stdin = [[FileStream new] initWithFd:0];
         Stdout = [[FileStream new] initWithFd:1];
         Stderr = [[FileStream new] initWithFd:2];
     }

     /* Other methods here */
     @end


 In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr'
in '+initialize' occurs too late.  The programmer can send a message to
one of these objects before the variables are actually initialized, thus
sending messages to the 'nil' object.  The '+initialize' method which
actually initializes the global variables is not invoked until the first
message is sent to the class object.  The solution would require these
variables to be initialized just before entering 'main'.

 The correct solution of the above problem is to use the '+load' method
instead of '+initialize':


     @implementation FileStream

     + (void)load
     {
         Stdin = [[FileStream new] initWithFd:0];
         Stdout = [[FileStream new] initWithFd:1];
         Stderr = [[FileStream new] initWithFd:2];
     }

     /* Other methods here */
     @end


 The '+load' is a method that is not overridden by categories.  If a
class and a category of it both implement '+load', both methods are
invoked.  This allows some additional initializations to be performed in
a category.

 This mechanism is not intended to be a replacement for '+initialize'.
You should be aware of its limitations when you decide to use it instead
of '+initialize'.

* Menu:

* What you can and what you cannot do in +load::


File: gcc.info,  Node: What you can and what you cannot do in +load,  Up: Executing code before main

8.2.1 What You Can and Cannot Do in '+load'
-------------------------------------------

'+load' is to be used only as a last resort.  Because it is executed
very early, most of the Objective-C runtime machinery will not be ready
when '+load' is executed; hence '+load' works best for executing C code
that is independent on the Objective-C runtime.

 The '+load' implementation in the GNU runtime guarantees you the
following things:

   * you can write whatever C code you like;

   * you can allocate and send messages to objects whose class is
     implemented in the same file;

   * the '+load' implementation of all super classes of a class are
     executed before the '+load' of that class is executed;

   * the '+load' implementation of a class is executed before the
     '+load' implementation of any category.

 In particular, the following things, even if they can work in a
particular case, are not guaranteed:

   * allocation of or sending messages to arbitrary objects;

   * allocation of or sending messages to objects whose classes have a
     category implemented in the same file;

   * sending messages to Objective-C constant strings ('@"this is a
     constant string"');

 You should make no assumptions about receiving '+load' in sibling
classes when you write '+load' of a class.  The order in which sibling
classes receive '+load' is not guaranteed.

 The order in which '+load' and '+initialize' are called could be
problematic if this matters.  If you don't allocate objects inside
'+load', it is guaranteed that '+load' is called before '+initialize'.
If you create an object inside '+load' the '+initialize' method of
object's class is invoked even if '+load' was not invoked.  Note if you
explicitly call '+load' on a class, '+initialize' will be called first.
To avoid possible problems try to implement only one of these methods.

 The '+load' method is also invoked when a bundle is dynamically loaded
into your running program.  This happens automatically without any
intervening operation from you.  When you write bundles and you need to
write '+load' you can safely create and send messages to objects whose
classes already exist in the running program.  The same restrictions as
above apply to classes defined in bundle.


File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C

8.3 Type Encoding
=================

This is an advanced section.  Type encodings are used extensively by the
compiler and by the runtime, but you generally do not need to know about
them to use Objective-C.

 The Objective-C compiler generates type encodings for all the types.
These type encodings are used at runtime to find out information about
selectors and methods and about objects and classes.

 The types are encoded in the following way:

'_Bool'            'B'
'char'             'c'
'unsigned char'    'C'
'short'            's'
'unsigned short'   'S'
'int'              'i'
'unsigned int'     'I'
'long'             'l'
'unsigned long'    'L'
'long long'        'q'
'unsigned long     'Q'
long'
'float'            'f'
'double'           'd'
'long double'      'D'
'void'             'v'
'id'               '@'
'Class'            '#'
'SEL'              ':'
'char*'            '*'
'enum'             an 'enum' is encoded exactly as the integer type
                   that the compiler uses for it, which depends on the
                   enumeration values.  Often the compiler users
                   'unsigned int', which is then encoded as 'I'.
unknown type       '?'
Complex types      'j' followed by the inner type.  For example
                   '_Complex double' is encoded as "jd".
bit-fields         'b' followed by the starting position of the
                   bit-field, the type of the bit-field and the size of
                   the bit-field (the bit-fields encoding was changed
                   from the NeXT's compiler encoding, see below)

 The encoding of bit-fields has changed to allow bit-fields to be
properly handled by the runtime functions that compute sizes and
alignments of types that contain bit-fields.  The previous encoding
contained only the size of the bit-field.  Using only this information
it is not possible to reliably compute the size occupied by the
bit-field.  This is very important in the presence of the Boehm's
garbage collector because the objects are allocated using the typed
memory facility available in this collector.  The typed memory
allocation requires information about where the pointers are located
inside the object.

 The position in the bit-field is the position, counting in bits, of the
bit closest to the beginning of the structure.

 The non-atomic types are encoded as follows:

pointers       '^' followed by the pointed type.
arrays         '[' followed by the number of elements in the array
               followed by the type of the elements followed by ']'
structures     '{' followed by the name of the structure (or '?' if the
               structure is unnamed), the '=' sign, the type of the
               members and by '}'
unions         '(' followed by the name of the structure (or '?' if the
               union is unnamed), the '=' sign, the type of the members
               followed by ')'
vectors        '![' followed by the vector_size (the number of bytes
               composing the vector) followed by a comma, followed by
               the alignment (in bytes) of the vector, followed by the
               type of the elements followed by ']'

 Here are some types and their encodings, as they are generated by the
compiler on an i386 machine:


Objective-C type   Compiler encoding
     int a[10];    '[10i]'
     struct {      '{?=i[3f]b128i3b131i2c}'
       int i;
       float f[3];
       int a:3;
       int b:2;
       char c;
     }
     int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment would depend on the machine)


 In addition to the types the compiler also encodes the type specifiers.
The table below describes the encoding of the current Objective-C type
specifiers:


Specifier          Encoding
'const'            'r'
'in'               'n'
'inout'            'N'
'out'              'o'
'bycopy'           'O'
'byref'            'R'
'oneway'           'V'


 The type specifiers are encoded just before the type.  Unlike types
however, the type specifiers are only encoded when they appear in method
argument types.

 Note how 'const' interacts with pointers:


Objective-C type   Compiler encoding
     const int     'ri'
     const int*    '^ri'
     int *const    'r^i'


 'const int*' is a pointer to a 'const int', and so is encoded as '^ri'.
'int* const', instead, is a 'const' pointer to an 'int', and so is
encoded as 'r^i'.

 Finally, there is a complication when encoding 'const char *' versus
'char * const'.  Because 'char *' is encoded as '*' and not as '^c',
there is no way to express the fact that 'r' applies to the pointer or
to the pointee.

 Hence, it is assumed as a convention that 'r*' means 'const char *'
(since it is what is most often meant), and there is no way to encode
'char *const'.  'char *const' would simply be encoded as '*', and the
'const' is lost.

* Menu:

* Legacy type encoding::
* @encode::
* Method signatures::


File: gcc.info,  Node: Legacy type encoding,  Next: @encode,  Up: Type encoding

8.3.1 Legacy Type Encoding
--------------------------

Unfortunately, historically GCC used to have a number of bugs in its
encoding code.  The NeXT runtime expects GCC to emit type encodings in
this historical format (compatible with GCC-3.3), so when using the NeXT
runtime, GCC will introduce on purpose a number of incorrect encodings:

   * the read-only qualifier of the pointee gets emitted before the '^'.
     The read-only qualifier of the pointer itself gets ignored, unless
     it is a typedef.  Also, the 'r' is only emitted for the outermost
     type.

   * 32-bit longs are encoded as 'l' or 'L', but not always.  For
     typedefs, the compiler uses 'i' or 'I' instead if encoding a struct
     field or a pointer.

   * 'enum's are always encoded as 'i' (int) even if they are actually
     unsigned or long.

 In addition to that, the NeXT runtime uses a different encoding for
bitfields.  It encodes them as 'b' followed by the size, without a bit
offset or the underlying field type.


File: gcc.info,  Node: @encode,  Next: Method signatures,  Prev: Legacy type encoding,  Up: Type encoding

8.3.2 '@encode'
---------------

GNU Objective-C supports the '@encode' syntax that allows you to create
a type encoding from a C/Objective-C type.  For example, '@encode(int)'
is compiled by the compiler into '"i"'.

 '@encode' does not support type qualifiers other than 'const'.  For
example, '@encode(const char*)' is valid and is compiled into '"r*"',
while '@encode(bycopy char *)' is invalid and will cause a compilation
error.


File: gcc.info,  Node: Method signatures,  Prev: @encode,  Up: Type encoding

8.3.3 Method Signatures
-----------------------

This section documents the encoding of method types, which is rarely
needed to use Objective-C. You should skip it at a first reading; the
runtime provides functions that will work on methods and can walk
through the list of parameters and interpret them for you.  These
functions are part of the public "API" and are the preferred way to
interact with method signatures from user code.

 But if you need to debug a problem with method signatures and need to
know how they are implemented (i.e., the "ABI"), read on.

 Methods have their "signature" encoded and made available to the
runtime.  The "signature" encodes all the information required to
dynamically build invocations of the method at runtime: return type and
arguments.

 The "signature" is a null-terminated string, composed of the following:

   * The return type, including type qualifiers.  For example, a method
     returning 'int' would have 'i' here.

   * The total size (in bytes) required to pass all the parameters.
     This includes the two hidden parameters (the object 'self' and the
     method selector '_cmd').

   * Each argument, with the type encoding, followed by the offset (in
     bytes) of the argument in the list of parameters.

 For example, a method with no arguments and returning 'int' would have
the signature 'i8@0:4' if the size of a pointer is 4.  The signature is
interpreted as follows: the 'i' is the return type (an 'int'), the '8'
is the total size of the parameters in bytes (two pointers each of size
4), the '@0' is the first parameter (an object at byte offset '0') and
':4' is the second parameter (a 'SEL' at byte offset '4').

 You can easily find more examples by running the "strings" program on
an Objective-C object file compiled by GCC. You'll see a lot of strings
that look very much like 'i8@0:4'.  They are signatures of Objective-C
methods.


File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C

8.4 Garbage Collection
======================

This section is specific for the GNU Objective-C runtime.  If you are
using a different runtime, you can skip it.

 Support for garbage collection with the GNU runtime has been added by
using a powerful conservative garbage collector, known as the
Boehm-Demers-Weiser conservative garbage collector.

 To enable the support for it you have to configure the compiler using
an additional argument, '--enable-objc-gc'.  This will build the
boehm-gc library, and build an additional runtime library which has
several enhancements to support the garbage collector.  The new library
has a new name, 'libobjc_gc.a' to not conflict with the
non-garbage-collected library.

 When the garbage collector is used, the objects are allocated using the
so-called typed memory allocation mechanism available in the
Boehm-Demers-Weiser collector.  This mode requires precise information
on where pointers are located inside objects.  This information is
computed once per class, immediately after the class has been
initialized.

 There is a new runtime function 'class_ivar_set_gcinvisible()' which
can be used to declare a so-called "weak pointer" reference.  Such a
pointer is basically hidden for the garbage collector; this can be
useful in certain situations, especially when you want to keep track of
the allocated objects, yet allow them to be collected.  This kind of
pointers can only be members of objects, you cannot declare a global
pointer as a weak reference.  Every type which is a pointer type can be
declared a weak pointer, including 'id', 'Class' and 'SEL'.

 Here is an example of how to use this feature.  Suppose you want to
implement a class whose instances hold a weak pointer reference; the
following class does this:


     @interface WeakPointer : Object
     {
         const void* weakPointer;
     }

     - initWithPointer:(const void*)p;
     - (const void*)weakPointer;
     @end


     @implementation WeakPointer

     + (void)initialize
     {
       if (self == objc_lookUpClass ("WeakPointer"))
         class_ivar_set_gcinvisible (self, "weakPointer", YES);
     }

     - initWithPointer:(const void*)p
     {
       weakPointer = p;
       return self;
     }

     - (const void*)weakPointer
     {
       return weakPointer;
     }

     @end


 Weak pointers are supported through a new type character specifier
represented by the '!' character.  The 'class_ivar_set_gcinvisible()'
function adds or removes this specifier to the string type description
of the instance variable named as argument.


File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C

8.5 Constant String Objects
===========================

GNU Objective-C provides constant string objects that are generated
directly by the compiler.  You declare a constant string object by
prefixing a C constant string with the character '@':

       id myString = @"this is a constant string object";

 The constant string objects are by default instances of the
'NXConstantString' class which is provided by the GNU Objective-C
runtime.  To get the definition of this class you must include the
'objc/NXConstStr.h' header file.

 User defined libraries may want to implement their own constant string
class.  To be able to support them, the GNU Objective-C compiler
provides a new command line options
'-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
to a strict structure, the same as 'NXConstantString''s structure:


     @interface MyConstantStringClass
     {
       Class isa;
       char *c_string;
       unsigned int len;
     }
     @end


 'NXConstantString' inherits from 'Object'; user class libraries may
choose to inherit the customized constant string class from a different
class than 'Object'.  There is no requirement in the methods the
constant string class has to implement, but the final ivar layout of the
class must be the compatible with the given structure.

 When the compiler creates the statically allocated constant string
object, the 'c_string' field will be filled by the compiler with the
string; the 'length' field will be filled by the compiler with the
string length; the 'isa' pointer will be filled with 'NULL' by the
compiler, and it will later be fixed up automatically at runtime by the
GNU Objective-C runtime library to point to the class which was set by
the '-fconstant-string-class' option when the object file is loaded (if
you wonder how it works behind the scenes, the name of the class to use,
and the list of static objects to fixup, are stored by the compiler in
the object file in a place where the GNU runtime library will find them
at runtime).

 As a result, when a file is compiled with the '-fconstant-string-class'
option, all the constant string objects will be instances of the class
specified as argument to this option.  It is possible to have multiple
compilation units referring to different constant string classes,
neither the compiler nor the linker impose any restrictions in doing
this.


File: gcc.info,  Node: compatibility_alias,  Next: Exceptions,  Prev: Constant string objects,  Up: Objective-C

8.6 'compatibility_alias'
=========================

The keyword '@compatibility_alias' allows you to define a class name as
equivalent to another class name.  For example:

     @compatibility_alias WOApplication GSWApplication;

 tells the compiler that each time it encounters 'WOApplication' as a
class name, it should replace it with 'GSWApplication' (that is,
'WOApplication' is just an alias for 'GSWApplication').

 There are some constraints on how this can be used--

   * 'WOApplication' (the alias) must not be an existing class;

   * 'GSWApplication' (the real class) must be an existing class.


File: gcc.info,  Node: Exceptions,  Next: Synchronization,  Prev: compatibility_alias,  Up: Objective-C

8.7 Exceptions
==============

GNU Objective-C provides exception support built into the language, as
in the following example:

       @try {
         ...
            @throw expr;
         ...
       }
       @catch (AnObjCClass *exc) {
         ...
           @throw expr;
         ...
           @throw;
         ...
       }
       @catch (AnotherClass *exc) {
         ...
       }
       @catch (id allOthers) {
         ...
       }
       @finally {
         ...
           @throw expr;
         ...
       }

 The '@throw' statement may appear anywhere in an Objective-C or
Objective-C++ program; when used inside of a '@catch' block, the
'@throw' may appear without an argument (as shown above), in which case
the object caught by the '@catch' will be rethrown.

 Note that only (pointers to) Objective-C objects may be thrown and
caught using this scheme.  When an object is thrown, it will be caught
by the nearest '@catch' clause capable of handling objects of that type,
analogously to how 'catch' blocks work in C++ and Java.  A '@catch(id
...)' clause (as shown above) may also be provided to catch any and all
Objective-C exceptions not caught by previous '@catch' clauses (if any).

 The '@finally' clause, if present, will be executed upon exit from the
immediately preceding '@try ... @catch' section.  This will happen
regardless of whether any exceptions are thrown, caught or rethrown
inside the '@try ... @catch' section, analogously to the behavior of the
'finally' clause in Java.

 There are several caveats to using the new exception mechanism:

   * The '-fobjc-exceptions' command line option must be used when
     compiling Objective-C files that use exceptions.

   * With the GNU runtime, exceptions are always implemented as "native"
     exceptions and it is recommended that the '-fexceptions' and
     '-shared-libgcc' options are used when linking.

   * With the NeXT runtime, although currently designed to be binary
     compatible with 'NS_HANDLER'-style idioms provided by the
     'NSException' class, the new exceptions can only be used on Mac OS
     X 10.3 (Panther) and later systems, due to additional functionality
     needed in the NeXT Objective-C runtime.

   * As mentioned above, the new exceptions do not support handling
     types other than Objective-C objects.  Furthermore, when used from
     Objective-C++, the Objective-C exception model does not
     interoperate with C++ exceptions at this time.  This means you
     cannot '@throw' an exception from Objective-C and 'catch' it in
     C++, or vice versa (i.e., 'throw ... @catch').


File: gcc.info,  Node: Synchronization,  Next: Fast enumeration,  Prev: Exceptions,  Up: Objective-C

8.8 Synchronization
===================

GNU Objective-C provides support for synchronized blocks:

       @synchronized (ObjCClass *guard) {
         ...
       }

 Upon entering the '@synchronized' block, a thread of execution shall
first check whether a lock has been placed on the corresponding 'guard'
object by another thread.  If it has, the current thread shall wait
until the other thread relinquishes its lock.  Once 'guard' becomes
available, the current thread will place its own lock on it, execute the
code contained in the '@synchronized' block, and finally relinquish the
lock (thereby making 'guard' available to other threads).

 Unlike Java, Objective-C does not allow for entire methods to be marked
'@synchronized'.  Note that throwing exceptions out of '@synchronized'
blocks is allowed, and will cause the guarding object to be unlocked
properly.

 Because of the interactions between synchronization and exception
handling, you can only use '@synchronized' when compiling with
exceptions enabled, that is with the command line option
'-fobjc-exceptions'.


File: gcc.info,  Node: Fast enumeration,  Next: Messaging with the GNU Objective-C runtime,  Prev: Synchronization,  Up: Objective-C

8.9 Fast Enumeration
====================

* Menu:

* Using fast enumeration::
* c99-like fast enumeration syntax::
* Fast enumeration details::
* Fast enumeration protocol::


File: gcc.info,  Node: Using fast enumeration,  Next: c99-like fast enumeration syntax,  Up: Fast enumeration

8.9.1 Using Fast Enumeration
----------------------------

GNU Objective-C provides support for the fast enumeration syntax:

       id array = ...;
       id object;

       for (object in array)
       {
         /* Do something with 'object' */
       }

 'array' needs to be an Objective-C object (usually a collection object,
for example an array, a dictionary or a set) which implements the "Fast
Enumeration Protocol" (see below).  If you are using a Foundation
library such as GNUstep Base or Apple Cocoa Foundation, all collection
objects in the library implement this protocol and can be used in this
way.

 The code above would iterate over all objects in 'array'.  For each of
them, it assigns it to 'object', then executes the 'Do something with
'object'' statements.

 Here is a fully worked-out example using a Foundation library (which
provides the implementation of 'NSArray', 'NSString' and 'NSLog'):

       NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil];
       NSString *object;

       for (object in array)
         NSLog (@"Iterating over %@", object);


File: gcc.info,  Node: c99-like fast enumeration syntax,  Next: Fast enumeration details,  Prev: Using fast enumeration,  Up: Fast enumeration

8.9.2 C99-Like Fast Enumeration Syntax
--------------------------------------

A c99-like declaration syntax is also allowed:

       id array = ...;

       for (id object in array)
       {
         /* Do something with 'object'  */
       }

 this is completely equivalent to:

       id array = ...;

       {
         id object;
         for (object in array)
         {
           /* Do something with 'object'  */
         }
       }

 but can save some typing.

 Note that the option '-std=c99' is not required to allow this syntax in
Objective-C.


File: gcc.info,  Node: Fast enumeration details,  Next: Fast enumeration protocol,  Prev: c99-like fast enumeration syntax,  Up: Fast enumeration

8.9.3 Fast Enumeration Details
------------------------------

Here is a more technical description with the gory details.  Consider
the code

       for (OBJECT EXPRESSION in COLLECTION EXPRESSION)
       {
         STATEMENTS
       }

 here is what happens when you run it:

   * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is
     used as the collection object to iterate over.  This means it is
     safe to write code such as 'for (object in [NSDictionary
     keyEnumerator]) ...'.

   * the iteration is implemented by the compiler by repeatedly getting
     batches of objects from the collection object using the fast
     enumeration protocol (see below), then iterating over all objects
     in the batch.  This is faster than a normal enumeration where
     objects are retrieved one by one (hence the name "fast
     enumeration").

   * if there are no objects in the collection, then 'OBJECT EXPRESSION'
     is set to 'nil' and the loop immediately terminates.

   * if there are objects in the collection, then for each object in the
     collection (in the order they are returned) 'OBJECT EXPRESSION' is
     set to the object, then 'STATEMENTS' are executed.

   * 'STATEMENTS' can contain 'break' and 'continue' commands, which
     will abort the iteration or skip to the next loop iteration as
     expected.

   * when the iteration ends because there are no more objects to
     iterate over, 'OBJECT EXPRESSION' is set to 'nil'.  This allows you
     to determine whether the iteration finished because a 'break'
     command was used (in which case 'OBJECT EXPRESSION' will remain set
     to the last object that was iterated over) or because it iterated
     over all the objects (in which case 'OBJECT EXPRESSION' will be set
     to 'nil').

   * 'STATEMENTS' must not make any changes to the collection object; if
     they do, it is a hard error and the fast enumeration terminates by
     invoking 'objc_enumerationMutation', a runtime function that
     normally aborts the program but which can be customized by
     Foundation libraries via 'objc_set_mutation_handler' to do
     something different, such as raising an exception.


File: gcc.info,  Node: Fast enumeration protocol,  Prev: Fast enumeration details,  Up: Fast enumeration

8.9.4 Fast Enumeration Protocol
-------------------------------

If you want your own collection object to be usable with fast
enumeration, you need to have it implement the method

     - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state
                                           objects: (id *)objects
                                             count: (unsigned long)len;

 where 'NSFastEnumerationState' must be defined in your code as follows:

     typedef struct
     {
       unsigned long state;
       id            *itemsPtr;
       unsigned long *mutationsPtr;
       unsigned long extra[5];
     } NSFastEnumerationState;

 If no 'NSFastEnumerationState' is defined in your code, the compiler
will automatically replace 'NSFastEnumerationState *' with 'struct
__objcFastEnumerationState *', where that type is silently defined by
the compiler in an identical way.  This can be confusing and we
recommend that you define 'NSFastEnumerationState' (as shown above)
instead.

 The method is called repeatedly during a fast enumeration to retrieve
batches of objects.  Each invocation of the method should retrieve the
next batch of objects.

 The return value of the method is the number of objects in the current
batch; this should not exceed 'len', which is the maximum size of a
batch as requested by the caller.  The batch itself is returned in the
'itemsPtr' field of the 'NSFastEnumerationState' struct.

 To help with returning the objects, the 'objects' array is a C array
preallocated by the caller (on the stack) of size 'len'.  In many cases
you can put the objects you want to return in that 'objects' array, then
do 'itemsPtr = objects'.  But you don't have to; if your collection
already has the objects to return in some form of C array, it could
return them from there instead.

 The 'state' and 'extra' fields of the 'NSFastEnumerationState'
structure allows your collection object to keep track of the state of
the enumeration.  In a simple array implementation, 'state' may keep
track of the index of the last object that was returned, and 'extra' may
be unused.

 The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to
keep track of mutations.  It should point to a number; before working on
each object, the fast enumeration loop will check that this number has
not changed.  If it has, a mutation has happened and the fast
enumeration will abort.  So, 'mutationsPtr' could be set to point to
some sort of version number of your collection, which is increased by
one every time there is a change (for example when an object is added or
removed).  Or, if you are content with less strict mutation checks, it
could point to the number of objects in your collection or some other
value that can be checked to perform an approximate check that the
collection has not been mutated.

 Finally, note how we declared the 'len' argument and the return value
to be of type 'unsigned long'.  They could also be declared to be of
type 'unsigned int' and everything would still work.


File: gcc.info,  Node: Messaging with the GNU Objective-C runtime,  Prev: Fast enumeration,  Up: Objective-C

8.10 Messaging with the GNU Objective-C Runtime
===============================================

This section is specific for the GNU Objective-C runtime.  If you are
using a different runtime, you can skip it.

 The implementation of messaging in the GNU Objective-C runtime is
designed to be portable, and so is based on standard C.

 Sending a message in the GNU Objective-C runtime is composed of two
separate steps.  First, there is a call to the lookup function,
'objc_msg_lookup ()' (or, in the case of messages to super,
'objc_msg_lookup_super ()').  This runtime function takes as argument
the receiver and the selector of the method to be called; it returns the
'IMP', that is a pointer to the function implementing the method.  The
second step of method invocation consists of casting this pointer
function to the appropriate function pointer type, and calling the
function pointed to it with the right arguments.

 For example, when the compiler encounters a method invocation such as
'[object init]', it compiles it into a call to 'objc_msg_lookup (object,
@selector(init))' followed by a cast of the returned value to the
appropriate function pointer type, and then it calls it.

* Menu:

* Dynamically registering methods::
* Forwarding hook::


File: gcc.info,  Node: Dynamically registering methods,  Next: Forwarding hook,  Up: Messaging with the GNU Objective-C runtime

8.10.1 Dynamically Registering Methods
--------------------------------------

If 'objc_msg_lookup()' does not find a suitable method implementation,
because the receiver does not implement the required method, it tries to
see if the class can dynamically register the method.

 To do so, the runtime checks if the class of the receiver implements
the method

     + (BOOL) resolveInstanceMethod: (SEL)selector;

 in the case of an instance method, or

     + (BOOL) resolveClassMethod: (SEL)selector;

 in the case of a class method.  If the class implements it, the runtime
invokes it, passing as argument the selector of the original method, and
if it returns 'YES', the runtime tries the lookup again, which could now
succeed if a matching method was added dynamically by
'+resolveInstanceMethod:' or '+resolveClassMethod:'.

 This allows classes to dynamically register methods (by adding them to
the class using 'class_addMethod') when they are first called.  To do
so, a class should implement '+resolveInstanceMethod:' (or, depending on
the case, '+resolveClassMethod:') and have it recognize the selectors of
methods that can be registered dynamically at runtime, register them,
and return 'YES'.  It should return 'NO' for methods that it does not
dynamically registered at runtime.

 If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not
implemented or returns 'NO', the runtime then tries the forwarding hook.

 Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was
added to the GNU Objective-C runtime in GCC version 4.6.


File: gcc.info,  Node: Forwarding hook,  Prev: Dynamically registering methods,  Up: Messaging with the GNU Objective-C runtime

8.10.2 Forwarding Hook
----------------------

The GNU Objective-C runtime provides a hook, called
'__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it
can't find a method implementation in the runtime tables and after
calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been
attempted and did not succeed in dynamically registering the method.

 To configure the hook, you set the global variable
'__objc_msg_forward2' to a function with the same argument and return
types of 'objc_msg_lookup()'.  When 'objc_msg_lookup()' can not find a
method implementation, it invokes the hook function you provided to get
a method implementation to return.  So, in practice
'__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding
some custom code that is called to do a further lookup when no standard
method implementation can be found using the normal lookup.

 This hook is generally reserved for "Foundation" libraries such as
GNUstep Base, which use it to implement their high-level method
forwarding API, typically based around the 'forwardInvocation:' method.
So, unless you are implementing your own "Foundation" library, you
should not set this hook.

 In a typical forwarding implementation, the '__objc_msg_forward2' hook
function determines the argument and return type of the method that is
being looked up, and then creates a function that takes these arguments
and has that return type, and returns it to the caller.  Creating this
function is non-trivial and is typically performed using a dedicated
library such as 'libffi'.

 The forwarding method implementation thus created is returned by
'objc_msg_lookup()' and is executed as if it was a normal method
implementation.  When the forwarding method implementation is called, it
is usually expected to pack all arguments into some sort of object
(typically, an 'NSInvocation' in a "Foundation" library), and hand it
over to the programmer ('forwardInvocation:') who is then allowed to
manipulate the method invocation using a high-level API provided by the
"Foundation" library.  For example, the programmer may want to examine
the method invocation arguments and name and potentially change them
before forwarding the method invocation to one or more local objects
('performInvocation:') or even to remote objects (by using Distributed
Objects or some other mechanism).  When all this completes, the return
value is passed back and must be returned correctly to the original
caller.

 Note that the GNU Objective-C runtime currently provides no support for
method forwarding or method invocations other than the
'__objc_msg_forward2' hook.

 If the forwarding hook does not exist or returns 'NULL', the runtime
currently attempts forwarding using an older, deprecated API, and if
that fails, it aborts the program.  In future versions of the GNU
Objective-C runtime, the runtime will immediately abort.


File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top

9 Binary Compatibility
**********************

Binary compatibility encompasses several related concepts:

"application binary interface (ABI)"
     The set of runtime conventions followed by all of the tools that
     deal with binary representations of a program, including compilers,
     assemblers, linkers, and language runtime support.  Some ABIs are
     formal with a written specification, possibly designed by multiple
     interested parties.  Others are simply the way things are actually
     done by a particular set of tools.

"ABI conformance"
     A compiler conforms to an ABI if it generates code that follows all
     of the specifications enumerated by that ABI.  A library conforms
     to an ABI if it is implemented according to that ABI.  An
     application conforms to an ABI if it is built using tools that
     conform to that ABI and does not contain source code that
     specifically changes behavior specified by the ABI.

"calling conventions"
     Calling conventions are a subset of an ABI that specify of how
     arguments are passed and function results are returned.

"interoperability"
     Different sets of tools are interoperable if they generate files
     that can be used in the same program.  The set of tools includes
     compilers, assemblers, linkers, libraries, header files, startup
     files, and debuggers.  Binaries produced by different sets of tools
     are not interoperable unless they implement the same ABI.  This
     applies to different versions of the same tools as well as tools
     from different vendors.

"intercallability"
     Whether a function in a binary built by one set of tools can call a
     function in a binary built by a different set of tools is a subset
     of interoperability.

"implementation-defined features"
     Language standards include lists of implementation-defined features
     whose behavior can vary from one implementation to another.  Some
     of these features are normally covered by a platform's ABI and
     others are not.  The features that are not covered by an ABI
     generally affect how a program behaves, but not intercallability.

"compatibility"
     Conformance to the same ABI and the same behavior of
     implementation-defined features are both relevant for
     compatibility.

 The application binary interface implemented by a C or C++ compiler
affects code generation and runtime support for:

   * size and alignment of data types
   * layout of structured types
   * calling conventions
   * register usage conventions
   * interfaces for runtime arithmetic support
   * object file formats

 In addition, the application binary interface implemented by a C++
compiler affects code generation and runtime support for:
   * name mangling
   * exception handling
   * invoking constructors and destructors
   * layout, alignment, and padding of classes
   * layout and alignment of virtual tables

 Some GCC compilation options cause the compiler to generate code that
does not conform to the platform's default ABI.  Other options cause
different program behavior for implementation-defined features that are
not covered by an ABI.  These options are provided for consistency with
other compilers that do not follow the platform's default ABI or the
usual behavior of implementation-defined features for the platform.  Be
very careful about using such options.

 Most platforms have a well-defined ABI that covers C code, but ABIs
that cover C++ functionality are not yet common.

 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
written, vendor-neutral C++ ABI that was designed to be specific to
64-bit Itanium but also includes generic specifications that apply to
any platform.  This C++ ABI is also implemented by other compiler
vendors on some platforms, notably GNU/Linux and BSD systems.  We have
tried hard to provide a stable ABI that will be compatible with future
GCC releases, but it is possible that we will encounter problems that
make this difficult.  Such problems could include different
interpretations of the C++ ABI by different vendors, bugs in the ABI, or
bugs in the implementation of the ABI in different compilers.  GCC's
'-Wabi' switch warns when G++ generates code that is probably not
compatible with the C++ ABI.

 The C++ library used with a C++ compiler includes the Standard C++
Library, with functionality defined in the C++ Standard, plus language
runtime support.  The runtime support is included in a C++ ABI, but
there is no formal ABI for the Standard C++ Library.  Two
implementations of that library are interoperable if one follows the
de-facto ABI of the other and if they are both built with the same
compiler, or with compilers that conform to the same ABI for C++
compiler and runtime support.

 When G++ and another C++ compiler conform to the same C++ ABI, but the
implementations of the Standard C++ Library that they normally use do
not follow the same ABI for the Standard C++ Library, object files built
with those compilers can be used in the same program only if they use
the same C++ library.  This requires specifying the location of the C++
library header files when invoking the compiler whose usual library is
not being used.  The location of GCC's C++ header files depends on how
the GCC build was configured, but can be seen by using the G++ '-v'
option.  With default configuration options for G++ 3.3 the compile line
for a different C++ compiler needs to include

         -IGCC_INSTALL_DIRECTORY/include/c++/3.3

 Similarly, compiling code with G++ that must use a C++ library other
than the GNU C++ library requires specifying the location of the header
files for that other library.

 The most straightforward way to link a program to use a particular C++
library is to use a C++ driver that specifies that C++ library by
default.  The 'g++' driver, for example, tells the linker where to find
GCC's C++ library ('libstdc++') plus the other libraries and startup
files it needs, in the proper order.

 If a program must use a different C++ library and it's not possible to
do the final link using a C++ driver that uses that library by default,
it is necessary to tell 'g++' the location and name of that library.  It
might also be necessary to specify different startup files and other
runtime support libraries, and to suppress the use of GCC's support
libraries with one or more of the options '-nostdlib', '-nostartfiles',
and '-nodefaultlibs'.


File: gcc.info,  Node: Gcov,  Next: Gcov-tool,  Prev: Compatibility,  Up: Top

10 'gcov'--a Test Coverage Program
**********************************

'gcov' is a tool you can use in conjunction with GCC to test code
coverage in your programs.

* Menu:

* Gcov Intro::                  Introduction to gcov.
* Invoking Gcov::               How to use gcov.
* Gcov and Optimization::       Using gcov with GCC optimization.
* Gcov Data Files::             The files used by gcov.
* Cross-profiling::             Data file relocation.


File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov

10.1 Introduction to 'gcov'
===========================

'gcov' is a test coverage program.  Use it in concert with GCC to
analyze your programs to help create more efficient, faster running code
and to discover untested parts of your program.  You can use 'gcov' as a
profiling tool to help discover where your optimization efforts will
best affect your code.  You can also use 'gcov' along with the other
profiling tool, 'gprof', to assess which parts of your code use the
greatest amount of computing time.

 Profiling tools help you analyze your code's performance.  Using a
profiler such as 'gcov' or 'gprof', you can find out some basic
performance statistics, such as:

   * how often each line of code executes

   * what lines of code are actually executed

   * how much computing time each section of code uses

 Once you know these things about how your code works when compiled, you
can look at each module to see which modules should be optimized.
'gcov' helps you determine where to work on optimization.

 Software developers also use coverage testing in concert with
testsuites, to make sure software is actually good enough for a release.
Testsuites can verify that a program works as expected; a coverage
program tests to see how much of the program is exercised by the
testsuite.  Developers can then determine what kinds of test cases need
to be added to the testsuites to create both better testing and a better
final product.

 You should compile your code without optimization if you plan to use
'gcov' because the optimization, by combining some lines of code into
one function, may not give you as much information as you need to look
for 'hot spots' where the code is using a great deal of computer time.
Likewise, because 'gcov' accumulates statistics by line (at the lowest
resolution), it works best with a programming style that places only one
statement on each line.  If you use complicated macros that expand to
loops or to other control structures, the statistics are less
helpful--they only report on the line where the macro call appears.  If
your complex macros behave like functions, you can replace them with
inline functions to solve this problem.

 'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how
many times each line of a source file 'SOURCEFILE.c' has executed.  You
can use these logfiles along with 'gprof' to aid in fine-tuning the
performance of your programs.  'gprof' gives timing information you can
use along with the information you get from 'gcov'.

 'gcov' works only on code compiled with GCC.  It is not compatible with
any other profiling or test coverage mechanism.


File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov

10.2 Invoking 'gcov'
====================

     gcov [OPTIONS] FILES

 'gcov' accepts the following options:

'-h'
'--help'
     Display help about using 'gcov' (on the standard output), and exit
     without doing any further processing.

'-v'
'--version'
     Display the 'gcov' version number (on the standard output), and
     exit without doing any further processing.

'-a'
'--all-blocks'
     Write individual execution counts for every basic block.  Normally
     gcov outputs execution counts only for the main blocks of a line.
     With this option you can determine if blocks within a single line
     are not being executed.

'-b'
'--branch-probabilities'
     Write branch frequencies to the output file, and write branch
     summary info to the standard output.  This option allows you to see
     how often each branch in your program was taken.  Unconditional
     branches will not be shown, unless the '-u' option is given.

'-c'
'--branch-counts'
     Write branch frequencies as the number of branches taken, rather
     than the percentage of branches taken.

'-n'
'--no-output'
     Do not create the 'gcov' output file.

'-l'
'--long-file-names'
     Create long file names for included source files.  For example, if
     the header file 'x.h' contains code, and was included in the file
     'a.c', then running 'gcov' on the file 'a.c' will produce an output
     file called 'a.c##x.h.gcov' instead of 'x.h.gcov'.  This can be
     useful if 'x.h' is included in multiple source files and you want
     to see the individual contributions.  If you use the '-p' option,
     both the including and included file names will be complete path
     names.

'-p'
'--preserve-paths'
     Preserve complete path information in the names of generated
     '.gcov' files.  Without this option, just the filename component is
     used.  With this option, all directories are used, with '/'
     characters translated to '#' characters, '.' directory components
     removed and unremoveable '..' components renamed to '^'.  This is
     useful if sourcefiles are in several different directories.

'-r'
'--relative-only'
     Only output information about source files with a relative pathname
     (after source prefix elision).  Absolute paths are usually system
     header files and coverage of any inline functions therein is
     normally uninteresting.

'-f'
'--function-summaries'
     Output summaries for each function in addition to the file level
     summary.

'-o DIRECTORY|FILE'
'--object-directory DIRECTORY'
'--object-file FILE'
     Specify either the directory containing the gcov data files, or the
     object path name.  The '.gcno', and '.gcda' data files are searched
     for using this option.  If a directory is specified, the data files
     are in that directory and named after the input file name, without
     its extension.  If a file is specified here, the data files are
     named after that file, without its extension.

'-s DIRECTORY'
'--source-prefix DIRECTORY'
     A prefix for source file names to remove when generating the output
     coverage files.  This option is useful when building in a separate
     directory, and the pathname to the source directory is not wanted
     when determining the output file names.  Note that this prefix
     detection is applied before determining whether the source file is
     absolute.

'-u'
'--unconditional-branches'
     When branch probabilities are given, include those of unconditional
     branches.  Unconditional branches are normally not interesting.

'-d'
'--display-progress'
     Display the progress on the standard output.

'-i'
'--intermediate-format'
     Output gcov file in an easy-to-parse intermediate text format that
     can be used by 'lcov' or other tools.  The output is a single
     '.gcov' file per '.gcda' file.  No source code is required.

     The format of the intermediate '.gcov' file is plain text with one
     entry per line

          file:SOURCE_FILE_NAME
          function:LINE_NUMBER,EXECUTION_COUNT,FUNCTION_NAME
          lcount:LINE NUMBER,EXECUTION_COUNT
          branch:LINE_NUMBER,BRANCH_COVERAGE_TYPE

          Where the BRANCH_COVERAGE_TYPE is
             notexec (Branch not executed)
             taken (Branch executed and taken)
             nottaken (Branch executed, but not taken)

          There can be multiple FILE entries in an intermediate gcov
          file. All entries following a FILE pertain to that source file
          until the next FILE entry.

     Here is a sample when '-i' is used in conjunction with '-b' option:

          file:array.cc
          function:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE
          function:22,1,main
          lcount:11,1
          lcount:12,1
          lcount:14,1
          branch:14,taken
          lcount:26,1
          branch:28,nottaken

'-m'
'--demangled-names'
     Display demangled function names in output.  The default is to show
     mangled function names.

 'gcov' should be run with the current directory the same as that when
you invoked the compiler.  Otherwise it will not be able to locate the
source files.  'gcov' produces files called 'MANGLEDNAME.gcov' in the
current directory.  These contain the coverage information of the source
file they correspond to.  One '.gcov' file is produced for each source
(or header) file containing code, which was compiled to produce the data
files.  The MANGLEDNAME part of the output file name is usually simply
the source file name, but can be something more complicated if the '-l'
or '-p' options are given.  Refer to those options for details.

 If you invoke 'gcov' with multiple input files, the contributions from
each input file are summed.  Typically you would invoke it with the same
list of files as the final link of your executable.

 The '.gcov' files contain the ':' separated fields along with program
source code.  The format is

     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT

 Additional block information may succeed each line, when requested by
command line option.  The EXECUTION_COUNT is '-' for lines containing no
code.  Unexecuted lines are marked '#####' or '====', depending on
whether they are reachable by non-exceptional paths or only exceptional
paths such as C++ exception handlers, respectively.

 Some lines of information at the start have LINE_NUMBER of zero.  These
preamble lines are of the form

     -:0:TAG:VALUE

 The ordering and number of these preamble lines will be augmented as
'gcov' development progresses -- do not rely on them remaining
unchanged.  Use TAG to locate a particular preamble line.

 The additional block information is of the form

     TAG INFORMATION

 The INFORMATION is human readable, but designed to be simple enough for
machine parsing too.

 When printing percentages, 0% and 100% are only printed when the values
are _exactly_ 0% and 100% respectively.  Other values which would
conventionally be rounded to 0% or 100% are instead printed as the
nearest non-boundary value.

 When using 'gcov', you must first compile your program with two special
GCC options: '-fprofile-arcs -ftest-coverage'.  This tells the compiler
to generate additional information needed by gcov (basically a flow
graph of the program) and also includes additional code in the object
files for generating the extra profiling information needed by gcov.
These additional files are placed in the directory where the object file
is located.

 Running the program will cause profile output to be generated.  For
each source file compiled with '-fprofile-arcs', an accompanying '.gcda'
file will be placed in the object file directory.

 Running 'gcov' with your program's source file names as arguments will
now produce a listing of the code along with frequency of execution for
each line.  For example, if your program is called 'tmp.c', this is what
you see when you use the basic 'gcov' facility:

     $ gcc -fprofile-arcs -ftest-coverage tmp.c
     $ a.out
     $ gcov tmp.c
     90.00% of 10 source lines executed in file tmp.c
     Creating tmp.c.gcov.

 The file 'tmp.c.gcov' contains output from 'gcov'.  Here is a sample:

             -:    0:Source:tmp.c
             -:    0:Graph:tmp.gcno
             -:    0:Data:tmp.gcda
             -:    0:Runs:1
             -:    0:Programs:1
             -:    1:#include <stdio.h>
             -:    2:
             -:    3:int main (void)
             1:    4:{
             1:    5:  int i, total;
             -:    6:
             1:    7:  total = 0;
             -:    8:
            11:    9:  for (i = 0; i < 10; i++)
            10:   10:    total += i;
             -:   11:
             1:   12:  if (total != 45)
         #####:   13:    printf ("Failure\n");
             -:   14:  else
             1:   15:    printf ("Success\n");
             1:   16:  return 0;
             -:   17:}

 When you use the '-a' option, you will get individual block counts, and
the output looks like this:

             -:    0:Source:tmp.c
             -:    0:Graph:tmp.gcno
             -:    0:Data:tmp.gcda
             -:    0:Runs:1
             -:    0:Programs:1
             -:    1:#include <stdio.h>
             -:    2:
             -:    3:int main (void)
             1:    4:{
             1:    4-block  0
             1:    5:  int i, total;
             -:    6:
             1:    7:  total = 0;
             -:    8:
            11:    9:  for (i = 0; i < 10; i++)
            11:    9-block  0
            10:   10:    total += i;
            10:   10-block  0
             -:   11:
             1:   12:  if (total != 45)
             1:   12-block  0
         #####:   13:    printf ("Failure\n");
         $$$$$:   13-block  0
             -:   14:  else
             1:   15:    printf ("Success\n");
             1:   15-block  0
             1:   16:  return 0;
             1:   16-block  0
             -:   17:}

 In this mode, each basic block is only shown on one line - the last
line of the block.  A multi-line block will only contribute to the
execution count of that last line, and other lines will not be shown to
contain code, unless previous blocks end on those lines.  The total
execution count of a line is shown and subsequent lines show the
execution counts for individual blocks that end on that line.  After
each block, the branch and call counts of the block will be shown, if
the '-b' option is given.

 Because of the way GCC instruments calls, a call count can be shown
after a line with no individual blocks.  As you can see, line 13
contains a basic block that was not executed.

 When you use the '-b' option, your output looks like this:

     $ gcov -b tmp.c
     90.00% of 10 source lines executed in file tmp.c
     80.00% of 5 branches executed in file tmp.c
     80.00% of 5 branches taken at least once in file tmp.c
     50.00% of 2 calls executed in file tmp.c
     Creating tmp.c.gcov.

 Here is a sample of a resulting 'tmp.c.gcov' file:

             -:    0:Source:tmp.c
             -:    0:Graph:tmp.gcno
             -:    0:Data:tmp.gcda
             -:    0:Runs:1
             -:    0:Programs:1
             -:    1:#include <stdio.h>
             -:    2:
             -:    3:int main (void)
     function main called 1 returned 1 blocks executed 75%
             1:    4:{
             1:    5:  int i, total;
             -:    6:
             1:    7:  total = 0;
             -:    8:
            11:    9:  for (i = 0; i < 10; i++)
     branch  0 taken 91% (fallthrough)
     branch  1 taken 9%
            10:   10:    total += i;
             -:   11:
             1:   12:  if (total != 45)
     branch  0 taken 0% (fallthrough)
     branch  1 taken 100%
         #####:   13:    printf ("Failure\n");
     call    0 never executed
             -:   14:  else
             1:   15:    printf ("Success\n");
     call    0 called 1 returned 100%
             1:   16:  return 0;
             -:   17:}

 For each function, a line is printed showing how many times the
function is called, how many times it returns and what percentage of the
function's blocks were executed.

 For each basic block, a line is printed after the last line of the
basic block describing the branch or call that ends the basic block.
There can be multiple branches and calls listed for a single source line
if there are multiple basic blocks that end on that line.  In this case,
the branches and calls are each given a number.  There is no simple way
to map these branches and calls back to source constructs.  In general,
though, the lowest numbered branch or call will correspond to the
leftmost construct on the source line.

 For a branch, if it was executed at least once, then a percentage
indicating the number of times the branch was taken divided by the
number of times the branch was executed will be printed.  Otherwise, the
message "never executed" is printed.

 For a call, if it was executed at least once, then a percentage
indicating the number of times the call returned divided by the number
of times the call was executed will be printed.  This will usually be
100%, but may be less for functions that call 'exit' or 'longjmp', and
thus may not return every time they are called.

 The execution counts are cumulative.  If the example program were
executed again without removing the '.gcda' file, the count for the
number of times each line in the source was executed would be added to
the results of the previous run(s).  This is potentially useful in
several ways.  For example, it could be used to accumulate data over a
number of program runs as part of a test verification suite, or to
provide more accurate long-term information over a large number of
program runs.

 The data in the '.gcda' files is saved immediately before the program
exits.  For each source file compiled with '-fprofile-arcs', the
profiling code first attempts to read in an existing '.gcda' file; if
the file doesn't match the executable (differing number of basic block
counts) it will ignore the contents of the file.  It then adds in the
new execution counts and finally writes the data to the file.


File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov

10.3 Using 'gcov' with GCC Optimization
=======================================

If you plan to use 'gcov' to help optimize your code, you must first
compile your program with two special GCC options: '-fprofile-arcs
-ftest-coverage'.  Aside from that, you can use any other GCC options;
but if you want to prove that every single line in your program was
executed, you should not compile with optimization at the same time.  On
some machines the optimizer can eliminate some simple code lines by
combining them with other lines.  For example, code like this:

     if (a != b)
       c = 1;
     else
       c = 0;

can be compiled into one instruction on some machines.  In this case,
there is no way for 'gcov' to calculate separate execution counts for
each line because there isn't separate code for each line.  Hence the
'gcov' output looks like this if you compiled the program with
optimization:

           100:   12:if (a != b)
           100:   13:  c = 1;
           100:   14:else
           100:   15:  c = 0;

 The output shows that this block of code, combined by optimization,
executed 100 times.  In one sense this result is correct, because there
was only one instruction representing all four of these lines.  However,
the output does not indicate how many times the result was 0 and how
many times the result was 1.

 Inlineable functions can create unexpected line counts.  Line counts
are shown for the source code of the inlineable function, but what is
shown depends on where the function is inlined, or if it is not inlined
at all.

 If the function is not inlined, the compiler must emit an out of line
copy of the function, in any object file that needs it.  If 'fileA.o'
and 'fileB.o' both contain out of line bodies of a particular inlineable
function, they will also both contain coverage counts for that function.
When 'fileA.o' and 'fileB.o' are linked together, the linker will, on
many systems, select one of those out of line bodies for all calls to
that function, and remove or ignore the other.  Unfortunately, it will
not remove the coverage counters for the unused function body.  Hence
when instrumented, all but one use of that function will show zero
counts.

 If the function is inlined in several places, the block structure in
each location might not be the same.  For instance, a condition might
now be calculable at compile time in some instances.  Because the
coverage of all the uses of the inline function will be shown for the
same source lines, the line counts themselves might seem inconsistent.

 Long-running applications can use the '_gcov_reset' and '_gcov_dump'
facilities to restrict profile collection to the program region of
interest.  Calling '_gcov_reset(void)' will clear all profile counters
to zero, and calling '_gcov_dump(void)' will cause the profile
information collected at that point to be dumped to '.gcda' output
files.


File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov

10.4 Brief Description of 'gcov' Data Files
===========================================

'gcov' uses two files for profiling.  The names of these files are
derived from the original _object_ file by substituting the file suffix
with either '.gcno', or '.gcda'.  The files contain coverage and profile
data stored in a platform-independent format.  The '.gcno' files are
placed in the same directory as the object file.  By default, the
'.gcda' files are also stored in the same directory as the object file,
but the GCC '-fprofile-dir' option may be used to store the '.gcda'
files in a separate directory.

 The '.gcno' notes file is generated when the source file is compiled
with the GCC '-ftest-coverage' option.  It contains information to
reconstruct the basic block graphs and assign source line numbers to
blocks.

 The '.gcda' count data file is generated when a program containing
object files built with the GCC '-fprofile-arcs' option is executed.  A
separate '.gcda' file is created for each object file compiled with this
option.  It contains arc transition counts, value profile counts, and
some summary information.

 The full details of the file format is specified in 'gcov-io.h', and
functions provided in that header file should be used to access the
coverage files.


File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov

10.5 Data File Relocation to Support Cross-Profiling
====================================================

Running the program will cause profile output to be generated.  For each
source file compiled with '-fprofile-arcs', an accompanying '.gcda' file
will be placed in the object file directory.  That implicitly requires
running the program on the same system as it was built or having the
same absolute directory structure on the target system.  The program
will try to create the needed directory structure, if it is not already
present.

 To support cross-profiling, a program compiled with '-fprofile-arcs'
can relocate the data files based on two environment variables:

   * GCOV_PREFIX contains the prefix to add to the absolute paths in the
     object file.  Prefix can be absolute, or relative.  The default is
     no prefix.

   * GCOV_PREFIX_STRIP indicates the how many initial directory names to
     strip off the hardwired absolute paths.  Default value is 0.

     _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is
     undefined, then a relative path is made out of the hardwired
     absolute paths.

 For example, if the object file '/user/build/foo.o' was built with
'-fprofile-arcs', the final executable will try to create the data file
'/user/build/foo.gcda' when running on the target system.  This will
fail if the corresponding directory does not exist and it is unable to
create it.  This can be overcome by, for example, setting the
environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'.
Such a setting will name the data file '/target/run/build/foo.gcda'.

 You must move the data files to the expected directory tree in order to
use them for profile directed optimizations ('--use-profile'), or to use
the 'gcov' tool.


File: gcc.info,  Node: Gcov-tool,  Next: Trouble,  Prev: Gcov,  Up: Top

11 'gcov-tool'--an Offline Gcda Profile Processing Tool
*******************************************************

'gcov-tool' is a tool you can use in conjunction with GCC to manipulate
or process gcda profile files offline.

* Menu:

* Gcov-tool Intro::             Introduction to gcov-tool.
* Invoking Gcov-tool::          How to use gcov-tool.


File: gcc.info,  Node: Gcov-tool Intro,  Next: Invoking Gcov-tool,  Up: Gcov-tool

11.1 Introduction to 'gcov-tool'
================================

'gcov-tool' is an offline tool to process gcc's gcda profile files.

 Current gcov-tool supports the following functionalities:

   * merge two sets of profiles with weights.

   * read one set of profile and rewrite profile contents.  One can
     scale or normalize the count values.

 Examples of the use cases for this tool are:
   * Collect the profiles for different set of inputs, and use this tool
     to merge them.  One can specify the weight to factor in the
     relative importance of each input.

   * Rewrite the profile after removing a subset of the gcda files,
     while maintaining the consistency of the summary and the histogram.

   * It can also be used to debug or libgcov code as the tools shares
     the majority code as the runtime library.

 Note that for the merging operation, this profile generated offline may
contain slight different values from the online merged profile.  Here
are a list of typical differences:

   * histogram difference: This offline tool recomputes the histogram
     after merging the counters.  The resulting histogram, therefore, is
     precise.  The online merging does not have this capability - the
     histogram is merged from two histograms and the result is an
     approximation.

   * summary checksum difference: Summary checksum uses a CRC32
     operation.  The value depends on the link list order of gcov-info
     objects.  This order is different in gcov-tool from that in the
     online merge.  It's expected to have different summary checksums.
     It does not really matter as the compiler does not use this
     checksum anywhere.

   * value profile counter values difference: Some counter values for
     value profile are runtime dependent, like heap addresses.  It's
     normal to see some difference in these kind of counters.


File: gcc.info,  Node: Invoking Gcov-tool,  Prev: Gcov-tool Intro,  Up: Gcov-tool

11.2 Invoking 'gcov-tool'
=========================

     gcov-tool [GLOBAL-OPTIONS] SUB_COMMAND [SUB_COMMAND-OPTIONS] PROFILE_DIR

 'gcov-tool' accepts the following options:

'-h'
'--help'
     Display help about using 'gcov-tool' (on the standard output), and
     exit without doing any further processing.

'-v'
'--version'
     Display the 'gcov-tool' version number (on the standard output),
     and exit without doing any further processing.

'merge'
     Merge two profile directories.

     '-v'
     '--verbose'
          Set the verbose mode.

     '-o DIRECTORY'
     '--output DIRECTORY'
          Set the output profile directory.  Default output directory
          name is MERGED_PROFILE.

     '-w W1,W2'
     '--weight W1,W2'
          Set the merge weights of the DIRECTORY1 and DIRECTORY2,
          respectively.  The default weights are 1 for both.

'rewrite'
     Read the specified profile directory and rewrite to a new
     directory.

     '-v'
     '--verbose'
          Set the verbose mode.

     '-o DIRECTORY'
     '--output DIRECTORY'
          Set the output profile directory.  Default output name is
          REWRITE_PROFILE.

     '-s FLOAT_OR_SIMPLE-FRAC_VALUE'
     '--scale FLOAT_OR_SIMPLE-FRAC_VALUE'
          Scale the profile counters.  The specified value can be in
          floating point value, or simple fraction value form, such 1,
          2, 2/3, and 5/3.

     '-n LONG_LONG_VALUE'
     '--normalize <long_long_value>'
          Normalize the profile.  The specified value is the max counter
          value in the new profile.

'overlap'
     Computer the overlap score between the two specified profile
     directories.  The overlap score is computed based on the arc
     profiles.  It is defined as the sum of min (p1_counter[i] /
     p1_sum_all, p2_counter[i] / p2_sum_all), for all arc counter i,
     where p1_counter[i] and p2_counter[i] are two matched counters and
     p1_sum_all and p2_sum_all are the sum of counter values in profile
     1 and profile 2, respectively.

     '-v'
     '--verbose'
          Set the verbose mode.

     '-h'
     '--hotonly'
          Only print info for hot objects/functions.

     '-f'
     '--function'
          Print function level overlap score.

     '-F'
     '--fullname'
          Print full gcda filename.

     '-o'
     '--object'
          Print object level overlap score.

     '-t FLOAT'
     '--hot_threshold <float>'
          Set the threshold for hot counter value.


File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov-tool,  Up: Top

12 Known Causes of Trouble with GCC
***********************************

This section describes known problems that affect users of GCC.  Most of
these are not GCC bugs per se--if they were, we would fix them.  But the
result for a user may be like the result of a bug.

 Some of these problems are due to bugs in other software, some are
missing features that are too much work to add, and some are places
where people's opinions differ as to what is best.

* Menu:

* Actual Bugs::         Bugs we will fix later.
* Interoperation::      Problems using GCC with other compilers,
                        and with certain linkers, assemblers and debuggers.
* Incompatibilities::   GCC is incompatible with traditional C.
* Fixed Headers::       GCC uses corrected versions of system header files.
                        This is necessary, but doesn't always work smoothly.
* Standard Libraries::  GCC uses the system C library, which might not be
                        compliant with the ISO C standard.
* Disappointments::     Regrettable things we can't change, but not quite bugs.
* C++ Misunderstandings:: Common misunderstandings with GNU C++.
* Non-bugs::            Things we think are right, but some others disagree.
* Warnings and Errors:: Which problems in your code get warnings,
                        and which get errors.


File: gcc.info,  Node: Actual Bugs,  Next: Interoperation,  Up: Trouble

12.1 Actual Bugs We Haven't Fixed Yet
=====================================

   * The 'fixincludes' script interacts badly with automounters; if the
     directory of system header files is automounted, it tends to be
     unmounted while 'fixincludes' is running.  This would seem to be a
     bug in the automounter.  We don't know any good way to work around
     it.


File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Actual Bugs,  Up: Trouble

12.2 Interoperation
===================

This section lists various difficulties encountered in using GCC
together with other compilers or with the assemblers, linkers, libraries
and debuggers on certain systems.

   * On many platforms, GCC supports a different ABI for C++ than do
     other compilers, so the object files compiled by GCC cannot be used
     with object files generated by another C++ compiler.

     An area where the difference is most apparent is name mangling.
     The use of different name mangling is intentional, to protect you
     from more subtle problems.  Compilers differ as to many internal
     details of C++ implementation, including: how class instances are
     laid out, how multiple inheritance is implemented, and how virtual
     function calls are handled.  If the name encoding were made the
     same, your programs would link against libraries provided from
     other compilers--but the programs would then crash when run.
     Incompatible libraries are then detected at link time, rather than
     at run time.

   * On some BSD systems, including some versions of Ultrix, use of
     profiling causes static variable destructors (currently used only
     in C++) not to be run.

   * On a SPARC, GCC aligns all values of type 'double' on an 8-byte
     boundary, and it expects every 'double' to be so aligned.  The Sun
     compiler usually gives 'double' values 8-byte alignment, with one
     exception: function arguments of type 'double' may not be aligned.

     As a result, if a function compiled with Sun CC takes the address
     of an argument of type 'double' and passes this pointer of type
     'double *' to a function compiled with GCC, dereferencing the
     pointer may cause a fatal signal.

     One way to solve this problem is to compile your entire program
     with GCC.  Another solution is to modify the function that is
     compiled with Sun CC to copy the argument into a local variable;
     local variables are always properly aligned.  A third solution is
     to modify the function that uses the pointer to dereference it via
     the following function 'access_double' instead of directly with
     '*':

          inline double
          access_double (double *unaligned_ptr)
          {
            union d2i { double d; int i[2]; };

            union d2i *p = (union d2i *) unaligned_ptr;
            union d2i u;

            u.i[0] = p->i[0];
            u.i[1] = p->i[1];

            return u.d;
          }

     Storing into the pointer can be done likewise with the same union.

   * On Solaris, the 'malloc' function in the 'libmalloc.a' library may
     allocate memory that is only 4 byte aligned.  Since GCC on the
     SPARC assumes that doubles are 8 byte aligned, this may result in a
     fatal signal if doubles are stored in memory allocated by the
     'libmalloc.a' library.

     The solution is to not use the 'libmalloc.a' library.  Use instead
     'malloc' and related functions from 'libc.a'; they do not have this
     problem.

   * On the HP PA machine, ADB sometimes fails to work on functions
     compiled with GCC.  Specifically, it fails to work on functions
     that use 'alloca' or variable-size arrays.  This is because GCC
     doesn't generate HP-UX unwind descriptors for such functions.  It
     may even be impossible to generate them.

   * Debugging ('-g') is not supported on the HP PA machine, unless you
     use the preliminary GNU tools.

   * Taking the address of a label may generate errors from the HP-UX PA
     assembler.  GAS for the PA does not have this problem.

   * Using floating point parameters for indirect calls to static
     functions will not work when using the HP assembler.  There simply
     is no way for GCC to specify what registers hold arguments for
     static functions when using the HP assembler.  GAS for the PA does
     not have this problem.

   * In extremely rare cases involving some very large functions you may
     receive errors from the HP linker complaining about an out of
     bounds unconditional branch offset.  This used to occur more often
     in previous versions of GCC, but is now exceptionally rare.  If you
     should run into it, you can work around by making your function
     smaller.

   * GCC compiled code sometimes emits warnings from the HP-UX assembler
     of the form:

          (warning) Use of GR3 when
            frame >= 8192 may cause conflict.

     These warnings are harmless and can be safely ignored.

   * In extremely rare cases involving some very large functions you may
     receive errors from the AIX Assembler complaining about a
     displacement that is too large.  If you should run into it, you can
     work around by making your function smaller.

   * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker
     semantics which merges global symbols between libraries and
     applications, especially necessary for C++ streams functionality.
     This is not the default behavior of AIX shared libraries and
     dynamic linking.  'libstdc++.a' is built on AIX with
     "runtime-linking" enabled so that symbol merging can occur.  To
     utilize this feature, the application linked with 'libstdc++.a'
     must include the '-Wl,-brtl' flag on the link line.  G++ cannot
     impose this because this option may interfere with the semantics of
     the user program and users may not always use 'g++' to link his or
     her application.  Applications are not required to use the
     '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a'
     library which is not dependent on the symbol merging semantics will
     continue to function correctly.

   * An application can interpose its own definition of functions for
     functions invoked by 'libstdc++.a' with "runtime-linking" enabled
     on AIX.  To accomplish this the application must be linked with
     "runtime-linking" option and the functions explicitly must be
     exported by the application ('-Wl,-brtl,-bE:exportfile').

   * AIX on the RS/6000 provides support (NLS) for environments outside
     of the United States.  Compilers and assemblers use NLS to support
     locale-specific representations of various objects including
     floating-point numbers ('.' vs ',' for separating decimal
     fractions).  There have been problems reported where the library
     linked with GCC does not produce the same floating-point formats
     that the assembler accepts.  If you have this problem, set the
     'LANG' environment variable to 'C' or 'En_US'.

   * Even if you specify '-fdollars-in-identifiers', you cannot
     successfully use '$' in identifiers on the RS/6000 due to a
     restriction in the IBM assembler.  GAS supports these identifiers.


File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble

12.3 Incompatibilities of GCC
=============================

There are several noteworthy incompatibilities between GNU C and K&R
(non-ISO) versions of C.

   * GCC normally makes string constants read-only.  If several
     identical-looking string constants are used, GCC stores only one
     copy of the string.

     One consequence is that you cannot call 'mktemp' with a string
     constant argument.  The function 'mktemp' always alters the string
     its argument points to.

     Another consequence is that 'sscanf' does not work on some very old
     systems when passed a string constant as its format control string
     or input.  This is because 'sscanf' incorrectly tries to write into
     the string constant.  Likewise 'fscanf' and 'scanf'.

     The solution to these problems is to change the program to use
     'char'-array variables with initialization strings for these
     purposes instead of string constants.

   * '-2147483648' is positive.

     This is because 2147483648 cannot fit in the type 'int', so
     (following the ISO C rules) its data type is 'unsigned long int'.
     Negating this value yields 2147483648 again.

   * GCC does not substitute macro arguments when they appear inside of
     string constants.  For example, the following macro in GCC

          #define foo(a) "a"

     will produce output '"a"' regardless of what the argument A is.

   * When you use 'setjmp' and 'longjmp', the only automatic variables
     guaranteed to remain valid are those declared 'volatile'.  This is
     a consequence of automatic register allocation.  Consider this
     function:

          jmp_buf j;

          foo ()
          {
            int a, b;

            a = fun1 ();
            if (setjmp (j))
              return a;

            a = fun2 ();
            /* 'longjmp (j)' may occur in 'fun3'. */
            return a + fun3 ();
          }

     Here 'a' may or may not be restored to its first value when the
     'longjmp' occurs.  If 'a' is allocated in a register, then its
     first value is restored; otherwise, it keeps the last value stored
     in it.

     If you use the '-W' option with the '-O' option, you will get a
     warning when GCC thinks such a problem might be possible.

   * Programs that use preprocessing directives in the middle of macro
     arguments do not work with GCC.  For example, a program like this
     will not work:

          foobar (
          #define luser
                  hack)

     ISO C does not permit such a construct.

   * K&R compilers allow comments to cross over an inclusion boundary
     (i.e. started in an include file and ended in the including file).

   * Declarations of external variables and functions within a block
     apply only to the block containing the declaration.  In other
     words, they have the same scope as any other declaration in the
     same place.

     In some other C compilers, an 'extern' declaration affects all the
     rest of the file even if it happens within a block.

   * In traditional C, you can combine 'long', etc., with a typedef
     name, as shown here:

          typedef int foo;
          typedef long foo bar;

     In ISO C, this is not allowed: 'long' and other type modifiers
     require an explicit 'int'.

   * PCC allows typedef names to be used as function parameters.

   * Traditional C allows the following erroneous pair of declarations
     to appear together in a given scope:

          typedef int foo;
          typedef foo foo;

   * GCC treats all characters of identifiers as significant.  According
     to K&R-1 (2.2), "No more than the first eight characters are
     significant, although more may be used.".  Also according to K&R-1
     (2.2), "An identifier is a sequence of letters and digits; the
     first character must be a letter.  The underscore _ counts as a
     letter.", but GCC also allows dollar signs in identifiers.

   * PCC allows whitespace in the middle of compound assignment
     operators such as '+='.  GCC, following the ISO standard, does not
     allow this.

   * GCC complains about unterminated character constants inside of
     preprocessing conditionals that fail.  Some programs have English
     comments enclosed in conditionals that are guaranteed to fail; if
     these comments contain apostrophes, GCC will probably report an
     error.  For example, this code would produce an error:

          #if 0
          You can't expect this to work.
          #endif

     The best solution to such a problem is to put the text into an
     actual C comment delimited by '/*...*/'.

   * Many user programs contain the declaration 'long time ();'.  In the
     past, the system header files on many systems did not actually
     declare 'time', so it did not matter what type your program
     declared it to return.  But in systems with ISO C headers, 'time'
     is declared to return 'time_t', and if that is not the same as
     'long', then 'long time ();' is erroneous.

     The solution is to change your program to use appropriate system
     headers ('<time.h>' on systems with ISO C headers) and not to
     declare 'time' if the system header files declare it, or failing
     that to use 'time_t' as the return type of 'time'.

   * When compiling functions that return 'float', PCC converts it to a
     double.  GCC actually returns a 'float'.  If you are concerned with
     PCC compatibility, you should declare your functions to return
     'double'; you might as well say what you mean.

   * When compiling functions that return structures or unions, GCC
     output code normally uses a method different from that used on most
     versions of Unix.  As a result, code compiled with GCC cannot call
     a structure-returning function compiled with PCC, and vice versa.

     The method used by GCC is as follows: a structure or union which is
     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
     union with any other size is stored into an address supplied by the
     caller (usually in a special, fixed register, but on some machines
     it is passed on the stack).  The target hook
     'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.

     By contrast, PCC on most target machines returns structures and
     unions of any size by copying the data into an area of static
     storage, and then returning the address of that storage as if it
     were a pointer value.  The caller must copy the data from that
     memory area to the place where the value is wanted.  GCC does not
     use this method because it is slower and nonreentrant.

     On some newer machines, PCC uses a reentrant convention for all
     structure and union returning.  GCC on most of these machines uses
     a compatible convention when returning structures and unions in
     memory, but still returns small structures and unions in registers.

     You can tell GCC to use a compatible convention for all structure
     and union returning with the option '-fpcc-struct-return'.

   * GCC complains about program fragments such as '0x74ae-0x4000' which
     appear to be two hexadecimal constants separated by the minus
     operator.  Actually, this string is a single "preprocessing token".
     Each such token must correspond to one token in C.  Since this does
     not, GCC prints an error message.  Although it may appear obvious
     that what is meant is an operator and two values, the ISO C
     standard specifically requires that this be treated as erroneous.

     A "preprocessing token" is a "preprocessing number" if it begins
     with a digit and is followed by letters, underscores, digits,
     periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-'
     character sequences.  (In strict C90 mode, the sequences 'p+',
     'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.)

     To make the above program fragment valid, place whitespace in front
     of the minus sign.  This whitespace will end the preprocessing
     number.


File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble

12.4 Fixed Header Files
=======================

GCC needs to install corrected versions of some system header files.
This is because most target systems have some header files that won't
work with GCC unless they are changed.  Some have bugs, some are
incompatible with ISO C, and some depend on special features of other
compilers.

 Installing GCC automatically creates and installs the fixed header
files, by running a program called 'fixincludes'.  Normally, you don't
need to pay attention to this.  But there are cases where it doesn't do
the right thing automatically.

   * If you update the system's header files, such as by installing a
     new system version, the fixed header files of GCC are not
     automatically updated.  They can be updated using the 'mkheaders'
     script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.

   * On some systems, header file directories contain machine-specific
     symbolic links in certain places.  This makes it possible to share
     most of the header files among hosts running the same version of
     the system on different machine models.

     The programs that fix the header files do not understand this
     special way of using symbolic links; therefore, the directory of
     fixed header files is good only for the machine model used to build
     it.

     It is possible to make separate sets of fixed header files for the
     different machine models, and arrange a structure of symbolic links
     so as to use the proper set, but you'll have to do this by hand.


File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble

12.5 Standard Libraries
=======================

GCC by itself attempts to be a conforming freestanding implementation.
*Note Language Standards Supported by GCC: Standards, for details of
what this means.  Beyond the library facilities required of such an
implementation, the rest of the C library is supplied by the vendor of
the operating system.  If that C library doesn't conform to the C
standards, then your programs might get warnings (especially when using
'-Wall') that you don't expect.

 For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *'
while the C standard says that 'sprintf' returns an 'int'.  The
'fixincludes' program could make the prototype for this function match
the Standard, but that would be wrong, since the function will still
return 'char *'.

 If you need a Standard compliant library, then you need to find one, as
GCC does not provide one.  The GNU C library (called 'glibc') provides
ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
HURD-based GNU systems; no recent version of it supports other systems,
though some very old versions did.  Version 2.2 of the GNU C library
includes nearly complete C99 support.  You could also ask your operating
system vendor if newer libraries are available.


File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble

12.6 Disappointments and Misunderstandings
==========================================

These problems are perhaps regrettable, but we don't know any practical
way around them.

   * Certain local variables aren't recognized by debuggers when you
     compile with optimization.

     This occurs because sometimes GCC optimizes the variable out of
     existence.  There is no way to tell the debugger how to compute the
     value such a variable "would have had", and it is not clear that
     would be desirable anyway.  So GCC simply does not mention the
     eliminated variable when it writes debugging information.

     You have to expect a certain amount of disagreement between the
     executable and your source code, when you use optimization.

   * Users often think it is a bug when GCC reports an error for code
     like this:

          int foo (struct mumble *);

          struct mumble { ... };

          int foo (struct mumble *x)
          { ... }

     This code really is erroneous, because the scope of 'struct mumble'
     in the prototype is limited to the argument list containing it.  It
     does not refer to the 'struct mumble' defined with file scope
     immediately below--they are two unrelated types with similar names
     in different scopes.

     But in the definition of 'foo', the file-scope type is used because
     that is available to be inherited.  Thus, the definition and the
     prototype do not match, and you get an error.

     This behavior may seem silly, but it's what the ISO standard
     specifies.  It is easy enough for you to make your code work by
     moving the definition of 'struct mumble' above the prototype.  It's
     not worth being incompatible with ISO C just to avoid an error for
     the example shown above.

   * Accesses to bit-fields even in volatile objects works by accessing
     larger objects, such as a byte or a word.  You cannot rely on what
     size of object is accessed in order to read or write the bit-field;
     it may even vary for a given bit-field according to the precise
     usage.

     If you care about controlling the amount of memory that is
     accessed, use volatile but do not use bit-fields.

   * GCC comes with shell scripts to fix certain known problems in
     system header files.  They install corrected copies of various
     header files in a special directory where only GCC will normally
     look for them.  The scripts adapt to various systems by searching
     all the system header files for the problem cases that we know
     about.

     If new system header files are installed, nothing automatically
     arranges to update the corrected header files.  They can be updated
     using the 'mkheaders' script installed in
     'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.

   * On 68000 and x86 systems, for instance, you can get paradoxical
     results if you test the precise values of floating point numbers.
     For example, you can find that a floating point value which is not
     a NaN is not equal to itself.  This results from the fact that the
     floating point registers hold a few more bits of precision than fit
     in a 'double' in memory.  Compiled code moves values between memory
     and floating point registers at its convenience, and moving them
     into memory truncates them.

     You can partially avoid this problem by using the '-ffloat-store'
     option (*note Optimize Options::).

   * On AIX and other platforms without weak symbol support, templates
     need to be instantiated explicitly and symbols for static members
     of templates will not be generated.

   * On AIX, GCC scans object files and library archives for static
     constructors and destructors when linking an application before the
     linker prunes unreferenced symbols.  This is necessary to prevent
     the AIX linker from mistakenly assuming that static constructor or
     destructor are unused and removing them before the scanning can
     occur.  All static constructors and destructors found will be
     referenced even though the modules in which they occur may not be
     used by the program.  This may lead to both increased executable
     size and unexpected symbol references.


File: gcc.info,  Node: C++ Misunderstandings,  Next: Non-bugs,  Prev: Disappointments,  Up: Trouble

12.7 Common Misunderstandings with GNU C++
==========================================

C++ is a complex language and an evolving one, and its standard
definition (the ISO C++ standard) was only recently completed.  As a
result, your C++ compiler may occasionally surprise you, even when its
behavior is correct.  This section discusses some areas that frequently
give rise to questions of this sort.

* Menu:

* Static Definitions::  Static member declarations are not definitions
* Name lookup::         Name lookup, templates, and accessing members of base classes
* Temporaries::         Temporaries may vanish before you expect
* Copy Assignment::     Copy Assignment operators copy virtual bases twice


File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings

12.7.1 Declare _and_ Define Static Members
------------------------------------------

When a class has static data members, it is not enough to _declare_ the
static member; you must also _define_ it.  For example:

     class Foo
     {
       ...
       void method();
       static int bar;
     };

 This declaration only establishes that the class 'Foo' has an 'int'
named 'Foo::bar', and a member function named 'Foo::method'.  But you
still need to define _both_ 'method' and 'bar' elsewhere.  According to
the ISO standard, you must supply an initializer in one (and only one)
source file, such as:

     int Foo::bar = 0;

 Other C++ compilers may not correctly implement the standard behavior.
As a result, when you switch to 'g++' from one of these compilers, you
may discover that a program that appeared to work correctly in fact does
not conform to the standard: 'g++' reports as undefined symbols any
static data members that lack definitions.


File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings

12.7.2 Name Lookup, Templates, and Accessing Members of Base Classes
--------------------------------------------------------------------

The C++ standard prescribes that all names that are not dependent on
template parameters are bound to their present definitions when parsing
a template function or class.(1)  Only names that are dependent are
looked up at the point of instantiation.  For example, consider

       void foo(double);

       struct A {
         template <typename T>
         void f () {
           foo (1);        // 1
           int i = N;      // 2
           T t;
           t.bar();        // 3
           foo (t);        // 4
         }

         static const int N;
       };

 Here, the names 'foo' and 'N' appear in a context that does not depend
on the type of 'T'.  The compiler will thus require that they are
defined in the context of use in the template, not only before the point
of instantiation, and will here use '::foo(double)' and 'A::N',
respectively.  In particular, it will convert the integer value to a
'double' when passing it to '::foo(double)'.

 Conversely, 'bar' and the call to 'foo' in the fourth marked line are
used in contexts that do depend on the type of 'T', so they are only
looked up at the point of instantiation, and you can provide
declarations for them after declaring the template, but before
instantiating it.  In particular, if you instantiate 'A::f<int>', the
last line will call an overloaded '::foo(int)' if one was provided, even
if after the declaration of 'struct A'.

 This distinction between lookup of dependent and non-dependent names is
called two-stage (or dependent) name lookup.  G++ implements it since
version 3.4.

 Two-stage name lookup sometimes leads to situations with behavior
different from non-template codes.  The most common is probably this:

       template <typename T> struct Base {
         int i;
       };

       template <typename T> struct Derived : public Base<T> {
         int get_i() { return i; }
       };

 In 'get_i()', 'i' is not used in a dependent context, so the compiler
will look for a name declared at the enclosing namespace scope (which is
the global scope here).  It will not look into the base class, since
that is dependent and you may declare specializations of 'Base' even
after declaring 'Derived', so the compiler can't really know what 'i'
would refer to.  If there is no global variable 'i', then you will get
an error message.

 In order to make it clear that you want the member of the base class,
you need to defer lookup until instantiation time, at which the base
class is known.  For this, you need to access 'i' in a dependent
context, by either using 'this->i' (remember that 'this' is of type
'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'.
Alternatively, 'Base<T>::i' might be brought into scope by a
'using'-declaration.

 Another, similar example involves calling member functions of a base
class:

       template <typename T> struct Base {
           int f();
       };

       template <typename T> struct Derived : Base<T> {
           int g() { return f(); };
       };

 Again, the call to 'f()' is not dependent on template arguments (there
are no arguments that depend on the type 'T', and it is also not
otherwise specified that the call should be in a dependent context).
Thus a global declaration of such a function must be available, since
the one in the base class is not visible until instantiation time.  The
compiler will consequently produce the following error message:

       x.cc: In member function `int Derived<T>::g()':
       x.cc:6: error: there are no arguments to `f' that depend on a template
          parameter, so a declaration of `f' must be available
       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
          allowing the use of an undeclared name is deprecated)

 To make the code valid either use 'this->f()', or 'Base<T>::f()'.
Using the '-fpermissive' flag will also let the compiler accept the
code, by marking all function calls for which no declaration is visible
at the time of definition of the template for later lookup at
instantiation time, as if it were a dependent call.  We do not recommend
using '-fpermissive' to work around invalid code, and it will also only
catch cases where functions in base classes are called, not where
variables in base classes are used (as in the example above).

 Note that some compilers (including G++ versions prior to 3.4) get
these examples wrong and accept above code without an error.  Those
compilers do not implement two-stage name lookup correctly.

   ---------- Footnotes ----------

   (1) The C++ standard just uses the term "dependent" for names that
depend on the type or value of template parameters.  This shorter term
will also be used in the rest of this section.


File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings

12.7.3 Temporaries May Vanish Before You Expect
-----------------------------------------------

It is dangerous to use pointers or references to _portions_ of a
temporary object.  The compiler may very well delete the object before
you expect it to, leaving a pointer to garbage.  The most common place
where this problem crops up is in classes like string classes,
especially ones that define a conversion function to type 'char *' or
'const char *'--which is one reason why the standard 'string' class
requires you to call the 'c_str' member function.  However, any class
that returns a pointer to some internal structure is potentially subject
to this problem.

 For example, a program may use a function 'strfunc' that returns
'string' objects, and another function 'charfunc' that operates on
pointers to 'char':

     string strfunc ();
     void charfunc (const char *);

     void
     f ()
     {
       const char *p = strfunc().c_str();
       ...
       charfunc (p);
       ...
       charfunc (p);
     }

In this situation, it may seem reasonable to save a pointer to the C
string returned by the 'c_str' member function and use that rather than
call 'c_str' repeatedly.  However, the temporary string created by the
call to 'strfunc' is destroyed after 'p' is initialized, at which point
'p' is left pointing to freed memory.

 Code like this may run successfully under some other compilers,
particularly obsolete cfront-based compilers that delete temporaries
along with normal local variables.  However, the GNU C++ behavior is
standard-conforming, so if your program depends on late destruction of
temporaries it is not portable.

 The safe way to write such code is to give the temporary a name, which
forces it to remain until the end of the scope of the name.  For
example:

     const string& tmp = strfunc ();
     charfunc (tmp.c_str ());


File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings

12.7.4 Implicit Copy-Assignment for Virtual Bases
-------------------------------------------------

When a base class is virtual, only one subobject of the base class
belongs to each full object.  Also, the constructors and destructors are
invoked only once, and called from the most-derived class.  However,
such objects behave unspecified when being assigned.  For example:

     struct Base{
       char *name;
       Base(char *n) : name(strdup(n)){}
       Base& operator= (const Base& other){
        free (name);
        name = strdup (other.name);
       }
     };

     struct A:virtual Base{
       int val;
       A():Base("A"){}
     };

     struct B:virtual Base{
       int bval;
       B():Base("B"){}
     };

     struct Derived:public A, public B{
       Derived():Base("Derived"){}
     };

     void func(Derived &d1, Derived &d2)
     {
       d1 = d2;
     }

 The C++ standard specifies that 'Base::Base' is only called once when
constructing or copy-constructing a Derived object.  It is unspecified
whether 'Base::operator=' is called more than once when the implicit
copy-assignment for Derived objects is invoked (as it is inside 'func'
in the example).

 G++ implements the "intuitive" algorithm for copy-assignment: assign
all direct bases, then assign all members.  In that algorithm, the
virtual base subobject can be encountered more than once.  In the
example, copying proceeds in the following order: 'val', 'name' (via
'strdup'), 'bval', and 'name' again.

 If application code relies on copy-assignment, a user-defined
copy-assignment operator removes any uncertainties.  With such an
operator, the application can define whether and how the virtual base
subobject is assigned.


File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: C++ Misunderstandings,  Up: Trouble

12.8 Certain Changes We Don't Want to Make
==========================================

This section lists changes that people frequently request, but which we
do not make because we think GCC is better without them.

   * Checking the number and type of arguments to a function which has
     an old-fashioned definition and no prototype.

     Such a feature would work only occasionally--only for calls that
     appear in the same file as the called function, following the
     definition.  The only way to check all calls reliably is to add a
     prototype for the function.  But adding a prototype eliminates the
     motivation for this feature.  So the feature is not worthwhile.

   * Warning about using an expression whose type is signed as a shift
     count.

     Shift count operands are probably signed more often than unsigned.
     Warning about this would cause far more annoyance than good.

   * Warning about assigning a signed value to an unsigned variable.

     Such assignments must be very common; warning about them would
     cause more annoyance than good.

   * Warning when a non-void function value is ignored.

     C contains many standard functions that return a value that most
     programs choose to ignore.  One obvious example is 'printf'.
     Warning about this practice only leads the defensive programmer to
     clutter programs with dozens of casts to 'void'.  Such casts are
     required so frequently that they become visual noise.  Writing
     those casts becomes so automatic that they no longer convey useful
     information about the intentions of the programmer.  For functions
     where the return value should never be ignored, use the
     'warn_unused_result' function attribute (*note Function
     Attributes::).

   * Making '-fshort-enums' the default.

     This would cause storage layout to be incompatible with most other
     C compilers.  And it doesn't seem very important, given that you
     can get the same result in other ways.  The case where it matters
     most is when the enumeration-valued object is inside a structure,
     and in that case you can specify a field width explicitly.

   * Making bit-fields unsigned by default on particular machines where
     "the ABI standard" says to do so.

     The ISO C standard leaves it up to the implementation whether a
     bit-field declared plain 'int' is signed or not.  This in effect
     creates two alternative dialects of C.

     The GNU C compiler supports both dialects; you can specify the
     signed dialect with '-fsigned-bitfields' and the unsigned dialect
     with '-funsigned-bitfields'.  However, this leaves open the
     question of which dialect to use by default.

     Currently, the preferred dialect makes plain bit-fields signed,
     because this is simplest.  Since 'int' is the same as 'signed int'
     in every other context, it is cleanest for them to be the same in
     bit-fields as well.

     Some computer manufacturers have published Application Binary
     Interface standards which specify that plain bit-fields should be
     unsigned.  It is a mistake, however, to say anything about this
     issue in an ABI.  This is because the handling of plain bit-fields
     distinguishes two dialects of C.  Both dialects are meaningful on
     every type of machine.  Whether a particular object file was
     compiled using signed bit-fields or unsigned is of no concern to
     other object files, even if they access the same bit-fields in the
     same data structures.

     A given program is written in one or the other of these two
     dialects.  The program stands a chance to work on most any machine
     if it is compiled with the proper dialect.  It is unlikely to work
     at all if compiled with the wrong dialect.

     Many users appreciate the GNU C compiler because it provides an
     environment that is uniform across machines.  These users would be
     inconvenienced if the compiler treated plain bit-fields differently
     on certain machines.

     Occasionally users write programs intended only for a particular
     machine type.  On these occasions, the users would benefit if the
     GNU C compiler were to support by default the same dialect as the
     other compilers on that machine.  But such applications are rare.
     And users writing a program to run on more than one type of machine
     cannot possibly benefit from this kind of compatibility.

     This is why GCC does and will treat plain bit-fields in the same
     fashion on all types of machines (by default).

     There are some arguments for making bit-fields unsigned by default
     on all machines.  If, for example, this becomes a universal de
     facto standard, it would make sense for GCC to go along with it.
     This is something to be considered in the future.

     (Of course, users strongly concerned about portability should
     indicate explicitly in each bit-field whether it is signed or not.
     In this way, they write programs which have the same meaning in
     both C dialects.)

   * Undefining '__STDC__' when '-ansi' is not used.

     Currently, GCC defines '__STDC__' unconditionally.  This provides
     good results in practice.

     Programmers normally use conditionals on '__STDC__' to ask whether
     it is safe to use certain features of ISO C, such as function
     prototypes or ISO token concatenation.  Since plain 'gcc' supports
     all the features of ISO C, the correct answer to these questions is
     "yes".

     Some users try to use '__STDC__' to check for the availability of
     certain library facilities.  This is actually incorrect usage in an
     ISO C program, because the ISO C standard says that a conforming
     freestanding implementation should define '__STDC__' even though it
     does not have the library facilities.  'gcc -ansi -pedantic' is a
     conforming freestanding implementation, and it is therefore
     required to define '__STDC__', even though it does not come with an
     ISO C library.

     Sometimes people say that defining '__STDC__' in a compiler that
     does not completely conform to the ISO C standard somehow violates
     the standard.  This is illogical.  The standard is a standard for
     compilers that claim to support ISO C, such as 'gcc -ansi'--not for
     other compilers such as plain 'gcc'.  Whatever the ISO C standard
     says is relevant to the design of plain 'gcc' without '-ansi' only
     for pragmatic reasons, not as a requirement.

     GCC normally defines '__STDC__' to be 1, and in addition defines
     '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std'
     option for strict conformance to some version of ISO C.  On some
     hosts, system include files use a different convention, where
     '__STDC__' is normally 0, but is 1 if the user specifies strict
     conformance to the C Standard.  GCC follows the host convention
     when processing system include files, but when processing user
     files it follows the usual GNU C convention.

   * Undefining '__STDC__' in C++.

     Programs written to compile with C++-to-C translators get the value
     of '__STDC__' that goes with the C compiler that is subsequently
     used.  These programs must test '__STDC__' to determine what kind
     of C preprocessor that compiler uses: whether they should
     concatenate tokens in the ISO C fashion or in the traditional
     fashion.

     These programs work properly with GNU C++ if '__STDC__' is defined.
     They would not work otherwise.

     In addition, many header files are written to provide prototypes in
     ISO C but not in traditional C.  Many of these header files can
     work without change in C++ provided '__STDC__' is defined.  If
     '__STDC__' is not defined, they will all fail, and will all need to
     be changed to test explicitly for C++ as well.

   * Deleting "empty" loops.

     Historically, GCC has not deleted "empty" loops under the
     assumption that the most likely reason you would put one in a
     program is to have a delay, so deleting them will not make real
     programs run any faster.

     However, the rationale here is that optimization of a nonempty loop
     cannot produce an empty one.  This held for carefully written C
     compiled with less powerful optimizers but is not always the case
     for carefully written C++ or with more powerful optimizers.  Thus
     GCC will remove operations from loops whenever it can determine
     those operations are not externally visible (apart from the time
     taken to execute them, of course).  In case the loop can be proved
     to be finite, GCC will also remove the loop itself.

     Be aware of this when performing timing tests, for instance the
     following loop can be completely removed, provided
     'some_expression' can provably not change any global state.

          {
             int sum = 0;
             int ix;

             for (ix = 0; ix != 10000; ix++)
                sum += some_expression;
          }

     Even though 'sum' is accumulated in the loop, no use is made of
     that summation, so the accumulation can be removed.

   * Making side effects happen in the same order as in some other
     compiler.

     It is never safe to depend on the order of evaluation of side
     effects.  For example, a function call like this may very well
     behave differently from one compiler to another:

          void func (int, int);

          int i = 2;
          func (i++, i++);

     There is no guarantee (in either the C or the C++ standard language
     definitions) that the increments will be evaluated in any
     particular order.  Either increment might happen first.  'func'
     might get the arguments '2, 3', or it might get '3, 2', or even '2,
     2'.

   * Making certain warnings into errors by default.

     Some ISO C testsuites report failure when the compiler does not
     produce an error message for a certain program.

     ISO C requires a "diagnostic" message for certain kinds of invalid
     programs, but a warning is defined by GCC to count as a diagnostic.
     If GCC produces a warning but not an error, that is correct ISO C
     support.  If testsuites call this "failure", they should be run
     with the GCC option '-pedantic-errors', which will turn these
     warnings into errors.


File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble

12.9 Warning Messages and Error Messages
========================================

The GNU compiler can produce two kinds of diagnostics: errors and
warnings.  Each kind has a different purpose:

     "Errors" report problems that make it impossible to compile your
     program.  GCC reports errors with the source file name and line
     number where the problem is apparent.

     "Warnings" report other unusual conditions in your code that _may_
     indicate a problem, although compilation can (and does) proceed.
     Warning messages also report the source file name and line number,
     but include the text 'warning:' to distinguish them from error
     messages.

 Warnings may indicate danger points where you should check to make sure
that your program really does what you intend; or the use of obsolete
features; or the use of nonstandard features of GNU C or C++.  Many
warnings are issued only if you ask for them, with one of the '-W'
options (for instance, '-Wall' requests a variety of useful warnings).

 GCC always tries to compile your program if possible; it never
gratuitously rejects a program whose meaning is clear merely because
(for instance) it fails to conform to a standard.  In some cases,
however, the C and C++ standards specify that certain extensions are
forbidden, and a diagnostic _must_ be issued by a conforming compiler.
The '-pedantic' option tells GCC to issue warnings in such cases;
'-pedantic-errors' says to make them errors instead.  This does not mean
that _all_ non-ISO constructs get warnings or errors.

 *Note Options to Request or Suppress Warnings: Warning Options, for
more detail on these and related command-line options.


File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top

13 Reporting Bugs
*****************

Your bug reports play an essential role in making GCC reliable.

 When you encounter a problem, the first thing to do is to see if it is
already known.  *Note Trouble::.  If it isn't known, then you should
report the problem.

* Menu:

* Criteria:  Bug Criteria.   Have you really found a bug?
* Reporting: Bug Reporting.  How to report a bug effectively.


File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs

13.1 Have You Found a Bug?
==========================

If you are not sure whether you have found a bug, here are some
guidelines:

   * If the compiler gets a fatal signal, for any input whatever, that
     is a compiler bug.  Reliable compilers never crash.

   * If the compiler produces invalid assembly code, for any input
     whatever (except an 'asm' statement), that is a compiler bug,
     unless the compiler reports errors (not just warnings) which would
     ordinarily prevent the assembler from being run.

   * If the compiler produces valid assembly code that does not
     correctly execute the input source code, that is a compiler bug.

     However, you must double-check to make sure, because you may have a
     program whose behavior is undefined, which happened by chance to
     give the desired results with another C or C++ compiler.

     For example, in many nonoptimizing compilers, you can write 'x;' at
     the end of a function instead of 'return x;', with the same
     results.  But the value of the function is undefined if 'return' is
     omitted; it is not a bug when GCC produces different results.

     Problems often result from expressions with two increment
     operators, as in 'f (*p++, *p++)'.  Your previous compiler might
     have interpreted that expression the way you intended; GCC might
     interpret it another way.  Neither compiler is wrong.  The bug is
     in your code.

     After you have localized the error to a single source line, it
     should be easy to check for these things.  If your program is
     correct and well defined, you have found a compiler bug.

   * If the compiler produces an error message for valid input, that is
     a compiler bug.

   * If the compiler does not produce an error message for invalid
     input, that is a compiler bug.  However, you should note that your
     idea of "invalid input" might be someone else's idea of "an
     extension" or "support for traditional practice".

   * If you are an experienced user of one of the languages GCC
     supports, your suggestions for improvement of GCC are welcome in
     any case.


File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs

13.2 How and Where to Report Bugs
=================================

Bugs should be reported to the bug database at
<https://bugs.linaro.org>.


File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top

14 How To Get Help with GCC
***************************

If you need help installing, using or changing GCC, there are two ways
to find it:

   * Send a message to a suitable network mailing list.  First try
     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
     GCC, please report it following the instructions at *note Bug
     Reporting::.

   * Look in the service directory for someone who might help you for a
     fee.  The service directory is found at
     <http://www.fsf.org/resources/service>.

 For further information, see <http://gcc.gnu.org/faq.html#support>.


File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top

15 Contributing to GCC Development
**********************************

If you would like to help pretest GCC releases to assure they work well,
current development sources are available by SVN (see
<http://gcc.gnu.org/svn.html>).  Source and binary snapshots are also
available for FTP; see <http://gcc.gnu.org/snapshots.html>.

 If you would like to work on improvements to GCC, please read the
advice at these URLs:

     <http://gcc.gnu.org/contribute.html>
     <http://gcc.gnu.org/contributewhy.html>

for information on how to make useful contributions and avoid
duplication of effort.  Suggested projects are listed at
<http://gcc.gnu.org/projects/>.


File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top

Funding Free Software
*********************

If you want to have more free software a few years from now, it makes
sense for you to help encourage people to contribute funds for its
development.  The most effective approach known is to encourage
commercial redistributors to donate.

 Users of free software systems can boost the pace of development by
encouraging for-a-fee distributors to donate part of their selling price
to free software developers--the Free Software Foundation, and others.

 The way to convince distributors to do this is to demand it and expect
it from them.  So when you compare distributors, judge them partly by
how much they give to free software development.  Show distributors they
must compete to be the one who gives the most.

 To make this approach work, you must insist on numbers that you can
compare, such as, "We will donate ten dollars to the Frobnitz project
for each disk sold."  Don't be satisfied with a vague promise, such as
"A portion of the profits are donated," since it doesn't give a basis
for comparison.

 Even a precise fraction "of the profits from this disk" is not very
meaningful, since creative accounting and unrelated business decisions
can greatly alter what fraction of the sales price counts as profit.  If
the price you pay is $50, ten percent of the profit is probably less
than a dollar; it might be a few cents, or nothing at all.

 Some redistributors do development work themselves.  This is useful
too; but to keep everyone honest, you need to inquire how much they do,
and what kind.  Some kinds of development make much more long-term
difference than others.  For example, maintaining a separate version of
a program contributes very little; maintaining the standard version of a
program for the whole community contributes much.  Easy new ports
contribute little, since someone else would surely do them; difficult
ports such as adding a new CPU to the GNU Compiler Collection contribute
more; major new features or packages contribute the most.

 By establishing the idea that supporting further development is "the
proper thing to do" when distributing free software for a fee, we can
assure a steady flow of resources into making more free software.

     Copyright (C) 1994 Free Software Foundation, Inc.
     Verbatim copying and redistribution of this section is permitted
     without royalty; alteration is not permitted.


File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top

The GNU Project and GNU/Linux
*****************************

The GNU Project was launched in 1984 to develop a complete Unix-like
operating system which is free software: the GNU system.  (GNU is a
recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
Variants of the GNU operating system, which use the kernel Linux, are
now widely used; though these systems are often referred to as "Linux",
they are more accurately called GNU/Linux systems.

 For more information, see:
     <http://www.gnu.org/>
     <http://www.gnu.org/gnu/linux-and-gnu.html>


File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top

GNU General Public License
**************************

                        Version 3, 29 June 2007

     Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>

     Everyone is permitted to copy and distribute verbatim copies of this
     license document, but changing it is not allowed.

Preamble
========

The GNU General Public License is a free, copyleft license for software
and other kinds of works.

 The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program-to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

 When we speak of free software, we are referring to freedom, not price.
Our General Public Licenses are designed to make sure that you have the
freedom to distribute copies of free software (and charge for them if
you wish), that you receive source code or can get it if you want it,
that you can change the software or use pieces of it in new free
programs, and that you know you can do these things.

 To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

 For example, if you distribute copies of such a program, whether gratis
or for a fee, you must pass on to the recipients the same freedoms that
you received.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

 Developers that use the GNU GPL protect your rights with two steps: (1)
assert copyright on the software, and (2) offer you this License giving
you legal permission to copy, distribute and/or modify it.

 For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

 Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

 Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

 The precise terms and conditions for copying, distribution and
modification follow.

TERMS AND CONDITIONS
====================

  0. Definitions.

     "This License" refers to version 3 of the GNU General Public
     License.

     "Copyright" also means copyright-like laws that apply to other
     kinds of works, such as semiconductor masks.

     "The Program" refers to any copyrightable work licensed under this
     License.  Each licensee is addressed as "you".  "Licensees" and
     "recipients" may be individuals or organizations.

     To "modify" a work means to copy from or adapt all or part of the
     work in a fashion requiring copyright permission, other than the
     making of an exact copy.  The resulting work is called a "modified
     version" of the earlier work or a work "based on" the earlier work.

     A "covered work" means either the unmodified Program or a work
     based on the Program.

     To "propagate" a work means to do anything with it that, without
     permission, would make you directly or secondarily liable for
     infringement under applicable copyright law, except executing it on
     a computer or modifying a private copy.  Propagation includes
     copying, distribution (with or without modification), making
     available to the public, and in some countries other activities as
     well.

     To "convey" a work means any kind of propagation that enables other
     parties to make or receive copies.  Mere interaction with a user
     through a computer network, with no transfer of a copy, is not
     conveying.

     An interactive user interface displays "Appropriate Legal Notices"
     to the extent that it includes a convenient and prominently visible
     feature that (1) displays an appropriate copyright notice, and (2)
     tells the user that there is no warranty for the work (except to
     the extent that warranties are provided), that licensees may convey
     the work under this License, and how to view a copy of this
     License.  If the interface presents a list of user commands or
     options, such as a menu, a prominent item in the list meets this
     criterion.

  1. Source Code.

     The "source code" for a work means the preferred form of the work
     for making modifications to it.  "Object code" means any non-source
     form of a work.

     A "Standard Interface" means an interface that either is an
     official standard defined by a recognized standards body, or, in
     the case of interfaces specified for a particular programming
     language, one that is widely used among developers working in that
     language.

     The "System Libraries" of an executable work include anything,
     other than the work as a whole, that (a) is included in the normal
     form of packaging a Major Component, but which is not part of that
     Major Component, and (b) serves only to enable use of the work with
     that Major Component, or to implement a Standard Interface for
     which an implementation is available to the public in source code
     form.  A "Major Component", in this context, means a major
     essential component (kernel, window system, and so on) of the
     specific operating system (if any) on which the executable work
     runs, or a compiler used to produce the work, or an object code
     interpreter used to run it.

     The "Corresponding Source" for a work in object code form means all
     the source code needed to generate, install, and (for an executable
     work) run the object code and to modify the work, including scripts
     to control those activities.  However, it does not include the
     work's System Libraries, or general-purpose tools or generally
     available free programs which are used unmodified in performing
     those activities but which are not part of the work.  For example,
     Corresponding Source includes interface definition files associated
     with source files for the work, and the source code for shared
     libraries and dynamically linked subprograms that the work is
     specifically designed to require, such as by intimate data
     communication or control flow between those subprograms and other
     parts of the work.

     The Corresponding Source need not include anything that users can
     regenerate automatically from other parts of the Corresponding
     Source.

     The Corresponding Source for a work in source code form is that
     same work.

  2. Basic Permissions.

     All rights granted under this License are granted for the term of
     copyright on the Program, and are irrevocable provided the stated
     conditions are met.  This License explicitly affirms your unlimited
     permission to run the unmodified Program.  The output from running
     a covered work is covered by this License only if the output, given
     its content, constitutes a covered work.  This License acknowledges
     your rights of fair use or other equivalent, as provided by
     copyright law.

     You may make, run and propagate covered works that you do not
     convey, without conditions so long as your license otherwise
     remains in force.  You may convey covered works to others for the
     sole purpose of having them make modifications exclusively for you,
     or provide you with facilities for running those works, provided
     that you comply with the terms of this License in conveying all
     material for which you do not control copyright.  Those thus making
     or running the covered works for you must do so exclusively on your
     behalf, under your direction and control, on terms that prohibit
     them from making any copies of your copyrighted material outside
     their relationship with you.

     Conveying under any other circumstances is permitted solely under
     the conditions stated below.  Sublicensing is not allowed; section
     10 makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

     No covered work shall be deemed part of an effective technological
     measure under any applicable law fulfilling obligations under
     article 11 of the WIPO copyright treaty adopted on 20 December
     1996, or similar laws prohibiting or restricting circumvention of
     such measures.

     When you convey a covered work, you waive any legal power to forbid
     circumvention of technological measures to the extent such
     circumvention is effected by exercising rights under this License
     with respect to the covered work, and you disclaim any intention to
     limit operation or modification of the work as a means of
     enforcing, against the work's users, your or third parties' legal
     rights to forbid circumvention of technological measures.

  4. Conveying Verbatim Copies.

     You may convey verbatim copies of the Program's source code as you
     receive it, in any medium, provided that you conspicuously and
     appropriately publish on each copy an appropriate copyright notice;
     keep intact all notices stating that this License and any
     non-permissive terms added in accord with section 7 apply to the
     code; keep intact all notices of the absence of any warranty; and
     give all recipients a copy of this License along with the Program.

     You may charge any price or no price for each copy that you convey,
     and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

     You may convey a work based on the Program, or the modifications to
     produce it from the Program, in the form of source code under the
     terms of section 4, provided that you also meet all of these
     conditions:

       a. The work must carry prominent notices stating that you
          modified it, and giving a relevant date.

       b. The work must carry prominent notices stating that it is
          released under this License and any conditions added under
          section 7.  This requirement modifies the requirement in
          section 4 to "keep intact all notices".

       c. You must license the entire work, as a whole, under this
          License to anyone who comes into possession of a copy.  This
          License will therefore apply, along with any applicable
          section 7 additional terms, to the whole of the work, and all
          its parts, regardless of how they are packaged.  This License
          gives no permission to license the work in any other way, but
          it does not invalidate such permission if you have separately
          received it.

       d. If the work has interactive user interfaces, each must display
          Appropriate Legal Notices; however, if the Program has
          interactive interfaces that do not display Appropriate Legal
          Notices, your work need not make them do so.

     A compilation of a covered work with other separate and independent
     works, which are not by their nature extensions of the covered
     work, and which are not combined with it such as to form a larger
     program, in or on a volume of a storage or distribution medium, is
     called an "aggregate" if the compilation and its resulting
     copyright are not used to limit the access or legal rights of the
     compilation's users beyond what the individual works permit.
     Inclusion of a covered work in an aggregate does not cause this
     License to apply to the other parts of the aggregate.

  6. Conveying Non-Source Forms.

     You may convey a covered work in object code form under the terms
     of sections 4 and 5, provided that you also convey the
     machine-readable Corresponding Source under the terms of this
     License, in one of these ways:

       a. Convey the object code in, or embodied in, a physical product
          (including a physical distribution medium), accompanied by the
          Corresponding Source fixed on a durable physical medium
          customarily used for software interchange.

       b. Convey the object code in, or embodied in, a physical product
          (including a physical distribution medium), accompanied by a
          written offer, valid for at least three years and valid for as
          long as you offer spare parts or customer support for that
          product model, to give anyone who possesses the object code
          either (1) a copy of the Corresponding Source for all the
          software in the product that is covered by this License, on a
          durable physical medium customarily used for software
          interchange, for a price no more than your reasonable cost of
          physically performing this conveying of source, or (2) access
          to copy the Corresponding Source from a network server at no
          charge.

       c. Convey individual copies of the object code with a copy of the
          written offer to provide the Corresponding Source.  This
          alternative is allowed only occasionally and noncommercially,
          and only if you received the object code with such an offer,
          in accord with subsection 6b.

       d. Convey the object code by offering access from a designated
          place (gratis or for a charge), and offer equivalent access to
          the Corresponding Source in the same way through the same
          place at no further charge.  You need not require recipients
          to copy the Corresponding Source along with the object code.
          If the place to copy the object code is a network server, the
          Corresponding Source may be on a different server (operated by
          you or a third party) that supports equivalent copying
          facilities, provided you maintain clear directions next to the
          object code saying where to find the Corresponding Source.
          Regardless of what server hosts the Corresponding Source, you
          remain obligated to ensure that it is available for as long as
          needed to satisfy these requirements.

       e. Convey the object code using peer-to-peer transmission,
          provided you inform other peers where the object code and
          Corresponding Source of the work are being offered to the
          general public at no charge under subsection 6d.

     A separable portion of the object code, whose source code is
     excluded from the Corresponding Source as a System Library, need
     not be included in conveying the object code work.

     A "User Product" is either (1) a "consumer product", which means
     any tangible personal property which is normally used for personal,
     family, or household purposes, or (2) anything designed or sold for
     incorporation into a dwelling.  In determining whether a product is
     a consumer product, doubtful cases shall be resolved in favor of
     coverage.  For a particular product received by a particular user,
     "normally used" refers to a typical or common use of that class of
     product, regardless of the status of the particular user or of the
     way in which the particular user actually uses, or expects or is
     expected to use, the product.  A product is a consumer product
     regardless of whether the product has substantial commercial,
     industrial or non-consumer uses, unless such uses represent the
     only significant mode of use of the product.

     "Installation Information" for a User Product means any methods,
     procedures, authorization keys, or other information required to
     install and execute modified versions of a covered work in that
     User Product from a modified version of its Corresponding Source.
     The information must suffice to ensure that the continued
     functioning of the modified object code is in no case prevented or
     interfered with solely because modification has been made.

     If you convey an object code work under this section in, or with,
     or specifically for use in, a User Product, and the conveying
     occurs as part of a transaction in which the right of possession
     and use of the User Product is transferred to the recipient in
     perpetuity or for a fixed term (regardless of how the transaction
     is characterized), the Corresponding Source conveyed under this
     section must be accompanied by the Installation Information.  But
     this requirement does not apply if neither you nor any third party
     retains the ability to install modified object code on the User
     Product (for example, the work has been installed in ROM).

     The requirement to provide Installation Information does not
     include a requirement to continue to provide support service,
     warranty, or updates for a work that has been modified or installed
     by the recipient, or for the User Product in which it has been
     modified or installed.  Access to a network may be denied when the
     modification itself materially and adversely affects the operation
     of the network or violates the rules and protocols for
     communication across the network.

     Corresponding Source conveyed, and Installation Information
     provided, in accord with this section must be in a format that is
     publicly documented (and with an implementation available to the
     public in source code form), and must require no special password
     or key for unpacking, reading or copying.

  7. Additional Terms.

     "Additional permissions" are terms that supplement the terms of
     this License by making exceptions from one or more of its
     conditions.  Additional permissions that are applicable to the
     entire Program shall be treated as though they were included in
     this License, to the extent that they are valid under applicable
     law.  If additional permissions apply only to part of the Program,
     that part may be used separately under those permissions, but the
     entire Program remains governed by this License without regard to
     the additional permissions.

     When you convey a copy of a covered work, you may at your option
     remove any additional permissions from that copy, or from any part
     of it.  (Additional permissions may be written to require their own
     removal in certain cases when you modify the work.)  You may place
     additional permissions on material, added by you to a covered work,
     for which you have or can give appropriate copyright permission.

     Notwithstanding any other provision of this License, for material
     you add to a covered work, you may (if authorized by the copyright
     holders of that material) supplement the terms of this License with
     terms:

       a. Disclaiming warranty or limiting liability differently from
          the terms of sections 15 and 16 of this License; or

       b. Requiring preservation of specified reasonable legal notices
          or author attributions in that material or in the Appropriate
          Legal Notices displayed by works containing it; or

       c. Prohibiting misrepresentation of the origin of that material,
          or requiring that modified versions of such material be marked
          in reasonable ways as different from the original version; or

       d. Limiting the use for publicity purposes of names of licensors
          or authors of the material; or

       e. Declining to grant rights under trademark law for use of some
          trade names, trademarks, or service marks; or

       f. Requiring indemnification of licensors and authors of that
          material by anyone who conveys the material (or modified
          versions of it) with contractual assumptions of liability to
          the recipient, for any liability that these contractual
          assumptions directly impose on those licensors and authors.

     All other non-permissive additional terms are considered "further
     restrictions" within the meaning of section 10.  If the Program as
     you received it, or any part of it, contains a notice stating that
     it is governed by this License along with a term that is a further
     restriction, you may remove that term.  If a license document
     contains a further restriction but permits relicensing or conveying
     under this License, you may add to a covered work material governed
     by the terms of that license document, provided that the further
     restriction does not survive such relicensing or conveying.

     If you add terms to a covered work in accord with this section, you
     must place, in the relevant source files, a statement of the
     additional terms that apply to those files, or a notice indicating
     where to find the applicable terms.

     Additional terms, permissive or non-permissive, may be stated in
     the form of a separately written license, or stated as exceptions;
     the above requirements apply either way.

  8. Termination.

     You may not propagate or modify a covered work except as expressly
     provided under this License.  Any attempt otherwise to propagate or
     modify it is void, and will automatically terminate your rights
     under this License (including any patent licenses granted under the
     third paragraph of section 11).

     However, if you cease all violation of this License, then your
     license from a particular copyright holder is reinstated (a)
     provisionally, unless and until the copyright holder explicitly and
     finally terminates your license, and (b) permanently, if the
     copyright holder fails to notify you of the violation by some
     reasonable means prior to 60 days after the cessation.

     Moreover, your license from a particular copyright holder is
     reinstated permanently if the copyright holder notifies you of the
     violation by some reasonable means, this is the first time you have
     received notice of violation of this License (for any work) from
     that copyright holder, and you cure the violation prior to 30 days
     after your receipt of the notice.

     Termination of your rights under this section does not terminate
     the licenses of parties who have received copies or rights from you
     under this License.  If your rights have been terminated and not
     permanently reinstated, you do not qualify to receive new licenses
     for the same material under section 10.

  9. Acceptance Not Required for Having Copies.

     You are not required to accept this License in order to receive or
     run a copy of the Program.  Ancillary propagation of a covered work
     occurring solely as a consequence of using peer-to-peer
     transmission to receive a copy likewise does not require
     acceptance.  However, nothing other than this License grants you
     permission to propagate or modify any covered work.  These actions
     infringe copyright if you do not accept this License.  Therefore,
     by modifying or propagating a covered work, you indicate your
     acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

     Each time you convey a covered work, the recipient automatically
     receives a license from the original licensors, to run, modify and
     propagate that work, subject to this License.  You are not
     responsible for enforcing compliance by third parties with this
     License.

     An "entity transaction" is a transaction transferring control of an
     organization, or substantially all assets of one, or subdividing an
     organization, or merging organizations.  If propagation of a
     covered work results from an entity transaction, each party to that
     transaction who receives a copy of the work also receives whatever
     licenses to the work the party's predecessor in interest had or
     could give under the previous paragraph, plus a right to possession
     of the Corresponding Source of the work from the predecessor in
     interest, if the predecessor has it or can get it with reasonable
     efforts.

     You may not impose any further restrictions on the exercise of the
     rights granted or affirmed under this License.  For example, you
     may not impose a license fee, royalty, or other charge for exercise
     of rights granted under this License, and you may not initiate
     litigation (including a cross-claim or counterclaim in a lawsuit)
     alleging that any patent claim is infringed by making, using,
     selling, offering for sale, or importing the Program or any portion
     of it.

  11. Patents.

     A "contributor" is a copyright holder who authorizes use under this
     License of the Program or a work on which the Program is based.
     The work thus licensed is called the contributor's "contributor
     version".

     A contributor's "essential patent claims" are all patent claims
     owned or controlled by the contributor, whether already acquired or
     hereafter acquired, that would be infringed by some manner,
     permitted by this License, of making, using, or selling its
     contributor version, but do not include claims that would be
     infringed only as a consequence of further modification of the
     contributor version.  For purposes of this definition, "control"
     includes the right to grant patent sublicenses in a manner
     consistent with the requirements of this License.

     Each contributor grants you a non-exclusive, worldwide,
     royalty-free patent license under the contributor's essential
     patent claims, to make, use, sell, offer for sale, import and
     otherwise run, modify and propagate the contents of its contributor
     version.

     In the following three paragraphs, a "patent license" is any
     express agreement or commitment, however denominated, not to
     enforce a patent (such as an express permission to practice a
     patent or covenant not to sue for patent infringement).  To "grant"
     such a patent license to a party means to make such an agreement or
     commitment not to enforce a patent against the party.

     If you convey a covered work, knowingly relying on a patent
     license, and the Corresponding Source of the work is not available
     for anyone to copy, free of charge and under the terms of this
     License, through a publicly available network server or other
     readily accessible means, then you must either (1) cause the
     Corresponding Source to be so available, or (2) arrange to deprive
     yourself of the benefit of the patent license for this particular
     work, or (3) arrange, in a manner consistent with the requirements
     of this License, to extend the patent license to downstream
     recipients.  "Knowingly relying" means you have actual knowledge
     that, but for the patent license, your conveying the covered work
     in a country, or your recipient's use of the covered work in a
     country, would infringe one or more identifiable patents in that
     country that you have reason to believe are valid.

     If, pursuant to or in connection with a single transaction or
     arrangement, you convey, or propagate by procuring conveyance of, a
     covered work, and grant a patent license to some of the parties
     receiving the covered work authorizing them to use, propagate,
     modify or convey a specific copy of the covered work, then the
     patent license you grant is automatically extended to all
     recipients of the covered work and works based on it.

     A patent license is "discriminatory" if it does not include within
     the scope of its coverage, prohibits the exercise of, or is
     conditioned on the non-exercise of one or more of the rights that
     are specifically granted under this License.  You may not convey a
     covered work if you are a party to an arrangement with a third
     party that is in the business of distributing software, under which
     you make payment to the third party based on the extent of your
     activity of conveying the work, and under which the third party
     grants, to any of the parties who would receive the covered work
     from you, a discriminatory patent license (a) in connection with
     copies of the covered work conveyed by you (or copies made from
     those copies), or (b) primarily for and in connection with specific
     products or compilations that contain the covered work, unless you
     entered into that arrangement, or that patent license was granted,
     prior to 28 March 2007.

     Nothing in this License shall be construed as excluding or limiting
     any implied license or other defenses to infringement that may
     otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

     If conditions are imposed on you (whether by court order, agreement
     or otherwise) that contradict the conditions of this License, they
     do not excuse you from the conditions of this License.  If you
     cannot convey a covered work so as to satisfy simultaneously your
     obligations under this License and any other pertinent obligations,
     then as a consequence you may not convey it at all.  For example,
     if you agree to terms that obligate you to collect a royalty for
     further conveying from those to whom you convey the Program, the
     only way you could satisfy both those terms and this License would
     be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

     Notwithstanding any other provision of this License, you have
     permission to link or combine any covered work with a work licensed
     under version 3 of the GNU Affero General Public License into a
     single combined work, and to convey the resulting work.  The terms
     of this License will continue to apply to the part which is the
     covered work, but the special requirements of the GNU Affero
     General Public License, section 13, concerning interaction through
     a network will apply to the combination as such.

  14. Revised Versions of this License.

     The Free Software Foundation may publish revised and/or new
     versions of the GNU General Public License from time to time.  Such
     new versions will be similar in spirit to the present version, but
     may differ in detail to address new problems or concerns.

     Each version is given a distinguishing version number.  If the
     Program specifies that a certain numbered version of the GNU
     General Public License "or any later version" applies to it, you
     have the option of following the terms and conditions either of
     that numbered version or of any later version published by the Free
     Software Foundation.  If the Program does not specify a version
     number of the GNU General Public License, you may choose any
     version ever published by the Free Software Foundation.

     If the Program specifies that a proxy can decide which future
     versions of the GNU General Public License can be used, that
     proxy's public statement of acceptance of a version permanently
     authorizes you to choose that version for the Program.

     Later license versions may give you additional or different
     permissions.  However, no additional obligations are imposed on any
     author or copyright holder as a result of your choosing to follow a
     later version.

  15. Disclaimer of Warranty.

     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
     APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
     NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
     DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
     THE POSSIBILITY OF SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

     If the disclaimer of warranty and limitation of liability provided
     above cannot be given local legal effect according to their terms,
     reviewing courts shall apply local law that most closely
     approximates an absolute waiver of all civil liability in
     connection with the Program, unless a warranty or assumption of
     liability accompanies a copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS
===========================

How to Apply These Terms to Your New Programs
=============================================

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.

 To do so, attach the following notices to the program.  It is safest to
attach them to the start of each source file to most effectively state
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
     Copyright (C) YEAR NAME OF AUTHOR

     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 3 of the License, or (at
     your option) any later version.

     This program is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.

 Also add information on how to contact you by electronic and paper
mail.

 If the program does terminal interaction, make it output a short notice
like this when it starts in an interactive mode:

     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
     This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type 'show c' for details.

 The hypothetical commands 'show w' and 'show c' should show the
appropriate parts of the General Public License.  Of course, your
program's commands might be different; for a GUI interface, you would
use an "about box".

 You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  For more information on this, and how to apply and follow
the GNU GPL, see <http://www.gnu.org/licenses/>.

 The GNU General Public License does not permit incorporating your
program into proprietary programs.  If your program is a subroutine
library, you may consider it more useful to permit linking proprietary
applications with the library.  If this is what you want to do, use the
GNU Lesser General Public License instead of this License.  But first,
please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.


File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top

GNU Free Documentation License
******************************

                     Version 1.3, 3 November 2008

     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
     <http://fsf.org/>

     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

  0. PREAMBLE

     The purpose of this License is to make a manual, textbook, or other
     functional and useful document "free" in the sense of freedom: to
     assure everyone the effective freedom to copy and redistribute it,
     with or without modifying it, either commercially or
     noncommercially.  Secondarily, this License preserves for the
     author and publisher a way to get credit for their work, while not
     being considered responsible for modifications made by others.

     This License is a kind of "copyleft", which means that derivative
     works of the document must themselves be free in the same sense.
     It complements the GNU General Public License, which is a copyleft
     license designed for free software.

     We have designed this License in order to use it for manuals for
     free software, because free software needs free documentation: a
     free program should come with manuals providing the same freedoms
     that the software does.  But this License is not limited to
     software manuals; it can be used for any textual work, regardless
     of subject matter or whether it is published as a printed book.  We
     recommend this License principally for works whose purpose is
     instruction or reference.

  1. APPLICABILITY AND DEFINITIONS

     This License applies to any manual or other work, in any medium,
     that contains a notice placed by the copyright holder saying it can
     be distributed under the terms of this License.  Such a notice
     grants a world-wide, royalty-free license, unlimited in duration,
     to use that work under the conditions stated herein.  The
     "Document", below, refers to any such manual or work.  Any member
     of the public is a licensee, and is addressed as "you".  You accept
     the license if you copy, modify or distribute the work in a way
     requiring permission under copyright law.

     A "Modified Version" of the Document means any work containing the
     Document or a portion of it, either copied verbatim, or with
     modifications and/or translated into another language.

     A "Secondary Section" is a named appendix or a front-matter section
     of the Document that deals exclusively with the relationship of the
     publishers or authors of the Document to the Document's overall
     subject (or to related matters) and contains nothing that could
     fall directly within that overall subject.  (Thus, if the Document
     is in part a textbook of mathematics, a Secondary Section may not
     explain any mathematics.)  The relationship could be a matter of
     historical connection with the subject or with related matters, or
     of legal, commercial, philosophical, ethical or political position
     regarding them.

     The "Invariant Sections" are certain Secondary Sections whose
     titles are designated, as being those of Invariant Sections, in the
     notice that says that the Document is released under this License.
     If a section does not fit the above definition of Secondary then it
     is not allowed to be designated as Invariant.  The Document may
     contain zero Invariant Sections.  If the Document does not identify
     any Invariant Sections then there are none.

     The "Cover Texts" are certain short passages of text that are
     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
     that says that the Document is released under this License.  A
     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
     be at most 25 words.

     A "Transparent" copy of the Document means a machine-readable copy,
     represented in a format whose specification is available to the
     general public, that is suitable for revising the document
     straightforwardly with generic text editors or (for images composed
     of pixels) generic paint programs or (for drawings) some widely
     available drawing editor, and that is suitable for input to text
     formatters or for automatic translation to a variety of formats
     suitable for input to text formatters.  A copy made in an otherwise
     Transparent file format whose markup, or absence of markup, has
     been arranged to thwart or discourage subsequent modification by
     readers is not Transparent.  An image format is not Transparent if
     used for any substantial amount of text.  A copy that is not
     "Transparent" is called "Opaque".

     Examples of suitable formats for Transparent copies include plain
     ASCII without markup, Texinfo input format, LaTeX input format,
     SGML or XML using a publicly available DTD, and standard-conforming
     simple HTML, PostScript or PDF designed for human modification.
     Examples of transparent image formats include PNG, XCF and JPG.
     Opaque formats include proprietary formats that can be read and
     edited only by proprietary word processors, SGML or XML for which
     the DTD and/or processing tools are not generally available, and
     the machine-generated HTML, PostScript or PDF produced by some word
     processors for output purposes only.

     The "Title Page" means, for a printed book, the title page itself,
     plus such following pages as are needed to hold, legibly, the
     material this License requires to appear in the title page.  For
     works in formats which do not have any title page as such, "Title
     Page" means the text near the most prominent appearance of the
     work's title, preceding the beginning of the body of the text.

     The "publisher" means any person or entity that distributes copies
     of the Document to the public.

     A section "Entitled XYZ" means a named subunit of the Document
     whose title either is precisely XYZ or contains XYZ in parentheses
     following text that translates XYZ in another language.  (Here XYZ
     stands for a specific section name mentioned below, such as
     "Acknowledgements", "Dedications", "Endorsements", or "History".)
     To "Preserve the Title" of such a section when you modify the
     Document means that it remains a section "Entitled XYZ" according
     to this definition.

     The Document may include Warranty Disclaimers next to the notice
     which states that this License applies to the Document.  These
     Warranty Disclaimers are considered to be included by reference in
     this License, but only as regards disclaiming warranties: any other
     implication that these Warranty Disclaimers may have is void and
     has no effect on the meaning of this License.

  2. VERBATIM COPYING

     You may copy and distribute the Document in any medium, either
     commercially or noncommercially, provided that this License, the
     copyright notices, and the license notice saying this License
     applies to the Document are reproduced in all copies, and that you
     add no other conditions whatsoever to those of this License.  You
     may not use technical measures to obstruct or control the reading
     or further copying of the copies you make or distribute.  However,
     you may accept compensation in exchange for copies.  If you
     distribute a large enough number of copies you must also follow the
     conditions in section 3.

     You may also lend copies, under the same conditions stated above,
     and you may publicly display copies.

  3. COPYING IN QUANTITY

     If you publish printed copies (or copies in media that commonly
     have printed covers) of the Document, numbering more than 100, and
     the Document's license notice requires Cover Texts, you must
     enclose the copies in covers that carry, clearly and legibly, all
     these Cover Texts: Front-Cover Texts on the front cover, and
     Back-Cover Texts on the back cover.  Both covers must also clearly
     and legibly identify you as the publisher of these copies.  The
     front cover must present the full title with all words of the title
     equally prominent and visible.  You may add other material on the
     covers in addition.  Copying with changes limited to the covers, as
     long as they preserve the title of the Document and satisfy these
     conditions, can be treated as verbatim copying in other respects.

     If the required texts for either cover are too voluminous to fit
     legibly, you should put the first ones listed (as many as fit
     reasonably) on the actual cover, and continue the rest onto
     adjacent pages.

     If you publish or distribute Opaque copies of the Document
     numbering more than 100, you must either include a machine-readable
     Transparent copy along with each Opaque copy, or state in or with
     each Opaque copy a computer-network location from which the general
     network-using public has access to download using public-standard
     network protocols a complete Transparent copy of the Document, free
     of added material.  If you use the latter option, you must take
     reasonably prudent steps, when you begin distribution of Opaque
     copies in quantity, to ensure that this Transparent copy will
     remain thus accessible at the stated location until at least one
     year after the last time you distribute an Opaque copy (directly or
     through your agents or retailers) of that edition to the public.

     It is requested, but not required, that you contact the authors of
     the Document well before redistributing any large number of copies,
     to give them a chance to provide you with an updated version of the
     Document.

  4. MODIFICATIONS

     You may copy and distribute a Modified Version of the Document
     under the conditions of sections 2 and 3 above, provided that you
     release the Modified Version under precisely this License, with the
     Modified Version filling the role of the Document, thus licensing
     distribution and modification of the Modified Version to whoever
     possesses a copy of it.  In addition, you must do these things in
     the Modified Version:

       A. Use in the Title Page (and on the covers, if any) a title
          distinct from that of the Document, and from those of previous
          versions (which should, if there were any, be listed in the
          History section of the Document).  You may use the same title
          as a previous version if the original publisher of that
          version gives permission.

       B. List on the Title Page, as authors, one or more persons or
          entities responsible for authorship of the modifications in
          the Modified Version, together with at least five of the
          principal authors of the Document (all of its principal
          authors, if it has fewer than five), unless they release you
          from this requirement.

       C. State on the Title page the name of the publisher of the
          Modified Version, as the publisher.

       D. Preserve all the copyright notices of the Document.

       E. Add an appropriate copyright notice for your modifications
          adjacent to the other copyright notices.

       F. Include, immediately after the copyright notices, a license
          notice giving the public permission to use the Modified
          Version under the terms of this License, in the form shown in
          the Addendum below.

       G. Preserve in that license notice the full lists of Invariant
          Sections and required Cover Texts given in the Document's
          license notice.

       H. Include an unaltered copy of this License.

       I. Preserve the section Entitled "History", Preserve its Title,
          and add to it an item stating at least the title, year, new
          authors, and publisher of the Modified Version as given on the
          Title Page.  If there is no section Entitled "History" in the
          Document, create one stating the title, year, authors, and
          publisher of the Document as given on its Title Page, then add
          an item describing the Modified Version as stated in the
          previous sentence.

       J. Preserve the network location, if any, given in the Document
          for public access to a Transparent copy of the Document, and
          likewise the network locations given in the Document for
          previous versions it was based on.  These may be placed in the
          "History" section.  You may omit a network location for a work
          that was published at least four years before the Document
          itself, or if the original publisher of the version it refers
          to gives permission.

       K. For any section Entitled "Acknowledgements" or "Dedications",
          Preserve the Title of the section, and preserve in the section
          all the substance and tone of each of the contributor
          acknowledgements and/or dedications given therein.

       L. Preserve all the Invariant Sections of the Document, unaltered
          in their text and in their titles.  Section numbers or the
          equivalent are not considered part of the section titles.

       M. Delete any section Entitled "Endorsements".  Such a section
          may not be included in the Modified Version.

       N. Do not retitle any existing section to be Entitled
          "Endorsements" or to conflict in title with any Invariant
          Section.

       O. Preserve any Warranty Disclaimers.

     If the Modified Version includes new front-matter sections or
     appendices that qualify as Secondary Sections and contain no
     material copied from the Document, you may at your option designate
     some or all of these sections as invariant.  To do this, add their
     titles to the list of Invariant Sections in the Modified Version's
     license notice.  These titles must be distinct from any other
     section titles.

     You may add a section Entitled "Endorsements", provided it contains
     nothing but endorsements of your Modified Version by various
     parties--for example, statements of peer review or that the text
     has been approved by an organization as the authoritative
     definition of a standard.

     You may add a passage of up to five words as a Front-Cover Text,
     and a passage of up to 25 words as a Back-Cover Text, to the end of
     the list of Cover Texts in the Modified Version.  Only one passage
     of Front-Cover Text and one of Back-Cover Text may be added by (or
     through arrangements made by) any one entity.  If the Document
     already includes a cover text for the same cover, previously added
     by you or by arrangement made by the same entity you are acting on
     behalf of, you may not add another; but you may replace the old
     one, on explicit permission from the previous publisher that added
     the old one.

     The author(s) and publisher(s) of the Document do not by this
     License give permission to use their names for publicity for or to
     assert or imply endorsement of any Modified Version.

  5. COMBINING DOCUMENTS

     You may combine the Document with other documents released under
     this License, under the terms defined in section 4 above for
     modified versions, provided that you include in the combination all
     of the Invariant Sections of all of the original documents,
     unmodified, and list them all as Invariant Sections of your
     combined work in its license notice, and that you preserve all
     their Warranty Disclaimers.

     The combined work need only contain one copy of this License, and
     multiple identical Invariant Sections may be replaced with a single
     copy.  If there are multiple Invariant Sections with the same name
     but different contents, make the title of each such section unique
     by adding at the end of it, in parentheses, the name of the
     original author or publisher of that section if known, or else a
     unique number.  Make the same adjustment to the section titles in
     the list of Invariant Sections in the license notice of the
     combined work.

     In the combination, you must combine any sections Entitled
     "History" in the various original documents, forming one section
     Entitled "History"; likewise combine any sections Entitled
     "Acknowledgements", and any sections Entitled "Dedications".  You
     must delete all sections Entitled "Endorsements."

  6. COLLECTIONS OF DOCUMENTS

     You may make a collection consisting of the Document and other
     documents released under this License, and replace the individual
     copies of this License in the various documents with a single copy
     that is included in the collection, provided that you follow the
     rules of this License for verbatim copying of each of the documents
     in all other respects.

     You may extract a single document from such a collection, and
     distribute it individually under this License, provided you insert
     a copy of this License into the extracted document, and follow this
     License in all other respects regarding verbatim copying of that
     document.

  7. AGGREGATION WITH INDEPENDENT WORKS

     A compilation of the Document or its derivatives with other
     separate and independent documents or works, in or on a volume of a
     storage or distribution medium, is called an "aggregate" if the
     copyright resulting from the compilation is not used to limit the
     legal rights of the compilation's users beyond what the individual
     works permit.  When the Document is included in an aggregate, this
     License does not apply to the other works in the aggregate which
     are not themselves derivative works of the Document.

     If the Cover Text requirement of section 3 is applicable to these
     copies of the Document, then if the Document is less than one half
     of the entire aggregate, the Document's Cover Texts may be placed
     on covers that bracket the Document within the aggregate, or the
     electronic equivalent of covers if the Document is in electronic
     form.  Otherwise they must appear on printed covers that bracket
     the whole aggregate.

  8. TRANSLATION

     Translation is considered a kind of modification, so you may
     distribute translations of the Document under the terms of section
     4.  Replacing Invariant Sections with translations requires special
     permission from their copyright holders, but you may include
     translations of some or all Invariant Sections in addition to the
     original versions of these Invariant Sections.  You may include a
     translation of this License, and all the license notices in the
     Document, and any Warranty Disclaimers, provided that you also
     include the original English version of this License and the
     original versions of those notices and disclaimers.  In case of a
     disagreement between the translation and the original version of
     this License or a notice or disclaimer, the original version will
     prevail.

     If a section in the Document is Entitled "Acknowledgements",
     "Dedications", or "History", the requirement (section 4) to
     Preserve its Title (section 1) will typically require changing the
     actual title.

  9. TERMINATION

     You may not copy, modify, sublicense, or distribute the Document
     except as expressly provided under this License.  Any attempt
     otherwise to copy, modify, sublicense, or distribute it is void,
     and will automatically terminate your rights under this License.

     However, if you cease all violation of this License, then your
     license from a particular copyright holder is reinstated (a)
     provisionally, unless and until the copyright holder explicitly and
     finally terminates your license, and (b) permanently, if the
     copyright holder fails to notify you of the violation by some
     reasonable means prior to 60 days after the cessation.

     Moreover, your license from a particular copyright holder is
     reinstated permanently if the copyright holder notifies you of the
     violation by some reasonable means, this is the first time you have
     received notice of violation of this License (for any work) from
     that copyright holder, and you cure the violation prior to 30 days
     after your receipt of the notice.

     Termination of your rights under this section does not terminate
     the licenses of parties who have received copies or rights from you
     under this License.  If your rights have been terminated and not
     permanently reinstated, receipt of a copy of some or all of the
     same material does not give you any rights to use it.

  10. FUTURE REVISIONS OF THIS LICENSE

     The Free Software Foundation may publish new, revised versions of
     the GNU Free Documentation License from time to time.  Such new
     versions will be similar in spirit to the present version, but may
     differ in detail to address new problems or concerns.  See
     <http://www.gnu.org/copyleft/>.

     Each version of the License is given a distinguishing version
     number.  If the Document specifies that a particular numbered
     version of this License "or any later version" applies to it, you
     have the option of following the terms and conditions either of
     that specified version or of any later version that has been
     published (not as a draft) by the Free Software Foundation.  If the
     Document does not specify a version number of this License, you may
     choose any version ever published (not as a draft) by the Free
     Software Foundation.  If the Document specifies that a proxy can
     decide which future versions of this License can be used, that
     proxy's public statement of acceptance of a version permanently
     authorizes you to choose that version for the Document.

  11. RELICENSING

     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
     World Wide Web server that publishes copyrightable works and also
     provides prominent facilities for anybody to edit those works.  A
     public wiki that anybody can edit is an example of such a server.
     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
     site means any set of copyrightable works thus published on the MMC
     site.

     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
     license published by Creative Commons Corporation, a not-for-profit
     corporation with a principal place of business in San Francisco,
     California, as well as future copyleft versions of that license
     published by that same organization.

     "Incorporate" means to publish or republish a Document, in whole or
     in part, as part of another Document.

     An MMC is "eligible for relicensing" if it is licensed under this
     License, and if all works that were first published under this
     License somewhere other than this MMC, and subsequently
     incorporated in whole or in part into the MMC, (1) had no cover
     texts or invariant sections, and (2) were thus incorporated prior
     to November 1, 2008.

     The operator of an MMC Site may republish an MMC contained in the
     site under CC-BY-SA on the same site at any time before August 1,
     2009, provided the MMC is eligible for relicensing.

ADDENDUM: How to use this License for your documents
====================================================

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:

       Copyright (C)  YEAR  YOUR NAME.
       Permission is granted to copy, distribute and/or modify this document
       under the terms of the GNU Free Documentation License, Version 1.3
       or any later version published by the Free Software Foundation;
       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
       Texts.  A copy of the license is included in the section entitled ``GNU
       Free Documentation License''.

 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the "with...Texts."  line with this:

         with the Invariant Sections being LIST THEIR TITLES, with
         the Front-Cover Texts being LIST, and with the Back-Cover Texts
         being LIST.

 If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.

 If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of free
software license, such as the GNU General Public License, to permit
their use in free software.


File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top

Contributors to GCC
*******************

The GCC project would like to thank its many contributors.  Without them
the project would not have been nearly as successful as it has been.
Any omissions in this list are accidental.  Feel free to contact
<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
some of your contributions are not listed.  Please keep this list in
alphabetical order.

   * Analog Devices helped implement the support for complex data types
     and iterators.

   * John David Anglin for threading-related fixes and improvements to
     libstdc++-v3, and the HP-UX port.

   * James van Artsdalen wrote the code that makes efficient use of the
     Intel 80387 register stack.

   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
     Series port.

   * Alasdair Baird for various bug fixes.

   * Giovanni Bajo for analyzing lots of complicated C++ problem
     reports.

   * Peter Barada for his work to improve code generation for new
     ColdFire cores.

   * Gerald Baumgartner added the signature extension to the C++ front
     end.

   * Godmar Back for his Java improvements and encouragement.

   * Scott Bambrough for help porting the Java compiler.

   * Wolfgang Bangerth for processing tons of bug reports.

   * Jon Beniston for his Microsoft Windows port of Java and port to
     Lattice Mico32.

   * Daniel Berlin for better DWARF2 support, faster/better
     optimizations, improved alias analysis, plus migrating GCC to
     Bugzilla.

   * Geoff Berry for his Java object serialization work and various
     patches.

   * David Binderman tests weekly snapshots of GCC trunk against Fedora
     Rawhide for several architectures.

   * Laurynas Biveinis for memory management work and DJGPP port fixes.

   * Uros Bizjak for the implementation of x87 math built-in functions
     and for various middle end and i386 back end improvements and bug
     fixes.

   * Eric Blake for helping to make GCJ and libgcj conform to the
     specifications.

   * Janne Blomqvist for contributions to GNU Fortran.

   * Segher Boessenkool for various fixes.

   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
     other Java work.

   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
     miscellaneous clean-ups.

   * Steven Bosscher for integrating the GNU Fortran front end into GCC
     and for contributing to the tree-ssa branch.

   * Eric Botcazou for fixing middle- and backend bugs left and right.

   * Per Bothner for his direction via the steering committee and
     various improvements to the infrastructure for supporting new
     languages.  Chill front end implementation.  Initial
     implementations of cpplib, fix-header, config.guess, libio, and
     past C++ library (libg++) maintainer.  Dreaming up, designing and
     implementing much of GCJ.

   * Devon Bowen helped port GCC to the Tahoe.

   * Don Bowman for mips-vxworks contributions.

   * Dave Brolley for work on cpplib and Chill.

   * Paul Brook for work on the ARM architecture and maintaining GNU
     Fortran.

   * Robert Brown implemented the support for Encore 32000 systems.

   * Christian Bruel for improvements to local store elimination.

   * Herman A.J. ten Brugge for various fixes.

   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
     FAQ.

   * Joe Buck for his direction via the steering committee from its
     creation to 2013.

   * Craig Burley for leadership of the G77 Fortran effort.

   * Stephan Buys for contributing Doxygen notes for libstdc++.

   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
     to the C++ strings, streambufs and formatted I/O, hard detective
     work on the frustrating localization issues, and keeping up with
     the problem reports.

   * John Carr for his alias work, SPARC hacking, infrastructure
     improvements, previous contributions to the steering committee,
     loop optimizations, etc.

   * Stephane Carrez for 68HC11 and 68HC12 ports.

   * Steve Chamberlain for support for the Renesas SH and H8 processors
     and the PicoJava processor, and for GCJ config fixes.

   * Glenn Chambers for help with the GCJ FAQ.

   * John-Marc Chandonia for various libgcj patches.

   * Denis Chertykov for contributing and maintaining the AVR port, the
     first GCC port for an 8-bit architecture.

   * Scott Christley for his Objective-C contributions.

   * Eric Christopher for his Java porting help and clean-ups.

   * Branko Cibej for more warning contributions.

   * The GNU Classpath project for all of their merged runtime code.

   * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work,
     '--help', and other random hacking.

   * Michael Cook for libstdc++ cleanup patches to reduce warnings.

   * R. Kelley Cook for making GCC buildable from a read-only directory
     as well as other miscellaneous build process and documentation
     clean-ups.

   * Ralf Corsepius for SH testing and minor bug fixing.

   * Stan Cox for care and feeding of the x86 port and lots of behind
     the scenes hacking.

   * Alex Crain provided changes for the 3b1.

   * Ian Dall for major improvements to the NS32k port.

   * Paul Dale for his work to add uClinux platform support to the m68k
     backend.

   * Dario Dariol contributed the four varieties of sample programs that
     print a copy of their source.

   * Russell Davidson for fstream and stringstream fixes in libstdc++.

   * Bud Davis for work on the G77 and GNU Fortran compilers.

   * Mo DeJong for GCJ and libgcj bug fixes.

   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
     various bug fixes, and the M32C, MeP, MSP430, and RL78 ports.

   * Arnaud Desitter for helping to debug GNU Fortran.

   * Gabriel Dos Reis for contributions to G++, contributions and
     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
     including 'valarray<>', 'complex<>', maintaining the numerics
     library (including that pesky '<limits>' :-) and keeping up-to-date
     anything to do with numbers.

   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
     ISO C99 support, CFG dumping support, etc., plus support of the C++
     runtime libraries including for all kinds of C interface issues,
     contributing and maintaining 'complex<>', sanity checking and
     disbursement, configuration architecture, libio maintenance, and
     early math work.

   * Franc,ois Dumont for his work on libstdc++-v3, especially
     maintaining and improving 'debug-mode' and associative and
     unordered containers.

   * Zdenek Dvorak for a new loop unroller and various fixes.

   * Michael Eager for his work on the Xilinx MicroBlaze port.

   * Richard Earnshaw for his ongoing work with the ARM.

   * David Edelsohn for his direction via the steering committee,
     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
     loop changes, doing the entire AIX port of libstdc++ with his bare
     hands, and for ensuring GCC properly keeps working on AIX.

   * Kevin Ediger for the floating point formatting of num_put::do_put
     in libstdc++.

   * Phil Edwards for libstdc++ work including configuration hackery,
     documentation maintainer, chief breaker of the web pages, the
     occasional iostream bug fix, and work on shared library symbol
     versioning.

   * Paul Eggert for random hacking all over GCC.

   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
     configuration support for locales and fstream-related fixes.

   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
     iostreams.

   * Christian Ehrhardt for dealing with bug reports.

   * Ben Elliston for his work to move the Objective-C runtime into its
     own subdirectory and for his work on autoconf.

   * Revital Eres for work on the PowerPC 750CL port.

   * Marc Espie for OpenBSD support.

   * Doug Evans for much of the global optimization framework, arc,
     m32r, and SPARC work.

   * Christopher Faylor for his work on the Cygwin port and for caring
     and feeding the gcc.gnu.org box and saving its users tons of spam.

   * Fred Fish for BeOS support and Ada fixes.

   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.

   * Peter Gerwinski for various bug fixes and the Pascal front end.

   * Kaveh R. Ghazi for his direction via the steering committee,
     amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC
     on a plethora of platforms.  Kaveh extends his gratitude to the
     CAIP Center at Rutgers University for providing him with computing
     resources to work on Free Software from the late 1980s to 2010.

   * John Gilmore for a donation to the FSF earmarked improving GNU
     Java.

   * Judy Goldberg for c++ contributions.

   * Torbjorn Granlund for various fixes and the c-torture testsuite,
     multiply- and divide-by-constant optimization, improved long long
     support, improved leaf function register allocation, and his
     direction via the steering committee.

   * Jonny Grant for improvements to 'collect2's' '--help'
     documentation.

   * Anthony Green for his '-Os' contributions, the moxie port, and Java
     front end work.

   * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java
     code.

   * Michael K. Gschwind contributed the port to the PDP-11.

   * Richard Biener for his ongoing middle-end contributions and bug
     fixes and for release management.

   * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools,
     the support for Dwarf symbolic debugging information, and much of
     the support for System V Release 4.  He has also worked heavily on
     the Intel 386 and 860 support.

   * Sumanth Gundapaneni for contributing the CR16 port.

   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
     GCSE.

   * Bruno Haible for improvements in the runtime overhead for EH, new
     warnings and assorted bug fixes.

   * Andrew Haley for his amazing Java compiler and library efforts.

   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
     series 300.

   * Michael Hayes for various thankless work he's done trying to get
     the c30/c40 ports functional.  Lots of loop and unroll improvements
     and fixes.

   * Dara Hazeghi for wading through myriads of target-specific bug
     reports.

   * Kate Hedstrom for staking the G77 folks with an initial testsuite.

   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
     work, loop opts, and generally fixing lots of old problems we've
     ignored for years, flow rewrite and lots of further stuff,
     including reviewing tons of patches.

   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
     various fixes.

   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
     contributed the support for the Sony NEWS machine.

   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
     various fixes.

   * Katherine Holcomb for work on GNU Fortran.

   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
     of testing and bug fixing, particularly of GCC configury code.

   * Steve Holmgren for MachTen patches.

   * Mat Hostetter for work on the TILE-Gx and TILEPro ports.

   * Jan Hubicka for his x86 port improvements.

   * Falk Hueffner for working on C and optimization bug reports.

   * Bernardo Innocenti for his m68k work, including merging of ColdFire
     improvements and uClinux support.

   * Christian Iseli for various bug fixes.

   * Kamil Iskra for general m68k hacking.

   * Lee Iverson for random fixes and MIPS testing.

   * Balaji V. Iyer for Cilk+ development and merging.

   * Andreas Jaeger for testing and benchmarking of GCC and various bug
     fixes.

   * Martin Jambor for his work on inter-procedural optimizations, the
     switch conversion pass, and scalar replacement of aggregates.

   * Jakub Jelinek for his SPARC work and sibling call optimizations as
     well as lots of bug fixes and test cases, and for improving the
     Java build system.

   * Janis Johnson for ia64 testing and fixes, her quality improvement
     sidetracks, and web page maintenance.

   * Kean Johnston for SCO OpenServer support and various fixes.

   * Tim Josling for the sample language treelang based originally on
     Richard Kenner's "toy" language.

   * Nicolai Josuttis for additional libstdc++ documentation.

   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
     target.

   * Steven G. Kargl for work on GNU Fortran.

   * David Kashtan of SRI adapted GCC to VMS.

   * Ryszard Kabatek for many, many libstdc++ bug fixes and
     optimizations of strings, especially member functions, and for
     auto_ptr fixes.

   * Geoffrey Keating for his ongoing work to make the PPC work for
     GNU/Linux and his automatic regression tester.

   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
     work in just about every part of libstdc++.

   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
     MIL-STD-1750A.

   * Richard Kenner of the New York University Ultracomputer Research
     Laboratory wrote the machine descriptions for the AMD 29000, the
     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
     support for instruction attributes.  He also made changes to better
     support RISC processors including changes to common subexpression
     elimination, strength reduction, function calling sequence
     handling, and condition code support, in addition to generalizing
     the code for frame pointer elimination and delay slot scheduling.
     Richard Kenner was also the head maintainer of GCC for several
     years.

   * Mumit Khan for various contributions to the Cygwin and Mingw32
     ports and maintaining binary releases for Microsoft Windows hosts,
     and for massive libstdc++ porting work to Cygwin/Mingw32.

   * Robin Kirkham for cpu32 support.

   * Mark Klein for PA improvements.

   * Thomas Koenig for various bug fixes.

   * Bruce Korb for the new and improved fixincludes code.

   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
     effort.

   * Maxim Kuvyrkov for contributions to the instruction scheduler, the
     Android and m68k/Coldfire ports, and optimizations.

   * Charles LaBrec contributed the support for the Integrated Solutions
     68020 system.

   * Asher Langton and Mike Kumbera for contributing Cray pointer
     support to GNU Fortran, and for other GNU Fortran improvements.

   * Jeff Law for his direction via the steering committee, coordinating
     the entire egcs project and GCC 2.95, rolling out snapshots and
     releases, handling merges from GCC2, reviewing tons of patches that
     might have fallen through the cracks else, and random but extensive
     hacking.

   * Walter Lee for work on the TILE-Gx and TILEPro ports.

   * Marc Lehmann for his direction via the steering committee and
     helping with analysis and improvements of x86 performance.

   * Victor Leikehman for work on GNU Fortran.

   * Ted Lemon wrote parts of the RTL reader and printer.

   * Kriang Lerdsuwanakij for C++ improvements including template as
     template parameter support, and many C++ fixes.

   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
     and random work on the Java front end.

   * Alain Lichnewsky ported GCC to the MIPS CPU.

   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
     and patches.

   * Robert Lipe for OpenServer support, new testsuites, testing, etc.

   * Chen Liqin for various S+core related fixes/improvement, and for
     maintaining the S+core port.

   * Weiwen Liu for testing and various bug fixes.

   * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other
     diagnostics fixes and improvements.

   * Dave Love for his ongoing work with the Fortran front end and
     runtime libraries.

   * Martin von Lo"wis for internal consistency checking infrastructure,
     various C++ improvements including namespace support, and tons of
     assistance with libstdc++/compiler merges.

   * H.J. Lu for his previous contributions to the steering committee,
     many x86 bug reports, prototype patches, and keeping the GNU/Linux
     ports working.

   * Greg McGary for random fixes and (someday) bounded pointers.

   * Andrew MacLeod for his ongoing work in building a real EH system,
     various code generation improvements, work on the global optimizer,
     etc.

   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
     hacking improvements to compile-time performance, overall knowledge
     and direction in the area of instruction scheduling, and design and
     implementation of the automaton based instruction scheduler.

   * Bob Manson for his behind the scenes work on dejagnu.

   * John Marino for contributing the DragonFly BSD port.

   * Philip Martin for lots of libstdc++ string and vector iterator
     fixes and improvements, and string clean up and testsuites.

   * Michael Matz for his work on dominance tree discovery, the x86-64
     port, link-time optimization framework and general optimization
     improvements.

   * All of the Mauve project contributors, for Java test code.

   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.

   * Adam Megacz for his work on the Microsoft Windows port of GCJ.

   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
     powerpc, haifa, ECOFF debug support, and other assorted hacking.

   * Jason Merrill for his direction via the steering committee and
     leading the G++ effort.

   * Martin Michlmayr for testing GCC on several architectures using the
     entire Debian archive.

   * David Miller for his direction via the steering committee, lots of
     SPARC work, improvements in jump.c and interfacing with the Linux
     kernel developers.

   * Gary Miller ported GCC to Charles River Data Systems machines.

   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
     the entire libstdc++ testsuite namespace-compatible.

   * Mark Mitchell for his direction via the steering committee,
     mountains of C++ work, load/store hoisting out of loops, alias
     analysis improvements, ISO C 'restrict' support, and serving as
     release manager from 2000 to 2011.

   * Alan Modra for various GNU/Linux bits and testing.

   * Toon Moene for his direction via the steering committee, Fortran
     maintenance, and his ongoing work to make us make Fortran run fast.

   * Jason Molenda for major help in the care and feeding of all the
     services on the gcc.gnu.org (formerly egcs.cygnus.com)
     machine--mail, web services, ftp services, etc etc.  Doing all this
     work on scrap paper and the backs of envelopes would have been...
     difficult.

   * Catherine Moore for fixing various ugly problems we have sent her
     way, including the haifa bug which was killing the Alpha & PowerPC
     Linux kernels.

   * Mike Moreton for his various Java patches.

   * David Mosberger-Tang for various Alpha improvements, and for the
     initial IA-64 port.

   * Stephen Moshier contributed the floating point emulator that
     assists in cross-compilation and permits support for floating point
     numbers wider than 64 bits and for ISO C99 support.

   * Bill Moyer for his behind the scenes work on various issues.

   * Philippe De Muyter for his work on the m68k port.

   * Joseph S. Myers for his work on the PDP-11 port, format checking
     and ISO C99 support, and continuous emphasis on (and contributions
     to) documentation.

   * Nathan Myers for his work on libstdc++-v3: architecture and
     authorship through the first three snapshots, including
     implementation of locale infrastructure, string, shadow C headers,
     and the initial project documentation (DESIGN, CHECKLIST, and so
     forth).  Later, more work on MT-safe string and shadow headers.

   * Felix Natter for documentation on porting libstdc++.

   * Nathanael Nerode for cleaning up the configuration/build process.

   * NeXT, Inc. donated the front end that supports the Objective-C
     language.

   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the
     search engine setup, various documentation fixes and other small
     fixes.

   * Geoff Noer for his work on getting cygwin native builds working.

   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
     tracking web pages, GIMPLE tuples, and assorted fixes.

   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related
     infrastructure improvements.

   * Alexandre Oliva for various build infrastructure improvements,
     scripts and amazing testing work, including keeping libtool issues
     sane and happy.

   * Stefan Olsson for work on mt_alloc.

   * Melissa O'Neill for various NeXT fixes.

   * Rainer Orth for random MIPS work, including improvements to GCC's
     o32 ABI support, improvements to dejagnu's MIPS support, Java
     configuration clean-ups and porting work, and maintaining the IRIX,
     Solaris 2, and Tru64 UNIX ports.

   * Hartmut Penner for work on the s390 port.

   * Paul Petersen wrote the machine description for the Alliant FX/8.

   * Alexandre Petit-Bianco for implementing much of the Java compiler
     and continued Java maintainership.

   * Matthias Pfaller for major improvements to the NS32k port.

   * Gerald Pfeifer for his direction via the steering committee,
     pointing out lots of problems we need to solve, maintenance of the
     web pages, and taking care of documentation maintenance in general.

   * Andrew Pinski for processing bug reports by the dozen.

   * Ovidiu Predescu for his work on the Objective-C front end and
     runtime libraries.

   * Jerry Quinn for major performance improvements in C++ formatted
     I/O.

   * Ken Raeburn for various improvements to checker, MIPS ports and
     various cleanups in the compiler.

   * Rolf W. Rasmussen for hacking on AWT.

   * David Reese of Sun Microsystems contributed to the Solaris on
     PowerPC port.

   * Volker Reichelt for keeping up with the problem reports.

   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
     hacking and developing and maintaining the Epiphany port.

   * Loren J. Rittle for improvements to libstdc++-v3 including the
     FreeBSD port, threading fixes, thread-related configury changes,
     critical threading documentation, and solutions to really tricky
     I/O problems, as well as keeping GCC properly working on FreeBSD
     and continuous testing.

   * Craig Rodrigues for processing tons of bug reports.

   * Ola Ro"nnerup for work on mt_alloc.

   * Gavin Romig-Koch for lots of behind the scenes MIPS work.

   * David Ronis inspired and encouraged Craig to rewrite the G77
     documentation in texinfo format by contributing a first pass at a
     translation of the old 'g77-0.5.16/f/DOC' file.

   * Ken Rose for fixes to GCC's delay slot filling code.

   * Ira Rosen for her contributions to the auto-vectorizer.

   * Paul Rubin wrote most of the preprocessor.

   * Pe'tur Runo'lfsson for major performance improvements in C++
     formatted I/O and large file support in C++ filebuf.

   * Chip Salzenberg for libstdc++ patches and improvements to locales,
     traits, Makefiles, libio, libtool hackery, and "long long" support.

   * Juha Sarlin for improvements to the H8 code generator.

   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
     300.

   * Roger Sayle for improvements to constant folding and GCC's RTL
     optimizers as well as for fixing numerous bugs.

   * Bradley Schatz for his work on the GCJ FAQ.

   * Peter Schauer wrote the code to allow debugging to work on the
     Alpha.

   * William Schelter did most of the work on the Intel 80386 support.

   * Tobias Schlu"ter for work on GNU Fortran.

   * Bernd Schmidt for various code generation improvements and major
     work in the reload pass, serving as release manager for GCC 2.95.3,
     and work on the Blackfin and C6X ports.

   * Peter Schmid for constant testing of libstdc++--especially
     application testing, going above and beyond what was requested for
     the release criteria--and libstdc++ header file tweaks.

   * Jason Schroeder for jcf-dump patches.

   * Andreas Schwab for his work on the m68k port.

   * Lars Segerlund for work on GNU Fortran.

   * Dodji Seketeli for numerous C++ bug fixes and debug info
     improvements.

   * Tim Shen for major work on '<regex>'.

   * Joel Sherrill for his direction via the steering committee, RTEMS
     contributions and RTEMS testing.

   * Nathan Sidwell for many C++ fixes/improvements.

   * Jeffrey Siegal for helping RMS with the original design of GCC,
     some code which handles the parse tree and RTL data structures,
     constant folding and help with the original VAX & m68k ports.

   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
     from the LWG (thereby keeping GCC in line with updates from the
     ISO).

   * Franz Sirl for his ongoing work with making the PPC port stable for
     GNU/Linux.

   * Andrey Slepuhin for assorted AIX hacking.

   * Trevor Smigiel for contributing the SPU port.

   * Christopher Smith did the port for Convex machines.

   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
     Retired from GCC maintainership August 2010, having mentored two
     new maintainers into the role.

   * Randy Smith finished the Sun FPA support.

   * Ed Smith-Rowland for his continuous work on libstdc++-v3, special
     functions, '<random>', and various improvements to C++11 features.

   * Scott Snyder for queue, iterator, istream, and string fixes and
     libstdc++ testsuite entries.  Also for providing the patch to G77
     to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and
     'LOGICAL*1'.

   * Zdenek Sojka for running automated regression testing of GCC and
     reporting numerous bugs.

   * Jayant Sonar for contributing the CR16 port.

   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.

   * Richard Stallman, for writing the original GCC and launching the
     GNU project.

   * Jan Stein of the Chalmers Computer Society provided support for
     Genix, as well as part of the 32000 machine description.

   * Nigel Stephens for various mips16 related fixes/improvements.

   * Jonathan Stone wrote the machine description for the Pyramid
     computer.

   * Graham Stott for various infrastructure improvements.

   * John Stracke for his Java HTTP protocol fixes.

   * Mike Stump for his Elxsi port, G++ contributions over the years and
     more recently his vxworks contributions

   * Jeff Sturm for Java porting help, bug fixes, and encouragement.

   * Shigeya Suzuki for this fixes for the bsdi platforms.

   * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64
     support, general configury hacking, fixincludes, etc.

   * Holger Teutsch provided the support for the Clipper CPU.

   * Gary Thomas for his ongoing work to make the PPC work for
     GNU/Linux.

   * Philipp Thomas for random bug fixes throughout the compiler

   * Jason Thorpe for thread support in libstdc++ on NetBSD.

   * Kresten Krab Thorup wrote the run time support for the Objective-C
     language and the fantastic Java bytecode interpreter.

   * Michael Tiemann for random bug fixes, the first instruction
     scheduler, initial C++ support, function integration, NS32k, SPARC
     and M88k machine description work, delay slot scheduling.

   * Andreas Tobler for his work porting libgcj to Darwin.

   * Teemu Torma for thread safe exception handling support.

   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
     definitions, and of the VAX machine description.

   * Daniel Towner and Hariharan Sandanagobalane contributed and
     maintain the picoChip port.

   * Tom Tromey for internationalization support and for his many Java
     contributions and libgcj maintainership.

   * Lassi Tuura for improvements to config.guess to determine HP
     processor types.

   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.

   * Andy Vaught for the design and initial implementation of the GNU
     Fortran front end.

   * Brent Verner for work with the libstdc++ cshadow files and their
     associated configure steps.

   * Todd Vierling for contributions for NetBSD ports.

   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
     guidance.

   * Dean Wakerley for converting the install documentation from HTML to
     texinfo in time for GCC 3.0.

   * Krister Walfridsson for random bug fixes.

   * Feng Wang for contributions to GNU Fortran.

   * Stephen M. Webb for time and effort on making libstdc++ shadow
     files work with the tricky Solaris 8+ headers, and for pushing the
     build-time header tree.  Also, for starting and driving the
     '<regex>' effort.

   * John Wehle for various improvements for the x86 code generator,
     related infrastructure improvements to help x86 code generation,
     value range propagation and other work, WE32k port.

   * Ulrich Weigand for work on the s390 port.

   * Zack Weinberg for major work on cpplib and various other bug fixes.

   * Matt Welsh for help with Linux Threads support in GCJ.

   * Urban Widmark for help fixing java.io.

   * Mark Wielaard for new Java library code and his work integrating
     with Classpath.

   * Dale Wiles helped port GCC to the Tahoe.

   * Bob Wilson from Tensilica, Inc. for the Xtensa port.

   * Jim Wilson for his direction via the steering committee, tackling
     hard problems in various places that nobody else wanted to work on,
     strength reduction and other loop optimizations.

   * Paul Woegerer and Tal Agmon for the CRX port.

   * Carlo Wood for various fixes.

   * Tom Wood for work on the m88k port.

   * Chung-Ju Wu for his work on the Andes NDS32 port.

   * Canqun Yang for work on GNU Fortran.

   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
     description for the Tron architecture (specifically, the Gmicro).

   * Kevin Zachmann helped port GCC to the Tahoe.

   * Ayal Zaks for Swing Modulo Scheduling (SMS).

   * Xiaoqiang Zhang for work on GNU Fortran.

   * Gilles Zunino for help porting Java to Irix.

 The following people are recognized for their contributions to GNAT,
the Ada front end of GCC:
   * Bernard Banner

   * Romain Berrendonner

   * Geert Bosch

   * Emmanuel Briot

   * Joel Brobecker

   * Ben Brosgol

   * Vincent Celier

   * Arnaud Charlet

   * Chien Chieng

   * Cyrille Comar

   * Cyrille Crozes

   * Robert Dewar

   * Gary Dismukes

   * Robert Duff

   * Ed Falis

   * Ramon Fernandez

   * Sam Figueroa

   * Vasiliy Fofanov

   * Michael Friess

   * Franco Gasperoni

   * Ted Giering

   * Matthew Gingell

   * Laurent Guerby

   * Jerome Guitton

   * Olivier Hainque

   * Jerome Hugues

   * Hristian Kirtchev

   * Jerome Lambourg

   * Bruno Leclerc

   * Albert Lee

   * Sean McNeil

   * Javier Miranda

   * Laurent Nana

   * Pascal Obry

   * Dong-Ik Oh

   * Laurent Pautet

   * Brett Porter

   * Thomas Quinot

   * Nicolas Roche

   * Pat Rogers

   * Jose Ruiz

   * Douglas Rupp

   * Sergey Rybin

   * Gail Schenker

   * Ed Schonberg

   * Nicolas Setton

   * Samuel Tardieu

 The following people are recognized for their contributions of new
features, bug reports, testing and integration of classpath/libgcj for
GCC version 4.1:
   * Lillian Angel for 'JTree' implementation and lots Free Swing
     additions and bug fixes.

   * Wolfgang Baer for 'GapContent' bug fixes.

   * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse
     event fixes, lots of Free Swing work including 'JTable' editing.

   * Stuart Ballard for RMI constant fixes.

   * Goffredo Baroncelli for 'HTTPURLConnection' fixes.

   * Gary Benson for 'MessageFormat' fixes.

   * Daniel Bonniot for 'Serialization' fixes.

   * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX'
     and 'DOM xml:id' support.

   * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes.

   * Archie Cobbs for build fixes, VM interface updates,
     'URLClassLoader' updates.

   * Kelley Cook for build fixes.

   * Martin Cordova for Suggestions for better 'SocketTimeoutException'.

   * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and
     improvements.

   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
     2D support.  Lots of imageio framework additions, lots of AWT and
     Free Swing bug fixes.

   * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization
     fixes, better 'Proxy' support, bug fixes and IKVM integration.

   * Santiago Gala for 'AccessControlContext' fixes.

   * Nicolas Geoffray for 'VMClassLoader' and 'AccessController'
     improvements.

   * David Gilbert for 'basic' and 'metal' icon and plaf support and
     lots of documenting, Lots of Free Swing and metal theme additions.
     'MetalIconFactory' implementation.

   * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers.

   * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj
     build speedups.

   * Kim Ho for 'JFileChooser' implementation.

   * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates,
     'Serialization' fixes, 'Properties' XML support and generic branch
     work, VMIntegration guide update.

   * Bastiaan Huisman for 'TimeZone' bug fixing.

   * Andreas Jaeger for mprec updates.

   * Paul Jenner for better '-Werror' support.

   * Ito Kazumitsu for 'NetworkInterface' implementation and updates.

   * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus
     bug fixes all over.  Lots of Free Swing work including styled text.

   * Simon Kitching for 'String' cleanups and optimization suggestions.

   * Michael Koch for configuration fixes, 'Locale' updates, bug and
     build fixes.

   * Guilhem Lavaux for configuration, thread and channel fixes and
     Kaffe integration.  JCL native 'Pointer' updates.  Logger bug
     fixes.

   * David Lichteblau for JCL support library global/local reference
     cleanups.

   * Aaron Luchko for JDWP updates and documentation fixes.

   * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex
     features.

   * Sven de Marothy for BMP imageio support, CSS and 'TextLayout'
     fixes.  'GtkImage' rewrite, 2D, awt, free swing and date/time fixes
     and implementing the Qt4 peers.

   * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock,
     'SystemLogger' and 'FileHandler' rotate implementations, NIO
     'FileChannel.map' support, security and policy updates.

   * Bryce McKinlay for RMI work.

   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
     testing and documenting.

   * Kalle Olavi Niemitalo for build fixes.

   * Rainer Orth for build fixes.

   * Andrew Overholt for 'File' locking fixes.

   * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates.

   * Olga Rodimina for 'MenuSelectionManager' implementation.

   * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes.

   * Julian Scheid for documentation updates and gjdoc support.

   * Christian Schlichtherle for zip fixes and cleanups.

   * Robert Schuster for documentation updates and beans fixes,
     'TreeNode' enumerations and 'ActionCommand' and various fixes, XML
     and URL, AWT and Free Swing bug fixes.

   * Keith Seitz for lots of JDWP work.

   * Christian Thalinger for 64-bit cleanups, Configuration and VM
     interface fixes and 'CACAO' integration, 'fdlibm' updates.

   * Gael Thomas for 'VMClassLoader' boot packages support suggestions.

   * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4'
     support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates.

   * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe
     integration.  'Qt4' build infrastructure, 'SHA1PRNG' and
     'GdkPixbugDecoder' updates.

   * Tom Tromey for Eclipse integration, generics work, lots of bug
     fixes and gcj integration including coordinating The Big Merge.

   * Mark Wielaard for bug fixes, packaging and release management,
     'Clipboard' implementation, system call interrupts and network
     timeouts and 'GdkPixpufDecoder' fixes.

 In addition to the above, all of which also contributed time and energy
in testing GCC, we would like to thank the following for their
contributions to testing:

   * Michael Abd-El-Malek

   * Thomas Arend

   * Bonzo Armstrong

   * Steven Ashe

   * Chris Baldwin

   * David Billinghurst

   * Jim Blandy

   * Stephane Bortzmeyer

   * Horst von Brand

   * Frank Braun

   * Rodney Brown

   * Sidney Cadot

   * Bradford Castalia

   * Robert Clark

   * Jonathan Corbet

   * Ralph Doncaster

   * Richard Emberson

   * Levente Farkas

   * Graham Fawcett

   * Mark Fernyhough

   * Robert A. French

   * Jo"rgen Freyh

   * Mark K. Gardner

   * Charles-Antoine Gauthier

   * Yung Shing Gene

   * David Gilbert

   * Simon Gornall

   * Fred Gray

   * John Griffin

   * Patrik Hagglund

   * Phil Hargett

   * Amancio Hasty

   * Takafumi Hayashi

   * Bryan W. Headley

   * Kevin B. Hendricks

   * Joep Jansen

   * Christian Joensson

   * Michel Kern

   * David Kidd

   * Tobias Kuipers

   * Anand Krishnaswamy

   * A. O. V. Le Blanc

   * llewelly

   * Damon Love

   * Brad Lucier

   * Matthias Klose

   * Martin Knoblauch

   * Rick Lutowski

   * Jesse Macnish

   * Stefan Morrell

   * Anon A. Mous

   * Matthias Mueller

   * Pekka Nikander

   * Rick Niles

   * Jon Olson

   * Magnus Persson

   * Chris Pollard

   * Richard Polton

   * Derk Reefman

   * David Rees

   * Paul Reilly

   * Tom Reilly

   * Torsten Rueger

   * Danny Sadinoff

   * Marc Schifer

   * Erik Schnetter

   * Wayne K. Schroll

   * David Schuler

   * Vin Shelton

   * Tim Souder

   * Adam Sulmicki

   * Bill Thorson

   * George Talbot

   * Pedro A. M. Vazquez

   * Gregory Warnes

   * Ian Watson

   * David E. Young

   * And many others

 And finally we'd like to thank everyone who uses the compiler, provides
feedback and generally reminds us why we're doing this work in the first
place.


File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top

Option Index
************

GCC's command line options are indexed here without any initial '-' or
'--'.  Where an option has both positive and negative forms (such as
'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are
indexed under the most appropriate form; it may sometimes be useful to
look up both forms.

 [index ]
* Menu:

* ###:                                   Overall Options.    (line  209)
* -fipa-cp-alignment:                    Optimize Options.   (line  986)
* -Wabi-tag:                             C++ Dialect Options.
                                                             (line  517)
* A:                                     Preprocessor Options.
                                                             (line  595)
* allowable_client:                      Darwin Options.     (line  196)
* all_load:                              Darwin Options.     (line  110)
* ansi:                                  Standards.          (line   16)
* ansi <1>:                              C Dialect Options.  (line   11)
* ansi <2>:                              Preprocessor Options.
                                                             (line  340)
* ansi <3>:                              Other Builtins.     (line   21)
* ansi <4>:                              Non-bugs.           (line  107)
* arch_errors_fatal:                     Darwin Options.     (line  114)
* aux-info:                              C Dialect Options.  (line  173)
* B:                                     Directory Options.  (line   44)
* Bdynamic:                              VxWorks Options.    (line   22)
* bind_at_load:                          Darwin Options.     (line  118)
* Bstatic:                               VxWorks Options.    (line   22)
* bundle:                                Darwin Options.     (line  123)
* bundle_loader:                         Darwin Options.     (line  127)
* c:                                     Overall Options.    (line  164)
* C:                                     Preprocessor Options.
                                                             (line  652)
* c <1>:                                 Link Options.       (line   20)
* client_name:                           Darwin Options.     (line  196)
* compatibility_version:                 Darwin Options.     (line  196)
* coverage:                              Debugging Options.  (line  725)
* current_version:                       Darwin Options.     (line  196)
* d:                                     Debugging Options.  (line  857)
* D:                                     Preprocessor Options.
                                                             (line   46)
* da:                                    Debugging Options.  (line 1059)
* dA:                                    Debugging Options.  (line 1062)
* dD:                                    Debugging Options.  (line 1066)
* dD <1>:                                Preprocessor Options.
                                                             (line  626)
* dead_strip:                            Darwin Options.     (line  196)
* dependency-file:                       Darwin Options.     (line  196)
* dH:                                    Debugging Options.  (line 1070)
* dI:                                    Preprocessor Options.
                                                             (line  635)
* dM:                                    Preprocessor Options.
                                                             (line  611)
* dN:                                    Preprocessor Options.
                                                             (line  632)
* dp:                                    Debugging Options.  (line 1073)
* dP:                                    Debugging Options.  (line 1078)
* dU:                                    Preprocessor Options.
                                                             (line  639)
* dumpmachine:                           Debugging Options.  (line 1650)
* dumpspecs:                             Debugging Options.  (line 1658)
* dumpversion:                           Debugging Options.  (line 1654)
* dx:                                    Debugging Options.  (line 1082)
* dylib_file:                            Darwin Options.     (line  196)
* dylinker_install_name:                 Darwin Options.     (line  196)
* dynamic:                               Darwin Options.     (line  196)
* dynamiclib:                            Darwin Options.     (line  131)
* E:                                     Overall Options.    (line  185)
* E <1>:                                 Link Options.       (line   20)
* EB:                                    ARC Options.        (line  345)
* EB <1>:                                MIPS Options.       (line    7)
* EL:                                    ARC Options.        (line  354)
* EL <1>:                                MIPS Options.       (line   10)
* exported_symbols_list:                 Darwin Options.     (line  196)
* F:                                     Darwin Options.     (line   31)
* fabi-compat-version:                   C++ Dialect Options.
                                                             (line   58)
* fabi-version:                          C++ Dialect Options.
                                                             (line   19)
* fada-spec-parent:                      Overall Options.    (line  367)
* faggressive-loop-optimizations:        Optimize Options.   (line  502)
* falign-functions:                      Optimize Options.   (line 1560)
* falign-jumps:                          Optimize Options.   (line 1609)
* falign-labels:                         Optimize Options.   (line 1578)
* falign-loops:                          Optimize Options.   (line 1596)
* fallow-parameterless-variadic-functions: C Dialect Options.
                                                             (line  189)
* fasan-shadow-offset:                   Debugging Options.  (line  353)
* fassociative-math:                     Optimize Options.   (line 2120)
* fasynchronous-unwind-tables:           Code Gen Options.   (line  146)
* fauto-inc-dec:                         Optimize Options.   (line  526)
* fauto-profile:                         Optimize Options.   (line 2000)
* fbounds-check:                         Code Gen Options.   (line   15)
* fbranch-probabilities:                 Optimize Options.   (line 2248)
* fbranch-target-load-optimize:          Optimize Options.   (line 2371)
* fbranch-target-load-optimize2:         Optimize Options.   (line 2377)
* fbtr-bb-exclusive:                     Optimize Options.   (line 2381)
* fcall-saved:                           Code Gen Options.   (line  356)
* fcall-used:                            Code Gen Options.   (line  342)
* fcaller-saves:                         Optimize Options.   (line  875)
* fcheck-data-deps:                      Optimize Options.   (line 1195)
* fcheck-new:                            C++ Dialect Options.
                                                             (line   73)
* fcheck-pointer-bounds:                 Debugging Options.  (line  392)
* fchkp-check-incomplete-type:           Debugging Options.  (line  432)
* fchkp-check-read:                      Debugging Options.  (line  482)
* fchkp-check-write:                     Debugging Options.  (line  486)
* fchkp-first-field-has-own-bounds:      Debugging Options.  (line  443)
* fchkp-instrument-calls:                Debugging Options.  (line  494)
* fchkp-instrument-marked-only:          Debugging Options.  (line  498)
* fchkp-narrow-bounds:                   Debugging Options.  (line  436)
* fchkp-narrow-to-innermost-array:       Debugging Options.  (line  449)
* fchkp-optimize:                        Debugging Options.  (line  454)
* fchkp-store-bounds:                    Debugging Options.  (line  490)
* fchkp-treat-zero-dynamic-size-as-infinite: Debugging Options.
                                                             (line  475)
* fchkp-use-fast-string-functions:       Debugging Options.  (line  458)
* fchkp-use-nochk-string-functions:      Debugging Options.  (line  462)
* fchkp-use-static-bounds:               Debugging Options.  (line  466)
* fchkp-use-static-const-bounds:         Debugging Options.  (line  470)
* fchkp-use-wrappers:                    Debugging Options.  (line  503)
* fcilkplus:                             C Dialect Options.  (line  289)
* fcombine-stack-adjustments:            Optimize Options.   (line  887)
* fcommon:                               Variable Attributes.
                                                             (line  105)
* fcompare-debug:                        Debugging Options.  (line  516)
* fcompare-debug-second:                 Debugging Options.  (line  542)
* fcompare-elim:                         Optimize Options.   (line 1933)
* fcond-mismatch:                        C Dialect Options.  (line  353)
* fconserve-stack:                       Optimize Options.   (line  902)
* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
                                                             (line   30)
* fconstexpr-depth:                      C++ Dialect Options.
                                                             (line   83)
* fcprop-registers:                      Optimize Options.   (line 1945)
* fcrossjumping:                         Optimize Options.   (line  519)
* fcse-follow-jumps:                     Optimize Options.   (line  438)
* fcse-skip-blocks:                      Optimize Options.   (line  447)
* fcx-fortran-rules:                     Optimize Options.   (line 2235)
* fcx-limited-range:                     Optimize Options.   (line 2223)
* fdata-sections:                        Optimize Options.   (line 2352)
* fdbg-cnt:                              Debugging Options.  (line  777)
* fdbg-cnt-list:                         Debugging Options.  (line  774)
* fdce:                                  Optimize Options.   (line  532)
* fdebug-cpp:                            Preprocessor Options.
                                                             (line  526)
* fdebug-prefix-map:                     Debugging Options.  (line  636)
* fdebug-types-section:                  Debugging Options.  (line   79)
* fdeclone-ctor-dtor:                    Optimize Options.   (line  555)
* fdeduce-init-list:                     C++ Dialect Options.
                                                             (line   89)
* fdelayed-branch:                       Optimize Options.   (line  705)
* fdelete-dead-exceptions:               Code Gen Options.   (line  131)
* fdelete-null-pointer-checks:           Optimize Options.   (line  566)
* fdevirtualize:                         Optimize Options.   (line  584)
* fdevirtualize-at-ltrans:               Optimize Options.   (line  601)
* fdevirtualize-speculatively:           Optimize Options.   (line  591)
* fdiagnostics-color:                    Language Independent Options.
                                                             (line   35)
* fdiagnostics-show-caret:               Language Independent Options.
                                                             (line   94)
* fdiagnostics-show-location:            Language Independent Options.
                                                             (line   20)
* fdiagnostics-show-option:              Language Independent Options.
                                                             (line   88)
* fdirectives-only:                      Preprocessor Options.
                                                             (line  475)
* fdisable-:                             Debugging Options.  (line  787)
* fdollars-in-identifiers:               Preprocessor Options.
                                                             (line  496)
* fdollars-in-identifiers <1>:           Interoperation.     (line  141)
* fdse:                                  Optimize Options.   (line  536)
* fdump-ada-spec:                        Overall Options.    (line  362)
* fdump-class-hierarchy:                 Debugging Options.  (line 1117)
* fdump-final-insns:                     Debugging Options.  (line  510)
* fdump-go-spec:                         Overall Options.    (line  371)
* fdump-ipa:                             Debugging Options.  (line 1125)
* fdump-noaddr:                          Debugging Options.  (line 1086)
* fdump-passes:                          Debugging Options.  (line 1142)
* fdump-rtl-alignments:                  Debugging Options.  (line  878)
* fdump-rtl-all:                         Debugging Options.  (line 1059)
* fdump-rtl-asmcons:                     Debugging Options.  (line  881)
* fdump-rtl-auto_inc_dec:                Debugging Options.  (line  885)
* fdump-rtl-barriers:                    Debugging Options.  (line  889)
* fdump-rtl-bbpart:                      Debugging Options.  (line  892)
* fdump-rtl-bbro:                        Debugging Options.  (line  895)
* fdump-rtl-btl2:                        Debugging Options.  (line  899)
* fdump-rtl-btl2 <1>:                    Debugging Options.  (line  899)
* fdump-rtl-bypass:                      Debugging Options.  (line  903)
* fdump-rtl-ce1:                         Debugging Options.  (line  914)
* fdump-rtl-ce2:                         Debugging Options.  (line  914)
* fdump-rtl-ce3:                         Debugging Options.  (line  914)
* fdump-rtl-combine:                     Debugging Options.  (line  906)
* fdump-rtl-compgotos:                   Debugging Options.  (line  909)
* fdump-rtl-cprop_hardreg:               Debugging Options.  (line  918)
* fdump-rtl-csa:                         Debugging Options.  (line  921)
* fdump-rtl-cse1:                        Debugging Options.  (line  925)
* fdump-rtl-cse2:                        Debugging Options.  (line  925)
* fdump-rtl-dbr:                         Debugging Options.  (line  932)
* fdump-rtl-dce:                         Debugging Options.  (line  929)
* fdump-rtl-dce1:                        Debugging Options.  (line  936)
* fdump-rtl-dce2:                        Debugging Options.  (line  936)
* fdump-rtl-dfinish:                     Debugging Options.  (line 1055)
* fdump-rtl-dfinit:                      Debugging Options.  (line 1055)
* fdump-rtl-eh:                          Debugging Options.  (line  940)
* fdump-rtl-eh_ranges:                   Debugging Options.  (line  943)
* fdump-rtl-expand:                      Debugging Options.  (line  946)
* fdump-rtl-fwprop1:                     Debugging Options.  (line  950)
* fdump-rtl-fwprop2:                     Debugging Options.  (line  950)
* fdump-rtl-gcse1:                       Debugging Options.  (line  955)
* fdump-rtl-gcse2:                       Debugging Options.  (line  955)
* fdump-rtl-init-regs:                   Debugging Options.  (line  959)
* fdump-rtl-initvals:                    Debugging Options.  (line  962)
* fdump-rtl-into_cfglayout:              Debugging Options.  (line  965)
* fdump-rtl-ira:                         Debugging Options.  (line  968)
* fdump-rtl-jump:                        Debugging Options.  (line  971)
* fdump-rtl-loop2:                       Debugging Options.  (line  974)
* fdump-rtl-mach:                        Debugging Options.  (line  978)
* fdump-rtl-mode_sw:                     Debugging Options.  (line  982)
* fdump-rtl-outof_cfglayout:             Debugging Options.  (line  988)
* fdump-rtl-PASS:                        Debugging Options.  (line  857)
* fdump-rtl-peephole2:                   Debugging Options.  (line  991)
* fdump-rtl-postreload:                  Debugging Options.  (line  994)
* fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  997)
* fdump-rtl-ree:                         Debugging Options.  (line 1005)
* fdump-rtl-regclass:                    Debugging Options.  (line 1055)
* fdump-rtl-rnreg:                       Debugging Options.  (line  985)
* fdump-rtl-sched1:                      Debugging Options.  (line 1001)
* fdump-rtl-sched2:                      Debugging Options.  (line 1001)
* fdump-rtl-seqabstr:                    Debugging Options.  (line 1008)
* fdump-rtl-shorten:                     Debugging Options.  (line 1011)
* fdump-rtl-sibling:                     Debugging Options.  (line 1014)
* fdump-rtl-sms:                         Debugging Options.  (line 1025)
* fdump-rtl-split1:                      Debugging Options.  (line 1021)
* fdump-rtl-split2:                      Debugging Options.  (line 1021)
* fdump-rtl-split3:                      Debugging Options.  (line 1021)
* fdump-rtl-split4:                      Debugging Options.  (line 1021)
* fdump-rtl-split5:                      Debugging Options.  (line 1021)
* fdump-rtl-stack:                       Debugging Options.  (line 1029)
* fdump-rtl-subreg1:                     Debugging Options.  (line 1035)
* fdump-rtl-subreg2:                     Debugging Options.  (line 1035)
* fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line 1055)
* fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line 1055)
* fdump-rtl-unshare:                     Debugging Options.  (line 1039)
* fdump-rtl-vartrack:                    Debugging Options.  (line 1042)
* fdump-rtl-vregs:                       Debugging Options.  (line 1045)
* fdump-rtl-web:                         Debugging Options.  (line 1048)
* fdump-statistics:                      Debugging Options.  (line 1146)
* fdump-translation-unit:                Debugging Options.  (line 1108)
* fdump-tree:                            Debugging Options.  (line 1158)
* fdump-tree-alias:                      Debugging Options.  (line 1280)
* fdump-tree-all:                        Debugging Options.  (line 1364)
* fdump-tree-ccp:                        Debugging Options.  (line 1284)
* fdump-tree-cfg:                        Debugging Options.  (line 1268)
* fdump-tree-ch:                         Debugging Options.  (line 1272)
* fdump-tree-copyprop:                   Debugging Options.  (line 1300)
* fdump-tree-copyrename:                 Debugging Options.  (line 1340)
* fdump-tree-dce:                        Debugging Options.  (line 1308)
* fdump-tree-dom:                        Debugging Options.  (line 1321)
* fdump-tree-dse:                        Debugging Options.  (line 1326)
* fdump-tree-forwprop:                   Debugging Options.  (line 1335)
* fdump-tree-fre:                        Debugging Options.  (line 1296)
* fdump-tree-gimple:                     Debugging Options.  (line 1263)
* fdump-tree-nrv:                        Debugging Options.  (line 1345)
* fdump-tree-optimized:                  Debugging Options.  (line 1260)
* fdump-tree-original:                   Debugging Options.  (line 1257)
* fdump-tree-phiopt:                     Debugging Options.  (line 1330)
* fdump-tree-pre:                        Debugging Options.  (line 1292)
* fdump-tree-sink:                       Debugging Options.  (line 1317)
* fdump-tree-slp:                        Debugging Options.  (line 1355)
* fdump-tree-sra:                        Debugging Options.  (line 1312)
* fdump-tree-ssa:                        Debugging Options.  (line 1276)
* fdump-tree-storeccp:                   Debugging Options.  (line 1288)
* fdump-tree-store_copyprop:             Debugging Options.  (line 1304)
* fdump-tree-vect:                       Debugging Options.  (line 1350)
* fdump-tree-vrp:                        Debugging Options.  (line 1360)
* fdump-unnumbered:                      Debugging Options.  (line 1096)
* fdump-unnumbered-links:                Debugging Options.  (line 1102)
* fdwarf2-cfi-asm:                       Debugging Options.  (line  640)
* fearly-inlining:                       Optimize Options.   (line  290)
* feliminate-dwarf2-dups:                Debugging Options.  (line  555)
* feliminate-unused-debug-symbols:       Debugging Options.  (line   67)
* feliminate-unused-debug-types:         Debugging Options.  (line 1662)
* femit-class-debug-always:              Debugging Options.  (line   71)
* femit-struct-debug-baseonly:           Debugging Options.  (line  560)
* femit-struct-debug-detailed:           Debugging Options.  (line  587)
* femit-struct-debug-reduced:            Debugging Options.  (line  573)
* fenable-:                              Debugging Options.  (line  787)
* fexceptions:                           Code Gen Options.   (line  109)
* fexcess-precision:                     Optimize Options.   (line 2047)
* fexec-charset:                         Preprocessor Options.
                                                             (line  553)
* fexpensive-optimizations:              Optimize Options.   (line  608)
* fext-numeric-literals:                 C++ Dialect Options.
                                                             (line  598)
* fextended-identifiers:                 Preprocessor Options.
                                                             (line  499)
* fextern-tls-init:                      C++ Dialect Options.
                                                             (line  138)
* ffast-math:                            Optimize Options.   (line 2070)
* ffat-lto-objects:                      Optimize Options.   (line 1915)
* ffinite-math-only:                     Optimize Options.   (line 2147)
* ffix-and-continue:                     Darwin Options.     (line  104)
* ffixed:                                Code Gen Options.   (line  330)
* ffloat-store:                          Optimize Options.   (line 2033)
* ffloat-store <1>:                      Disappointments.    (line   77)
* ffor-scope:                            C++ Dialect Options.
                                                             (line  159)
* fforward-propagate:                    Optimize Options.   (line  194)
* ffp-contract:                          Optimize Options.   (line  203)
* ffreestanding:                         Standards.          (line   91)
* ffreestanding <1>:                     C Dialect Options.  (line  252)
* ffreestanding <2>:                     Warning Options.    (line  268)
* ffreestanding <3>:                     Function Attributes.
                                                             (line  460)
* ffriend-injection:                     C++ Dialect Options.
                                                             (line  110)
* ffunction-sections:                    Optimize Options.   (line 2352)
* fgcse:                                 Optimize Options.   (line  461)
* fgcse-after-reload:                    Optimize Options.   (line  497)
* fgcse-las:                             Optimize Options.   (line  490)
* fgcse-lm:                              Optimize Options.   (line  472)
* fgcse-sm:                              Optimize Options.   (line  481)
* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
                                                             (line   39)
* fgnu-tm:                               C Dialect Options.  (line  299)
* fgnu89-inline:                         C Dialect Options.  (line  156)
* fgraphite-identity:                    Optimize Options.   (line 1169)
* fhoist-adjacent-loads:                 Optimize Options.   (line  935)
* fhosted:                               C Dialect Options.  (line  244)
* fif-conversion:                        Optimize Options.   (line  540)
* fif-conversion2:                       Optimize Options.   (line  549)
* filelist:                              Darwin Options.     (line  196)
* findirect-data:                        Darwin Options.     (line  104)
* findirect-inlining:                    Optimize Options.   (line  263)
* finhibit-size-directive:               Code Gen Options.   (line  251)
* finline-functions:                     Optimize Options.   (line  271)
* finline-functions-called-once:         Optimize Options.   (line  282)
* finline-limit:                         Optimize Options.   (line  306)
* finline-small-functions:               Optimize Options.   (line  254)
* finput-charset:                        Preprocessor Options.
                                                             (line  566)
* finstrument-functions:                 Code Gen Options.   (line  386)
* finstrument-functions <1>:             Function Attributes.
                                                             (line 1069)
* finstrument-functions-exclude-file-list: Code Gen Options. (line  421)
* finstrument-functions-exclude-function-list: Code Gen Options.
                                                             (line  442)
* fipa-cp:                               Optimize Options.   (line  968)
* fipa-cp-clone:                         Optimize Options.   (line  976)
* fipa-icf:                              Optimize Options.   (line  993)
* fipa-profile:                          Optimize Options.   (line  960)
* fipa-pta:                              Optimize Options.   (line  954)
* fipa-pure-const:                       Optimize Options.   (line  946)
* fipa-ra:                               Optimize Options.   (line  893)
* fipa-reference:                        Optimize Options.   (line  950)
* fipa-sra:                              Optimize Options.   (line  299)
* fira-algorithm:                        Optimize Options.   (line  636)
* fira-hoist-pressure:                   Optimize Options.   (line  665)
* fira-loop-pressure:                    Optimize Options.   (line  672)
* fira-region:                           Optimize Options.   (line  644)
* fira-verbose:                          Optimize Options.   (line  692)
* fisolate-erroneous-paths-attribute:    Optimize Options.   (line 1014)
* fisolate-erroneous-paths-dereference:  Optimize Options.   (line 1007)
* fivar-visibility:                      Objective-C and Objective-C++ Dialect Options.
                                                             (line  162)
* fivopts:                               Optimize Options.   (line 1271)
* fkeep-inline-functions:                Optimize Options.   (line  337)
* fkeep-inline-functions <1>:            Inline.             (line   51)
* fkeep-static-consts:                   Optimize Options.   (line  344)
* flat_namespace:                        Darwin Options.     (line  196)
* flax-vector-conversions:               C Dialect Options.  (line  358)
* fleading-underscore:                   Code Gen Options.   (line  524)
* flive-range-shrinkage:                 Optimize Options.   (line  631)
* flocal-ivars:                          Objective-C and Objective-C++ Dialect Options.
                                                             (line  153)
* floop-block:                           Optimize Options.   (line 1140)
* floop-interchange:                     Optimize Options.   (line 1095)
* floop-nest-optimize:                   Optimize Options.   (line 1177)
* floop-parallelize-all:                 Optimize Options.   (line 1189)
* floop-strip-mine:                      Optimize Options.   (line 1119)
* floop-unroll-and-jam:                  Optimize Options.   (line 1183)
* flra-remat:                            Optimize Options.   (line  698)
* flto:                                  Optimize Options.   (line 1663)
* flto-compression-level:                Optimize Options.   (line 1877)
* flto-odr-type-merging:                 Optimize Options.   (line 1872)
* flto-partition:                        Optimize Options.   (line 1858)
* flto-report:                           Optimize Options.   (line 1885)
* flto-report-wpa:                       Optimize Options.   (line 1893)
* fmax-errors:                           Warning Options.    (line   18)
* fmem-report:                           Debugging Options.  (line  664)
* fmem-report-wpa:                       Debugging Options.  (line  668)
* fmerge-all-constants:                  Optimize Options.   (line  363)
* fmerge-constants:                      Optimize Options.   (line  353)
* fmerge-debug-strings:                  Debugging Options.  (line  629)
* fmessage-length:                       Language Independent Options.
                                                             (line   14)
* fmodulo-sched:                         Optimize Options.   (line  374)
* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  379)
* fmove-loop-invariants:                 Optimize Options.   (line 2342)
* fms-extensions:                        C Dialect Options.  (line  314)
* fms-extensions <1>:                    C++ Dialect Options.
                                                             (line  193)
* fms-extensions <2>:                    Unnamed Fields.     (line   36)
* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
                                                             (line   43)
* fno-access-control:                    C++ Dialect Options.
                                                             (line   69)
* fno-asm:                               C Dialect Options.  (line  196)
* fno-branch-count-reg:                  Optimize Options.   (line  386)
* fno-builtin:                           C Dialect Options.  (line  210)
* fno-builtin <1>:                       Warning Options.    (line  268)
* fno-builtin <2>:                       Function Attributes.
                                                             (line  460)
* fno-builtin <3>:                       Other Builtins.     (line   14)
* fno-canonical-system-headers:          Preprocessor Options.
                                                             (line  503)
* fno-check-pointer-bounds:              Debugging Options.  (line  392)
* fno-chkp-check-incomplete-type:        Debugging Options.  (line  432)
* fno-chkp-check-read:                   Debugging Options.  (line  482)
* fno-chkp-check-write:                  Debugging Options.  (line  486)
* fno-chkp-first-field-has-own-bounds:   Debugging Options.  (line  443)
* fno-chkp-instrument-calls:             Debugging Options.  (line  494)
* fno-chkp-instrument-marked-only:       Debugging Options.  (line  498)
* fno-chkp-narrow-bounds:                Debugging Options.  (line  436)
* fno-chkp-narrow-to-innermost-array:    Debugging Options.  (line  449)
* fno-chkp-optimize:                     Debugging Options.  (line  454)
* fno-chkp-store-bounds:                 Debugging Options.  (line  490)
* fno-chkp-treat-zero-dynamic-size-as-infinite: Debugging Options.
                                                             (line  475)
* fno-chkp-use-fast-string-functions:    Debugging Options.  (line  458)
* fno-chkp-use-nochk-string-functions:   Debugging Options.  (line  462)
* fno-chkp-use-static-bounds:            Debugging Options.  (line  466)
* fno-chkp-use-static-const-bounds:      Debugging Options.  (line  470)
* fno-chkp-use-wrappers:                 Debugging Options.  (line  503)
* fno-common:                            Code Gen Options.   (line  229)
* fno-common <1>:                        Variable Attributes.
                                                             (line  105)
* fno-compare-debug:                     Debugging Options.  (line  516)
* fno-debug-types-section:               Debugging Options.  (line   79)
* fno-default-inline:                    Inline.             (line   71)
* fno-defer-pop:                         Optimize Options.   (line  186)
* fno-diagnostics-show-caret:            Language Independent Options.
                                                             (line   94)
* fno-diagnostics-show-option:           Language Independent Options.
                                                             (line   88)
* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  640)
* fno-elide-constructors:                C++ Dialect Options.
                                                             (line  122)
* fno-eliminate-unused-debug-types:      Debugging Options.  (line 1662)
* fno-enforce-eh-specs:                  C++ Dialect Options.
                                                             (line  128)
* fno-ext-numeric-literals:              C++ Dialect Options.
                                                             (line  598)
* fno-extern-tls-init:                   C++ Dialect Options.
                                                             (line  138)
* fno-for-scope:                         C++ Dialect Options.
                                                             (line  159)
* fno-function-cse:                      Optimize Options.   (line  398)
* fno-gnu-keywords:                      C++ Dialect Options.
                                                             (line  171)
* fno-gnu-unique:                        Code Gen Options.   (line  152)
* fno-guess-branch-probability:          Optimize Options.   (line 1430)
* fno-ident:                             Code Gen Options.   (line  248)
* fno-implement-inlines:                 C++ Dialect Options.
                                                             (line  188)
* fno-implement-inlines <1>:             C++ Interface.      (line   66)
* fno-implicit-inline-templates:         C++ Dialect Options.
                                                             (line  182)
* fno-implicit-templates:                C++ Dialect Options.
                                                             (line  176)
* fno-implicit-templates <1>:            Template Instantiation.
                                                             (line   78)
* fno-inline:                            Optimize Options.   (line  246)
* fno-ira-share-save-slots:              Optimize Options.   (line  680)
* fno-ira-share-spill-slots:             Optimize Options.   (line  686)
* fno-jump-tables:                       Code Gen Options.   (line  322)
* fno-keep-inline-dllexport:             Optimize Options.   (line  331)
* fno-lifetime-dse:                      Optimize Options.   (line  622)
* fno-local-ivars:                       Objective-C and Objective-C++ Dialect Options.
                                                             (line  153)
* fno-math-errno:                        Optimize Options.   (line 2084)
* fno-merge-debug-strings:               Debugging Options.  (line  629)
* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
                                                             (line   49)
* fno-nonansi-builtins:                  C++ Dialect Options.
                                                             (line  198)
* fno-operator-names:                    C++ Dialect Options.
                                                             (line  214)
* fno-optional-diags:                    C++ Dialect Options.
                                                             (line  218)
* fno-peephole:                          Optimize Options.   (line 1421)
* fno-peephole2:                         Optimize Options.   (line 1421)
* fno-pretty-templates:                  C++ Dialect Options.
                                                             (line  228)
* fno-rtti:                              C++ Dialect Options.
                                                             (line  245)
* fno-sanitize-recover:                  Debugging Options.  (line  358)
* fno-sanitize=all:                      Debugging Options.  (line  347)
* fno-sched-interblock:                  Optimize Options.   (line  731)
* fno-sched-spec:                        Optimize Options.   (line  736)
* fno-set-stack-executable:              x86 Windows Options.
                                                             (line   46)
* fno-show-column:                       Preprocessor Options.
                                                             (line  590)
* fno-signed-bitfields:                  C Dialect Options.  (line  391)
* fno-signed-zeros:                      Optimize Options.   (line 2159)
* fno-stack-limit:                       Code Gen Options.   (line  492)
* fno-threadsafe-statics:                C++ Dialect Options.
                                                             (line  292)
* fno-toplevel-reorder:                  Optimize Options.   (line 1629)
* fno-trapping-math:                     Optimize Options.   (line 2169)
* fno-unsigned-bitfields:                C Dialect Options.  (line  391)
* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
                                                             (line  305)
* fno-var-tracking-assignments:          Debugging Options.  (line 1568)
* fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1579)
* fno-weak:                              C++ Dialect Options.
                                                             (line  419)
* fno-working-directory:                 Preprocessor Options.
                                                             (line  576)
* fno-writable-relocated-rdata:          x86 Windows Options.
                                                             (line   53)
* fno-zero-initialized-in-bss:           Optimize Options.   (line  409)
* fnon-call-exceptions:                  Code Gen Options.   (line  123)
* fnothrow-opt:                          C++ Dialect Options.
                                                             (line  203)
* fobjc-abi-version:                     Objective-C and Objective-C++ Dialect Options.
                                                             (line   56)
* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
                                                             (line   67)
* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
                                                             (line   92)
* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
                                                             (line   96)
* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
                                                             (line  105)
* fobjc-nilcheck:                        Objective-C and Objective-C++ Dialect Options.
                                                             (line  111)
* fobjc-std:                             Objective-C and Objective-C++ Dialect Options.
                                                             (line  120)
* fomit-frame-pointer:                   Optimize Options.   (line  214)
* fopenacc:                              C Dialect Options.  (line  263)
* fopenmp:                               C Dialect Options.  (line  276)
* fopenmp-simd:                          C Dialect Options.  (line  285)
* fopt-info:                             Debugging Options.  (line 1370)
* foptimize-sibling-calls:               Optimize Options.   (line  234)
* foptimize-strlen:                      Optimize Options.   (line  239)
* force_cpusubtype_ALL:                  Darwin Options.     (line  135)
* force_flat_namespace:                  Darwin Options.     (line  196)
* fpack-struct:                          Code Gen Options.   (line  373)
* fpartial-inlining:                     Optimize Options.   (line 1396)
* fpcc-struct-return:                    Code Gen Options.   (line  165)
* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
* fpch-deps:                             Preprocessor Options.
                                                             (line  296)
* fpch-preprocess:                       Preprocessor Options.
                                                             (line  304)
* fpeel-loops:                           Optimize Options.   (line 2334)
* fpermissive:                           C++ Dialect Options.
                                                             (line  223)
* fpic:                                  Code Gen Options.   (line  279)
* fPIC:                                  Code Gen Options.   (line  300)
* fpie:                                  Code Gen Options.   (line  313)
* fPIE:                                  Code Gen Options.   (line  313)
* fplan9-extensions:                     C Dialect Options.  (line  332)
* fplan9-extensions <1>:                 Unnamed Fields.     (line   43)
* fplugin:                               Overall Options.    (line  351)
* fplugin-arg:                           Overall Options.    (line  358)
* fpost-ipa-mem-report:                  Debugging Options.  (line  673)
* fpre-ipa-mem-report:                   Debugging Options.  (line  672)
* fpredictive-commoning:                 Optimize Options.   (line 1403)
* fprefetch-loop-arrays:                 Optimize Options.   (line 1410)
* fpreprocessed:                         Preprocessor Options.
                                                             (line  507)
* fprofile-arcs:                         Debugging Options.  (line  710)
* fprofile-arcs <1>:                     Other Builtins.     (line  260)
* fprofile-correction:                   Optimize Options.   (line 1952)
* fprofile-dir:                          Optimize Options.   (line 1959)
* fprofile-generate:                     Optimize Options.   (line 1970)
* fprofile-reorder-functions:            Optimize Options.   (line 2276)
* fprofile-report:                       Debugging Options.  (line  677)
* fprofile-use:                          Optimize Options.   (line 1984)
* fprofile-values:                       Optimize Options.   (line 2267)
* fpu:                                   RX Options.         (line   17)
* frandom-seed:                          Debugging Options.  (line 1462)
* freciprocal-math:                      Optimize Options.   (line 2137)
* frecord-gcc-switches:                  Code Gen Options.   (line  267)
* free:                                  Optimize Options.   (line  614)
* freg-struct-return:                    Code Gen Options.   (line  183)
* frename-registers:                     Optimize Options.   (line 2293)
* freorder-blocks:                       Optimize Options.   (line 1447)
* freorder-blocks-and-partition:         Optimize Options.   (line 1453)
* freorder-functions:                    Optimize Options.   (line 1466)
* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
                                                             (line  131)
* frepo:                                 C++ Dialect Options.
                                                             (line  240)
* frepo <1>:                             Template Instantiation.
                                                             (line   54)
* freport-bug:                           Debugging Options.  (line 1092)
* frerun-cse-after-loop:                 Optimize Options.   (line  455)
* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  830)
* frounding-math:                        Optimize Options.   (line 2184)
* fsanitize-recover:                     Debugging Options.  (line  358)
* fsanitize-undefined-trap-on-error:     Debugging Options.  (line  385)
* fsanitize=address:                     Debugging Options.  (line  199)
* fsanitize=alignment:                   Debugging Options.  (line  287)
* fsanitize=bool:                        Debugging Options.  (line  325)
* fsanitize=bounds:                      Debugging Options.  (line  281)
* fsanitize=enum:                        Debugging Options.  (line  330)
* fsanitize=float-cast-overflow:         Debugging Options.  (line  305)
* fsanitize=float-divide-by-zero:        Debugging Options.  (line  299)
* fsanitize=integer-divide-by-zero:      Debugging Options.  (line  244)
* fsanitize=kernel-address:              Debugging Options.  (line  209)
* fsanitize=leak:                        Debugging Options.  (line  223)
* fsanitize=nonnull-attribute:           Debugging Options.  (line  313)
* fsanitize=null:                        Debugging Options.  (line  258)
* fsanitize=object-size:                 Debugging Options.  (line  294)
* fsanitize=return:                      Debugging Options.  (line  266)
* fsanitize=returns-nonnull-attribute:   Debugging Options.  (line  319)
* fsanitize=shift:                       Debugging Options.  (line  238)
* fsanitize=signed-integer-overflow:     Debugging Options.  (line  272)
* fsanitize=thread:                      Debugging Options.  (line  214)
* fsanitize=undefined:                   Debugging Options.  (line  233)
* fsanitize=unreachable:                 Debugging Options.  (line  248)
* fsanitize=vla-bound:                   Debugging Options.  (line  254)
* fsanitize=vptr:                        Debugging Options.  (line  336)
* fsched-critical-path-heuristic:        Optimize Options.   (line  796)
* fsched-dep-count-heuristic:            Optimize Options.   (line  823)
* fsched-group-heuristic:                Optimize Options.   (line  790)
* fsched-last-insn-heuristic:            Optimize Options.   (line  816)
* fsched-pressure:                       Optimize Options.   (line  741)
* fsched-rank-heuristic:                 Optimize Options.   (line  809)
* fsched-spec-insn-heuristic:            Optimize Options.   (line  802)
* fsched-spec-load:                      Optimize Options.   (line  750)
* fsched-spec-load-dangerous:            Optimize Options.   (line  755)
* fsched-stalled-insns:                  Optimize Options.   (line  761)
* fsched-stalled-insns-dep:              Optimize Options.   (line  771)
* fsched-verbose:                        Debugging Options.  (line 1472)
* fsched2-use-superblocks:               Optimize Options.   (line  780)
* fschedule-fusion:                      Optimize Options.   (line 2303)
* fschedule-insns:                       Optimize Options.   (line  712)
* fschedule-insns2:                      Optimize Options.   (line  722)
* fsection-anchors:                      Optimize Options.   (line 2410)
* fsel-sched-pipelining:                 Optimize Options.   (line  843)
* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  848)
* fselective-scheduling:                 Optimize Options.   (line  835)
* fselective-scheduling2:                Optimize Options.   (line  839)
* fsemantic-interposition:               Optimize Options.   (line  853)
* fshort-double:                         Code Gen Options.   (line  211)
* fshort-enums:                          Code Gen Options.   (line  201)
* fshort-enums <1>:                      Structures unions enumerations and bit-fields implementation.
                                                             (line   48)
* fshort-enums <2>:                      Type Attributes.    (line  114)
* fshort-enums <3>:                      Non-bugs.           (line   42)
* fshort-wchar:                          Code Gen Options.   (line  219)
* fshrink-wrap:                          Optimize Options.   (line  870)
* fsignaling-nans:                       Optimize Options.   (line 2204)
* fsigned-bitfields:                     C Dialect Options.  (line  391)
* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
* fsigned-char:                          C Dialect Options.  (line  381)
* fsigned-char <1>:                      Characters implementation.
                                                             (line   31)
* fsimd-cost-model:                      Optimize Options.   (line 1361)
* fsingle-precision-constant:            Optimize Options.   (line 2219)
* fsized-deallocation:                   C++ Dialect Options.
                                                             (line  255)
* fsplit-ivs-in-unroller:                Optimize Options.   (line 1377)
* fsplit-stack:                          Code Gen Options.   (line  506)
* fsplit-stack <1>:                      Function Attributes.
                                                             (line 1074)
* fsplit-wide-types:                     Optimize Options.   (line  430)
* fssa-phiopt:                           Optimize Options.   (line 1037)
* fstack-check:                          Code Gen Options.   (line  454)
* fstack-limit-register:                 Code Gen Options.   (line  492)
* fstack-limit-symbol:                   Code Gen Options.   (line  492)
* fstack-protector:                      Optimize Options.   (line 2385)
* fstack-protector-all:                  Optimize Options.   (line 2394)
* fstack-protector-explicit:             Optimize Options.   (line 2402)
* fstack-protector-strong:               Optimize Options.   (line 2397)
* fstack-usage:                          Debugging Options.  (line  681)
* fstack_reuse:                          Code Gen Options.   (line   21)
* fstats:                                C++ Dialect Options.
                                                             (line  265)
* fstdarg-opt:                           Optimize Options.   (line 2406)
* fstrict-aliasing:                      Optimize Options.   (line 1479)
* fstrict-enums:                         C++ Dialect Options.
                                                             (line  270)
* fstrict-overflow:                      Optimize Options.   (line 1525)
* fstrict-volatile-bitfields:            Code Gen Options.   (line  611)
* fsync-libcalls:                        Code Gen Options.   (line  643)
* fsyntax-only:                          Warning Options.    (line   14)
* ftabstop:                              Preprocessor Options.
                                                             (line  520)
* ftemplate-backtrace-limit:             C++ Dialect Options.
                                                             (line  279)
* ftemplate-depth:                       C++ Dialect Options.
                                                             (line  283)
* ftest-coverage:                        Debugging Options.  (line  765)
* fthread-jumps:                         Optimize Options.   (line  421)
* ftime-report:                          Debugging Options.  (line  660)
* ftls-model:                            Code Gen Options.   (line  535)
* ftracer:                               Optimize Options.   (line 2311)
* ftrack-macro-expansion:                Preprocessor Options.
                                                             (line  535)
* ftrapv:                                Code Gen Options.   (line   97)
* ftree-bit-ccp:                         Optimize Options.   (line 1026)
* ftree-builtin-call-dce:                Optimize Options.   (line 1058)
* ftree-ccp:                             Optimize Options.   (line 1032)
* ftree-ch:                              Optimize Options.   (line 1078)
* ftree-coalesce-inlined-vars:           Optimize Options.   (line 1302)
* ftree-coalesce-vars:                   Optimize Options.   (line 1311)
* ftree-copy-prop:                       Optimize Options.   (line  941)
* ftree-copyrename:                      Optimize Options.   (line 1295)
* ftree-dce:                             Optimize Options.   (line 1054)
* ftree-dominator-opts:                  Optimize Options.   (line 1064)
* ftree-dse:                             Optimize Options.   (line 1071)
* ftree-forwprop:                        Optimize Options.   (line  920)
* ftree-fre:                             Optimize Options.   (line  924)
* ftree-loop-distribute-patterns:        Optimize Options.   (line 1236)
* ftree-loop-distribution:               Optimize Options.   (line 1219)
* ftree-loop-if-convert:                 Optimize Options.   (line 1199)
* ftree-loop-if-convert-stores:          Optimize Options.   (line 1206)
* ftree-loop-im:                         Optimize Options.   (line 1256)
* ftree-loop-ivcanon:                    Optimize Options.   (line 1265)
* ftree-loop-linear:                     Optimize Options.   (line 1089)
* ftree-loop-optimize:                   Optimize Options.   (line 1085)
* ftree-loop-vectorize:                  Optimize Options.   (line 1339)
* ftree-parallelize-loops:               Optimize Options.   (line 1276)
* ftree-partial-pre:                     Optimize Options.   (line  916)
* ftree-phiprop:                         Optimize Options.   (line  931)
* ftree-pre:                             Optimize Options.   (line  912)
* ftree-pta:                             Optimize Options.   (line 1285)
* ftree-reassoc:                         Optimize Options.   (line  908)
* ftree-sink:                            Optimize Options.   (line 1022)
* ftree-slp-vectorize:                   Optimize Options.   (line 1343)
* ftree-slsr:                            Optimize Options.   (line 1328)
* ftree-sra:                             Optimize Options.   (line 1289)
* ftree-switch-conversion:               Optimize Options.   (line 1041)
* ftree-tail-merge:                      Optimize Options.   (line 1046)
* ftree-ter:                             Optimize Options.   (line 1320)
* ftree-vectorize:                       Optimize Options.   (line 1334)
* ftree-vrp:                             Optimize Options.   (line 1368)
* funit-at-a-time:                       Optimize Options.   (line 1622)
* funroll-all-loops:                     Optimize Options.   (line 2328)
* funroll-loops:                         Optimize Options.   (line 2318)
* funsafe-loop-optimizations:            Optimize Options.   (line  511)
* funsafe-math-optimizations:            Optimize Options.   (line 2102)
* funsigned-bitfields:                   C Dialect Options.  (line  391)
* funsigned-bitfields <1>:               Structures unions enumerations and bit-fields implementation.
                                                             (line   17)
* funsigned-bitfields <2>:               Non-bugs.           (line   57)
* funsigned-char:                        C Dialect Options.  (line  363)
* funsigned-char <1>:                    Characters implementation.
                                                             (line   31)
* funswitch-loops:                       Optimize Options.   (line 2346)
* funwind-tables:                        Code Gen Options.   (line  139)
* fuse-cxa-atexit:                       C++ Dialect Options.
                                                             (line  298)
* fuse-ld=bfd:                           Link Options.       (line   25)
* fuse-ld=gold:                          Link Options.       (line   28)
* fuse-linker-plugin:                    Optimize Options.   (line 1897)
* fvar-tracking:                         Debugging Options.  (line 1558)
* fvar-tracking-assignments:             Debugging Options.  (line 1568)
* fvar-tracking-assignments-toggle:      Debugging Options.  (line 1579)
* fvariable-expansion-in-unroller:       Optimize Options.   (line 1391)
* fvect-cost-model:                      Optimize Options.   (line 1347)
* fverbose-asm:                          Code Gen Options.   (line  258)
* fvisibility:                           Code Gen Options.   (line  546)
* fvisibility-inlines-hidden:            C++ Dialect Options.
                                                             (line  310)
* fvisibility-ms-compat:                 C++ Dialect Options.
                                                             (line  338)
* fvpt:                                  Optimize Options.   (line 2283)
* fvtable-verify:                        C++ Dialect Options.
                                                             (line  367)
* fvtv-counts:                           C++ Dialect Options.
                                                             (line  402)
* fvtv-debug:                            C++ Dialect Options.
                                                             (line  389)
* fweb:                                  Optimize Options.   (line 1641)
* fwhole-program:                        Optimize Options.   (line 1652)
* fwide-exec-charset:                    Preprocessor Options.
                                                             (line  558)
* fworking-directory:                    Preprocessor Options.
                                                             (line  576)
* fwrapv:                                Code Gen Options.   (line  101)
* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
                                                             (line  141)
* g:                                     Debugging Options.  (line   10)
* G:                                     M32R/D Options.     (line   57)
* G <1>:                                 MIPS Options.       (line  436)
* G <2>:                                 Nios II Options.    (line    9)
* G <3>:                                 RS/6000 and PowerPC Options.
                                                             (line  767)
* G <4>:                                 System V Options.   (line   10)
* gcoff:                                 Debugging Options.  (line   94)
* gdwarf-VERSION:                        Debugging Options.  (line  112)
* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
                                                             (line  167)
* gfull:                                 Darwin Options.     (line   69)
* ggdb:                                  Debugging Options.  (line   45)
* ggnu-pubnames:                         Debugging Options.  (line   54)
* gno-record-gcc-switches:               Debugging Options.  (line  133)
* gno-strict-dwarf:                      Debugging Options.  (line  143)
* gpubnames:                             Debugging Options.  (line   51)
* grecord-gcc-switches:                  Debugging Options.  (line  124)
* gsplit-dwarf:                          Debugging Options.  (line   38)
* gstabs:                                Debugging Options.  (line   59)
* gstabs+:                               Debugging Options.  (line   88)
* gstrict-dwarf:                         Debugging Options.  (line  137)
* gtoggle:                               Debugging Options.  (line  191)
* gused:                                 Darwin Options.     (line   64)
* gvms:                                  Debugging Options.  (line  158)
* gxcoff:                                Debugging Options.  (line   99)
* gxcoff+:                               Debugging Options.  (line  104)
* gz:                                    Debugging Options.  (line  147)
* H:                                     Preprocessor Options.
                                                             (line  706)
* headerpad_max_install_names:           Darwin Options.     (line  196)
* help:                                  Overall Options.    (line  221)
* help <1>:                              Preprocessor Options.
                                                             (line  698)
* I:                                     Preprocessor Options.
                                                             (line   77)
* I <1>:                                 Directory Options.  (line   10)
* I-:                                    Preprocessor Options.
                                                             (line  389)
* I- <1>:                                Directory Options.  (line  116)
* idirafter:                             Preprocessor Options.
                                                             (line  431)
* iframework:                            Darwin Options.     (line   57)
* imacros:                               Preprocessor Options.
                                                             (line  422)
* image_base:                            Darwin Options.     (line  196)
* imultilib:                             Preprocessor Options.
                                                             (line  456)
* include:                               Preprocessor Options.
                                                             (line  411)
* init:                                  Darwin Options.     (line  196)
* install_name:                          Darwin Options.     (line  196)
* iplugindir=:                           Directory Options.  (line   29)
* iprefix:                               Preprocessor Options.
                                                             (line  438)
* iquote:                                Preprocessor Options.
                                                             (line  468)
* iquote <1>:                            Directory Options.  (line   34)
* isysroot:                              Preprocessor Options.
                                                             (line  450)
* isystem:                               Preprocessor Options.
                                                             (line  460)
* iwithprefix:                           Preprocessor Options.
                                                             (line  444)
* iwithprefixbefore:                     Preprocessor Options.
                                                             (line  444)
* keep_private_externs:                  Darwin Options.     (line  196)
* l:                                     Link Options.       (line   32)
* L:                                     Directory Options.  (line   40)
* lobjc:                                 Link Options.       (line   59)
* M:                                     Preprocessor Options.
                                                             (line  185)
* m:                                     RS/6000 and PowerPC Options.
                                                             (line  609)
* m1:                                    SH Options.         (line    9)
* m10:                                   PDP-11 Options.     (line   29)
* m128bit-long-double:                   x86 Options.        (line  389)
* m16:                                   x86 Options.        (line  954)
* m16-bit:                               CRIS Options.       (line   64)
* m16-bit <1>:                           NDS32 Options.      (line   39)
* m1reg-:                                Adapteva Epiphany Options.
                                                             (line  131)
* m2:                                    SH Options.         (line   12)
* m210:                                  MCore Options.      (line   43)
* m2a:                                   SH Options.         (line   30)
* m2a-nofpu:                             SH Options.         (line   18)
* m2a-single:                            SH Options.         (line   26)
* m2a-single-only:                       SH Options.         (line   22)
* m3:                                    SH Options.         (line   34)
* m31:                                   S/390 and zSeries Options.
                                                             (line   86)
* m32:                                   Nvidia PTX Options. (line   10)
* m32 <1>:                               RS/6000 and PowerPC Options.
                                                             (line  302)
* m32 <2>:                               SPARC Options.      (line  256)
* m32 <3>:                               TILE-Gx Options.    (line   23)
* m32 <4>:                               TILEPro Options.    (line   13)
* m32 <5>:                               x86 Options.        (line  954)
* m32-bit:                               CRIS Options.       (line   64)
* m32bit-doubles:                        RL78 Options.       (line   22)
* m32bit-doubles <1>:                    RX Options.         (line   10)
* m32r:                                  M32R/D Options.     (line   15)
* m32r2:                                 M32R/D Options.     (line    9)
* m32rx:                                 M32R/D Options.     (line   12)
* m340:                                  MCore Options.      (line   43)
* m3dnow:                                x86 Options.        (line  603)
* m3e:                                   SH Options.         (line   37)
* m4:                                    SH Options.         (line   51)
* m4-100:                                SH Options.         (line   54)
* m4-100-nofpu:                          SH Options.         (line   57)
* m4-100-single:                         SH Options.         (line   61)
* m4-100-single-only:                    SH Options.         (line   65)
* m4-200:                                SH Options.         (line   69)
* m4-200-nofpu:                          SH Options.         (line   72)
* m4-200-single:                         SH Options.         (line   76)
* m4-200-single-only:                    SH Options.         (line   80)
* m4-300:                                SH Options.         (line   84)
* m4-300-nofpu:                          SH Options.         (line   87)
* m4-300-single:                         SH Options.         (line   91)
* m4-300-single-only:                    SH Options.         (line   95)
* m4-340:                                SH Options.         (line   99)
* m4-500:                                SH Options.         (line  102)
* m4-nofpu:                              SH Options.         (line   40)
* m4-single:                             SH Options.         (line   47)
* m4-single-only:                        SH Options.         (line   43)
* m40:                                   PDP-11 Options.     (line   23)
* m45:                                   PDP-11 Options.     (line   26)
* m4a:                                   SH Options.         (line  118)
* m4a-nofpu:                             SH Options.         (line  106)
* m4a-single:                            SH Options.         (line  114)
* m4a-single-only:                       SH Options.         (line  110)
* m4al:                                  SH Options.         (line  121)
* m4byte-functions:                      MCore Options.      (line   27)
* m5-32media:                            SH Options.         (line  126)
* m5-32media-nofpu:                      SH Options.         (line  129)
* m5-64media:                            SH Options.         (line  133)
* m5-64media-nofpu:                      SH Options.         (line  136)
* m5-compact:                            SH Options.         (line  140)
* m5-compact-nofpu:                      SH Options.         (line  143)
* m5200:                                 M680x0 Options.     (line  144)
* m5206e:                                M680x0 Options.     (line  153)
* m528x:                                 M680x0 Options.     (line  157)
* m5307:                                 M680x0 Options.     (line  161)
* m5407:                                 M680x0 Options.     (line  165)
* m64:                                   Nvidia PTX Options. (line   10)
* m64 <1>:                               RS/6000 and PowerPC Options.
                                                             (line  302)
* m64 <2>:                               S/390 and zSeries Options.
                                                             (line   86)
* m64 <3>:                               SPARC Options.      (line  256)
* m64 <4>:                               TILE-Gx Options.    (line   23)
* m64 <5>:                               x86 Options.        (line  954)
* m64bit-doubles:                        RL78 Options.       (line   22)
* m64bit-doubles <1>:                    RX Options.         (line   10)
* m68000:                                M680x0 Options.     (line   93)
* m68010:                                M680x0 Options.     (line  101)
* m68020:                                M680x0 Options.     (line  107)
* m68020-40:                             M680x0 Options.     (line  175)
* m68020-60:                             M680x0 Options.     (line  184)
* m68030:                                M680x0 Options.     (line  112)
* m68040:                                M680x0 Options.     (line  117)
* m68060:                                M680x0 Options.     (line  126)
* m68881:                                M680x0 Options.     (line  194)
* m8-bit:                                CRIS Options.       (line   64)
* m8bit-idiv:                            x86 Options.        (line  931)
* m8byte-align:                          V850 Options.       (line  170)
* m96bit-long-double:                    x86 Options.        (line  389)
* mA6:                                   ARC Options.        (line   19)
* mA7:                                   ARC Options.        (line   26)
* mabi:                                  AArch64 Options.    (line    9)
* mabi <1>:                              ARM Options.        (line    9)
* mabi <2>:                              RS/6000 and PowerPC Options.
                                                             (line  636)
* mabi <3>:                              x86 Options.        (line  787)
* mabi=32:                               MIPS Options.       (line  154)
* mabi=64:                               MIPS Options.       (line  154)
* mabi=eabi:                             MIPS Options.       (line  154)
* mabi=elfv1:                            RS/6000 and PowerPC Options.
                                                             (line  657)
* mabi=elfv2:                            RS/6000 and PowerPC Options.
                                                             (line  663)
* mabi=gnu:                              MMIX Options.       (line   20)
* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
                                                             (line  649)
* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
                                                             (line  653)
* mabi=mmixware:                         MMIX Options.       (line   20)
* mabi=n32:                              MIPS Options.       (line  154)
* mabi=no-spe:                           RS/6000 and PowerPC Options.
                                                             (line  646)
* mabi=o64:                              MIPS Options.       (line  154)
* mabi=spe:                              RS/6000 and PowerPC Options.
                                                             (line  641)
* mabicalls:                             MIPS Options.       (line  190)
* mabm:                                  x86 Options.        (line  605)
* mabort-on-noreturn:                    ARM Options.        (line  190)
* mabs=2008:                             MIPS Options.       (line  298)
* mabs=legacy:                           MIPS Options.       (line  298)
* mabsdiff:                              MeP Options.        (line    7)
* mabshi:                                PDP-11 Options.     (line   55)
* mac0:                                  PDP-11 Options.     (line   16)
* macc-4:                                FRV Options.        (line  139)
* macc-8:                                FRV Options.        (line  143)
* maccumulate-args:                      AVR Options.        (line  148)
* maccumulate-outgoing-args:             SH Options.         (line  394)
* maccumulate-outgoing-args <1>:         x86 Options.        (line  810)
* maddress-mode=long:                    x86 Options.        (line 1001)
* maddress-mode=short:                   x86 Options.        (line 1006)
* maddress-space-conversion:             SPU Options.        (line   68)
* mads:                                  RS/6000 and PowerPC Options.
                                                             (line  691)
* maes:                                  x86 Options.        (line  591)
* maix-struct-return:                    RS/6000 and PowerPC Options.
                                                             (line  629)
* maix32:                                RS/6000 and PowerPC Options.
                                                             (line  340)
* maix64:                                RS/6000 and PowerPC Options.
                                                             (line  340)
* malign-300:                            H8/300 Options.     (line   41)
* malign-call:                           ARC Options.        (line  192)
* malign-data:                           x86 Options.        (line  429)
* malign-double:                         x86 Options.        (line  374)
* malign-int:                            M680x0 Options.     (line  263)
* malign-labels:                         FRV Options.        (line  128)
* malign-loops:                          M32R/D Options.     (line   73)
* malign-natural:                        RS/6000 and PowerPC Options.
                                                             (line  378)
* malign-power:                          RS/6000 and PowerPC Options.
                                                             (line  378)
* mall-opts:                             MeP Options.        (line   11)
* malloc-cc:                             FRV Options.        (line   31)
* maltivec:                              RS/6000 and PowerPC Options.
                                                             (line  135)
* maltivec=be:                           RS/6000 and PowerPC Options.
                                                             (line  151)
* maltivec=le:                           RS/6000 and PowerPC Options.
                                                             (line  161)
* mam33:                                 MN10300 Options.    (line   17)
* mam33-2:                               MN10300 Options.    (line   24)
* mam34:                                 MN10300 Options.    (line   27)
* mandroid:                              GNU/Linux Options.  (line   21)
* mannotate-align:                       ARC Options.        (line  133)
* mapcs:                                 ARM Options.        (line   21)
* mapcs-frame:                           ARM Options.        (line   13)
* mapp-regs:                             SPARC Options.      (line   10)
* mapp-regs <1>:                         V850 Options.       (line  181)
* mARC600:                               ARC Options.        (line   19)
* mARC601:                               ARC Options.        (line   23)
* mARC700:                               ARC Options.        (line   26)
* march:                                 AArch64 Options.    (line   79)
* march <1>:                             ARM Options.        (line   65)
* march <2>:                             C6X Options.        (line    7)
* march <3>:                             CRIS Options.       (line   10)
* march <4>:                             HPPA Options.       (line    9)
* march <5>:                             HPPA Options.       (line  155)
* march <6>:                             M680x0 Options.     (line   12)
* march <7>:                             MIPS Options.       (line   14)
* march <8>:                             NDS32 Options.      (line   52)
* march <9>:                             S/390 and zSeries Options.
                                                             (line  114)
* march <10>:                            x86 Options.        (line    9)
* marclinux:                             ARC Options.        (line  139)
* marclinux_prof:                        ARC Options.        (line  146)
* margonaut:                             ARC Options.        (line  341)
* marm:                                  ARM Options.        (line  260)
* mas100-syntax:                         RX Options.         (line   76)
* masm-hex:                              MSP430 Options.     (line    9)
* masm-syntax-unified:                   ARM Options.        (line  350)
* masm=DIALECT:                          x86 Options.        (line  328)
* matomic-model=MODEL:                   SH Options.         (line  214)
* matomic-updates:                       SPU Options.        (line   83)
* mauto-modify-reg:                      ARC Options.        (line  195)
* mauto-pic:                             IA-64 Options.      (line   50)
* maverage:                              MeP Options.        (line   16)
* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
                                                             (line  448)
* mavx:                                  x86 Options.        (line  584)
* mavx256-split-unaligned-load:          x86 Options.        (line  939)
* mavx256-split-unaligned-store:         x86 Options.        (line  939)
* max-vect-align:                        Adapteva Epiphany Options.
                                                             (line  119)
* mb:                                    SH Options.         (line  147)
* mbackchain:                            S/390 and zSeries Options.
                                                             (line   35)
* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
* mbarrel-shifter:                       ARC Options.        (line   10)
* mbarrel_shifter:                       ARC Options.        (line  361)
* mbase-addresses:                       MMIX Options.       (line   53)
* mbased=:                               MeP Options.        (line   20)
* mbbit-peephole:                        ARC Options.        (line  198)
* mbcopy:                                PDP-11 Options.     (line   36)
* mbcopy-builtin:                        PDP-11 Options.     (line   32)
* mbig:                                  RS/6000 and PowerPC Options.
                                                             (line  528)
* mbig-endian:                           AArch64 Options.    (line   20)
* mbig-endian <1>:                       ARC Options.        (line  344)
* mbig-endian <2>:                       ARM Options.        (line   61)
* mbig-endian <3>:                       C6X Options.        (line   13)
* mbig-endian <4>:                       IA-64 Options.      (line    9)
* mbig-endian <5>:                       MCore Options.      (line   39)
* mbig-endian <6>:                       MicroBlaze Options. (line   57)
* mbig-endian <7>:                       NDS32 Options.      (line    9)
* mbig-endian <8>:                       RS/6000 and PowerPC Options.
                                                             (line  528)
* mbig-endian <9>:                       TILE-Gx Options.    (line   29)
* mbig-endian-data:                      RX Options.         (line   42)
* mbig-switch:                           V850 Options.       (line  176)
* mbigtable:                             SH Options.         (line  162)
* mbionic:                               GNU/Linux Options.  (line   17)
* mbit-align:                            RS/6000 and PowerPC Options.
                                                             (line  480)
* mbit-ops:                              CR16 Options.       (line   25)
* mbitfield:                             M680x0 Options.     (line  231)
* mbitops:                               MeP Options.        (line   26)
* mbitops <1>:                           SH Options.         (line  166)
* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
                                                             (line  761)
* mbmi:                                  x86 Options.        (line  606)
* mbranch-cheap:                         PDP-11 Options.     (line   65)
* mbranch-cost:                          Adapteva Epiphany Options.
                                                             (line   18)
* mbranch-cost <1>:                      AVR Options.        (line  163)
* mbranch-cost <2>:                      MIPS Options.       (line  744)
* mbranch-cost=NUM:                      SH Options.         (line  458)
* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
* mbranch-expensive:                     PDP-11 Options.     (line   61)
* mbranch-hints:                         SPU Options.        (line   29)
* mbranch-likely:                        MIPS Options.       (line  751)
* mbranch-predict:                       MMIX Options.       (line   48)
* mbss-plt:                              RS/6000 and PowerPC Options.
                                                             (line  188)
* mbuild-constants:                      DEC Alpha Options.  (line  141)
* mbwx:                                  DEC Alpha Options.  (line  163)
* mbypass-cache:                         Nios II Options.    (line   70)
* mc68000:                               M680x0 Options.     (line   93)
* mc68020:                               M680x0 Options.     (line  107)
* mc=:                                   MeP Options.        (line   31)
* mcache-block-size:                     NDS32 Options.      (line   48)
* mcache-size:                           SPU Options.        (line   75)
* mcache-volatile:                       Nios II Options.    (line   76)
* mcall-eabi:                            RS/6000 and PowerPC Options.
                                                             (line  603)
* mcall-freebsd:                         RS/6000 and PowerPC Options.
                                                             (line  617)
* mcall-linux:                           RS/6000 and PowerPC Options.
                                                             (line  613)
* mcall-netbsd:                          RS/6000 and PowerPC Options.
                                                             (line  621)
* mcall-netbsd <1>:                      RS/6000 and PowerPC Options.
                                                             (line  625)
* mcall-prologues:                       AVR Options.        (line  168)
* mcall-sysv:                            RS/6000 and PowerPC Options.
                                                             (line  595)
* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
                                                             (line  603)
* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
                                                             (line  606)
* mcallee-super-interworking:            ARM Options.        (line  279)
* mcaller-super-interworking:            ARM Options.        (line  286)
* mcallgraph-data:                       MCore Options.      (line   31)
* mcase-vector-pcrel:                    ARC Options.        (line  206)
* mcbcond:                               SPARC Options.      (line  223)
* mcbranch-force-delay-slot:             SH Options.         (line  473)
* mcc-init:                              CRIS Options.       (line   42)
* mcfv4e:                                M680x0 Options.     (line  169)
* mcheck-zero-division:                  MIPS Options.       (line  546)
* mcix:                                  DEC Alpha Options.  (line  163)
* mcld:                                  x86 Options.        (line  660)
* mclear-hwcap:                          Solaris 2 Options.  (line    9)
* mclfushopt:                            x86 Options.        (line  593)
* mclip:                                 MeP Options.        (line   35)
* mcmodel:                               NDS32 Options.      (line   55)
* mcmodel <1>:                           SPARC Options.      (line  261)
* mcmodel=kernel:                        x86 Options.        (line  985)
* mcmodel=large:                         AArch64 Options.    (line   44)
* mcmodel=large <1>:                     RS/6000 and PowerPC Options.
                                                             (line  129)
* mcmodel=large <2>:                     TILE-Gx Options.    (line   14)
* mcmodel=large <3>:                     x86 Options.        (line  997)
* mcmodel=medium:                        RS/6000 and PowerPC Options.
                                                             (line  125)
* mcmodel=medium <1>:                    x86 Options.        (line  990)
* mcmodel=small:                         AArch64 Options.    (line   38)
* mcmodel=small <1>:                     RS/6000 and PowerPC Options.
                                                             (line  121)
* mcmodel=small <2>:                     TILE-Gx Options.    (line    9)
* mcmodel=small <3>:                     x86 Options.        (line  979)
* mcmodel=tiny:                          AArch64 Options.    (line   31)
* mcmov:                                 NDS32 Options.      (line   21)
* mcmove:                                Adapteva Epiphany Options.
                                                             (line   23)
* mcmpb:                                 RS/6000 and PowerPC Options.
                                                             (line   27)
* mcode-readable:                        MIPS Options.       (line  506)
* mcompact-casesi:                       ARC Options.        (line  210)
* mcompat-align-parm:                    RS/6000 and PowerPC Options.
                                                             (line  939)
* mcond-exec:                            FRV Options.        (line  187)
* mcond-move:                            FRV Options.        (line  159)
* mconfig=:                              MeP Options.        (line   39)
* mconsole:                              x86 Windows Options.
                                                             (line    9)
* mconst-align:                          CRIS Options.       (line   55)
* mconst16:                              Xtensa Options.     (line   10)
* mconstant-gp:                          IA-64 Options.      (line   46)
* mcop:                                  MeP Options.        (line   48)
* mcop32:                                MeP Options.        (line   53)
* mcop64:                                MeP Options.        (line   56)
* mcorea:                                Blackfin Options.   (line  156)
* mcoreb:                                Blackfin Options.   (line  163)
* mcpu:                                  AArch64 Options.    (line  112)
* mcpu <1>:                              ARC Options.        (line   14)
* mcpu <2>:                              ARM Options.        (line  130)
* mcpu <3>:                              CRIS Options.       (line   10)
* mcpu <4>:                              DEC Alpha Options.  (line  215)
* mcpu <5>:                              FRV Options.        (line  258)
* mcpu <6>:                              M680x0 Options.     (line   28)
* mcpu <7>:                              picoChip Options.   (line    9)
* mcpu <8>:                              RS/6000 and PowerPC Options.
                                                             (line   68)
* mcpu <9>:                              RX Options.         (line   30)
* mcpu <10>:                             SPARC Options.      (line  101)
* mcpu <11>:                             TILE-Gx Options.    (line   18)
* mcpu <12>:                             TILEPro Options.    (line    9)
* mcpu <13>:                             Visium Options.     (line   33)
* mcpu <14>:                             x86 Options.        (line  276)
* mcpu32:                                M680x0 Options.     (line  135)
* mcpu=:                                 Blackfin Options.   (line    7)
* mcpu= <1>:                             M32C Options.       (line    7)
* mcpu= <2>:                             MicroBlaze Options. (line   20)
* mcpu= <3>:                             MSP430 Options.     (line   34)
* mcr16c:                                CR16 Options.       (line   14)
* mcr16cplus:                            CR16 Options.       (line   14)
* mcrc32:                                x86 Options.        (line  707)
* mcrypto:                               RS/6000 and PowerPC Options.
                                                             (line  223)
* mcsync-anomaly:                        Blackfin Options.   (line   59)
* mctor-dtor:                            NDS32 Options.      (line   69)
* mcustom-fpu-cfg:                       Nios II Options.    (line  217)
* mcustom-INSN:                          Nios II Options.    (line   97)
* mcx16:                                 x86 Options.        (line  684)
* MD:                                    Preprocessor Options.
                                                             (line  276)
* mdalign:                               SH Options.         (line  153)
* mdata-align:                           CRIS Options.       (line   55)
* mdata-model:                           CR16 Options.       (line   28)
* mdc:                                   MeP Options.        (line   62)
* mdebug:                                M32R/D Options.     (line   69)
* mdebug <1>:                            S/390 and zSeries Options.
                                                             (line  110)
* mdebug <2>:                            Visium Options.     (line    7)
* mdebug-main=PREFIX:                    VMS Options.        (line   13)
* mdec-asm:                              PDP-11 Options.     (line   72)
* mdirect-move:                          RS/6000 and PowerPC Options.
                                                             (line  229)
* mdisable-callt:                        V850 Options.       (line   92)
* mdisable-fpregs:                       HPPA Options.       (line   27)
* mdisable-indexing:                     HPPA Options.       (line   33)
* mdiv:                                  M680x0 Options.     (line  206)
* mdiv <1>:                              MCore Options.      (line   15)
* mdiv <2>:                              MeP Options.        (line   65)
* mdiv=STRATEGY:                         SH Options.         (line  305)
* mdivide-breaks:                        MIPS Options.       (line  552)
* mdivide-enabled:                       LM32 Options.       (line   12)
* mdivide-traps:                         MIPS Options.       (line  552)
* mdivsi3_libfunc=NAME:                  SH Options.         (line  400)
* mdll:                                  x86 Windows Options.
                                                             (line   16)
* mdlmzb:                                RS/6000 and PowerPC Options.
                                                             (line  473)
* mdmx:                                  MIPS Options.       (line  374)
* mdouble:                               FRV Options.        (line   48)
* mdouble-float:                         MIPS Options.       (line  286)
* mdouble-float <1>:                     RS/6000 and PowerPC Options.
                                                             (line  396)
* mdpfp:                                 ARC Options.        (line   30)
* mdpfp-compact:                         ARC Options.        (line   31)
* mdpfp-fast:                            ARC Options.        (line   35)
* mdpfp_compact:                         ARC Options.        (line  364)
* mdpfp_fast:                            ARC Options.        (line  367)
* mdsp:                                  MIPS Options.       (line  351)
* mdsp-packa:                            ARC Options.        (line   88)
* mdspr2:                                MIPS Options.       (line  357)
* mdsp_packa:                            ARC Options.        (line  370)
* mdual-nops:                            SPU Options.        (line   95)
* mdump-tune-features:                   x86 Options.        (line  642)
* mdvbf:                                 ARC Options.        (line   92)
* mdwarf2-asm:                           IA-64 Options.      (line   94)
* mdword:                                FRV Options.        (line   40)
* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
                                                             (line  533)
* mea:                                   ARC Options.        (line   43)
* mEA:                                   ARC Options.        (line  373)
* mea32:                                 SPU Options.        (line   60)
* mea64:                                 SPU Options.        (line   60)
* meabi:                                 RS/6000 and PowerPC Options.
                                                             (line  710)
* mearly-cbranchsi:                      ARC Options.        (line  229)
* mearly-stop-bits:                      IA-64 Options.      (line  100)
* meb:                                   MeP Options.        (line   68)
* meb <1>:                               Moxie Options.      (line    7)
* meb <2>:                               Nios II Options.    (line   65)
* meb <3>:                               Score Options.      (line    9)
* mel:                                   MeP Options.        (line   71)
* mel <1>:                               Moxie Options.      (line   11)
* mel <2>:                               Nios II Options.    (line   65)
* mel <3>:                               Score Options.      (line   12)
* melf:                                  CRIS Options.       (line   87)
* melf <1>:                              MMIX Options.       (line   43)
* memb:                                  RS/6000 and PowerPC Options.
                                                             (line  705)
* membedded-data:                        MIPS Options.       (line  493)
* memregs=:                              M32C Options.       (line   21)
* mep:                                   V850 Options.       (line   16)
* mepilogue-cfi:                         ARC Options.        (line  155)
* mepsilon:                              MMIX Options.       (line   15)
* merror-reloc:                          SPU Options.        (line   10)
* mesa:                                  S/390 and zSeries Options.
                                                             (line   94)
* metrax100:                             CRIS Options.       (line   27)
* metrax4:                               CRIS Options.       (line   27)
* meva:                                  MIPS Options.       (line  401)
* mexpand-adddi:                         ARC Options.        (line  232)
* mexplicit-relocs:                      DEC Alpha Options.  (line  176)
* mexplicit-relocs <1>:                  MIPS Options.       (line  537)
* mexr:                                  H8/300 Options.     (line   28)
* mextern-sdata:                         MIPS Options.       (line  456)
* MF:                                    Preprocessor Options.
                                                             (line  220)
* mf16c:                                 x86 Options.        (line  596)
* mfast-fp:                              Blackfin Options.   (line  132)
* mfast-indirect-calls:                  HPPA Options.       (line   45)
* mfast-sw-div:                          Nios II Options.    (line   82)
* mfaster-structs:                       SPARC Options.      (line   91)
* mfdpic:                                FRV Options.        (line   72)
* mfentry:                               x86 Options.        (line  898)
* mfix:                                  DEC Alpha Options.  (line  163)
* mfix-24k:                              MIPS Options.       (line  610)
* mfix-and-continue:                     Darwin Options.     (line  104)
* mfix-at697f:                           SPARC Options.      (line  243)
* mfix-cortex-a53-835769:                AArch64 Options.    (line   67)
* mfix-cortex-a53-843419:                AArch64 Options.    (line   74)
* mfix-cortex-m3-ldrd:                   ARM Options.        (line  319)
* mfix-r10000:                           MIPS Options.       (line  632)
* mfix-r4000:                            MIPS Options.       (line  616)
* mfix-r4400:                            MIPS Options.       (line  626)
* mfix-rm7000:                           MIPS Options.       (line  643)
* mfix-sb1:                              MIPS Options.       (line  668)
* mfix-ut699:                            SPARC Options.      (line  248)
* mfix-vr4120:                           MIPS Options.       (line  648)
* mfix-vr4130:                           MIPS Options.       (line  661)
* mfixed-cc:                             FRV Options.        (line   35)
* mfixed-range:                          HPPA Options.       (line   52)
* mfixed-range <1>:                      IA-64 Options.      (line  105)
* mfixed-range <2>:                      SH Options.         (line  407)
* mfixed-range <3>:                      SPU Options.        (line   52)
* mflat:                                 SPARC Options.      (line   22)
* mflip-mips16:                          MIPS Options.       (line  126)
* mfloat-abi:                            ARM Options.        (line   41)
* mfloat-gprs:                           RS/6000 and PowerPC Options.
                                                             (line  285)
* mfloat-ieee:                           DEC Alpha Options.  (line  171)
* mfloat-vax:                            DEC Alpha Options.  (line  171)
* mfloat32:                              PDP-11 Options.     (line   52)
* mfloat64:                              PDP-11 Options.     (line   48)
* mflush-func:                           MIPS Options.       (line  735)
* mflush-func=NAME:                      M32R/D Options.     (line   93)
* mflush-trap=NUMBER:                    M32R/D Options.     (line   86)
* mfma:                                  x86 Options.        (line  597)
* mfmaf:                                 SPARC Options.      (line  237)
* mfmovd:                                SH Options.         (line  169)
* mforce-no-pic:                         Xtensa Options.     (line   41)
* mfp-exceptions:                        MIPS Options.       (line  762)
* mfp-mode:                              Adapteva Epiphany Options.
                                                             (line   71)
* mfp-reg:                               DEC Alpha Options.  (line   25)
* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
* mfp16-format:                          ARM Options.        (line  170)
* mfp32:                                 MIPS Options.       (line  256)
* mfp64:                                 MIPS Options.       (line  259)
* mfpmath:                               Optimize Options.   (line 2062)
* mfpmath <1>:                           x86 Options.        (line  279)
* mfpr-32:                               FRV Options.        (line   15)
* mfpr-64:                               FRV Options.        (line   19)
* mfprnd:                                RS/6000 and PowerPC Options.
                                                             (line   27)
* mfpu:                                  ARM Options.        (line  150)
* mfpu <1>:                              PDP-11 Options.     (line    9)
* mfpu <2>:                              RS/6000 and PowerPC Options.
                                                             (line  404)
* mfpu <3>:                              SPARC Options.      (line   34)
* mfpu <4>:                              Visium Options.     (line   19)
* mfpxx:                                 MIPS Options.       (line  262)
* mfriz:                                 RS/6000 and PowerPC Options.
                                                             (line  910)
* mfsca:                                 SH Options.         (line  489)
* mfsgsbase:                             x86 Options.        (line  594)
* mfsrra:                                SH Options.         (line  498)
* mfull-regs:                            NDS32 Options.      (line   18)
* mfull-toc:                             RS/6000 and PowerPC Options.
                                                             (line  313)
* mfused-madd:                           IA-64 Options.      (line   88)
* mfused-madd <1>:                       MIPS Options.       (line  593)
* mfused-madd <2>:                       RS/6000 and PowerPC Options.
                                                             (line  457)
* mfused-madd <3>:                       S/390 and zSeries Options.
                                                             (line  135)
* mfused-madd <4>:                       SH Options.         (line  480)
* mfused-madd <5>:                       Xtensa Options.     (line   19)
* mfxsr:                                 x86 Options.        (line  609)
* MG:                                    Preprocessor Options.
                                                             (line  229)
* mg:                                    VAX Options.        (line   17)
* mgas:                                  HPPA Options.       (line   68)
* mgcc-abi:                              V850 Options.       (line  148)
* mgen-cell-microcode:                   RS/6000 and PowerPC Options.
                                                             (line  176)
* mgeneral-regs-only:                    AArch64 Options.    (line   24)
* mgettrcost=NUMBER:                     SH Options.         (line  424)
* mghs:                                  V850 Options.       (line  127)
* mglibc:                                GNU/Linux Options.  (line    9)
* mgnu:                                  VAX Options.        (line   13)
* mgnu-as:                               IA-64 Options.      (line   18)
* mgnu-ld:                               HPPA Options.       (line  104)
* mgnu-ld <1>:                           IA-64 Options.      (line   23)
* mgotplt:                               CRIS Options.       (line   81)
* mgp32:                                 MIPS Options.       (line  250)
* mgp64:                                 MIPS Options.       (line  253)
* mgpopt:                                MIPS Options.       (line  478)
* mgpopt <1>:                            Nios II Options.    (line   16)
* mgpr-32:                               FRV Options.        (line    7)
* mgpr-64:                               FRV Options.        (line   11)
* mgprel-ro:                             FRV Options.        (line   99)
* mh:                                    H8/300 Options.     (line   14)
* mhal:                                  Nios II Options.    (line  262)
* mhalf-reg-file:                        Adapteva Epiphany Options.
                                                             (line    9)
* mhard-dfp:                             RS/6000 and PowerPC Options.
                                                             (line   27)
* mhard-dfp <1>:                         S/390 and zSeries Options.
                                                             (line   20)
* mhard-float:                           FRV Options.        (line   23)
* mhard-float <1>:                       M680x0 Options.     (line  194)
* mhard-float <2>:                       MicroBlaze Options. (line   10)
* mhard-float <3>:                       MIPS Options.       (line  265)
* mhard-float <4>:                       RS/6000 and PowerPC Options.
                                                             (line  390)
* mhard-float <5>:                       S/390 and zSeries Options.
                                                             (line   11)
* mhard-float <6>:                       SPARC Options.      (line   34)
* mhard-float <7>:                       V850 Options.       (line  113)
* mhard-float <8>:                       Visium Options.     (line   19)
* mhard-quad-float:                      SPARC Options.      (line   55)
* mhardlit:                              MCore Options.      (line   10)
* mhint-max-distance:                    SPU Options.        (line  107)
* mhint-max-nops:                        SPU Options.        (line  101)
* mhotpatch:                             S/390 and zSeries Options.
                                                             (line  170)
* mhp-ld:                                HPPA Options.       (line  116)
* mhw-div:                               Nios II Options.    (line   91)
* mhw-mul:                               Nios II Options.    (line   91)
* mhw-mulx:                              Nios II Options.    (line   91)
* mhwmult=:                              MSP430 Options.     (line   55)
* micplb:                                Blackfin Options.   (line  177)
* mid-shared-library:                    Blackfin Options.   (line   80)
* mieee:                                 DEC Alpha Options.  (line   39)
* mieee <1>:                             SH Options.         (line  186)
* mieee-conformant:                      DEC Alpha Options.  (line  134)
* mieee-fp:                              x86 Options.        (line  336)
* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
* milp32:                                IA-64 Options.      (line  121)
* mimadd:                                MIPS Options.       (line  586)
* mimpure-text:                          Solaris 2 Options.  (line   15)
* mincoming-stack-boundary:              x86 Options.        (line  550)
* mindexed-addressing:                   SH Options.         (line  414)
* mindexed-loads:                        ARC Options.        (line  236)
* minline-all-stringops:                 x86 Options.        (line  830)
* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
* minline-ic_invalidate:                 SH Options.         (line  195)
* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
* minline-plt:                           Blackfin Options.   (line  137)
* minline-plt <1>:                       FRV Options.        (line   81)
* minline-sqrt-max-throughput:           IA-64 Options.      (line   80)
* minline-sqrt-min-latency:              IA-64 Options.      (line   76)
* minline-stringops-dynamically:         x86 Options.        (line  837)
* minrt:                                 MSP430 Options.     (line   76)
* minsert-sched-nops:                    RS/6000 and PowerPC Options.
                                                             (line  573)
* mint-register:                         RX Options.         (line  100)
* mint16:                                PDP-11 Options.     (line   40)
* mint32:                                CR16 Options.       (line   22)
* mint32 <1>:                            H8/300 Options.     (line   38)
* mint32 <2>:                            PDP-11 Options.     (line   44)
* mint8:                                 AVR Options.        (line  172)
* minterlink-compressed:                 MIPS Options.       (line  133)
* minterlink-mips16:                     MIPS Options.       (line  145)
* minvalid-symbols:                      SH Options.         (line  448)
* mio-volatile:                          MeP Options.        (line   74)
* mips1:                                 MIPS Options.       (line   78)
* mips16:                                MIPS Options.       (line  118)
* mips2:                                 MIPS Options.       (line   81)
* mips3:                                 MIPS Options.       (line   84)
* mips32:                                MIPS Options.       (line   90)
* mips32r3:                              MIPS Options.       (line   93)
* mips32r5:                              MIPS Options.       (line   96)
* mips32r6:                              MIPS Options.       (line   99)
* mips3d:                                MIPS Options.       (line  380)
* mips4:                                 MIPS Options.       (line   87)
* mips64:                                MIPS Options.       (line  102)
* mips64r2:                              MIPS Options.       (line  105)
* mips64r3:                              MIPS Options.       (line  108)
* mips64r5:                              MIPS Options.       (line  111)
* mips64r6:                              MIPS Options.       (line  114)
* misel:                                 RS/6000 and PowerPC Options.
                                                             (line  194)
* misize:                                ARC Options.        (line  130)
* misize <1>:                            SH Options.         (line  207)
* misr-vector-size:                      NDS32 Options.      (line   45)
* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
* mivc2:                                 MeP Options.        (line   59)
* mjump-in-delay:                        HPPA Options.       (line   23)
* mkernel:                               Darwin Options.     (line   82)
* mknuthdiv:                             MMIX Options.       (line   32)
* ml:                                    MeP Options.        (line   78)
* ml <1>:                                SH Options.         (line  150)
* mlarge:                                MSP430 Options.     (line   44)
* mlarge-data:                           DEC Alpha Options.  (line  187)
* mlarge-data-threshold:                 x86 Options.        (line  436)
* mlarge-mem:                            SPU Options.        (line   38)
* mlarge-text:                           DEC Alpha Options.  (line  205)
* mleadz:                                MeP Options.        (line   81)
* mleaf-id-shared-library:               Blackfin Options.   (line   91)
* mlibfuncs:                             MMIX Options.       (line   10)
* mlibrary-pic:                          FRV Options.        (line  135)
* mlinked-fp:                            FRV Options.        (line  116)
* mlinker-opt:                           HPPA Options.       (line   78)
* mlinux:                                CRIS Options.       (line   91)
* mlittle:                               RS/6000 and PowerPC Options.
                                                             (line  522)
* mlittle-endian:                        AArch64 Options.    (line   27)
* mlittle-endian <1>:                    ARC Options.        (line  353)
* mlittle-endian <2>:                    ARM Options.        (line   57)
* mlittle-endian <3>:                    C6X Options.        (line   16)
* mlittle-endian <4>:                    IA-64 Options.      (line   13)
* mlittle-endian <5>:                    MCore Options.      (line   39)
* mlittle-endian <6>:                    MicroBlaze Options. (line   60)
* mlittle-endian <7>:                    NDS32 Options.      (line   12)
* mlittle-endian <8>:                    RS/6000 and PowerPC Options.
                                                             (line  522)
* mlittle-endian <9>:                    TILE-Gx Options.    (line   29)
* mlittle-endian-data:                   RX Options.         (line   42)
* mliw:                                  MN10300 Options.    (line   54)
* mllsc:                                 MIPS Options.       (line  337)
* mlocal-sdata:                          MIPS Options.       (line  444)
* mlock:                                 ARC Options.        (line   96)
* mlong-calls:                           Adapteva Epiphany Options.
                                                             (line   55)
* mlong-calls <1>:                       ARC Options.        (line  161)
* mlong-calls <2>:                       ARM Options.        (line  195)
* mlong-calls <3>:                       Blackfin Options.   (line  120)
* mlong-calls <4>:                       FRV Options.        (line  122)
* mlong-calls <5>:                       MIPS Options.       (line  572)
* mlong-calls <6>:                       V850 Options.       (line   10)
* mlong-double-128:                      S/390 and zSeries Options.
                                                             (line   29)
* mlong-double-128 <1>:                  x86 Options.        (line  415)
* mlong-double-64:                       S/390 and zSeries Options.
                                                             (line   29)
* mlong-double-64 <1>:                   x86 Options.        (line  415)
* mlong-double-80:                       x86 Options.        (line  415)
* mlong-jumps:                           V850 Options.       (line  108)
* mlong-load-store:                      HPPA Options.       (line   59)
* mlong32:                               MIPS Options.       (line  419)
* mlong64:                               MIPS Options.       (line  414)
* mlongcall:                             RS/6000 and PowerPC Options.
                                                             (line  781)
* mlongcalls:                            Xtensa Options.     (line   72)
* mloop:                                 V850 Options.       (line  121)
* mlow-64k:                              Blackfin Options.   (line   69)
* mlp64:                                 IA-64 Options.      (line  121)
* mlra:                                  ARC Options.        (line  241)
* mlra-priority-compact:                 ARC Options.        (line  249)
* mlra-priority-noncompact:              ARC Options.        (line  252)
* mlra-priority-none:                    ARC Options.        (line  246)
* mlwp:                                  x86 Options.        (line  602)
* mlzcnt:                                x86 Options.        (line  608)
* MM:                                    Preprocessor Options.
                                                             (line  210)
* mm:                                    MeP Options.        (line   84)
* mmac:                                  CR16 Options.       (line    9)
* mmac <1>:                              Score Options.      (line   21)
* mmac-24:                               ARC Options.        (line  105)
* mmac-d16:                              ARC Options.        (line  101)
* mmac_24:                               ARC Options.        (line  376)
* mmac_d16:                              ARC Options.        (line  379)
* mmad:                                  MIPS Options.       (line  581)
* mmainkernel:                           Nvidia PTX Options. (line   13)
* mmalloc64:                             VMS Options.        (line   17)
* mmax:                                  DEC Alpha Options.  (line  163)
* mmax-constant-size:                    RX Options.         (line   82)
* mmax-stack-frame:                      CRIS Options.       (line   23)
* mmcount-ra-address:                    MIPS Options.       (line  810)
* mmcu:                                  AVR Options.        (line    9)
* mmcu <1>:                              MIPS Options.       (line  397)
* mmcu=:                                 MSP430 Options.     (line   14)
* MMD:                                   Preprocessor Options.
                                                             (line  292)
* mmedia:                                FRV Options.        (line   56)
* mmedium-calls:                         ARC Options.        (line  165)
* mmemcpy:                               MicroBlaze Options. (line   13)
* mmemcpy <1>:                           MIPS Options.       (line  566)
* mmemcpy-strategy=STRATEGY:             x86 Options.        (line  859)
* mmemory-latency:                       DEC Alpha Options.  (line  268)
* mmemory-model:                         SPARC Options.      (line  289)
* mmemset-strategy=STRATEGY:             x86 Options.        (line  871)
* mmfcrf:                                RS/6000 and PowerPC Options.
                                                             (line   27)
* mmfpgpr:                               RS/6000 and PowerPC Options.
                                                             (line   27)
* mmicromips:                            MIPS Options.       (line  385)
* mminimal-toc:                          RS/6000 and PowerPC Options.
                                                             (line  313)
* mminmax:                               MeP Options.        (line   87)
* mmixed-code:                           ARC Options.        (line  264)
* mmmx:                                  x86 Options.        (line  575)
* mmodel=large:                          M32R/D Options.     (line   33)
* mmodel=medium:                         M32R/D Options.     (line   27)
* mmodel=small:                          M32R/D Options.     (line   18)
* mmovbe:                                x86 Options.        (line  703)
* mmpx:                                  x86 Options.        (line  616)
* mmt:                                   MIPS Options.       (line  393)
* mmul:                                  RL78 Options.       (line   13)
* mmul-bug-workaround:                   CRIS Options.       (line   32)
* mmul.x:                                Moxie Options.      (line   14)
* mmul32x16:                             ARC Options.        (line   51)
* mmul64:                                ARC Options.        (line   54)
* mmuladd:                               FRV Options.        (line   64)
* mmulhw:                                RS/6000 and PowerPC Options.
                                                             (line  466)
* mmult:                                 MeP Options.        (line   90)
* mmult-bug:                             MN10300 Options.    (line    9)
* mmultcost:                             ARC Options.        (line  326)
* mmulti-cond-exec:                      FRV Options.        (line  215)
* mmulticore:                            Blackfin Options.   (line  141)
* mmultiple:                             RS/6000 and PowerPC Options.
                                                             (line  416)
* mmvcle:                                S/390 and zSeries Options.
                                                             (line  104)
* mmvme:                                 RS/6000 and PowerPC Options.
                                                             (line  686)
* mn:                                    H8/300 Options.     (line   20)
* mn-flash:                              AVR Options.        (line  178)
* mnan=2008:                             MIPS Options.       (line  318)
* mnan=legacy:                           MIPS Options.       (line  318)
* mneon-for-64bits:                      ARM Options.        (line  339)
* mnested-cond-exec:                     FRV Options.        (line  230)
* mnhwloop:                              Score Options.      (line   15)
* mno-16-bit:                            NDS32 Options.      (line   42)
* mno-4byte-functions:                   MCore Options.      (line   27)
* mno-8byte-align:                       V850 Options.       (line  170)
* mno-abicalls:                          MIPS Options.       (line  190)
* mno-abshi:                             PDP-11 Options.     (line   58)
* mno-ac0:                               PDP-11 Options.     (line   20)
* mno-address-space-conversion:          SPU Options.        (line   68)
* mno-align-double:                      x86 Options.        (line  374)
* mno-align-int:                         M680x0 Options.     (line  263)
* mno-align-loops:                       M32R/D Options.     (line   76)
* mno-align-stringops:                   x86 Options.        (line  825)
* mno-altivec:                           RS/6000 and PowerPC Options.
                                                             (line  135)
* mno-am33:                              MN10300 Options.    (line   20)
* mno-app-regs:                          SPARC Options.      (line   10)
* mno-app-regs <1>:                      V850 Options.       (line  185)
* mno-as100-syntax:                      RX Options.         (line   76)
* mno-atomic-updates:                    SPU Options.        (line   83)
* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
                                                             (line  448)
* mno-backchain:                         S/390 and zSeries Options.
                                                             (line   35)
* mno-base-addresses:                    MMIX Options.       (line   53)
* mno-bit-align:                         RS/6000 and PowerPC Options.
                                                             (line  480)
* mno-bitfield:                          M680x0 Options.     (line  227)
* mno-branch-likely:                     MIPS Options.       (line  751)
* mno-branch-predict:                    MMIX Options.       (line   48)
* mno-brcc:                              ARC Options.        (line  201)
* mno-bwx:                               DEC Alpha Options.  (line  163)
* mno-bypass-cache:                      Nios II Options.    (line   70)
* mno-cache-volatile:                    Nios II Options.    (line   76)
* mno-callgraph-data:                    MCore Options.      (line   31)
* mno-cbcond:                            SPARC Options.      (line  223)
* mno-check-zero-division:               MIPS Options.       (line  546)
* mno-cix:                               DEC Alpha Options.  (line  163)
* mno-clearbss:                          MicroBlaze Options. (line   16)
* mno-cmov:                              NDS32 Options.      (line   24)
* mno-cmpb:                              RS/6000 and PowerPC Options.
                                                             (line   27)
* mno-cond-exec:                         ARC Options.        (line  213)
* mno-cond-exec <1>:                     FRV Options.        (line  194)
* mno-cond-move:                         FRV Options.        (line  166)
* mno-const-align:                       CRIS Options.       (line   55)
* mno-const16:                           Xtensa Options.     (line   10)
* mno-crt0:                              MN10300 Options.    (line   43)
* mno-crt0 <1>:                          Moxie Options.      (line   18)
* mno-crypto:                            RS/6000 and PowerPC Options.
                                                             (line  223)
* mno-csync-anomaly:                     Blackfin Options.   (line   65)
* mno-custom-INSN:                       Nios II Options.    (line   97)
* mno-data-align:                        CRIS Options.       (line   55)
* mno-debug:                             S/390 and zSeries Options.
                                                             (line  110)
* mno-default:                           x86 Options.        (line  656)
* mno-direct-move:                       RS/6000 and PowerPC Options.
                                                             (line  229)
* mno-disable-callt:                     V850 Options.       (line   92)
* mno-div:                               M680x0 Options.     (line  206)
* mno-div <1>:                           MCore Options.      (line   15)
* mno-dlmzb:                             RS/6000 and PowerPC Options.
                                                             (line  473)
* mno-double:                            FRV Options.        (line   52)
* mno-dpfp-lrsr:                         ARC Options.        (line   39)
* mno-dsp:                               MIPS Options.       (line  351)
* mno-dspr2:                             MIPS Options.       (line  357)
* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
* mno-dword:                             FRV Options.        (line   44)
* mno-eabi:                              RS/6000 and PowerPC Options.
                                                             (line  710)
* mno-early-stop-bits:                   IA-64 Options.      (line  100)
* mno-eflags:                            FRV Options.        (line  155)
* mno-embedded-data:                     MIPS Options.       (line  493)
* mno-ep:                                V850 Options.       (line   16)
* mno-epilogue-cfi:                      ARC Options.        (line  158)
* mno-epsilon:                           MMIX Options.       (line   15)
* mno-eva:                               MIPS Options.       (line  401)
* mno-explicit-relocs:                   DEC Alpha Options.  (line  176)
* mno-explicit-relocs <1>:               MIPS Options.       (line  537)
* mno-exr:                               H8/300 Options.     (line   33)
* mno-extern-sdata:                      MIPS Options.       (line  456)
* mno-fancy-math-387:                    x86 Options.        (line  364)
* mno-fast-sw-div:                       Nios II Options.    (line   82)
* mno-faster-structs:                    SPARC Options.      (line   91)
* mno-fix:                               DEC Alpha Options.  (line  163)
* mno-fix-24k:                           MIPS Options.       (line  610)
* mno-fix-cortex-a53-835769:             AArch64 Options.    (line   67)
* mno-fix-cortex-a53-843419:             AArch64 Options.    (line   74)
* mno-fix-r10000:                        MIPS Options.       (line  632)
* mno-fix-r4000:                         MIPS Options.       (line  616)
* mno-fix-r4400:                         MIPS Options.       (line  626)
* mno-flat:                              SPARC Options.      (line   22)
* mno-float:                             MIPS Options.       (line  272)
* mno-float32:                           PDP-11 Options.     (line   48)
* mno-float64:                           PDP-11 Options.     (line   52)
* mno-flush-func:                        M32R/D Options.     (line   98)
* mno-flush-trap:                        M32R/D Options.     (line   90)
* mno-fmaf:                              SPARC Options.      (line  237)
* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
                                                             (line  313)
* mno-fp-regs:                           DEC Alpha Options.  (line   25)
* mno-fp-ret-in-387:                     x86 Options.        (line  354)
* mno-fprnd:                             RS/6000 and PowerPC Options.
                                                             (line   27)
* mno-fpu:                               SPARC Options.      (line   39)
* mno-fpu <1>:                           Visium Options.     (line   24)
* mno-fsca:                              SH Options.         (line  489)
* mno-fsrra:                             SH Options.         (line  498)
* mno-fused-madd:                        IA-64 Options.      (line   88)
* mno-fused-madd <1>:                    MIPS Options.       (line  593)
* mno-fused-madd <2>:                    RS/6000 and PowerPC Options.
                                                             (line  457)
* mno-fused-madd <3>:                    S/390 and zSeries Options.
                                                             (line  135)
* mno-fused-madd <4>:                    SH Options.         (line  480)
* mno-fused-madd <5>:                    Xtensa Options.     (line   19)
* mno-gnu-as:                            IA-64 Options.      (line   18)
* mno-gnu-ld:                            IA-64 Options.      (line   23)
* mno-gotplt:                            CRIS Options.       (line   81)
* mno-gpopt:                             MIPS Options.       (line  478)
* mno-gpopt <1>:                         Nios II Options.    (line   16)
* mno-hard-dfp:                          RS/6000 and PowerPC Options.
                                                             (line   27)
* mno-hard-dfp <1>:                      S/390 and zSeries Options.
                                                             (line   20)
* mno-hardlit:                           MCore Options.      (line   10)
* mno-hw-div:                            Nios II Options.    (line   91)
* mno-hw-mul:                            Nios II Options.    (line   91)
* mno-hw-mulx:                           Nios II Options.    (line   91)
* mno-id-shared-library:                 Blackfin Options.   (line   87)
* mno-ieee:                              SH Options.         (line  186)
* mno-ieee-fp:                           x86 Options.        (line  336)
* mno-imadd:                             MIPS Options.       (line  586)
* mno-inline-float-divide:               IA-64 Options.      (line   62)
* mno-inline-int-divide:                 IA-64 Options.      (line   73)
* mno-inline-sqrt:                       IA-64 Options.      (line   84)
* mno-int16:                             PDP-11 Options.     (line   44)
* mno-int32:                             PDP-11 Options.     (line   40)
* mno-interlink-compressed:              MIPS Options.       (line  133)
* mno-interlink-mips16:                  MIPS Options.       (line  145)
* mno-interrupts:                        AVR Options.        (line  181)
* mno-isel:                              RS/6000 and PowerPC Options.
                                                             (line  194)
* mno-knuthdiv:                          MMIX Options.       (line   32)
* mno-leaf-id-shared-library:            Blackfin Options.   (line   97)
* mno-libfuncs:                          MMIX Options.       (line   10)
* mno-llsc:                              MIPS Options.       (line  337)
* mno-local-sdata:                       MIPS Options.       (line  444)
* mno-long-calls:                        ARM Options.        (line  195)
* mno-long-calls <1>:                    Blackfin Options.   (line  120)
* mno-long-calls <2>:                    HPPA Options.       (line  129)
* mno-long-calls <3>:                    MIPS Options.       (line  572)
* mno-long-calls <4>:                    V850 Options.       (line   10)
* mno-long-jumps:                        V850 Options.       (line  108)
* mno-longcall:                          RS/6000 and PowerPC Options.
                                                             (line  781)
* mno-longcalls:                         Xtensa Options.     (line   72)
* mno-low-64k:                           Blackfin Options.   (line   73)
* mno-lsim:                              FR30 Options.       (line   14)
* mno-lsim <1>:                          MCore Options.      (line   46)
* mno-mad:                               MIPS Options.       (line  581)
* mno-max:                               DEC Alpha Options.  (line  163)
* mno-mcount-ra-address:                 MIPS Options.       (line  810)
* mno-mcu:                               MIPS Options.       (line  397)
* mno-mdmx:                              MIPS Options.       (line  374)
* mno-media:                             FRV Options.        (line   60)
* mno-memcpy:                            MIPS Options.       (line  566)
* mno-mfcrf:                             RS/6000 and PowerPC Options.
                                                             (line   27)
* mno-mfpgpr:                            RS/6000 and PowerPC Options.
                                                             (line   27)
* mno-millicode:                         ARC Options.        (line  255)
* mno-mips16:                            MIPS Options.       (line  118)
* mno-mips3d:                            MIPS Options.       (line  380)
* mno-mmicromips:                        MIPS Options.       (line  385)
* mno-mpy:                               ARC Options.        (line   48)
* mno-mt:                                MIPS Options.       (line  393)
* mno-mul-bug-workaround:                CRIS Options.       (line   32)
* mno-muladd:                            FRV Options.        (line   68)
* mno-mulhw:                             RS/6000 and PowerPC Options.
                                                             (line  466)
* mno-mult-bug:                          MN10300 Options.    (line   13)
* mno-multi-cond-exec:                   FRV Options.        (line  223)
* mno-multiple:                          RS/6000 and PowerPC Options.
                                                             (line  416)
* mno-mvcle:                             S/390 and zSeries Options.
                                                             (line  104)
* mno-nested-cond-exec:                  FRV Options.        (line  237)
* mno-odd-spreg:                         MIPS Options.       (line  291)
* mno-omit-leaf-frame-pointer:           AArch64 Options.    (line   54)
* mno-optimize-membar:                   FRV Options.        (line  249)
* mno-opts:                              MeP Options.        (line   93)
* mno-pack:                              FRV Options.        (line  151)
* mno-packed-stack:                      S/390 and zSeries Options.
                                                             (line   54)
* mno-paired:                            RS/6000 and PowerPC Options.
                                                             (line  208)
* mno-paired-single:                     MIPS Options.       (line  368)
* mno-perf-ext:                          NDS32 Options.      (line   30)
* mno-pic:                               IA-64 Options.      (line   26)
* mno-pid:                               RX Options.         (line  117)
* mno-plt:                               MIPS Options.       (line  217)
* mno-popc:                              SPARC Options.      (line  230)
* mno-popcntb:                           RS/6000 and PowerPC Options.
                                                             (line   27)
* mno-popcntd:                           RS/6000 and PowerPC Options.
                                                             (line   27)
* mno-postinc:                           Adapteva Epiphany Options.
                                                             (line  109)
* mno-postmodify:                        Adapteva Epiphany Options.
                                                             (line  109)
* mno-power8-fusion:                     RS/6000 and PowerPC Options.
                                                             (line  235)
* mno-power8-vector:                     RS/6000 and PowerPC Options.
                                                             (line  241)
* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
                                                             (line   27)
* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
                                                             (line   27)
* mno-powerpc64:                         RS/6000 and PowerPC Options.
                                                             (line   27)
* mno-prolog-function:                   V850 Options.       (line   23)
* mno-prologue-epilogue:                 CRIS Options.       (line   71)
* mno-prototype:                         RS/6000 and PowerPC Options.
                                                             (line  670)
* mno-push-args:                         x86 Options.        (line  803)
* mno-quad-memory:                       RS/6000 and PowerPC Options.
                                                             (line  248)
* mno-quad-memory-atomic:                RS/6000 and PowerPC Options.
                                                             (line  254)
* mno-red-zone:                          x86 Options.        (line  971)
* mno-register-names:                    IA-64 Options.      (line   37)
* mno-regnames:                          RS/6000 and PowerPC Options.
                                                             (line  775)
* mno-relax:                             V850 Options.       (line  103)
* mno-relax-immediate:                   MCore Options.      (line   19)
* mno-relocatable:                       RS/6000 and PowerPC Options.
                                                             (line  496)
* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
                                                             (line  507)
* mno-renesas:                           SH Options.         (line  176)
* mno-round-nearest:                     Adapteva Epiphany Options.
                                                             (line   51)
* mno-rtd:                               M680x0 Options.     (line  258)
* mno-scc:                               FRV Options.        (line  180)
* mno-sched-ar-data-spec:                IA-64 Options.      (line  134)
* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  155)
* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
* mno-sched-br-in-data-spec:             IA-64 Options.      (line  148)
* mno-sched-control-spec:                IA-64 Options.      (line  140)
* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  182)
* mno-sched-in-control-spec:             IA-64 Options.      (line  162)
* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  175)
* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  168)
* mno-sched-prolog:                      ARM Options.        (line   32)
* mno-sdata:                             ARC Options.        (line  174)
* mno-sdata <1>:                         IA-64 Options.      (line   42)
* mno-sdata <2>:                         RS/6000 and PowerPC Options.
                                                             (line  756)
* mno-sep-data:                          Blackfin Options.   (line  115)
* mno-serialize-volatile:                Xtensa Options.     (line   35)
* mno-short:                             M680x0 Options.     (line  222)
* mno-side-effects:                      CRIS Options.       (line   46)
* mno-sim:                               RX Options.         (line   71)
* mno-single-exit:                       MMIX Options.       (line   65)
* mno-slow-bytes:                        MCore Options.      (line   35)
* mno-small-exec:                        S/390 and zSeries Options.
                                                             (line   79)
* mno-smartmips:                         MIPS Options.       (line  364)
* mno-soft-cmpsf:                        Adapteva Epiphany Options.
                                                             (line   29)
* mno-soft-float:                        DEC Alpha Options.  (line   10)
* mno-space-regs:                        HPPA Options.       (line   38)
* mno-spe:                               RS/6000 and PowerPC Options.
                                                             (line  203)
* mno-specld-anomaly:                    Blackfin Options.   (line   55)
* mno-split-addresses:                   MIPS Options.       (line  531)
* mno-stack-align:                       CRIS Options.       (line   55)
* mno-stack-bias:                        SPARC Options.      (line  313)
* mno-strict-align:                      M680x0 Options.     (line  283)
* mno-strict-align <1>:                  RS/6000 and PowerPC Options.
                                                             (line  491)
* mno-string:                            RS/6000 and PowerPC Options.
                                                             (line  427)
* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
                                                             (line  313)
* mno-sym32:                             MIPS Options.       (line  429)
* mno-target-align:                      Xtensa Options.     (line   59)
* mno-text-section-literals:             Xtensa Options.     (line   47)
* mno-tls-markers:                       RS/6000 and PowerPC Options.
                                                             (line  813)
* mno-toc:                               RS/6000 and PowerPC Options.
                                                             (line  516)
* mno-toplevel-symbols:                  MMIX Options.       (line   39)
* mno-tpf-trace:                         S/390 and zSeries Options.
                                                             (line  129)
* mno-unaligned-access:                  ARM Options.        (line  326)
* mno-unaligned-doubles:                 SPARC Options.      (line   73)
* mno-uninit-const-in-rodata:            MIPS Options.       (line  501)
* mno-update:                            RS/6000 and PowerPC Options.
                                                             (line  438)
* mno-upper-regs:                        RS/6000 and PowerPC Options.
                                                             (line  276)
* mno-upper-regs-df:                     RS/6000 and PowerPC Options.
                                                             (line  260)
* mno-upper-regs-sf:                     RS/6000 and PowerPC Options.
                                                             (line  268)
* mno-user-mode:                         SPARC Options.      (line   85)
* mno-usermode:                          SH Options.         (line  295)
* mno-v3push:                            NDS32 Options.      (line   36)
* mno-v8plus:                            SPARC Options.      (line  194)
* mno-vect-double:                       Adapteva Epiphany Options.
                                                             (line  115)
* mno-virt:                              MIPS Options.       (line  405)
* mno-vis:                               SPARC Options.      (line  201)
* mno-vis2:                              SPARC Options.      (line  207)
* mno-vis3:                              SPARC Options.      (line  215)
* mno-vliw-branch:                       FRV Options.        (line  208)
* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
* mno-volatile-cache:                    ARC Options.        (line  188)
* mno-vrsave:                            RS/6000 and PowerPC Options.
                                                             (line  173)
* mno-vsx:                               RS/6000 and PowerPC Options.
                                                             (line  217)
* mno-warn-multiple-fast-interrupts:     RX Options.         (line  143)
* mno-wide-bitfields:                    MCore Options.      (line   23)
* mno-xgot:                              M680x0 Options.     (line  315)
* mno-xgot <1>:                          MIPS Options.       (line  227)
* mno-xl-compat:                         RS/6000 and PowerPC Options.
                                                             (line  348)
* mno-xpa:                               MIPS Options.       (line  410)
* mno-zdcbranch:                         SH Options.         (line  465)
* mno-zero-extend:                       MMIX Options.       (line   26)
* mnobitfield:                           M680x0 Options.     (line  227)
* mnoliw:                                MN10300 Options.    (line   59)
* mnomacsave:                            SH Options.         (line  181)
* mnop-fun-dllimport:                    x86 Windows Options.
                                                             (line   22)
* mnop-mcount:                           x86 Options.        (line  911)
* mnops:                                 Adapteva Epiphany Options.
                                                             (line   26)
* mnorm:                                 ARC Options.        (line   58)
* mnosetlb:                              MN10300 Options.    (line   69)
* mnosplit-lohi:                         Adapteva Epiphany Options.
                                                             (line  109)
* modd-spreg:                            MIPS Options.       (line  291)
* momit-leaf-frame-pointer:              AArch64 Options.    (line   54)
* momit-leaf-frame-pointer <1>:          Blackfin Options.   (line   43)
* momit-leaf-frame-pointer <2>:          x86 Options.        (line  875)
* mone-byte-bool:                        Darwin Options.     (line   90)
* moptimize-membar:                      FRV Options.        (line  244)
* MP:                                    Preprocessor Options.
                                                             (line  239)
* mpa-risc-1-0:                          HPPA Options.       (line   19)
* mpa-risc-1-1:                          HPPA Options.       (line   19)
* mpa-risc-2-0:                          HPPA Options.       (line   19)
* mpack:                                 FRV Options.        (line  147)
* mpacked-stack:                         S/390 and zSeries Options.
                                                             (line   54)
* mpadstruct:                            SH Options.         (line  210)
* mpaired:                               RS/6000 and PowerPC Options.
                                                             (line  208)
* mpaired-single:                        MIPS Options.       (line  368)
* mpc32:                                 x86 Options.        (line  499)
* mpc64:                                 x86 Options.        (line  499)
* mpc80:                                 x86 Options.        (line  499)
* mpclmul:                               x86 Options.        (line  592)
* mpcrel:                                M680x0 Options.     (line  275)
* mpdebug:                               CRIS Options.       (line   36)
* mpe:                                   RS/6000 and PowerPC Options.
                                                             (line  367)
* mpe-aligned-commons:                   x86 Windows Options.
                                                             (line   59)
* mperf-ext:                             NDS32 Options.      (line   27)
* mpic-data-is-text-relative:            ARM Options.        (line  232)
* mpic-register:                         ARM Options.        (line  225)
* mpid:                                  RX Options.         (line  117)
* mplt:                                  MIPS Options.       (line  217)
* mpointer-size=SIZE:                    VMS Options.        (line   20)
* mpointers-to-nested-functions:         RS/6000 and PowerPC Options.
                                                             (line  918)
* mpoke-function-name:                   ARM Options.        (line  238)
* mpopc:                                 SPARC Options.      (line  230)
* mpopcnt:                               x86 Options.        (line  604)
* mpopcntb:                              RS/6000 and PowerPC Options.
                                                             (line   27)
* mpopcntd:                              RS/6000 and PowerPC Options.
                                                             (line   27)
* mportable-runtime:                     HPPA Options.       (line   64)
* mpower8-fusion:                        RS/6000 and PowerPC Options.
                                                             (line  235)
* mpower8-vector:                        RS/6000 and PowerPC Options.
                                                             (line  241)
* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
                                                             (line   27)
* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
                                                             (line   27)
* mpowerpc64:                            RS/6000 and PowerPC Options.
                                                             (line   27)
* mprefer-avx128:                        x86 Options.        (line  680)
* mprefer-short-insn-regs:               Adapteva Epiphany Options.
                                                             (line   13)
* mprefergot:                            SH Options.         (line  289)
* mpreferred-stack-boundary:             x86 Options.        (line  529)
* mprefetchwt1:                          x86 Options.        (line  600)
* mpretend-cmove:                        SH Options.         (line  507)
* mprint-tune-info:                      ARM Options.        (line  363)
* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
                                                             (line  545)
* mprolog-function:                      V850 Options.       (line   23)
* mprologue-epilogue:                    CRIS Options.       (line   71)
* mprototype:                            RS/6000 and PowerPC Options.
                                                             (line  670)
* mpt-fixed:                             SH Options.         (line  428)
* mpush-args:                            x86 Options.        (line  803)
* MQ:                                    Preprocessor Options.
                                                             (line  266)
* mq-class:                              ARC Options.        (line  269)
* mquad-memory:                          RS/6000 and PowerPC Options.
                                                             (line  248)
* mquad-memory-atomic:                   RS/6000 and PowerPC Options.
                                                             (line  254)
* mr10k-cache-barrier:                   MIPS Options.       (line  673)
* mRcq:                                  ARC Options.        (line  273)
* mRcw:                                  ARC Options.        (line  277)
* mrdrnd:                                x86 Options.        (line  595)
* mrecip:                                RS/6000 and PowerPC Options.
                                                             (line  825)
* mrecip <1>:                            x86 Options.        (line  713)
* mrecip-precision:                      RS/6000 and PowerPC Options.
                                                             (line  882)
* mrecip=opt:                            RS/6000 and PowerPC Options.
                                                             (line  838)
* mrecip=opt <1>:                        x86 Options.        (line  735)
* mrecord-mcount:                        x86 Options.        (line  905)
* mreduced-regs:                         NDS32 Options.      (line   15)
* mregister-names:                       IA-64 Options.      (line   37)
* mregnames:                             RS/6000 and PowerPC Options.
                                                             (line  775)
* mregparm:                              x86 Options.        (line  466)
* mrelax:                                AVR Options.        (line  185)
* mrelax <1>:                            H8/300 Options.     (line    9)
* mrelax <2>:                            MN10300 Options.    (line   46)
* mrelax <3>:                            MSP430 Options.     (line   50)
* mrelax <4>:                            NDS32 Options.      (line   72)
* mrelax <5>:                            RX Options.         (line   95)
* mrelax <6>:                            SH Options.         (line  158)
* mrelax <7>:                            V850 Options.       (line  103)
* mrelax-immediate:                      MCore Options.      (line   19)
* mrelax-pic-calls:                      MIPS Options.       (line  797)
* mrelocatable:                          RS/6000 and PowerPC Options.
                                                             (line  496)
* mrelocatable-lib:                      RS/6000 and PowerPC Options.
                                                             (line  507)
* mrenesas:                              SH Options.         (line  173)
* mrepeat:                               MeP Options.        (line   96)
* mrestrict-it:                          ARM Options.        (line  357)
* mreturn-pointer-on-d0:                 MN10300 Options.    (line   36)
* mrh850-abi:                            V850 Options.       (line  127)
* mrmw:                                  AVR Options.        (line  199)
* mrtd:                                  M680x0 Options.     (line  236)
* mrtd <1>:                              x86 Options.        (line  442)
* mrtd <2>:                              Function Attributes.
                                                             (line  215)
* mrtm:                                  x86 Options.        (line  614)
* mrtp:                                  VxWorks Options.    (line   11)
* mrtsc:                                 ARC Options.        (line  109)
* ms:                                    H8/300 Options.     (line   17)
* ms <1>:                                MeP Options.        (line  100)
* ms2600:                                H8/300 Options.     (line   24)
* msafe-dma:                             SPU Options.        (line   18)
* msafe-hints:                           SPU Options.        (line  112)
* msahf:                                 x86 Options.        (line  693)
* msatur:                                MeP Options.        (line  105)
* msave-acc-in-interrupts:               RX Options.         (line  109)
* msave-toc-indirect:                    RS/6000 and PowerPC Options.
                                                             (line  930)
* mscc:                                  FRV Options.        (line  173)
* msched-ar-data-spec:                   IA-64 Options.      (line  134)
* msched-ar-in-data-spec:                IA-64 Options.      (line  155)
* msched-br-data-spec:                   IA-64 Options.      (line  128)
* msched-br-in-data-spec:                IA-64 Options.      (line  148)
* msched-control-spec:                   IA-64 Options.      (line  140)
* msched-costly-dep:                     RS/6000 and PowerPC Options.
                                                             (line  552)
* msched-count-spec-in-critical-path:    IA-64 Options.      (line  182)
* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  198)
* msched-in-control-spec:                IA-64 Options.      (line  162)
* msched-max-memory-insns:               IA-64 Options.      (line  207)
* msched-max-memory-insns-hard-limit:    IA-64 Options.      (line  213)
* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  175)
* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  168)
* msched-spec-ldc:                       IA-64 Options.      (line  187)
* msched-spec-ldc <1>:                   IA-64 Options.      (line  190)
* msched-stop-bits-after-every-cycle:    IA-64 Options.      (line  194)
* mschedule:                             HPPA Options.       (line   71)
* mscore5:                               Score Options.      (line   25)
* mscore5u:                              Score Options.      (line   28)
* mscore7:                               Score Options.      (line   31)
* mscore7d:                              Score Options.      (line   35)
* msda:                                  V850 Options.       (line   40)
* msdata:                                IA-64 Options.      (line   42)
* msdata <1>:                            RS/6000 and PowerPC Options.
                                                             (line  743)
* msdata=all:                            C6X Options.        (line   30)
* msdata=data:                           RS/6000 and PowerPC Options.
                                                             (line  748)
* msdata=default:                        C6X Options.        (line   22)
* msdata=default <1>:                    RS/6000 and PowerPC Options.
                                                             (line  743)
* msdata=eabi:                           RS/6000 and PowerPC Options.
                                                             (line  724)
* msdata=none:                           C6X Options.        (line   35)
* msdata=none <1>:                       M32R/D Options.     (line   40)
* msdata=none <2>:                       RS/6000 and PowerPC Options.
                                                             (line  756)
* msdata=sdata:                          M32R/D Options.     (line   49)
* msdata=sysv:                           RS/6000 and PowerPC Options.
                                                             (line  734)
* msdata=use:                            M32R/D Options.     (line   53)
* msdram:                                Blackfin Options.   (line  171)
* msdram <1>:                            MeP Options.        (line  110)
* msecure-plt:                           RS/6000 and PowerPC Options.
                                                             (line  183)
* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  203)
* msep-data:                             Blackfin Options.   (line  109)
* mserialize-volatile:                   Xtensa Options.     (line   35)
* msetlb:                                MN10300 Options.    (line   64)
* msha:                                  x86 Options.        (line  590)
* mshared-library-id:                    Blackfin Options.   (line  102)
* mshort:                                M680x0 Options.     (line  216)
* msign-extend-enabled:                  LM32 Options.       (line   18)
* msim:                                  Blackfin Options.   (line   36)
* msim <1>:                              C6X Options.        (line   19)
* msim <2>:                              CR16 Options.       (line   18)
* msim <3>:                              M32C Options.       (line   13)
* msim <4>:                              MeP Options.        (line  114)
* msim <5>:                              MSP430 Options.     (line   39)
* msim <6>:                              RL78 Options.       (line    7)
* msim <7>:                              RS/6000 and PowerPC Options.
                                                             (line  680)
* msim <8>:                              RX Options.         (line   71)
* msim <9>:                              Visium Options.     (line   13)
* msim <10>:                             Xstormy16 Options.  (line    9)
* msimd:                                 ARC Options.        (line   71)
* msimnovec:                             MeP Options.        (line  117)
* msimple-fpu:                           RS/6000 and PowerPC Options.
                                                             (line  400)
* msingle-exit:                          MMIX Options.       (line   65)
* msingle-float:                         MIPS Options.       (line  282)
* msingle-float <1>:                     RS/6000 and PowerPC Options.
                                                             (line  396)
* msingle-pic-base:                      ARM Options.        (line  219)
* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
                                                             (line  539)
* msio:                                  HPPA Options.       (line   98)
* msize-level:                           ARC Options.        (line  281)
* mskip-rax-setup:                       x86 Options.        (line  918)
* mslow-bytes:                           MCore Options.      (line   35)
* mslow-flash-data:                      ARM Options.        (line  344)
* msmall:                                MSP430 Options.     (line   47)
* msmall-data:                           DEC Alpha Options.  (line  187)
* msmall-data-limit:                     RX Options.         (line   47)
* msmall-divides:                        MicroBlaze Options. (line   39)
* msmall-exec:                           S/390 and zSeries Options.
                                                             (line   79)
* msmall-mem:                            SPU Options.        (line   38)
* msmall-model:                          FR30 Options.       (line    9)
* msmall-text:                           DEC Alpha Options.  (line  205)
* msmall16:                              Adapteva Epiphany Options.
                                                             (line   66)
* msmallc:                               Nios II Options.    (line  268)
* msmartmips:                            MIPS Options.       (line  364)
* msoft-float:                           ARC Options.        (line   75)
* msoft-float <1>:                       DEC Alpha Options.  (line   10)
* msoft-float <2>:                       FRV Options.        (line   27)
* msoft-float <3>:                       HPPA Options.       (line   84)
* msoft-float <4>:                       M680x0 Options.     (line  200)
* msoft-float <5>:                       MicroBlaze Options. (line    7)
* msoft-float <6>:                       MIPS Options.       (line  268)
* msoft-float <7>:                       PDP-11 Options.     (line   13)
* msoft-float <8>:                       RS/6000 and PowerPC Options.
                                                             (line  390)
* msoft-float <9>:                       S/390 and zSeries Options.
                                                             (line   11)
* msoft-float <10>:                      SPARC Options.      (line   39)
* msoft-float <11>:                      V850 Options.       (line  113)
* msoft-float <12>:                      Visium Options.     (line   24)
* msoft-float <13>:                      x86 Options.        (line  341)
* msoft-quad-float:                      SPARC Options.      (line   59)
* msp8:                                  AVR Options.        (line  203)
* mspace:                                V850 Options.       (line   30)
* mspe:                                  RS/6000 and PowerPC Options.
                                                             (line  203)
* mspecld-anomaly:                       Blackfin Options.   (line   50)
* mspfp:                                 ARC Options.        (line   62)
* mspfp-compact:                         ARC Options.        (line   63)
* mspfp-fast:                            ARC Options.        (line   67)
* mspfp_compact:                         ARC Options.        (line  382)
* mspfp_fast:                            ARC Options.        (line  385)
* msplit-addresses:                      MIPS Options.       (line  531)
* msplit-vecmove-early:                  Adapteva Epiphany Options.
                                                             (line  126)
* msse:                                  x86 Options.        (line  576)
* msse2avx:                              x86 Options.        (line  893)
* msseregparm:                           x86 Options.        (line  477)
* mstack-align:                          CRIS Options.       (line   55)
* mstack-bias:                           SPARC Options.      (line  313)
* mstack-check-l1:                       Blackfin Options.   (line   76)
* mstack-guard:                          S/390 and zSeries Options.
                                                             (line  154)
* mstack-increment:                      MCore Options.      (line   50)
* mstack-offset:                         Adapteva Epiphany Options.
                                                             (line   37)
* mstack-protector-guard=GUARD:          x86 Options.        (line  942)
* mstack-size:                           S/390 and zSeries Options.
                                                             (line  154)
* mstackrealign:                         x86 Options.        (line  520)
* mstdmain:                              SPU Options.        (line   44)
* mstrict-align:                         AArch64 Options.    (line   49)
* mstrict-align <1>:                     M680x0 Options.     (line  283)
* mstrict-align <2>:                     RS/6000 and PowerPC Options.
                                                             (line  491)
* mstrict-X:                             AVR Options.        (line  216)
* mstring:                               RS/6000 and PowerPC Options.
                                                             (line  427)
* mstringop-strategy=ALG:                x86 Options.        (line  841)
* mstructure-size-boundary:              ARM Options.        (line  176)
* msv-mode:                              Visium Options.     (line   52)
* msvr4-struct-return:                   RS/6000 and PowerPC Options.
                                                             (line  632)
* mswap:                                 ARC Options.        (line   82)
* mswape:                                ARC Options.        (line  114)
* msym32:                                MIPS Options.       (line  429)
* msynci:                                MIPS Options.       (line  783)
* msys-crt0:                             Nios II Options.    (line  272)
* msys-lib:                              Nios II Options.    (line  276)
* MT:                                    Preprocessor Options.
                                                             (line  251)
* mtarget-align:                         Xtensa Options.     (line   59)
* mtas:                                  SH Options.         (line  280)
* mtbm:                                  x86 Options.        (line  615)
* mtda:                                  V850 Options.       (line   34)
* mtelephony:                            ARC Options.        (line  119)
* mtext-section-literals:                Xtensa Options.     (line   47)
* mtf:                                   MeP Options.        (line  121)
* mthread:                               x86 Windows Options.
                                                             (line   26)
* mthreads:                              x86 Options.        (line  818)
* mthumb:                                ARM Options.        (line  260)
* mthumb-interwork:                      ARM Options.        (line   24)
* mtiny-stack:                           AVR Options.        (line  230)
* mtiny=:                                MeP Options.        (line  125)
* mTLS:                                  FRV Options.        (line   90)
* mtls:                                  FRV Options.        (line   94)
* mtls-dialect:                          ARM Options.        (line  302)
* mtls-dialect <1>:                      x86 Options.        (line  796)
* mtls-dialect=desc:                     AArch64 Options.    (line   58)
* mtls-dialect=traditional:              AArch64 Options.    (line   62)
* mtls-direct-seg-refs:                  x86 Options.        (line  883)
* mtls-markers:                          RS/6000 and PowerPC Options.
                                                             (line  813)
* mtls-size:                             IA-64 Options.      (line  112)
* mtoc:                                  RS/6000 and PowerPC Options.
                                                             (line  516)
* mtomcat-stats:                         FRV Options.        (line  254)
* mtoplevel-symbols:                     MMIX Options.       (line   39)
* mtp:                                   ARM Options.        (line  294)
* mtpcs-frame:                           ARM Options.        (line  267)
* mtpcs-leaf-frame:                      ARM Options.        (line  273)
* mtpf-trace:                            S/390 and zSeries Options.
                                                             (line  129)
* mtrap-precision:                       DEC Alpha Options.  (line  109)
* mtune:                                 AArch64 Options.    (line   96)
* mtune <1>:                             ARC Options.        (line  302)
* mtune <2>:                             ARC Options.        (line  388)
* mtune <3>:                             ARM Options.        (line   87)
* mtune <4>:                             CRIS Options.       (line   17)
* mtune <5>:                             DEC Alpha Options.  (line  259)
* mtune <6>:                             IA-64 Options.      (line  116)
* mtune <7>:                             M680x0 Options.     (line   68)
* mtune <8>:                             MIPS Options.       (line   64)
* mtune <9>:                             MN10300 Options.    (line   30)
* mtune <10>:                            RS/6000 and PowerPC Options.
                                                             (line  113)
* mtune <11>:                            S/390 and zSeries Options.
                                                             (line  122)
* mtune <12>:                            SPARC Options.      (line  180)
* mtune <13>:                            Visium Options.     (line   47)
* mtune <14>:                            x86 Options.        (line  222)
* mtune-ctrl=FEATURE-LIST:               x86 Options.        (line  647)
* mucb-mcount:                           ARC Options.        (line  179)
* muclibc:                               GNU/Linux Options.  (line   13)
* muls:                                  Score Options.      (line   18)
* multcost:                              ARC Options.        (line  393)
* multcost=NUMBER:                       SH Options.         (line  302)
* multilib-library-pic:                  FRV Options.        (line  110)
* multiply-enabled:                      LM32 Options.       (line   15)
* multiply_defined:                      Darwin Options.     (line  196)
* multiply_defined_unused:               Darwin Options.     (line  196)
* multi_module:                          Darwin Options.     (line  196)
* munalign-prob-threshold:               ARC Options.        (line  330)
* munaligned-access:                     ARM Options.        (line  326)
* munaligned-doubles:                    SPARC Options.      (line   73)
* municode:                              x86 Windows Options.
                                                             (line   30)
* muninit-const-in-rodata:               MIPS Options.       (line  501)
* munix:                                 VAX Options.        (line    9)
* munix-asm:                             PDP-11 Options.     (line   68)
* munsafe-dma:                           SPU Options.        (line   18)
* mupdate:                               RS/6000 and PowerPC Options.
                                                             (line  438)
* mupper-regs:                           RS/6000 and PowerPC Options.
                                                             (line  276)
* mupper-regs-df:                        RS/6000 and PowerPC Options.
                                                             (line  260)
* mupper-regs-sf:                        RS/6000 and PowerPC Options.
                                                             (line  268)
* muser-enabled:                         LM32 Options.       (line   21)
* muser-mode:                            SPARC Options.      (line   85)
* muser-mode <1>:                        Visium Options.     (line   57)
* musermode:                             SH Options.         (line  295)
* mv3push:                               NDS32 Options.      (line   33)
* mv850:                                 V850 Options.       (line   49)
* mv850e:                                V850 Options.       (line   79)
* mv850e1:                               V850 Options.       (line   70)
* mv850e2:                               V850 Options.       (line   66)
* mv850e2v3:                             V850 Options.       (line   61)
* mv850e2v4:                             V850 Options.       (line   57)
* mv850e3v5:                             V850 Options.       (line   52)
* mv850es:                               V850 Options.       (line   75)
* mv8plus:                               SPARC Options.      (line  194)
* mveclibabi:                            RS/6000 and PowerPC Options.
                                                             (line  891)
* mveclibabi <1>:                        x86 Options.        (line  764)
* mvect8-ret-in-mem:                     x86 Options.        (line  487)
* mvirt:                                 MIPS Options.       (line  405)
* mvis:                                  SPARC Options.      (line  201)
* mvis2:                                 SPARC Options.      (line  207)
* mvis3:                                 SPARC Options.      (line  215)
* mvliw-branch:                          FRV Options.        (line  201)
* mvms-return-codes:                     VMS Options.        (line    9)
* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
* mvolatile-cache:                       ARC Options.        (line  184)
* mvr4130-align:                         MIPS Options.       (line  772)
* mvrsave:                               RS/6000 and PowerPC Options.
                                                             (line  173)
* mvsx:                                  RS/6000 and PowerPC Options.
                                                             (line  217)
* mvxworks:                              RS/6000 and PowerPC Options.
                                                             (line  701)
* mvzeroupper:                           x86 Options.        (line  674)
* mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
                                                             (line  179)
* mwarn-dynamicstack:                    S/390 and zSeries Options.
                                                             (line  148)
* mwarn-framesize:                       S/390 and zSeries Options.
                                                             (line  140)
* mwarn-multiple-fast-interrupts:        RX Options.         (line  143)
* mwarn-reloc:                           SPU Options.        (line   10)
* mwide-bitfields:                       MCore Options.      (line   23)
* mwin32:                                x86 Windows Options.
                                                             (line   35)
* mwindows:                              x86 Windows Options.
                                                             (line   41)
* mword-relocations:                     ARM Options.        (line  313)
* mx32:                                  x86 Options.        (line  954)
* mxgot:                                 M680x0 Options.     (line  315)
* mxgot <1>:                             MIPS Options.       (line  227)
* mxilinx-fpu:                           RS/6000 and PowerPC Options.
                                                             (line  411)
* mxl-barrel-shift:                      MicroBlaze Options. (line   33)
* mxl-compat:                            RS/6000 and PowerPC Options.
                                                             (line  348)
* mxl-float-convert:                     MicroBlaze Options. (line   51)
* mxl-float-sqrt:                        MicroBlaze Options. (line   54)
* mxl-gp-opt:                            MicroBlaze Options. (line   45)
* mxl-multiply-high:                     MicroBlaze Options. (line   48)
* mxl-pattern-compare:                   MicroBlaze Options. (line   36)
* mxl-reorder:                           MicroBlaze Options. (line   63)
* mxl-soft-div:                          MicroBlaze Options. (line   30)
* mxl-soft-mul:                          MicroBlaze Options. (line   27)
* mxl-stack-check:                       MicroBlaze Options. (line   42)
* mxop:                                  x86 Options.        (line  601)
* mxpa:                                  MIPS Options.       (line  410)
* mxsave:                                x86 Options.        (line  610)
* mxsavec:                               x86 Options.        (line  612)
* mxsaveopt:                             x86 Options.        (line  611)
* mxsaves:                               x86 Options.        (line  613)
* mxy:                                   ARC Options.        (line  124)
* myellowknife:                          RS/6000 and PowerPC Options.
                                                             (line  696)
* mzarch:                                S/390 and zSeries Options.
                                                             (line   94)
* mzda:                                  V850 Options.       (line   45)
* mzdcbranch:                            SH Options.         (line  465)
* mzero-extend:                          MMIX Options.       (line   26)
* no-canonical-prefixes:                 Overall Options.    (line  334)
* no-integrated-cpp:                     Preprocessor Options.
                                                             (line   34)
* no-sysroot-suffix:                     Directory Options.  (line  109)
* noall_load:                            Darwin Options.     (line  196)
* nocpp:                                 MIPS Options.       (line  605)
* nodefaultlibs:                         Link Options.       (line   68)
* nodevicelib:                           AVR Options.        (line  233)
* nofixprebinding:                       Darwin Options.     (line  196)
* nofpu:                                 RX Options.         (line   17)
* nolibdld:                              HPPA Options.       (line  181)
* nomultidefs:                           Darwin Options.     (line  196)
* non-static:                            VxWorks Options.    (line   16)
* noprebind:                             Darwin Options.     (line  196)
* noseglinkedit:                         Darwin Options.     (line  196)
* nostartfiles:                          Link Options.       (line   63)
* nostdinc:                              Preprocessor Options.
                                                             (line  401)
* nostdinc++:                            C++ Dialect Options.
                                                             (line  426)
* nostdinc++ <1>:                        Preprocessor Options.
                                                             (line  406)
* nostdlib:                              Link Options.       (line   80)
* no_dead_strip_inits_and_terms:         Darwin Options.     (line  196)
* o:                                     Overall Options.    (line  192)
* O:                                     Optimize Options.   (line   39)
* o <1>:                                 Preprocessor Options.
                                                             (line   87)
* O0:                                    Optimize Options.   (line  145)
* O1:                                    Optimize Options.   (line   39)
* O2:                                    Optimize Options.   (line   91)
* O3:                                    Optimize Options.   (line  136)
* Ofast:                                 Optimize Options.   (line  159)
* Og:                                    Optimize Options.   (line  165)
* Os:                                    Optimize Options.   (line  149)
* p:                                     Debugging Options.  (line  644)
* P:                                     Preprocessor Options.
                                                             (line  646)
* pagezero_size:                         Darwin Options.     (line  196)
* param:                                 Optimize Options.   (line 2434)
* pass-exit-codes:                       Overall Options.    (line  150)
* pedantic:                              Standards.          (line   16)
* pedantic <1>:                          Warning Options.    (line   80)
* pedantic <2>:                          Preprocessor Options.
                                                             (line  175)
* pedantic <3>:                          C Extensions.       (line    6)
* pedantic <4>:                          Alternate Keywords. (line   30)
* pedantic <5>:                          Warnings and Errors.
                                                             (line   25)
* pedantic-errors:                       Standards.          (line   16)
* pedantic-errors <1>:                   Warning Options.    (line  121)
* pedantic-errors <2>:                   Preprocessor Options.
                                                             (line  180)
* pedantic-errors <3>:                   Non-bugs.           (line  216)
* pedantic-errors <4>:                   Warnings and Errors.
                                                             (line   25)
* pg:                                    Debugging Options.  (line  650)
* pie:                                   Link Options.       (line  105)
* pipe:                                  Overall Options.    (line  215)
* prebind:                               Darwin Options.     (line  196)
* prebind_all_twolevel_modules:          Darwin Options.     (line  196)
* print-file-name:                       Debugging Options.  (line 1583)
* print-libgcc-file-name:                Debugging Options.  (line 1617)
* print-multi-directory:                 Debugging Options.  (line 1589)
* print-multi-lib:                       Debugging Options.  (line 1594)
* print-multi-os-directory:              Debugging Options.  (line 1601)
* print-multiarch:                       Debugging Options.  (line 1610)
* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
                                                             (line  217)
* print-prog-name:                       Debugging Options.  (line 1614)
* print-search-dirs:                     Debugging Options.  (line 1625)
* print-sysroot:                         Debugging Options.  (line 1638)
* print-sysroot-headers-suffix:          Debugging Options.  (line 1645)
* private_bundle:                        Darwin Options.     (line  196)
* pthread:                               RS/6000 and PowerPC Options.
                                                             (line  820)
* pthread <1>:                           Solaris 2 Options.  (line   36)
* pthreads:                              Solaris 2 Options.  (line   30)
* Q:                                     Debugging Options.  (line  656)
* Qn:                                    System V Options.   (line   18)
* Qy:                                    System V Options.   (line   14)
* rdynamic:                              Link Options.       (line  111)
* read_only_relocs:                      Darwin Options.     (line  196)
* remap:                                 Preprocessor Options.
                                                             (line  693)
* S:                                     Overall Options.    (line  175)
* S <1>:                                 Link Options.       (line   20)
* s:                                     Link Options.       (line  118)
* save-temps:                            Debugging Options.  (line 1490)
* save-temps=obj:                        Debugging Options.  (line 1516)
* sectalign:                             Darwin Options.     (line  196)
* sectcreate:                            Darwin Options.     (line  196)
* sectobjectsymbols:                     Darwin Options.     (line  196)
* sectobjectsymbols <1>:                 Darwin Options.     (line  196)
* sectorder:                             Darwin Options.     (line  196)
* seg1addr:                              Darwin Options.     (line  196)
* segaddr:                               Darwin Options.     (line  196)
* seglinkedit:                           Darwin Options.     (line  196)
* segprot:                               Darwin Options.     (line  196)
* segs_read_only_addr:                   Darwin Options.     (line  196)
* segs_read_only_addr <1>:               Darwin Options.     (line  196)
* segs_read_write_addr:                  Darwin Options.     (line  196)
* segs_read_write_addr <1>:              Darwin Options.     (line  196)
* seg_addr_table:                        Darwin Options.     (line  196)
* seg_addr_table_filename:               Darwin Options.     (line  196)
* shared:                                Link Options.       (line  126)
* shared-libgcc:                         Link Options.       (line  134)
* short-calls:                           Adapteva Epiphany Options.
                                                             (line   61)
* sim:                                   CRIS Options.       (line   95)
* sim2:                                  CRIS Options.       (line  101)
* single_module:                         Darwin Options.     (line  196)
* specs:                                 Directory Options.  (line   86)
* static:                                Link Options.       (line  122)
* static <1>:                            Darwin Options.     (line  196)
* static <2>:                            HPPA Options.       (line  185)
* static-libasan:                        Link Options.       (line  169)
* static-libgcc:                         Link Options.       (line  134)
* static-liblsan:                        Link Options.       (line  185)
* static-libmpx:                         Link Options.       (line  202)
* static-libmpxwrappers:                 Link Options.       (line  211)
* static-libstdc++:                      Link Options.       (line  221)
* static-libtsan:                        Link Options.       (line  177)
* static-libubsan:                       Link Options.       (line  193)
* std:                                   Standards.          (line   16)
* std <1>:                               C Dialect Options.  (line   46)
* std <2>:                               Other Builtins.     (line   21)
* std <3>:                               Non-bugs.           (line  107)
* std=:                                  Preprocessor Options.
                                                             (line  340)
* sub_library:                           Darwin Options.     (line  196)
* sub_umbrella:                          Darwin Options.     (line  196)
* symbolic:                              Link Options.       (line  232)
* sysroot:                               Directory Options.  (line   94)
* T:                                     Link Options.       (line  238)
* target-help:                           Overall Options.    (line  230)
* target-help <1>:                       Preprocessor Options.
                                                             (line  698)
* threads:                               HPPA Options.       (line  198)
* time:                                  Debugging Options.  (line 1531)
* tno-android-cc:                        GNU/Linux Options.  (line   31)
* tno-android-ld:                        GNU/Linux Options.  (line   35)
* traditional:                           C Dialect Options.  (line  347)
* traditional <1>:                       Incompatibilities.  (line    6)
* traditional-cpp:                       C Dialect Options.  (line  347)
* traditional-cpp <1>:                   Preprocessor Options.
                                                             (line  676)
* trigraphs:                             C Dialect Options.  (line  342)
* trigraphs <1>:                         Preprocessor Options.
                                                             (line  680)
* twolevel_namespace:                    Darwin Options.     (line  196)
* U:                                     Preprocessor Options.
                                                             (line   69)
* u:                                     Link Options.       (line  270)
* umbrella:                              Darwin Options.     (line  196)
* undef:                                 Preprocessor Options.
                                                             (line   73)
* undefined:                             Darwin Options.     (line  196)
* unexported_symbols_list:               Darwin Options.     (line  196)
* v:                                     Overall Options.    (line  203)
* v <1>:                                 Preprocessor Options.
                                                             (line  702)
* version:                               Overall Options.    (line  338)
* version <1>:                           Preprocessor Options.
                                                             (line  714)
* w:                                     Warning Options.    (line   25)
* W:                                     Warning Options.    (line  181)
* W <1>:                                 Warning Options.    (line 1437)
* W <2>:                                 Warning Options.    (line 1533)
* w <1>:                                 Preprocessor Options.
                                                             (line  171)
* W <3>:                                 Incompatibilities.  (line   64)
* Wa:                                    Assembler Options.  (line    9)
* Wabi:                                  C++ Dialect Options.
                                                             (line  434)
* Wabi-tag:                              C++ Dialect Options.
                                                             (line  517)
* Waddr-space-convert:                   AVR Options.        (line  236)
* Waddress:                              Warning Options.    (line 1339)
* Waggregate-return:                     Warning Options.    (line 1372)
* Waggressive-loop-optimizations:        Warning Options.    (line 1377)
* Wall:                                  Warning Options.    (line  130)
* Wall <1>:                              Preprocessor Options.
                                                             (line   93)
* Wall <2>:                              Standard Libraries. (line    6)
* Warray-bounds:                         Warning Options.    (line  887)
* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
                                                             (line  171)
* Wattributes:                           Warning Options.    (line 1382)
* Wbad-function-cast:                    Warning Options.    (line 1149)
* Wbool-compare:                         Warning Options.    (line  903)
* Wbuiltin-macro-redefined:              Warning Options.    (line 1388)
* Wc++-compat:                           Warning Options.    (line 1169)
* Wc++11-compat:                         Warning Options.    (line 1174)
* Wc++14-compat:                         Warning Options.    (line 1180)
* Wc90-c99-compat:                       Warning Options.    (line 1154)
* Wc99-c11-compat:                       Warning Options.    (line 1161)
* Wcast-align:                           Warning Options.    (line 1200)
* Wcast-qual:                            Warning Options.    (line 1184)
* Wchar-subscripts:                      Warning Options.    (line  220)
* Wclobbered:                            Warning Options.    (line 1219)
* Wcomment:                              Warning Options.    (line  225)
* Wcomment <1>:                          Preprocessor Options.
                                                             (line  101)
* Wcomments:                             Preprocessor Options.
                                                             (line  101)
* Wconditionally-supported:              Warning Options.    (line 1223)
* Wconversion:                           Warning Options.    (line 1226)
* Wconversion-null:                      Warning Options.    (line 1244)
* Wctor-dtor-privacy:                    C++ Dialect Options.
                                                             (line  522)
* Wdate-time:                            Warning Options.    (line 1252)
* Wdeclaration-after-statement:          Warning Options.    (line 1062)
* Wdelete-incomplete:                    Warning Options.    (line 1257)
* Wdelete-non-virtual-dtor:              C++ Dialect Options.
                                                             (line  529)
* Wdeprecated:                           Warning Options.    (line 1510)
* Wdeprecated-declarations:              Warning Options.    (line 1514)
* Wdisabled-optimization:                Warning Options.    (line 1677)
* Wdiscarded-array-qualifiers:           Warning Options.    (line  918)
* Wdiscarded-qualifiers:                 Warning Options.    (line  912)
* Wdiv-by-zero:                          Warning Options.    (line  936)
* Wdouble-promotion:                     Warning Options.    (line  249)
* weak_reference_mismatches:             Darwin Options.     (line  196)
* Weffc++:                               C++ Dialect Options.
                                                             (line  609)
* Wempty-body:                           Warning Options.    (line 1264)
* Wendif-labels:                         Warning Options.    (line 1071)
* Wendif-labels <1>:                     Preprocessor Options.
                                                             (line  148)
* Wenum-compare:                         Warning Options.    (line 1268)
* Werror:                                Warning Options.    (line   28)
* Werror <1>:                            Preprocessor Options.
                                                             (line  161)
* Werror=:                               Warning Options.    (line   31)
* Wextra:                                Warning Options.    (line  181)
* Wextra <1>:                            Warning Options.    (line 1437)
* Wextra <2>:                            Warning Options.    (line 1533)
* Wfatal-errors:                         Warning Options.    (line   48)
* Wfloat-conversion:                     Warning Options.    (line 1298)
* Wfloat-equal:                          Warning Options.    (line  962)
* Wformat:                               Warning Options.    (line  268)
* Wformat <1>:                           Warning Options.    (line  293)
* Wformat <2>:                           Warning Options.    (line  842)
* Wformat <3>:                           Function Attributes.
                                                             (line  420)
* Wformat-contains-nul:                  Warning Options.    (line  302)
* Wformat-extra-args:                    Warning Options.    (line  306)
* Wformat-nonliteral:                    Warning Options.    (line  330)
* Wformat-nonliteral <1>:                Function Attributes.
                                                             (line  485)
* Wformat-security:                      Warning Options.    (line  335)
* Wformat-signedness:                    Warning Options.    (line  347)
* Wformat-y2k:                           Warning Options.    (line  352)
* Wformat-zero-length:                   Warning Options.    (line  320)
* Wformat=:                              Warning Options.    (line  268)
* Wformat=1:                             Warning Options.    (line  293)
* Wformat=2:                             Warning Options.    (line  325)
* Wframe-larger-than:                    Warning Options.    (line 1090)
* Wfree-nonheap-object:                  Warning Options.    (line 1099)
* whatsloaded:                           Darwin Options.     (line  196)
* whyload:                               Darwin Options.     (line  196)
* Wignored-qualifiers:                   Warning Options.    (line  392)
* Wimplicit:                             Warning Options.    (line  388)
* Wimplicit-function-declaration:        Warning Options.    (line  382)
* Wimplicit-int:                         Warning Options.    (line  378)
* Wincompatible-pointer-types:           Warning Options.    (line  924)
* Winherited-variadic-ctor:              Warning Options.    (line 1589)
* Winit-self:                            Warning Options.    (line  363)
* Winline:                               Warning Options.    (line 1594)
* Winline <1>:                           Inline.             (line   63)
* Wint-conversion:                       Warning Options.    (line  930)
* Wint-to-pointer-cast:                  Warning Options.    (line 1619)
* Winvalid-offsetof:                     Warning Options.    (line 1607)
* Winvalid-pch:                          Warning Options.    (line 1628)
* Wjump-misses-init:                     Warning Options.    (line 1274)
* Wl:                                    Link Options.       (line  262)
* Wlarger-than-LEN:                      Warning Options.    (line 1087)
* Wlarger-than=LEN:                      Warning Options.    (line 1087)
* Wliteral-suffix:                       C++ Dialect Options.
                                                             (line  536)
* Wlogical-not-parentheses:              Warning Options.    (line 1357)
* Wlogical-op:                           Warning Options.    (line 1352)
* Wlong-long:                            Warning Options.    (line 1632)
* Wmain:                                 Warning Options.    (line  403)
* Wmaybe-uninitialized:                  Warning Options.    (line  679)
* Wmemset-transposed-args:               Warning Options.    (line 1328)
* Wmissing-braces:                       Warning Options.    (line  410)
* Wmissing-declarations:                 Warning Options.    (line 1427)
* Wmissing-field-initializers:           Warning Options.    (line 1437)
* Wmissing-format-attribute:             Warning Options.    (line  842)
* Wmissing-include-dirs:                 Warning Options.    (line  421)
* Wmissing-parameter-type:               Warning Options.    (line 1409)
* Wmissing-prototypes:                   Warning Options.    (line 1417)
* Wmultichar:                            Warning Options.    (line 1461)
* Wnarrowing:                            C++ Dialect Options.
                                                             (line  557)
* Wnested-externs:                       Warning Options.    (line 1586)
* Wno-abi:                               C++ Dialect Options.
                                                             (line  434)
* Wno-address:                           Warning Options.    (line 1339)
* Wno-aggregate-return:                  Warning Options.    (line 1372)
* Wno-aggressive-loop-optimizations:     Warning Options.    (line 1377)
* Wno-all:                               Warning Options.    (line  130)
* Wno-array-bounds:                      Warning Options.    (line  887)
* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
                                                             (line  171)
* Wno-attributes:                        Warning Options.    (line 1382)
* Wno-bad-function-cast:                 Warning Options.    (line 1149)
* Wno-bool-compare:                      Warning Options.    (line  903)
* Wno-builtin-macro-redefined:           Warning Options.    (line 1388)
* Wno-c90-c99-compat:                    Warning Options.    (line 1154)
* Wno-c99-c11-compat:                    Warning Options.    (line 1161)
* Wno-cast-align:                        Warning Options.    (line 1200)
* Wno-cast-qual:                         Warning Options.    (line 1184)
* Wno-char-subscripts:                   Warning Options.    (line  220)
* Wno-clobbered:                         Warning Options.    (line 1219)
* Wno-comment:                           Warning Options.    (line  225)
* Wno-conditionally-supported:           Warning Options.    (line 1223)
* Wno-conversion:                        Warning Options.    (line 1226)
* Wno-conversion-null:                   Warning Options.    (line 1244)
* Wno-coverage-mismatch:                 Warning Options.    (line  230)
* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
                                                             (line  522)
* Wno-date-time:                         Warning Options.    (line 1252)
* Wno-declaration-after-statement:       Warning Options.    (line 1062)
* Wno-delete-incomplete:                 Warning Options.    (line 1257)
* Wno-delete-non-virtual-dtor:           C++ Dialect Options.
                                                             (line  529)
* Wno-deprecated:                        Warning Options.    (line 1510)
* Wno-deprecated-declarations:           Warning Options.    (line 1514)
* Wno-disabled-optimization:             Warning Options.    (line 1677)
* Wno-discarded-array-qualifiers:        Warning Options.    (line  918)
* Wno-discarded-qualifiers:              Warning Options.    (line  912)
* Wno-div-by-zero:                       Warning Options.    (line  936)
* Wno-double-promotion:                  Warning Options.    (line  249)
* Wno-effc++:                            C++ Dialect Options.
                                                             (line  609)
* Wno-empty-body:                        Warning Options.    (line 1264)
* Wno-endif-labels:                      Warning Options.    (line 1071)
* Wno-enum-compare:                      Warning Options.    (line 1268)
* Wno-error:                             Warning Options.    (line   28)
* Wno-error=:                            Warning Options.    (line   31)
* Wno-extra:                             Warning Options.    (line  181)
* Wno-extra <1>:                         Warning Options.    (line 1437)
* Wno-extra <2>:                         Warning Options.    (line 1533)
* Wno-fatal-errors:                      Warning Options.    (line   48)
* Wno-float-conversion:                  Warning Options.    (line 1298)
* Wno-float-equal:                       Warning Options.    (line  962)
* Wno-format:                            Warning Options.    (line  268)
* Wno-format <1>:                        Warning Options.    (line  842)
* Wno-format-contains-nul:               Warning Options.    (line  302)
* Wno-format-extra-args:                 Warning Options.    (line  306)
* Wno-format-nonliteral:                 Warning Options.    (line  330)
* Wno-format-security:                   Warning Options.    (line  335)
* Wno-format-signedness:                 Warning Options.    (line  347)
* Wno-format-y2k:                        Warning Options.    (line  352)
* Wno-format-zero-length:                Warning Options.    (line  320)
* Wno-free-nonheap-object:               Warning Options.    (line 1099)
* Wno-ignored-qualifiers:                Warning Options.    (line  392)
* Wno-implicit:                          Warning Options.    (line  388)
* Wno-implicit-function-declaration:     Warning Options.    (line  382)
* Wno-implicit-int:                      Warning Options.    (line  378)
* Wno-incompatible-pointer-types:        Warning Options.    (line  924)
* Wno-inherited-variadic-ctor:           Warning Options.    (line 1589)
* Wno-init-self:                         Warning Options.    (line  363)
* Wno-inline:                            Warning Options.    (line 1594)
* Wno-int-conversion:                    Warning Options.    (line  930)
* Wno-int-to-pointer-cast:               Warning Options.    (line 1619)
* Wno-invalid-offsetof:                  Warning Options.    (line 1607)
* Wno-invalid-pch:                       Warning Options.    (line 1628)
* Wno-jump-misses-init:                  Warning Options.    (line 1274)
* Wno-literal-suffix:                    C++ Dialect Options.
                                                             (line  536)
* Wno-logical-not-parentheses:           Warning Options.    (line 1357)
* Wno-logical-op:                        Warning Options.    (line 1352)
* Wno-long-long:                         Warning Options.    (line 1632)
* Wno-main:                              Warning Options.    (line  403)
* Wno-maybe-uninitialized:               Warning Options.    (line  679)
* Wno-memset-transposed-args:            Warning Options.    (line 1328)
* Wno-missing-braces:                    Warning Options.    (line  410)
* Wno-missing-declarations:              Warning Options.    (line 1427)
* Wno-missing-field-initializers:        Warning Options.    (line 1437)
* Wno-missing-format-attribute:          Warning Options.    (line  842)
* Wno-missing-include-dirs:              Warning Options.    (line  421)
* Wno-missing-parameter-type:            Warning Options.    (line 1409)
* Wno-missing-prototypes:                Warning Options.    (line 1417)
* Wno-multichar:                         Warning Options.    (line 1461)
* Wno-narrowing:                         C++ Dialect Options.
                                                             (line  557)
* Wno-nested-externs:                    Warning Options.    (line 1586)
* Wno-noexcept:                          C++ Dialect Options.
                                                             (line  570)
* Wno-non-template-friend:               C++ Dialect Options.
                                                             (line  644)
* Wno-non-virtual-dtor:                  C++ Dialect Options.
                                                             (line  576)
* Wno-nonnull:                           Warning Options.    (line  356)
* Wno-normalized:                        Warning Options.    (line 1467)
* Wno-odr:                               Warning Options.    (line 1523)
* Wno-old-style-cast:                    C++ Dialect Options.
                                                             (line  660)
* Wno-old-style-declaration:             Warning Options.    (line 1399)
* Wno-old-style-definition:              Warning Options.    (line 1405)
* Wno-overflow:                          Warning Options.    (line 1520)
* Wno-overlength-strings:                Warning Options.    (line 1697)
* Wno-overloaded-virtual:                C++ Dialect Options.
                                                             (line  666)
* Wno-override-init:                     Warning Options.    (line 1533)
* Wno-packed:                            Warning Options.    (line 1541)
* Wno-packed-bitfield-compat:            Warning Options.    (line 1558)
* Wno-padded:                            Warning Options.    (line 1575)
* Wno-parentheses:                       Warning Options.    (line  424)
* Wno-pedantic-ms-format:                Warning Options.    (line 1129)
* Wno-pmf-conversions:                   C++ Dialect Options.
                                                             (line  685)
* Wno-pmf-conversions <1>:               Bound member functions.
                                                             (line   35)
* Wno-pointer-arith:                     Warning Options.    (line 1135)
* Wno-pointer-sign:                      Warning Options.    (line 1686)
* Wno-pointer-to-int-cast:               Warning Options.    (line 1624)
* Wno-pragmas:                           Warning Options.    (line  729)
* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
                                                             (line  175)
* Wno-redundant-decls:                   Warning Options.    (line 1582)
* Wno-reorder:                           C++ Dialect Options.
                                                             (line  584)
* Wno-return-local-addr:                 Warning Options.    (line  519)
* Wno-return-type:                       Warning Options.    (line  523)
* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
                                                             (line  185)
* Wno-sequence-point:                    Warning Options.    (line  473)
* Wno-shadow:                            Warning Options.    (line 1075)
* Wno-shadow-ivar:                       Warning Options.    (line 1083)
* Wno-shift-count-negative:              Warning Options.    (line  537)
* Wno-shift-count-overflow:              Warning Options.    (line  541)
* Wno-sign-compare:                      Warning Options.    (line 1285)
* Wno-sign-conversion:                   Warning Options.    (line 1292)
* Wno-sign-promo:                        C++ Dialect Options.
                                                             (line  689)
* Wno-sized-deallocation:                Warning Options.    (line 1304)
* Wno-sizeof-array-argument:             Warning Options.    (line 1323)
* Wno-sizeof-pointer-memaccess:          Warning Options.    (line 1315)
* Wno-stack-protector:                   Warning Options.    (line 1692)
* Wno-strict-aliasing:                   Warning Options.    (line  734)
* Wno-strict-null-sentinel:              C++ Dialect Options.
                                                             (line  637)
* Wno-strict-overflow:                   Warning Options.    (line  773)
* Wno-strict-prototypes:                 Warning Options.    (line 1393)
* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
                                                             (line  197)
* Wno-suggest-attribute=:                Warning Options.    (line  822)
* Wno-suggest-attribute=const:           Warning Options.    (line  828)
* Wno-suggest-attribute=format:          Warning Options.    (line  842)
* Wno-suggest-attribute=noreturn:        Warning Options.    (line  828)
* Wno-suggest-attribute=pure:            Warning Options.    (line  828)
* Wno-suggest-final-methods:             Warning Options.    (line  872)
* Wno-suggest-final-types:               Warning Options.    (line  863)
* Wno-switch:                            Warning Options.    (line  545)
* Wno-switch-bool:                       Warning Options.    (line  565)
* Wno-switch-default:                    Warning Options.    (line  553)
* Wno-switch-enum:                       Warning Options.    (line  556)
* Wno-sync-nand:                         Warning Options.    (line  575)
* Wno-system-headers:                    Warning Options.    (line  941)
* Wno-traditional:                       Warning Options.    (line  977)
* Wno-traditional-conversion:            Warning Options.    (line 1054)
* Wno-trampolines:                       Warning Options.    (line  952)
* Wno-trigraphs:                         Warning Options.    (line  580)
* Wno-type-limits:                       Warning Options.    (line 1142)
* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
                                                             (line  205)
* Wno-undef:                             Warning Options.    (line 1068)
* Wno-uninitialized:                     Warning Options.    (line  657)
* Wno-unknown-pragmas:                   Warning Options.    (line  722)
* Wno-unsafe-loop-optimizations:         Warning Options.    (line 1123)
* Wno-unused:                            Warning Options.    (line  650)
* Wno-unused-but-set-parameter:          Warning Options.    (line  585)
* Wno-unused-but-set-variable:           Warning Options.    (line  594)
* Wno-unused-function:                   Warning Options.    (line  604)
* Wno-unused-label:                      Warning Options.    (line  609)
* Wno-unused-parameter:                  Warning Options.    (line  620)
* Wno-unused-result:                     Warning Options.    (line  627)
* Wno-unused-value:                      Warning Options.    (line  640)
* Wno-unused-variable:                   Warning Options.    (line  632)
* Wno-useless-cast:                      Warning Options.    (line 1261)
* Wno-varargs:                           Warning Options.    (line 1643)
* Wno-variadic-macros:                   Warning Options.    (line 1637)
* Wno-vector-operation-performance:      Warning Options.    (line 1648)
* Wno-virtual-move-assign:               Warning Options.    (line 1658)
* Wno-vla:                               Warning Options.    (line 1667)
* Wno-volatile-register-var:             Warning Options.    (line 1671)
* Wno-write-strings:                     Warning Options.    (line 1206)
* Wno-zero-as-null-pointer-constant:     Warning Options.    (line 1248)
* Wnoexcept:                             C++ Dialect Options.
                                                             (line  570)
* Wnon-template-friend:                  C++ Dialect Options.
                                                             (line  644)
* Wnon-virtual-dtor:                     C++ Dialect Options.
                                                             (line  576)
* Wnonnull:                              Warning Options.    (line  356)
* Wnormalized:                           Warning Options.    (line 1467)
* Wnormalized=:                          Warning Options.    (line 1467)
* Wodr:                                  Warning Options.    (line 1523)
* Wold-style-cast:                       C++ Dialect Options.
                                                             (line  660)
* Wold-style-declaration:                Warning Options.    (line 1399)
* Wold-style-definition:                 Warning Options.    (line 1405)
* Wopenm-simd:                           Warning Options.    (line 1528)
* Woverflow:                             Warning Options.    (line 1520)
* Woverlength-strings:                   Warning Options.    (line 1697)
* Woverloaded-virtual:                   C++ Dialect Options.
                                                             (line  666)
* Woverride-init:                        Warning Options.    (line 1533)
* Wp:                                    Preprocessor Options.
                                                             (line   14)
* Wpacked:                               Warning Options.    (line 1541)
* Wpacked-bitfield-compat:               Warning Options.    (line 1558)
* Wpadded:                               Warning Options.    (line 1575)
* Wparentheses:                          Warning Options.    (line  424)
* Wpedantic:                             Warning Options.    (line   80)
* Wpedantic-ms-format:                   Warning Options.    (line 1129)
* Wpmf-conversions:                      C++ Dialect Options.
                                                             (line  685)
* Wpointer-arith:                        Warning Options.    (line 1135)
* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
* Wpointer-sign:                         Warning Options.    (line 1686)
* Wpointer-to-int-cast:                  Warning Options.    (line 1624)
* Wpragmas:                              Warning Options.    (line  729)
* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
                                                             (line  175)
* wrapper:                               Overall Options.    (line  341)
* Wredundant-decls:                      Warning Options.    (line 1582)
* Wreorder:                              C++ Dialect Options.
                                                             (line  584)
* Wreturn-local-addr:                    Warning Options.    (line  519)
* Wreturn-type:                          Warning Options.    (line  523)
* Wselector:                             Objective-C and Objective-C++ Dialect Options.
                                                             (line  185)
* Wsequence-point:                       Warning Options.    (line  473)
* Wshadow:                               Warning Options.    (line 1075)
* Wshadow-ivar:                          Warning Options.    (line 1083)
* Wshift-count-negative:                 Warning Options.    (line  537)
* Wshift-count-overflow:                 Warning Options.    (line  541)
* Wsign-compare:                         Warning Options.    (line 1285)
* Wsign-conversion:                      Warning Options.    (line 1292)
* Wsign-promo:                           C++ Dialect Options.
                                                             (line  689)
* Wsized-deallocation:                   Warning Options.    (line 1304)
* Wsizeof-array-argument:                Warning Options.    (line 1323)
* Wsizeof-pointer-memaccess:             Warning Options.    (line 1315)
* Wstack-protector:                      Warning Options.    (line 1692)
* Wstack-usage:                          Warning Options.    (line 1103)
* Wstrict-aliasing:                      Warning Options.    (line  734)
* Wstrict-aliasing=n:                    Warning Options.    (line  741)
* Wstrict-null-sentinel:                 C++ Dialect Options.
                                                             (line  637)
* Wstrict-overflow:                      Warning Options.    (line  773)
* Wstrict-prototypes:                    Warning Options.    (line 1393)
* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
                                                             (line  197)
* Wsuggest-attribute=:                   Warning Options.    (line  822)
* Wsuggest-attribute=const:              Warning Options.    (line  828)
* Wsuggest-attribute=format:             Warning Options.    (line  842)
* Wsuggest-attribute=noreturn:           Warning Options.    (line  828)
* Wsuggest-attribute=pure:               Warning Options.    (line  828)
* Wsuggest-final-methods:                Warning Options.    (line  872)
* Wsuggest-final-types:                  Warning Options.    (line  863)
* Wswitch:                               Warning Options.    (line  545)
* Wswitch-bool:                          Warning Options.    (line  565)
* Wswitch-default:                       Warning Options.    (line  553)
* Wswitch-enum:                          Warning Options.    (line  556)
* Wsync-nand:                            Warning Options.    (line  575)
* Wsystem-headers:                       Warning Options.    (line  941)
* Wsystem-headers <1>:                   Preprocessor Options.
                                                             (line  165)
* Wtraditional:                          Warning Options.    (line  977)
* Wtraditional <1>:                      Preprocessor Options.
                                                             (line  118)
* Wtraditional-conversion:               Warning Options.    (line 1054)
* Wtrampolines:                          Warning Options.    (line  952)
* Wtrigraphs:                            Warning Options.    (line  580)
* Wtrigraphs <1>:                        Preprocessor Options.
                                                             (line  106)
* Wtype-limits:                          Warning Options.    (line 1142)
* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
                                                             (line  205)
* Wundef:                                Warning Options.    (line 1068)
* Wundef <1>:                            Preprocessor Options.
                                                             (line  124)
* Wuninitialized:                        Warning Options.    (line  657)
* Wunknown-pragmas:                      Warning Options.    (line  722)
* Wunsafe-loop-optimizations:            Warning Options.    (line 1123)
* Wunsuffixed-float-constants:           Warning Options.    (line 1712)
* Wunused:                               Warning Options.    (line  650)
* Wunused-but-set-parameter:             Warning Options.    (line  585)
* Wunused-but-set-variable:              Warning Options.    (line  594)
* Wunused-function:                      Warning Options.    (line  604)
* Wunused-label:                         Warning Options.    (line  609)
* Wunused-local-typedefs:                Warning Options.    (line  616)
* Wunused-macros:                        Preprocessor Options.
                                                             (line  129)
* Wunused-parameter:                     Warning Options.    (line  620)
* Wunused-result:                        Warning Options.    (line  627)
* Wunused-value:                         Warning Options.    (line  640)
* Wunused-variable:                      Warning Options.    (line  632)
* Wuseless-cast:                         Warning Options.    (line 1261)
* Wvarargs:                              Warning Options.    (line 1643)
* Wvariadic-macros:                      Warning Options.    (line 1637)
* Wvector-operation-performance:         Warning Options.    (line 1648)
* Wvirtual-move-assign:                  Warning Options.    (line 1658)
* Wvla:                                  Warning Options.    (line 1667)
* Wvolatile-register-var:                Warning Options.    (line 1671)
* Wwrite-strings:                        Warning Options.    (line 1206)
* Wzero-as-null-pointer-constant:        Warning Options.    (line 1248)
* x:                                     Overall Options.    (line  126)
* x <1>:                                 Preprocessor Options.
                                                             (line  324)
* Xassembler:                            Assembler Options.  (line   13)
* Xbind-lazy:                            VxWorks Options.    (line   26)
* Xbind-now:                             VxWorks Options.    (line   30)
* Xlinker:                               Link Options.       (line  244)
* Xpreprocessor:                         Preprocessor Options.
                                                             (line   25)
* Ym:                                    System V Options.   (line   26)
* YP:                                    System V Options.   (line   22)
* z:                                     Link Options.       (line  275)


File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top

Keyword Index
*************

 [index ]
* Menu:

* '!' in constraint:                     Multi-Alternative.  (line   33)
* '#' in constraint:                     Modifiers.          (line   68)
* '#pragma':                             Pragmas.            (line    6)
* #pragma implementation:                C++ Interface.      (line   36)
* '#pragma implementation', implied:     C++ Interface.      (line   43)
* #pragma interface:                     C++ Interface.      (line   17)
* '#pragma', reason for not using:       Function Attributes.
                                                             (line 2042)
* $:                                     Dollar Signs.       (line    6)
* '$' in constraint:                     Multi-Alternative.  (line   42)
* '%' in constraint:                     Modifiers.          (line   52)
* '%include':                            Spec Files.         (line   26)
* '%include_noerr':                      Spec Files.         (line   30)
* '%rename':                             Spec Files.         (line   34)
* '&' in constraint:                     Modifiers.          (line   25)
* ''':                                   Incompatibilities.  (line  116)
* '*' in constraint:                     Modifiers.          (line   73)
* *__builtin_assume_aligned:             Other Builtins.     (line  339)
* '+' in constraint:                     Modifiers.          (line   12)
* '-lgcc', use with '-nodefaultlibs':    Link Options.       (line   91)
* '-lgcc', use with '-nostdlib':         Link Options.       (line   91)
* '-march' feature modifiers:            AArch64 Options.    (line  133)
* '-mcpu' feature modifiers:             AArch64 Options.    (line  133)
* '-nodefaultlibs' and unresolved references: Link Options.  (line   91)
* '-nostdlib' and unresolved references: Link Options.       (line   91)
* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
                                                             (line  767)
* '//':                                  C++ Comments.       (line    6)
* '0' in constraint:                     Simple Constraints. (line  125)
* '<' in constraint:                     Simple Constraints. (line   47)
* '=' in constraint:                     Modifiers.          (line    8)
* '>' in constraint:                     Simple Constraints. (line   59)
* '?' in constraint:                     Multi-Alternative.  (line   27)
* '?:' extensions:                       Conditionals.       (line    6)
* '?:' side effect:                      Conditionals.       (line   20)
* '^' in constraint:                     Multi-Alternative.  (line   38)
* '_' in variables in macros:            Typeof.             (line   46)
* '_Accum' data type:                    Fixed-Point.        (line    6)
* '_Complex' keyword:                    Complex.            (line    6)
* '_Decimal128' data type:               Decimal Float.      (line    6)
* '_Decimal32' data type:                Decimal Float.      (line    6)
* '_Decimal64' data type:                Decimal Float.      (line    6)
* _Exit:                                 Other Builtins.     (line    6)
* _exit:                                 Other Builtins.     (line    6)
* '_Fract' data type:                    Fixed-Point.        (line    6)
* _HTM_FIRST_USER_ABORT_CODE:            S/390 System z Built-in Functions.
                                                             (line   44)
* '_Sat' data type:                      Fixed-Point.        (line    6)
* _xabort:                               x86 transactional memory intrinsics.
                                                             (line   57)
* _xbegin:                               x86 transactional memory intrinsics.
                                                             (line   19)
* _xend:                                 x86 transactional memory intrinsics.
                                                             (line   48)
* _xtest:                                x86 transactional memory intrinsics.
                                                             (line   53)
* __atomic_add_fetch:                    __atomic Builtins.  (line  153)
* __atomic_always_lock_free:             __atomic Builtins.  (line  230)
* __atomic_and_fetch:                    __atomic Builtins.  (line  157)
* __atomic_clear:                        __atomic Builtins.  (line  204)
* __atomic_compare_exchange:             __atomic Builtins.  (line  145)
* __atomic_compare_exchange_n:           __atomic Builtins.  (line  124)
* __atomic_exchange:                     __atomic Builtins.  (line  118)
* __atomic_exchange_n:                   __atomic Builtins.  (line  108)
* __atomic_fetch_add:                    __atomic Builtins.  (line  172)
* __atomic_fetch_and:                    __atomic Builtins.  (line  176)
* __atomic_fetch_nand:                   __atomic Builtins.  (line  182)
* __atomic_fetch_or:                     __atomic Builtins.  (line  180)
* __atomic_fetch_sub:                    __atomic Builtins.  (line  174)
* __atomic_fetch_xor:                    __atomic Builtins.  (line  178)
* __atomic_is_lock_free:                 __atomic Builtins.  (line  244)
* __atomic_load:                         __atomic Builtins.  (line   90)
* __atomic_load_n:                       __atomic Builtins.  (line   83)
* __atomic_nand_fetch:                   __atomic Builtins.  (line  163)
* __atomic_or_fetch:                     __atomic Builtins.  (line  161)
* __atomic_signal_fence:                 __atomic Builtins.  (line  223)
* __atomic_store:                        __atomic Builtins.  (line  103)
* __atomic_store_n:                      __atomic Builtins.  (line   95)
* __atomic_sub_fetch:                    __atomic Builtins.  (line  155)
* __atomic_test_and_set:                 __atomic Builtins.  (line  192)
* __atomic_thread_fence:                 __atomic Builtins.  (line  216)
* __atomic_xor_fetch:                    __atomic Builtins.  (line  159)
* __builtin_add_overflow:                Integer Overflow Builtins.
                                                             (line    9)
* __builtin_apply:                       Constructing Calls. (line   29)
* __builtin_apply_args:                  Constructing Calls. (line   19)
* __builtin_arc_aligned:                 ARC Built-in Functions.
                                                             (line   18)
* __builtin_arc_brk:                     ARC Built-in Functions.
                                                             (line   28)
* __builtin_arc_core_read:               ARC Built-in Functions.
                                                             (line   32)
* __builtin_arc_core_write:              ARC Built-in Functions.
                                                             (line   39)
* __builtin_arc_divaw:                   ARC Built-in Functions.
                                                             (line   46)
* __builtin_arc_flag:                    ARC Built-in Functions.
                                                             (line   53)
* __builtin_arc_lr:                      ARC Built-in Functions.
                                                             (line   57)
* __builtin_arc_mul64:                   ARC Built-in Functions.
                                                             (line   64)
* __builtin_arc_mulu64:                  ARC Built-in Functions.
                                                             (line   68)
* __builtin_arc_nop:                     ARC Built-in Functions.
                                                             (line   73)
* __builtin_arc_norm:                    ARC Built-in Functions.
                                                             (line   77)
* __builtin_arc_normw:                   ARC Built-in Functions.
                                                             (line   84)
* __builtin_arc_rtie:                    ARC Built-in Functions.
                                                             (line   91)
* __builtin_arc_sleep:                   ARC Built-in Functions.
                                                             (line   95)
* __builtin_arc_sr:                      ARC Built-in Functions.
                                                             (line   99)
* __builtin_arc_swap:                    ARC Built-in Functions.
                                                             (line  106)
* __builtin_arc_swi:                     ARC Built-in Functions.
                                                             (line  112)
* __builtin_arc_sync:                    ARC Built-in Functions.
                                                             (line  116)
* __builtin_arc_trap_s:                  ARC Built-in Functions.
                                                             (line  120)
* __builtin_arc_unimp_s:                 ARC Built-in Functions.
                                                             (line  124)
* __builtin_bswap16:                     Other Builtins.     (line  606)
* __builtin_bswap32:                     Other Builtins.     (line  610)
* __builtin_bswap64:                     Other Builtins.     (line  614)
* __builtin_call_with_static_chain:      Other Builtins.     (line    6)
* __builtin_call_with_static_chain <1>:  Other Builtins.     (line  154)
* __builtin_choose_expr:                 Other Builtins.     (line  165)
* __builtin_clrsb:                       Other Builtins.     (line  536)
* __builtin_clrsbl:                      Other Builtins.     (line  558)
* __builtin_clrsbll:                     Other Builtins.     (line  581)
* __builtin_clz:                         Other Builtins.     (line  528)
* __builtin_clzl:                        Other Builtins.     (line  550)
* __builtin_clzll:                       Other Builtins.     (line  573)
* __builtin_complex:                     Other Builtins.     (line  205)
* __builtin_constant_p:                  Other Builtins.     (line  214)
* __builtin_cpu_init:                    x86 Built-in Functions.
                                                             (line   62)
* __builtin_cpu_is:                      x86 Built-in Functions.
                                                             (line   90)
* __builtin_cpu_supports:                x86 Built-in Functions.
                                                             (line  162)
* __builtin_ctz:                         Other Builtins.     (line  532)
* __builtin_ctzl:                        Other Builtins.     (line  554)
* __builtin_ctzll:                       Other Builtins.     (line  577)
* __builtin_expect:                      Other Builtins.     (line  259)
* __builtin_extract_return_addr:         Return Address.     (line   35)
* __builtin_ffs:                         Other Builtins.     (line  524)
* __builtin_ffsl:                        Other Builtins.     (line  547)
* __builtin_ffsll:                       Other Builtins.     (line  569)
* __builtin_FILE:                        Other Builtins.     (line  368)
* __builtin_fpclassify:                  Other Builtins.     (line    6)
* __builtin_fpclassify <1>:              Other Builtins.     (line  438)
* __builtin_frame_address:               Return Address.     (line   47)
* __builtin_frob_return_address:         Return Address.     (line   44)
* __builtin_FUNCTION:                    Other Builtins.     (line  363)
* __builtin_huge_val:                    Other Builtins.     (line  426)
* __builtin_huge_valf:                   Other Builtins.     (line  431)
* __builtin_huge_vall:                   Other Builtins.     (line  434)
* __builtin_huge_valq:                   x86 Built-in Functions.
                                                             (line   57)
* __builtin_inf:                         Other Builtins.     (line  449)
* __builtin_infd128:                     Other Builtins.     (line  459)
* __builtin_infd32:                      Other Builtins.     (line  453)
* __builtin_infd64:                      Other Builtins.     (line  456)
* __builtin_inff:                        Other Builtins.     (line  463)
* __builtin_infl:                        Other Builtins.     (line  468)
* __builtin_infq:                        x86 Built-in Functions.
                                                             (line   54)
* __builtin_isfinite:                    Other Builtins.     (line    6)
* __builtin_isgreater:                   Other Builtins.     (line    6)
* __builtin_isgreaterequal:              Other Builtins.     (line    6)
* __builtin_isinf_sign:                  Other Builtins.     (line    6)
* __builtin_isinf_sign <1>:              Other Builtins.     (line  472)
* __builtin_isless:                      Other Builtins.     (line    6)
* __builtin_islessequal:                 Other Builtins.     (line    6)
* __builtin_islessgreater:               Other Builtins.     (line    6)
* __builtin_isnormal:                    Other Builtins.     (line    6)
* __builtin_isunordered:                 Other Builtins.     (line    6)
* __builtin_LINE:                        Other Builtins.     (line  357)
* __builtin_mul_overflow:                Integer Overflow Builtins.
                                                             (line   60)
* __builtin_nan:                         Other Builtins.     (line  480)
* __builtin_nand128:                     Other Builtins.     (line  502)
* __builtin_nand32:                      Other Builtins.     (line  496)
* __builtin_nand64:                      Other Builtins.     (line  499)
* __builtin_nanf:                        Other Builtins.     (line  506)
* __builtin_nanl:                        Other Builtins.     (line  509)
* __builtin_nans:                        Other Builtins.     (line  513)
* __builtin_nansf:                       Other Builtins.     (line  517)
* __builtin_nansl:                       Other Builtins.     (line  520)
* __builtin_nds32_isb:                   NDS32 Built-in Functions.
                                                             (line   12)
* __builtin_nds32_isync:                 NDS32 Built-in Functions.
                                                             (line    8)
* __builtin_nds32_mfsr:                  NDS32 Built-in Functions.
                                                             (line   15)
* __builtin_nds32_mfusr:                 NDS32 Built-in Functions.
                                                             (line   18)
* __builtin_nds32_mtsr:                  NDS32 Built-in Functions.
                                                             (line   21)
* __builtin_nds32_mtusr:                 NDS32 Built-in Functions.
                                                             (line   24)
* __builtin_nds32_setgie_dis:            NDS32 Built-in Functions.
                                                             (line   30)
* __builtin_nds32_setgie_en:             NDS32 Built-in Functions.
                                                             (line   27)
* __builtin_non_tx_store:                S/390 System z Built-in Functions.
                                                             (line   98)
* __builtin_object_size:                 Object Size Checking.
                                                             (line    6)
* __builtin_object_size <1>:             Object Size Checking.
                                                             (line    9)
* __builtin_offsetof:                    Offsetof.           (line    6)
* __builtin_parity:                      Other Builtins.     (line  544)
* __builtin_parityl:                     Other Builtins.     (line  565)
* __builtin_parityll:                    Other Builtins.     (line  589)
* __builtin_popcount:                    Other Builtins.     (line  541)
* __builtin_popcountl:                   Other Builtins.     (line  561)
* __builtin_popcountll:                  Other Builtins.     (line  585)
* __builtin_powi:                        Other Builtins.     (line    6)
* __builtin_powi <1>:                    Other Builtins.     (line  593)
* __builtin_powif:                       Other Builtins.     (line    6)
* __builtin_powif <1>:                   Other Builtins.     (line  598)
* __builtin_powil:                       Other Builtins.     (line    6)
* __builtin_powil <1>:                   Other Builtins.     (line  602)
* __builtin_prefetch:                    Other Builtins.     (line  387)
* __builtin_return:                      Constructing Calls. (line   47)
* __builtin_return_address:              Return Address.     (line    9)
* __builtin_rx_brk:                      RX Built-in Functions.
                                                             (line   10)
* __builtin_rx_clrpsw:                   RX Built-in Functions.
                                                             (line   13)
* __builtin_rx_int:                      RX Built-in Functions.
                                                             (line   17)
* __builtin_rx_machi:                    RX Built-in Functions.
                                                             (line   21)
* __builtin_rx_maclo:                    RX Built-in Functions.
                                                             (line   26)
* __builtin_rx_mulhi:                    RX Built-in Functions.
                                                             (line   31)
* __builtin_rx_mullo:                    RX Built-in Functions.
                                                             (line   36)
* __builtin_rx_mvfachi:                  RX Built-in Functions.
                                                             (line   41)
* __builtin_rx_mvfacmi:                  RX Built-in Functions.
                                                             (line   45)
* __builtin_rx_mvfc:                     RX Built-in Functions.
                                                             (line   49)
* __builtin_rx_mvtachi:                  RX Built-in Functions.
                                                             (line   53)
* __builtin_rx_mvtaclo:                  RX Built-in Functions.
                                                             (line   57)
* __builtin_rx_mvtc:                     RX Built-in Functions.
                                                             (line   61)
* __builtin_rx_mvtipl:                   RX Built-in Functions.
                                                             (line   65)
* __builtin_rx_racw:                     RX Built-in Functions.
                                                             (line   69)
* __builtin_rx_revw:                     RX Built-in Functions.
                                                             (line   73)
* __builtin_rx_rmpa:                     RX Built-in Functions.
                                                             (line   78)
* __builtin_rx_round:                    RX Built-in Functions.
                                                             (line   82)
* __builtin_rx_sat:                      RX Built-in Functions.
                                                             (line   87)
* __builtin_rx_setpsw:                   RX Built-in Functions.
                                                             (line   91)
* __builtin_rx_wait:                     RX Built-in Functions.
                                                             (line   95)
* __builtin_saddll_overflow:             Integer Overflow Builtins.
                                                             (line   15)
* __builtin_saddl_overflow:              Integer Overflow Builtins.
                                                             (line   13)
* __builtin_sadd_overflow:               Integer Overflow Builtins.
                                                             (line   11)
* __builtin_set_thread_pointer:          SH Built-in Functions.
                                                             (line    9)
* __builtin_sh_get_fpscr:                SH Built-in Functions.
                                                             (line   35)
* __builtin_sh_set_fpscr:                SH Built-in Functions.
                                                             (line   38)
* __builtin_smulll_overflow:             Integer Overflow Builtins.
                                                             (line   66)
* __builtin_smull_overflow:              Integer Overflow Builtins.
                                                             (line   64)
* __builtin_smul_overflow:               Integer Overflow Builtins.
                                                             (line   62)
* __builtin_ssubll_overflow:             Integer Overflow Builtins.
                                                             (line   47)
* __builtin_ssubl_overflow:              Integer Overflow Builtins.
                                                             (line   45)
* __builtin_ssub_overflow:               Integer Overflow Builtins.
                                                             (line   43)
* __builtin_sub_overflow:                Integer Overflow Builtins.
                                                             (line   41)
* __builtin_tabort:                      S/390 System z Built-in Functions.
                                                             (line   82)
* __builtin_tbegin:                      S/390 System z Built-in Functions.
                                                             (line    6)
* __builtin_tbeginc:                     S/390 System z Built-in Functions.
                                                             (line   73)
* __builtin_tbegin_nofloat:              S/390 System z Built-in Functions.
                                                             (line   54)
* __builtin_tbegin_retry:                S/390 System z Built-in Functions.
                                                             (line   60)
* __builtin_tbegin_retry_nofloat:        S/390 System z Built-in Functions.
                                                             (line   67)
* __builtin_tend:                        S/390 System z Built-in Functions.
                                                             (line   77)
* __builtin_thread_pointer:              SH Built-in Functions.
                                                             (line   18)
* __builtin_trap:                        Other Builtins.     (line  283)
* __builtin_tx_assist:                   S/390 System z Built-in Functions.
                                                             (line   87)
* __builtin_tx_nesting_depth:            S/390 System z Built-in Functions.
                                                             (line   93)
* __builtin_types_compatible_p:          Other Builtins.     (line  109)
* __builtin_uaddll_overflow:             Integer Overflow Builtins.
                                                             (line   21)
* __builtin_uaddl_overflow:              Integer Overflow Builtins.
                                                             (line   19)
* __builtin_uadd_overflow:               Integer Overflow Builtins.
                                                             (line   17)
* __builtin_umulll_overflow:             Integer Overflow Builtins.
                                                             (line   72)
* __builtin_umull_overflow:              Integer Overflow Builtins.
                                                             (line   70)
* __builtin_umul_overflow:               Integer Overflow Builtins.
                                                             (line   68)
* __builtin_unreachable:                 Other Builtins.     (line  290)
* __builtin_usubll_overflow:             Integer Overflow Builtins.
                                                             (line   53)
* __builtin_usubl_overflow:              Integer Overflow Builtins.
                                                             (line   51)
* __builtin_usub_overflow:               Integer Overflow Builtins.
                                                             (line   49)
* __builtin_va_arg_pack:                 Constructing Calls. (line   52)
* __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
* __builtin___bnd_chk_ptr_bounds:        Pointer Bounds Checker builtins.
                                                             (line    6)
* __builtin___bnd_chk_ptr_bounds <1>:    Pointer Bounds Checker builtins.
                                                             (line  110)
* __builtin___bnd_chk_ptr_lbounds:       Pointer Bounds Checker builtins.
                                                             (line    6)
* __builtin___bnd_chk_ptr_lbounds <1>:   Pointer Bounds Checker builtins.
                                                             (line   85)
* __builtin___bnd_chk_ptr_ubounds:       Pointer Bounds Checker builtins.
                                                             (line    6)
* __builtin___bnd_chk_ptr_ubounds <1>:   Pointer Bounds Checker builtins.
                                                             (line  103)
* __builtin___bnd_copy_ptr_bounds:       Pointer Bounds Checker builtins.
                                                             (line    6)
* __builtin___bnd_copy_ptr_bounds <1>:   Pointer Bounds Checker builtins.
                                                             (line   46)
* __builtin___bnd_get_ptr_lbound:        Pointer Bounds Checker builtins.
                                                             (line    6)
* __builtin___bnd_get_ptr_lbound <1>:    Pointer Bounds Checker builtins.
                                                             (line  128)
* __builtin___bnd_get_ptr_ubound:        Pointer Bounds Checker builtins.
                                                             (line    6)
* __builtin___bnd_get_ptr_ubound <1>:    Pointer Bounds Checker builtins.
                                                             (line  140)
* __builtin___bnd_init_ptr_bounds:       Pointer Bounds Checker builtins.
                                                             (line    6)
* __builtin___bnd_init_ptr_bounds <1>:   Pointer Bounds Checker builtins.
                                                             (line   59)
* __builtin___bnd_narrow_ptr_bounds:     Pointer Bounds Checker builtins.
                                                             (line    6)
* __builtin___bnd_narrow_ptr_bounds <1>: Pointer Bounds Checker builtins.
                                                             (line   27)
* __builtin___bnd_null_ptr_bounds:       Pointer Bounds Checker builtins.
                                                             (line    6)
* __builtin___bnd_null_ptr_bounds <1>:   Pointer Bounds Checker builtins.
                                                             (line   67)
* __builtin___bnd_set_ptr_bounds:        Pointer Bounds Checker builtins.
                                                             (line    6)
* __builtin___bnd_set_ptr_bounds <1>:    Pointer Bounds Checker builtins.
                                                             (line   12)
* __builtin___bnd_store_ptr_bounds:      Pointer Bounds Checker builtins.
                                                             (line    6)
* __builtin___bnd_store_ptr_bounds <1>:  Pointer Bounds Checker builtins.
                                                             (line   75)
* __builtin___clear_cache:               Other Builtins.     (line  374)
* __builtin___fprintf_chk:               Object Size Checking.
                                                             (line    6)
* __builtin___memcpy_chk:                Object Size Checking.
                                                             (line    6)
* __builtin___memmove_chk:               Object Size Checking.
                                                             (line    6)
* __builtin___mempcpy_chk:               Object Size Checking.
                                                             (line    6)
* __builtin___memset_chk:                Object Size Checking.
                                                             (line    6)
* __builtin___printf_chk:                Object Size Checking.
                                                             (line    6)
* __builtin___snprintf_chk:              Object Size Checking.
                                                             (line    6)
* __builtin___sprintf_chk:               Object Size Checking.
                                                             (line    6)
* __builtin___stpcpy_chk:                Object Size Checking.
                                                             (line    6)
* __builtin___strcat_chk:                Object Size Checking.
                                                             (line    6)
* __builtin___strcpy_chk:                Object Size Checking.
                                                             (line    6)
* __builtin___strncat_chk:               Object Size Checking.
                                                             (line    6)
* __builtin___strncpy_chk:               Object Size Checking.
                                                             (line    6)
* __builtin___vfprintf_chk:              Object Size Checking.
                                                             (line    6)
* __builtin___vprintf_chk:               Object Size Checking.
                                                             (line    6)
* __builtin___vsnprintf_chk:             Object Size Checking.
                                                             (line    6)
* __builtin___vsprintf_chk:              Object Size Checking.
                                                             (line    6)
* '__complex__' keyword:                 Complex.            (line    6)
* '__declspec(dllexport)':               Function Attributes.
                                                             (line  283)
* '__declspec(dllimport)':               Function Attributes.
                                                             (line  315)
* '__ea' SPU Named Address Spaces:       Named Address Spaces.
                                                             (line  155)
* __extension__:                         Alternate Keywords. (line   30)
* '__far' M32C Named Address Spaces:     Named Address Spaces.
                                                             (line  138)
* '__far' RL78 Named Address Spaces:     Named Address Spaces.
                                                             (line  147)
* '__flash' AVR Named Address Spaces:    Named Address Spaces.
                                                             (line   31)
* '__flash1' AVR Named Address Spaces:   Named Address Spaces.
                                                             (line   40)
* '__flash2' AVR Named Address Spaces:   Named Address Spaces.
                                                             (line   40)
* '__flash3' AVR Named Address Spaces:   Named Address Spaces.
                                                             (line   40)
* '__flash4' AVR Named Address Spaces:   Named Address Spaces.
                                                             (line   40)
* '__flash5' AVR Named Address Spaces:   Named Address Spaces.
                                                             (line   40)
* '__float128' data type:                Floating Types.     (line    6)
* '__float80' data type:                 Floating Types.     (line    6)
* '__fp16' data type:                    Half-Precision.     (line    6)
* '__FUNCTION__' identifier:             Function Names.     (line    6)
* '__func__' identifier:                 Function Names.     (line    6)
* '__imag__' keyword:                    Complex.            (line   27)
* '__int128' data types:                 __int128.           (line    6)
* '__memx' AVR Named Address Spaces:     Named Address Spaces.
                                                             (line   46)
* '__PRETTY_FUNCTION__' identifier:      Function Names.     (line    6)
* '__real__' keyword:                    Complex.            (line   27)
* __STDC_HOSTED__:                       Standards.          (line   13)
* __sync_add_and_fetch:                  __sync Builtins.    (line   63)
* __sync_and_and_fetch:                  __sync Builtins.    (line   63)
* __sync_bool_compare_and_swap:          __sync Builtins.    (line   74)
* __sync_fetch_and_add:                  __sync Builtins.    (line   47)
* __sync_fetch_and_and:                  __sync Builtins.    (line   47)
* __sync_fetch_and_nand:                 __sync Builtins.    (line   47)
* __sync_fetch_and_or:                   __sync Builtins.    (line   47)
* __sync_fetch_and_sub:                  __sync Builtins.    (line   47)
* __sync_fetch_and_xor:                  __sync Builtins.    (line   47)
* __sync_lock_release:                   __sync Builtins.    (line  104)
* __sync_lock_test_and_set:              __sync Builtins.    (line   86)
* __sync_nand_and_fetch:                 __sync Builtins.    (line   63)
* __sync_or_and_fetch:                   __sync Builtins.    (line   63)
* __sync_sub_and_fetch:                  __sync Builtins.    (line   63)
* __sync_synchronize:                    __sync Builtins.    (line   83)
* __sync_val_compare_and_swap:           __sync Builtins.    (line   74)
* __sync_xor_and_fetch:                  __sync Builtins.    (line   63)
* '__thread':                            Thread-Local.       (line    6)
* AArch64 Options:                       AArch64 Options.    (line    6)
* ABI:                                   Compatibility.      (line    6)
* 'abi_tag' function attribute:          C++ Attributes.     (line    9)
* 'abi_tag' type attribute:              C++ Attributes.     (line    9)
* 'abi_tag' variable attribute:          C++ Attributes.     (line    9)
* abort:                                 Other Builtins.     (line    6)
* abs:                                   Other Builtins.     (line    6)
* accessing volatiles:                   Volatiles.          (line    6)
* accessing volatiles <1>:               C++ Volatiles.      (line    6)
* acos:                                  Other Builtins.     (line    6)
* acosf:                                 Other Builtins.     (line    6)
* acosh:                                 Other Builtins.     (line    6)
* acoshf:                                Other Builtins.     (line    6)
* acoshl:                                Other Builtins.     (line    6)
* acosl:                                 Other Builtins.     (line    6)
* Ada:                                   G++ and GCC.        (line    6)
* Ada <1>:                               G++ and GCC.        (line   30)
* additional floating types:             Floating Types.     (line    6)
* address constraints:                   Simple Constraints. (line  152)
* address of a label:                    Labels as Values.   (line    6)
* 'address' variable attribute, AVR:     Variable Attributes.
                                                             (line  371)
* address_operand:                       Simple Constraints. (line  156)
* 'alias' function attribute:            Function Attributes.
                                                             (line   40)
* 'aligned' function attribute:          Function Attributes.
                                                             (line   53)
* 'aligned' type attribute:              Type Attributes.    (line   32)
* 'aligned' variable attribute:          Variable Attributes.
                                                             (line   24)
* alignment:                             Alignment.          (line    6)
* alloca:                                Other Builtins.     (line    6)
* 'alloca' vs variable-length arrays:    Variable Length.    (line   35)
* 'alloc_align' function attribute:      Function Attributes.
                                                             (line   94)
* 'alloc_size' function attribute:       Function Attributes.
                                                             (line   73)
* Allow nesting in an interrupt handler on the Blackfin processor: Function Attributes.
                                                             (line 1052)
* Altera Nios II options:                Nios II Options.    (line    6)
* alternate keywords:                    Alternate Keywords. (line    6)
* 'altivec' type attribute, PowerPC:     Type Attributes.    (line  362)
* 'altivec' variable attribute, PowerPC: Variable Attributes.
                                                             (line  509)
* 'always_inline' function attribute:    Function Attributes.
                                                             (line  126)
* AMD1:                                  Standards.          (line   13)
* ANSI C:                                Standards.          (line   13)
* ANSI C standard:                       Standards.          (line   13)
* ANSI C89:                              Standards.          (line   13)
* ANSI support:                          C Dialect Options.  (line   10)
* ANSI X3.159-1989:                      Standards.          (line   13)
* apostrophes:                           Incompatibilities.  (line  116)
* application binary interface:          Compatibility.      (line    6)
* ARC options:                           ARC Options.        (line    6)
* ARM options:                           ARM Options.        (line    6)
* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
                                                             (line    6)
* arrays of length zero:                 Zero Length.        (line    6)
* arrays of variable length:             Variable Length.    (line    6)
* arrays, non-lvalue:                    Subscripting.       (line    6)
* 'artificial' function attribute:       Function Attributes.
                                                             (line  172)
* asin:                                  Other Builtins.     (line    6)
* asinf:                                 Other Builtins.     (line    6)
* asinh:                                 Other Builtins.     (line    6)
* asinhf:                                Other Builtins.     (line    6)
* asinhl:                                Other Builtins.     (line    6)
* asinl:                                 Other Builtins.     (line    6)
* 'asm' assembler template:              Extended Asm.       (line  218)
* 'asm' clobbers:                        Extended Asm.       (line  575)
* 'asm' constraints:                     Constraints.        (line    6)
* 'asm' expressions:                     Extended Asm.       (line  480)
* 'asm' goto labels:                     Extended Asm.       (line  644)
* 'asm' input operands:                  Extended Asm.       (line  480)
* 'asm' keyword:                         Using Assembly Language with C.
                                                             (line    6)
* 'asm' output operands:                 Extended Asm.       (line  321)
* 'asm' volatile:                        Extended Asm.       (line  109)
* assembler names for identifiers:       Asm Labels.         (line    6)
* assembly code, invalid:                Bug Criteria.       (line   12)
* assembly language in C:                Using Assembly Language with C.
                                                             (line    6)
* assembly language in C, basic:         Basic Asm.          (line    6)
* assembly language in C, extended:      Extended Asm.       (line    6)
* 'assume_aligned' function attribute:   Function Attributes.
                                                             (line  111)
* atan:                                  Other Builtins.     (line    6)
* atan2:                                 Other Builtins.     (line    6)
* atan2f:                                Other Builtins.     (line    6)
* atan2l:                                Other Builtins.     (line    6)
* atanf:                                 Other Builtins.     (line    6)
* atanh:                                 Other Builtins.     (line    6)
* atanhf:                                Other Builtins.     (line    6)
* atanhl:                                Other Builtins.     (line    6)
* atanl:                                 Other Builtins.     (line    6)
* attribute of types:                    Type Attributes.    (line    6)
* attribute of variables:                Variable Attributes.
                                                             (line    6)
* attribute syntax:                      Attribute Syntax.   (line    6)
* autoincrement/decrement addressing:    Simple Constraints. (line   30)
* automatic 'inline' for C++ member fns: Inline.             (line   71)
* AVR Options:                           AVR Options.        (line    6)
* Backwards Compatibility:               Backwards Compatibility.
                                                             (line    6)
* 'bank_switch' function attribute, M32C: Function Attributes.
                                                             (line  179)
* base class members:                    Name lookup.        (line    6)
* 'based' type attribute, MeP:           Type Attributes.    (line  348)
* 'based' variable attribute, MeP:       Variable Attributes.
                                                             (line  464)
* basic 'asm':                           Basic Asm.          (line    6)
* bcmp:                                  Other Builtins.     (line    6)
* 'below100' variable attribute, Xstormy16: Variable Attributes.
                                                             (line  648)
* binary compatibility:                  Compatibility.      (line    6)
* Binary constants using the '0b' prefix: Binary constants.  (line    6)
* Blackfin Options:                      Blackfin Options.   (line    6)
* 'bnd_instrument' function attribute:   Function Attributes.
                                                             (line 1323)
* 'bnd_legacy' function attribute:       Function Attributes.
                                                             (line 1318)
* 'bnd_variable_size' type attribute:    Type Attributes.    (line  295)
* bound pointer to member function:      Bound member functions.
                                                             (line    6)
* break handler functions:               Function Attributes.
                                                             (line 1411)
* 'break_handler' function attribute, MicroBlaze: Function Attributes.
                                                             (line 1411)
* 'brk_interrupt' function attribute, RL78: Function Attributes.
                                                             (line  788)
* bug criteria:                          Bug Criteria.       (line    6)
* bugs:                                  Bugs.               (line    6)
* bugs, known:                           Trouble.            (line    6)
* built-in functions:                    C Dialect Options.  (line  210)
* built-in functions <1>:                Other Builtins.     (line    6)
* bzero:                                 Other Builtins.     (line    6)
* C compilation options:                 Invoking GCC.       (line   17)
* C intermediate output, nonexistent:    G++ and GCC.        (line   35)
* C language extensions:                 C Extensions.       (line    6)
* C language, traditional:               C Dialect Options.  (line  345)
* C standard:                            Standards.          (line   13)
* C standards:                           Standards.          (line   13)
* c++:                                   Invoking G++.       (line   14)
* C++:                                   G++ and GCC.        (line   30)
* C++ comments:                          C++ Comments.       (line    6)
* C++ compilation options:               Invoking GCC.       (line   23)
* C++ interface and implementation headers: C++ Interface.   (line    6)
* C++ language extensions:               C++ Extensions.     (line    6)
* C++ member fns, automatically 'inline': Inline.            (line   71)
* C++ misunderstandings:                 C++ Misunderstandings.
                                                             (line    6)
* C++ options, command-line:             C++ Dialect Options.
                                                             (line    6)
* C++ pragmas, effect on inlining:       C++ Interface.      (line   57)
* C++ source file suffixes:              Invoking G++.       (line    6)
* C++ static data, declaring and defining: Static Definitions.
                                                             (line    6)
* C11:                                   Standards.          (line   13)
* C1X:                                   Standards.          (line   13)
* C6X Options:                           C6X Options.        (line    6)
* C89:                                   Standards.          (line   13)
* C90:                                   Standards.          (line   13)
* C94:                                   Standards.          (line   13)
* C95:                                   Standards.          (line   13)
* C99:                                   Standards.          (line   13)
* C9X:                                   Standards.          (line   13)
* cabs:                                  Other Builtins.     (line    6)
* cabsf:                                 Other Builtins.     (line    6)
* cabsl:                                 Other Builtins.     (line    6)
* cacos:                                 Other Builtins.     (line    6)
* cacosf:                                Other Builtins.     (line    6)
* cacosh:                                Other Builtins.     (line    6)
* cacoshf:                               Other Builtins.     (line    6)
* cacoshl:                               Other Builtins.     (line    6)
* cacosl:                                Other Builtins.     (line    6)
* 'callee_pop_aggregate_return' function attribute, x86: Function Attributes.
                                                             (line 1004)
* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
                                                             (line  531)
* calloc:                                Other Builtins.     (line    6)
* caret:                                 Multi-Alternative.  (line   38)
* caret GCC_COLORS capability:           Language Independent Options.
                                                             (line   78)
* carg:                                  Other Builtins.     (line    6)
* cargf:                                 Other Builtins.     (line    6)
* cargl:                                 Other Builtins.     (line    6)
* case labels in initializers:           Designated Inits.   (line    6)
* case ranges:                           Case Ranges.        (line    6)
* casin:                                 Other Builtins.     (line    6)
* casinf:                                Other Builtins.     (line    6)
* casinh:                                Other Builtins.     (line    6)
* casinhf:                               Other Builtins.     (line    6)
* casinhl:                               Other Builtins.     (line    6)
* casinl:                                Other Builtins.     (line    6)
* cast to a union:                       Cast to Union.      (line    6)
* catan:                                 Other Builtins.     (line    6)
* catanf:                                Other Builtins.     (line    6)
* catanh:                                Other Builtins.     (line    6)
* catanhf:                               Other Builtins.     (line    6)
* catanhl:                               Other Builtins.     (line    6)
* catanl:                                Other Builtins.     (line    6)
* 'cb' variable attribute, MeP:          Variable Attributes.
                                                             (line  494)
* cbrt:                                  Other Builtins.     (line    6)
* cbrtf:                                 Other Builtins.     (line    6)
* cbrtl:                                 Other Builtins.     (line    6)
* ccos:                                  Other Builtins.     (line    6)
* ccosf:                                 Other Builtins.     (line    6)
* ccosh:                                 Other Builtins.     (line    6)
* ccoshf:                                Other Builtins.     (line    6)
* ccoshl:                                Other Builtins.     (line    6)
* ccosl:                                 Other Builtins.     (line    6)
* 'cdecl' function attribute, x86-32:    Function Attributes.
                                                             (line  215)
* ceil:                                  Other Builtins.     (line    6)
* ceilf:                                 Other Builtins.     (line    6)
* ceill:                                 Other Builtins.     (line    6)
* cexp:                                  Other Builtins.     (line    6)
* cexpf:                                 Other Builtins.     (line    6)
* cexpl:                                 Other Builtins.     (line    6)
* character set, execution:              Preprocessor Options.
                                                             (line  553)
* character set, input:                  Preprocessor Options.
                                                             (line  566)
* character set, input normalization:    Warning Options.    (line 1467)
* character set, wide execution:         Preprocessor Options.
                                                             (line  558)
* cimag:                                 Other Builtins.     (line    6)
* cimagf:                                Other Builtins.     (line    6)
* cimagl:                                Other Builtins.     (line    6)
* 'cleanup' variable attribute:          Variable Attributes.
                                                             (line   90)
* clog:                                  Other Builtins.     (line    6)
* clogf:                                 Other Builtins.     (line    6)
* clogl:                                 Other Builtins.     (line    6)
* COBOL:                                 G++ and GCC.        (line   23)
* code generation conventions:           Code Gen Options.   (line    6)
* code, mixed with declarations:         Mixed Declarations. (line    6)
* 'cold' function attribute:             Function Attributes.
                                                             (line 1282)
* 'cold' label attribute:                Label Attributes.   (line   43)
* command options:                       Invoking GCC.       (line    6)
* comments, C++ style:                   C++ Comments.       (line    6)
* 'common' variable attribute:           Variable Attributes.
                                                             (line  105)
* comparison of signed and unsigned values, warning: Warning Options.
                                                             (line 1285)
* compiler bugs, reporting:              Bug Reporting.      (line    6)
* compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
* compiler options, C++:                 C++ Dialect Options.
                                                             (line    6)
* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
                                                             (line    6)
* compiler version, specifying:          Target Options.     (line    6)
* COMPILER_PATH:                         Environment Variables.
                                                             (line   91)
* complex conjugation:                   Complex.            (line   34)
* complex numbers:                       Complex.            (line    6)
* compound literals:                     Compound Literals.  (line    6)
* computed gotos:                        Labels as Values.   (line    6)
* conditional expressions, extensions:   Conditionals.       (line    6)
* conflicting types:                     Disappointments.    (line   21)
* conj:                                  Other Builtins.     (line    6)
* conjf:                                 Other Builtins.     (line    6)
* conjl:                                 Other Builtins.     (line    6)
* 'const' applied to function:           Function Attributes.
                                                             (line    6)
* 'const' function attribute:            Function Attributes.
                                                             (line  221)
* const qualifier:                       Pointers to Arrays. (line    6)
* constants in constraints:              Simple Constraints. (line   68)
* constraint modifier characters:        Modifiers.          (line    6)
* constraint, matching:                  Simple Constraints. (line  137)
* constraints, 'asm':                    Constraints.        (line    6)
* constraints, machine specific:         Machine Constraints.
                                                             (line    6)
* constructing calls:                    Constructing Calls. (line    6)
* constructor expressions:               Compound Literals.  (line    6)
* 'constructor' function attribute:      Function Attributes.
                                                             (line  236)
* contributors:                          Contributors.       (line    6)
* copysign:                              Other Builtins.     (line    6)
* copysignf:                             Other Builtins.     (line    6)
* copysignl:                             Other Builtins.     (line    6)
* core dump:                             Bug Criteria.       (line    9)
* cos:                                   Other Builtins.     (line    6)
* cosf:                                  Other Builtins.     (line    6)
* cosh:                                  Other Builtins.     (line    6)
* coshf:                                 Other Builtins.     (line    6)
* coshl:                                 Other Builtins.     (line    6)
* cosl:                                  Other Builtins.     (line    6)
* CPATH:                                 Environment Variables.
                                                             (line  127)
* CPLUS_INCLUDE_PATH:                    Environment Variables.
                                                             (line  129)
* cpow:                                  Other Builtins.     (line    6)
* cpowf:                                 Other Builtins.     (line    6)
* cpowl:                                 Other Builtins.     (line    6)
* cproj:                                 Other Builtins.     (line    6)
* cprojf:                                Other Builtins.     (line    6)
* cprojl:                                Other Builtins.     (line    6)
* CR16 Options:                          CR16 Options.       (line    6)
* creal:                                 Other Builtins.     (line    6)
* crealf:                                Other Builtins.     (line    6)
* creall:                                Other Builtins.     (line    6)
* CRIS Options:                          CRIS Options.       (line    6)
* 'critical' function attribute, MSP430: Function Attributes.
                                                             (line  684)
* cross compiling:                       Target Options.     (line    6)
* csin:                                  Other Builtins.     (line    6)
* csinf:                                 Other Builtins.     (line    6)
* csinh:                                 Other Builtins.     (line    6)
* csinhf:                                Other Builtins.     (line    6)
* csinhl:                                Other Builtins.     (line    6)
* csinl:                                 Other Builtins.     (line    6)
* csqrt:                                 Other Builtins.     (line    6)
* csqrtf:                                Other Builtins.     (line    6)
* csqrtl:                                Other Builtins.     (line    6)
* ctan:                                  Other Builtins.     (line    6)
* ctanf:                                 Other Builtins.     (line    6)
* ctanh:                                 Other Builtins.     (line    6)
* ctanhf:                                Other Builtins.     (line    6)
* ctanhl:                                Other Builtins.     (line    6)
* ctanl:                                 Other Builtins.     (line    6)
* C_INCLUDE_PATH:                        Environment Variables.
                                                             (line  128)
* Darwin options:                        Darwin Options.     (line    6)
* dcgettext:                             Other Builtins.     (line    6)
* 'dd' integer suffix:                   Decimal Float.      (line    6)
* 'DD' integer suffix:                   Decimal Float.      (line    6)
* deallocating variable length arrays:   Variable Length.    (line   22)
* debugging information options:         Debugging Options.  (line    6)
* decimal floating types:                Decimal Float.      (line    6)
* declaration scope:                     Incompatibilities.  (line   80)
* declarations inside expressions:       Statement Exprs.    (line    6)
* declarations, mixed with code:         Mixed Declarations. (line    6)
* declaring attributes of functions:     Function Attributes.
                                                             (line    6)
* declaring static data in C++:          Static Definitions. (line    6)
* defining static data in C++:           Static Definitions. (line    6)
* dependencies for make as output:       Environment Variables.
                                                             (line  155)
* dependencies for make as output <1>:   Environment Variables.
                                                             (line  171)
* dependencies, 'make':                  Preprocessor Options.
                                                             (line  185)
* DEPENDENCIES_OUTPUT:                   Environment Variables.
                                                             (line  154)
* dependent name lookup:                 Name lookup.        (line    6)
* 'deprecated' function attribute:       Function Attributes.
                                                             (line  258)
* 'deprecated' type attribute:           Type Attributes.    (line  206)
* 'deprecated' variable attribute:       Variable Attributes.
                                                             (line  114)
* designated initializers:               Designated Inits.   (line    6)
* 'designated_init' type attribute:      Type Attributes.    (line  284)
* designator lists:                      Designated Inits.   (line   96)
* designators:                           Designated Inits.   (line   64)
* 'destructor' function attribute:       Function Attributes.
                                                             (line  236)
* 'df' integer suffix:                   Decimal Float.      (line    6)
* 'DF' integer suffix:                   Decimal Float.      (line    6)
* dgettext:                              Other Builtins.     (line    6)
* diagnostic messages:                   Language Independent Options.
                                                             (line    6)
* dialect options:                       C Dialect Options.  (line    6)
* digits in constraint:                  Simple Constraints. (line  125)
* directory options:                     Directory Options.  (line    6)
* 'disinterrupt' function attribute, Epiphany: Function Attributes.
                                                             (line  278)
* 'disinterrupt' function attribute, MeP: Function Attributes.
                                                             (line  278)
* 'dl' integer suffix:                   Decimal Float.      (line    6)
* 'DL' integer suffix:                   Decimal Float.      (line    6)
* 'dllexport' function attribute:        Function Attributes.
                                                             (line  283)
* 'dllexport' variable attribute:        Variable Attributes.
                                                             (line  308)
* 'dllimport' function attribute:        Function Attributes.
                                                             (line  315)
* 'dllimport' variable attribute:        Variable Attributes.
                                                             (line  304)
* dollar sign:                           Multi-Alternative.  (line   42)
* dollar signs in identifier names:      Dollar Signs.       (line    6)
* double-word arithmetic:                Long Long.          (line    6)
* downward funargs:                      Nested Functions.   (line    6)
* drem:                                  Other Builtins.     (line    6)
* dremf:                                 Other Builtins.     (line    6)
* dreml:                                 Other Builtins.     (line    6)
* 'E' in constraint:                     Simple Constraints. (line   87)
* earlyclobber operand:                  Modifiers.          (line   25)
* eight-bit data on the H8/300, H8/300H, and H8S: Variable Attributes.
                                                             (line  403)
* 'eightbit_data' variable attribute, H8/300: Variable Attributes.
                                                             (line  403)
* 'EIND':                                AVR Options.        (line  243)
* empty structures:                      Empty Structures.   (line    6)
* Enable Cilk Plus:                      C Dialect Options.  (line  289)
* environment variables:                 Environment Variables.
                                                             (line    6)
* erf:                                   Other Builtins.     (line    6)
* erfc:                                  Other Builtins.     (line    6)
* erfcf:                                 Other Builtins.     (line    6)
* erfcl:                                 Other Builtins.     (line    6)
* erff:                                  Other Builtins.     (line    6)
* erfl:                                  Other Builtins.     (line    6)
* 'error' function attribute:            Function Attributes.
                                                             (line  191)
* error GCC_COLORS capability:           Language Independent Options.
                                                             (line   69)
* error messages:                        Warnings and Errors.
                                                             (line    6)
* escaped newlines:                      Escaped Newlines.   (line    6)
* 'exception' function attribute:        Function Attributes.
                                                             (line  366)
* exception handler functions, Blackfin: Function Attributes.
                                                             (line  371)
* exception handler functions, NDS32:    Function Attributes.
                                                             (line  366)
* 'exception_handler' function attribute: Function Attributes.
                                                             (line  371)
* exclamation point:                     Multi-Alternative.  (line   33)
* exit:                                  Other Builtins.     (line    6)
* exp:                                   Other Builtins.     (line    6)
* exp10:                                 Other Builtins.     (line    6)
* exp10f:                                Other Builtins.     (line    6)
* exp10l:                                Other Builtins.     (line    6)
* exp2:                                  Other Builtins.     (line    6)
* exp2f:                                 Other Builtins.     (line    6)
* exp2l:                                 Other Builtins.     (line    6)
* expf:                                  Other Builtins.     (line    6)
* expl:                                  Other Builtins.     (line    6)
* explicit register variables:           Explicit Reg Vars.  (line    6)
* expm1:                                 Other Builtins.     (line    6)
* expm1f:                                Other Builtins.     (line    6)
* expm1l:                                Other Builtins.     (line    6)
* expressions containing statements:     Statement Exprs.    (line    6)
* expressions, constructor:              Compound Literals.  (line    6)
* extended 'asm':                        Extended Asm.       (line    6)
* extensible constraints:                Simple Constraints. (line  161)
* extensions, '?:':                      Conditionals.       (line    6)
* extensions, C language:                C Extensions.       (line    6)
* extensions, C++ language:              C++ Extensions.     (line    6)
* external declaration scope:            Incompatibilities.  (line   80)
* 'externally_visible' function attribute: Function Attributes.
                                                             (line  377)
* 'F' in constraint:                     Simple Constraints. (line   92)
* fabs:                                  Other Builtins.     (line    6)
* fabsf:                                 Other Builtins.     (line    6)
* fabsl:                                 Other Builtins.     (line    6)
* 'far' function attribute:              Function Attributes.
                                                             (line  390)
* 'far' function attribute, MIPS:        Function Attributes.
                                                             (line  913)
* 'far' type attribute, MeP:             Type Attributes.    (line  348)
* 'far' variable attribute, MeP:         Variable Attributes.
                                                             (line  478)
* 'fastcall' function attribute, x86-32: Function Attributes.
                                                             (line  402)
* 'fast_interrupt' function attribute, M32C: Function Attributes.
                                                             (line  396)
* 'fast_interrupt' function attribute, RX: Function Attributes.
                                                             (line  396)
* fatal signal:                          Bug Criteria.       (line    9)
* fdim:                                  Other Builtins.     (line    6)
* fdimf:                                 Other Builtins.     (line    6)
* fdiml:                                 Other Builtins.     (line    6)
* FDL, GNU Free Documentation License:   GNU Free Documentation License.
                                                             (line    6)
* ffs:                                   Other Builtins.     (line    6)
* file name suffix:                      Overall Options.    (line   14)
* file names:                            Link Options.       (line   10)
* fixed-point types:                     Fixed-Point.        (line    6)
* 'flatten' function attribute:          Function Attributes.
                                                             (line  184)
* flexible array members:                Zero Length.        (line    6)
* 'float' as function value type:        Incompatibilities.  (line  141)
* floating point precision:              Disappointments.    (line   68)
* floating-point precision:              Optimize Options.   (line 2037)
* floor:                                 Other Builtins.     (line    6)
* floorf:                                Other Builtins.     (line    6)
* floorl:                                Other Builtins.     (line    6)
* fma:                                   Other Builtins.     (line    6)
* fmaf:                                  Other Builtins.     (line    6)
* fmal:                                  Other Builtins.     (line    6)
* fmax:                                  Other Builtins.     (line    6)
* fmaxf:                                 Other Builtins.     (line    6)
* fmaxl:                                 Other Builtins.     (line    6)
* fmin:                                  Other Builtins.     (line    6)
* fminf:                                 Other Builtins.     (line    6)
* fminl:                                 Other Builtins.     (line    6)
* fmod:                                  Other Builtins.     (line    6)
* fmodf:                                 Other Builtins.     (line    6)
* fmodl:                                 Other Builtins.     (line    6)
* 'force_align_arg_pointer' function attribute, x86: Function Attributes.
                                                             (line 1363)
* 'format' function attribute:           Function Attributes.
                                                             (line  420)
* 'format_arg' function attribute:       Function Attributes.
                                                             (line  485)
* Fortran:                               G++ and GCC.        (line    6)
* 'forwarder_section' function attribute, Epiphany: Function Attributes.
                                                             (line  723)
* forwarding calls:                      Constructing Calls. (line    6)
* fprintf:                               Other Builtins.     (line    6)
* fprintf_unlocked:                      Other Builtins.     (line    6)
* fputs:                                 Other Builtins.     (line    6)
* fputs_unlocked:                        Other Builtins.     (line    6)
* FR30 Options:                          FR30 Options.       (line    6)
* freestanding environment:              Standards.          (line   13)
* freestanding implementation:           Standards.          (line   13)
* frexp:                                 Other Builtins.     (line    6)
* frexpf:                                Other Builtins.     (line    6)
* frexpl:                                Other Builtins.     (line    6)
* FRV Options:                           FRV Options.        (line    6)
* fscanf:                                Other Builtins.     (line    6)
* 'fscanf', and constant strings:        Incompatibilities.  (line   17)
* function addressability on the M32R/D: Function Attributes.
                                                             (line  969)
* function attributes:                   Function Attributes.
                                                             (line    6)
* function pointers, arithmetic:         Pointer Arith.      (line    6)
* function prototype declarations:       Function Prototypes.
                                                             (line    6)
* function versions:                     Function Multiversioning.
                                                             (line    6)
* function without prologue/epilogue code: Function Attributes.
                                                             (line 1036)
* function, size of pointer to:          Pointer Arith.      (line    6)
* functions in arbitrary sections:       Function Attributes.
                                                             (line    6)
* functions that are dynamically resolved: Function Attributes.
                                                             (line    6)
* functions that are passed arguments in registers on x86-32: Function Attributes.
                                                             (line    6)
* functions that are passed arguments in registers on x86-32 <1>: Function Attributes.
                                                             (line 1328)
* functions that behave like malloc:     Function Attributes.
                                                             (line    6)
* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
                                                             (line 1047)
* functions that do not pop the argument stack on x86-32: Function Attributes.
                                                             (line    6)
* functions that do pop the argument stack on x86-32: Function Attributes.
                                                             (line  215)
* functions that have different compilation options on x86-32: Function Attributes.
                                                             (line    6)
* functions that have different optimization options: Function Attributes.
                                                             (line    6)
* functions that have no side effects:   Function Attributes.
                                                             (line    6)
* functions that never return:           Function Attributes.
                                                             (line    6)
* functions that pop the argument stack on x86-32: Function Attributes.
                                                             (line    6)
* functions that pop the argument stack on x86-32 <1>: Function Attributes.
                                                             (line  402)
* functions that pop the argument stack on x86-32 <2>: Function Attributes.
                                                             (line  410)
* functions that pop the argument stack on x86-32 <3>: Function Attributes.
                                                             (line 1495)
* functions that return more than once:  Function Attributes.
                                                             (line    6)
* functions with non-null pointer arguments: Function Attributes.
                                                             (line    6)
* functions with 'printf', 'scanf', 'strftime' or 'strfmon' style arguments: Function Attributes.
                                                             (line    6)
* 'function_vector' function attribute, H8/300: Function Attributes.
                                                             (line  531)
* 'function_vector' function attribute, M16C/M32C: Function Attributes.
                                                             (line  531)
* 'function_vector' function attribute, SH: Function Attributes.
                                                             (line  531)
* 'G' in constraint:                     Simple Constraints. (line   96)
* 'g' in constraint:                     Simple Constraints. (line  118)
* g++:                                   Invoking G++.       (line   14)
* G++:                                   G++ and GCC.        (line   30)
* gamma:                                 Other Builtins.     (line    6)
* gammaf:                                Other Builtins.     (line    6)
* gammaf_r:                              Other Builtins.     (line    6)
* gammal:                                Other Builtins.     (line    6)
* gammal_r:                              Other Builtins.     (line    6)
* gamma_r:                               Other Builtins.     (line    6)
* GCC:                                   G++ and GCC.        (line    6)
* GCC command options:                   Invoking GCC.       (line    6)
* GCC_COLORS environment variable:       Language Independent Options.
                                                             (line   35)
* GCC_COMPARE_DEBUG:                     Environment Variables.
                                                             (line   52)
* GCC_EXEC_PREFIX:                       Environment Variables.
                                                             (line   57)
* 'gcc_struct' type attribute, PowerPC:  Type Attributes.    (line  359)
* 'gcc_struct' type attribute, x86:      Type Attributes.    (line  391)
* 'gcc_struct' variable attribute, PowerPC: Variable Attributes.
                                                             (line  506)
* 'gcc_struct' variable attribute, x86:  Variable Attributes.
                                                             (line  527)
* 'gcov':                                Debugging Options.  (line  724)
* gettext:                               Other Builtins.     (line    6)
* global offset table:                   Code Gen Options.   (line  279)
* global register after 'longjmp':       Global Reg Vars.    (line   65)
* global register variables:             Global Reg Vars.    (line    6)
* GNAT:                                  G++ and GCC.        (line   30)
* GNU C Compiler:                        G++ and GCC.        (line    6)
* GNU Compiler Collection:               G++ and GCC.        (line    6)
* 'gnu_inline' function attribute:       Function Attributes.
                                                             (line  136)
* Go:                                    G++ and GCC.        (line    6)
* goto with computed label:              Labels as Values.   (line    6)
* 'gprof':                               Debugging Options.  (line  649)
* grouping options:                      Invoking GCC.       (line   26)
* 'H' in constraint:                     Simple Constraints. (line   96)
* half-precision floating point:         Half-Precision.     (line    6)
* hardware models and configurations, specifying: Submodel Options.
                                                             (line    6)
* hex floats:                            Hex Floats.         (line    6)
* highlight, color, colour:              Language Independent Options.
                                                             (line   35)
* 'hk' fixed-suffix:                     Fixed-Point.        (line    6)
* 'HK' fixed-suffix:                     Fixed-Point.        (line    6)
* hosted environment:                    Standards.          (line   13)
* hosted environment <1>:                C Dialect Options.  (line  244)
* hosted environment <2>:                C Dialect Options.  (line  252)
* hosted implementation:                 Standards.          (line   13)
* 'hot' function attribute:              Function Attributes.
                                                             (line 1272)
* 'hot' label attribute:                 Label Attributes.   (line   36)
* 'hotpatch' function attribute, S/390:  Function Attributes.
                                                             (line 1023)
* HPPA Options:                          HPPA Options.       (line    6)
* 'hr' fixed-suffix:                     Fixed-Point.        (line    6)
* 'HR' fixed-suffix:                     Fixed-Point.        (line    6)
* hypot:                                 Other Builtins.     (line    6)
* hypotf:                                Other Builtins.     (line    6)
* hypotl:                                Other Builtins.     (line    6)
* 'i' in constraint:                     Simple Constraints. (line   68)
* 'I' in constraint:                     Simple Constraints. (line   79)
* IA-64 Options:                         IA-64 Options.      (line    6)
* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
                                                             (line    6)
* identifier names, dollar signs in:     Dollar Signs.       (line    6)
* identifiers, names in assembler code:  Asm Labels.         (line    6)
* 'ifunc' function attribute:            Function Attributes.
                                                             (line  592)
* ilogb:                                 Other Builtins.     (line    6)
* ilogbf:                                Other Builtins.     (line    6)
* ilogbl:                                Other Builtins.     (line    6)
* imaxabs:                               Other Builtins.     (line    6)
* implementation-defined behavior, C language: C Implementation.
                                                             (line    6)
* implementation-defined behavior, C++ language: C++ Implementation.
                                                             (line    6)
* implied '#pragma implementation':      C++ Interface.      (line   43)
* incompatibilities of GCC:              Incompatibilities.  (line    6)
* increment operators:                   Bug Criteria.       (line   17)
* index:                                 Other Builtins.     (line    6)
* indirect calls, ARC:                   Function Attributes.
                                                             (line  875)
* indirect calls, ARM:                   Function Attributes.
                                                             (line  875)
* indirect calls, Blackfin:              Function Attributes.
                                                             (line  899)
* indirect calls, Epiphany:              Function Attributes.
                                                             (line  875)
* indirect calls, MIPS:                  Function Attributes.
                                                             (line  913)
* indirect calls, PowerPC:               Function Attributes.
                                                             (line  899)
* initializations in expressions:        Compound Literals.  (line    6)
* initializers with labeled elements:    Designated Inits.   (line    6)
* initializers, non-constant:            Initializers.       (line    6)
* 'init_priority' variable attribute:    C++ Attributes.     (line   50)
* inline assembly language:              Using Assembly Language with C.
                                                             (line    6)
* 'inline' automatic for C++ member fns: Inline.             (line   71)
* inline functions:                      Inline.             (line    6)
* inline functions, omission of:         Inline.             (line   51)
* inlining and C++ pragmas:              C++ Interface.      (line   57)
* installation trouble:                  Trouble.            (line    6)
* integrating function code:             Inline.             (line    6)
* interface and implementation headers, C++: C++ Interface.  (line    6)
* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
* 'interrupt' function attribute, ARC:   Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, ARM:   Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, AVR:   Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, CR16:  Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, Epiphany: Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, M32C:  Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, M32R/D: Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, m68k:  Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, MeP:   Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, MIPS:  Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, MSP430: Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, NDS32: Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, RL78:  Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, RX:    Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, Visium: Function Attributes.
                                                             (line  632)
* 'interrupt' function attribute, Xstormy16: Function Attributes.
                                                             (line  632)
* 'interrupt_handler' function attribute, Blackfin: Function Attributes.
                                                             (line  811)
* 'interrupt_handler' function attribute, H8/300: Function Attributes.
                                                             (line  811)
* 'interrupt_handler' function attribute, m68k: Function Attributes.
                                                             (line  811)
* 'interrupt_handler' function attribute, SH: Function Attributes.
                                                             (line  811)
* 'interrupt_thread' function attribute, fido: Function Attributes.
                                                             (line  817)
* introduction:                          Top.                (line    6)
* invalid assembly code:                 Bug Criteria.       (line   12)
* invalid input:                         Bug Criteria.       (line   42)
* invoking 'g++':                        Invoking G++.       (line   22)
* 'io' variable attribute, AVR:          Variable Attributes.
                                                             (line  347)
* 'io' variable attribute, MeP:          Variable Attributes.
                                                             (line  484)
* 'io_low' variable attribute, AVR:      Variable Attributes.
                                                             (line  365)
* isalnum:                               Other Builtins.     (line    6)
* isalpha:                               Other Builtins.     (line    6)
* isascii:                               Other Builtins.     (line    6)
* isblank:                               Other Builtins.     (line    6)
* iscntrl:                               Other Builtins.     (line    6)
* isdigit:                               Other Builtins.     (line    6)
* isgraph:                               Other Builtins.     (line    6)
* islower:                               Other Builtins.     (line    6)
* ISO 9899:                              Standards.          (line   13)
* ISO C:                                 Standards.          (line   13)
* ISO C standard:                        Standards.          (line   13)
* ISO C11:                               Standards.          (line   13)
* ISO C1X:                               Standards.          (line   13)
* ISO C90:                               Standards.          (line   13)
* ISO C94:                               Standards.          (line   13)
* ISO C95:                               Standards.          (line   13)
* ISO C99:                               Standards.          (line   13)
* ISO C9X:                               Standards.          (line   13)
* ISO support:                           C Dialect Options.  (line   10)
* ISO/IEC 9899:                          Standards.          (line   13)
* isprint:                               Other Builtins.     (line    6)
* ispunct:                               Other Builtins.     (line    6)
* 'isr' function attribute, ARM:         Function Attributes.
                                                             (line  825)
* isspace:                               Other Builtins.     (line    6)
* isupper:                               Other Builtins.     (line    6)
* iswalnum:                              Other Builtins.     (line    6)
* iswalpha:                              Other Builtins.     (line    6)
* iswblank:                              Other Builtins.     (line    6)
* iswcntrl:                              Other Builtins.     (line    6)
* iswdigit:                              Other Builtins.     (line    6)
* iswgraph:                              Other Builtins.     (line    6)
* iswlower:                              Other Builtins.     (line    6)
* iswprint:                              Other Builtins.     (line    6)
* iswpunct:                              Other Builtins.     (line    6)
* iswspace:                              Other Builtins.     (line    6)
* iswupper:                              Other Builtins.     (line    6)
* iswxdigit:                             Other Builtins.     (line    6)
* isxdigit:                              Other Builtins.     (line    6)
* j0:                                    Other Builtins.     (line    6)
* j0f:                                   Other Builtins.     (line    6)
* j0l:                                   Other Builtins.     (line    6)
* j1:                                    Other Builtins.     (line    6)
* j1f:                                   Other Builtins.     (line    6)
* j1l:                                   Other Builtins.     (line    6)
* Java:                                  G++ and GCC.        (line    6)
* 'java_interface' type attribute:       C++ Attributes.     (line   71)
* jn:                                    Other Builtins.     (line    6)
* jnf:                                   Other Builtins.     (line    6)
* jnl:                                   Other Builtins.     (line    6)
* 'k' fixed-suffix:                      Fixed-Point.        (line    6)
* 'K' fixed-suffix:                      Fixed-Point.        (line    6)
* 'keep_interrupts_masked' function attribute, MIPS: Function Attributes.
                                                             (line  745)
* keywords, alternate:                   Alternate Keywords. (line    6)
* known causes of trouble:               Trouble.            (line    6)
* 'kspisusp' function attribute, Blackfin: Function Attributes.
                                                             (line  829)
* 'l1_data' variable attribute, Blackfin: Variable Attributes.
                                                             (line  385)
* 'l1_data_A' variable attribute, Blackfin: Variable Attributes.
                                                             (line  385)
* 'l1_data_B' variable attribute, Blackfin: Variable Attributes.
                                                             (line  385)
* 'l1_text' function attribute, Blackfin: Function Attributes.
                                                             (line  834)
* 'l2' function attribute, Blackfin:     Function Attributes.
                                                             (line  840)
* 'l2' variable attribute, Blackfin:     Variable Attributes.
                                                             (line  393)
* Label Attributes:                      Label Attributes.   (line    6)
* labeled elements in initializers:      Designated Inits.   (line    6)
* labels as values:                      Labels as Values.   (line    6)
* labs:                                  Other Builtins.     (line    6)
* LANG:                                  Environment Variables.
                                                             (line   21)
* LANG <1>:                              Environment Variables.
                                                             (line  106)
* language dialect options:              C Dialect Options.  (line    6)
* LC_ALL:                                Environment Variables.
                                                             (line   21)
* LC_CTYPE:                              Environment Variables.
                                                             (line   21)
* LC_MESSAGES:                           Environment Variables.
                                                             (line   21)
* ldexp:                                 Other Builtins.     (line    6)
* ldexpf:                                Other Builtins.     (line    6)
* ldexpl:                                Other Builtins.     (line    6)
* 'leaf' function attribute:             Function Attributes.
                                                             (line  846)
* length-zero arrays:                    Zero Length.        (line    6)
* lgamma:                                Other Builtins.     (line    6)
* lgammaf:                               Other Builtins.     (line    6)
* lgammaf_r:                             Other Builtins.     (line    6)
* lgammal:                               Other Builtins.     (line    6)
* lgammal_r:                             Other Builtins.     (line    6)
* lgamma_r:                              Other Builtins.     (line    6)
* Libraries:                             Link Options.       (line   30)
* LIBRARY_PATH:                          Environment Variables.
                                                             (line   97)
* link options:                          Link Options.       (line    6)
* linker script:                         Link Options.       (line  238)
* 'lk' fixed-suffix:                     Fixed-Point.        (line    6)
* 'LK' fixed-suffix:                     Fixed-Point.        (line    6)
* 'LL' integer suffix:                   Long Long.          (line    6)
* llabs:                                 Other Builtins.     (line    6)
* 'llk' fixed-suffix:                    Fixed-Point.        (line    6)
* 'LLK' fixed-suffix:                    Fixed-Point.        (line    6)
* 'llr' fixed-suffix:                    Fixed-Point.        (line    6)
* 'LLR' fixed-suffix:                    Fixed-Point.        (line    6)
* llrint:                                Other Builtins.     (line    6)
* llrintf:                               Other Builtins.     (line    6)
* llrintl:                               Other Builtins.     (line    6)
* llround:                               Other Builtins.     (line    6)
* llroundf:                              Other Builtins.     (line    6)
* llroundl:                              Other Builtins.     (line    6)
* LM32 options:                          LM32 Options.       (line    6)
* load address instruction:              Simple Constraints. (line  152)
* local labels:                          Local Labels.       (line    6)
* local variables in macros:             Typeof.             (line   46)
* local variables, specifying registers: Local Reg Vars.     (line    6)
* locale:                                Environment Variables.
                                                             (line   21)
* locale definition:                     Environment Variables.
                                                             (line  106)
* locus GCC_COLORS capability:           Language Independent Options.
                                                             (line   81)
* log:                                   Other Builtins.     (line    6)
* log10:                                 Other Builtins.     (line    6)
* log10f:                                Other Builtins.     (line    6)
* log10l:                                Other Builtins.     (line    6)
* log1p:                                 Other Builtins.     (line    6)
* log1pf:                                Other Builtins.     (line    6)
* log1pl:                                Other Builtins.     (line    6)
* log2:                                  Other Builtins.     (line    6)
* log2f:                                 Other Builtins.     (line    6)
* log2l:                                 Other Builtins.     (line    6)
* logb:                                  Other Builtins.     (line    6)
* logbf:                                 Other Builtins.     (line    6)
* logbl:                                 Other Builtins.     (line    6)
* logf:                                  Other Builtins.     (line    6)
* logl:                                  Other Builtins.     (line    6)
* 'long long' data types:                Long Long.          (line    6)
* 'longcall' function attribute, Blackfin: Function Attributes.
                                                             (line  899)
* 'longcall' function attribute, PowerPC: Function Attributes.
                                                             (line  899)
* longjmp:                               Global Reg Vars.    (line   65)
* 'longjmp' incompatibilities:           Incompatibilities.  (line   39)
* 'longjmp' warnings:                    Warning Options.    (line  705)
* 'long_call' function attribute, ARC:   Function Attributes.
                                                             (line  875)
* 'long_call' function attribute, ARM:   Function Attributes.
                                                             (line  875)
* 'long_call' function attribute, Epiphany: Function Attributes.
                                                             (line  875)
* 'long_call' function attribute, MIPS:  Function Attributes.
                                                             (line  913)
* 'lr' fixed-suffix:                     Fixed-Point.        (line    6)
* 'LR' fixed-suffix:                     Fixed-Point.        (line    6)
* lrint:                                 Other Builtins.     (line    6)
* lrintf:                                Other Builtins.     (line    6)
* lrintl:                                Other Builtins.     (line    6)
* lround:                                Other Builtins.     (line    6)
* lroundf:                               Other Builtins.     (line    6)
* lroundl:                               Other Builtins.     (line    6)
* 'm' in constraint:                     Simple Constraints. (line   17)
* M32C options:                          M32C Options.       (line    6)
* M32R/D options:                        M32R/D Options.     (line    6)
* M680x0 options:                        M680x0 Options.     (line    6)
* machine dependent options:             Submodel Options.   (line    6)
* machine specific constraints:          Machine Constraints.
                                                             (line    6)
* macro with variable arguments:         Variadic Macros.    (line    6)
* macros, inline alternative:            Inline.             (line    6)
* macros, local labels:                  Local Labels.       (line    6)
* macros, local variables in:            Typeof.             (line   46)
* macros, statements in expressions:     Statement Exprs.    (line    6)
* macros, types of arguments:            Typeof.             (line    6)
* 'make':                                Preprocessor Options.
                                                             (line  185)
* malloc:                                Other Builtins.     (line    6)
* 'malloc' function attribute:           Function Attributes.
                                                             (line  923)
* matching constraint:                   Simple Constraints. (line  137)
* 'may_alias' type attribute:            Type Attributes.    (line  234)
* MCore options:                         MCore Options.      (line    6)
* 'medium_call' function attribute, ARC: Function Attributes.
                                                             (line  875)
* member fns, automatically 'inline':    Inline.             (line   71)
* memchr:                                Other Builtins.     (line    6)
* memcmp:                                Other Builtins.     (line    6)
* memcpy:                                Other Builtins.     (line    6)
* memory references in constraints:      Simple Constraints. (line   17)
* mempcpy:                               Other Builtins.     (line    6)
* memset:                                Other Builtins.     (line    6)
* MeP options:                           MeP Options.        (line    6)
* Mercury:                               G++ and GCC.        (line   23)
* message formatting:                    Language Independent Options.
                                                             (line    6)
* messages, warning:                     Warning Options.    (line    6)
* messages, warning and error:           Warnings and Errors.
                                                             (line    6)
* MicroBlaze Options:                    MicroBlaze Options. (line    6)
* 'micromips' function attribute:        Function Attributes.
                                                             (line  952)
* middle-operands, omitted:              Conditionals.       (line    6)
* MIPS options:                          MIPS Options.       (line    6)
* 'mips16' function attribute, MIPS:     Function Attributes.
                                                             (line  936)
* misunderstandings in C++:              C++ Misunderstandings.
                                                             (line    6)
* mixed declarations and code:           Mixed Declarations. (line    6)
* mixing assembly language and C:        Using Assembly Language with C.
                                                             (line    6)
* 'mktemp', and constant strings:        Incompatibilities.  (line   13)
* MMIX Options:                          MMIX Options.       (line    6)
* MN10300 options:                       MN10300 Options.    (line    6)
* 'mode' variable attribute:             Variable Attributes.
                                                             (line  134)
* 'model' function attribute, M32R/D:    Function Attributes.
                                                             (line  969)
* 'model' variable attribute, IA-64:     Variable Attributes.
                                                             (line  425)
* 'model-name' variable attribute, M32R/D: Variable Attributes.
                                                             (line  440)
* modf:                                  Other Builtins.     (line    6)
* modff:                                 Other Builtins.     (line    6)
* modfl:                                 Other Builtins.     (line    6)
* modifiers in constraints:              Modifiers.          (line    6)
* Moxie Options:                         Moxie Options.      (line    6)
* MSP430 Options:                        MSP430 Options.     (line    6)
* 'ms_abi' function attribute, x86:      Function Attributes.
                                                             (line  991)
* 'ms_hook_prologue' function attribute, x86: Function Attributes.
                                                             (line 1016)
* 'ms_struct' type attribute, PowerPC:   Type Attributes.    (line  359)
* 'ms_struct' type attribute, x86:       Type Attributes.    (line  391)
* 'ms_struct' variable attribute, PowerPC: Variable Attributes.
                                                             (line  506)
* 'ms_struct' variable attribute, x86:   Variable Attributes.
                                                             (line  527)
* multiple alternative constraints:      Multi-Alternative.  (line    6)
* multiprecision arithmetic:             Long Long.          (line    6)
* 'n' in constraint:                     Simple Constraints. (line   73)
* 'naked' function attribute, ARM:       Function Attributes.
                                                             (line 1036)
* 'naked' function attribute, AVR:       Function Attributes.
                                                             (line 1036)
* 'naked' function attribute, MCORE:     Function Attributes.
                                                             (line 1036)
* 'naked' function attribute, MSP430:    Function Attributes.
                                                             (line 1036)
* 'naked' function attribute, NDS32:     Function Attributes.
                                                             (line 1036)
* 'naked' function attribute, RL78:      Function Attributes.
                                                             (line 1036)
* 'naked' function attribute, RX:        Function Attributes.
                                                             (line 1036)
* 'naked' function attribute, SPU:       Function Attributes.
                                                             (line 1036)
* Named Address Spaces:                  Named Address Spaces.
                                                             (line    6)
* names used in assembler code:          Asm Labels.         (line    6)
* naming convention, implementation headers: C++ Interface.  (line   43)
* NDS32 Options:                         NDS32 Options.      (line    6)
* 'near' function attribute, MeP:        Function Attributes.
                                                             (line 1047)
* 'near' function attribute, MIPS:       Function Attributes.
                                                             (line  913)
* 'near' type attribute, MeP:            Type Attributes.    (line  348)
* 'near' variable attribute, MeP:        Variable Attributes.
                                                             (line  472)
* nearbyint:                             Other Builtins.     (line    6)
* nearbyintf:                            Other Builtins.     (line    6)
* nearbyintl:                            Other Builtins.     (line    6)
* 'nested' function attribute, NDS32:    Function Attributes.
                                                             (line  773)
* nested functions:                      Nested Functions.   (line    6)
* 'nested_ready' function attribute, NDS32: Function Attributes.
                                                             (line  777)
* 'nesting' function attribute, Blackfin: Function Attributes.
                                                             (line 1052)
* newlines (escaped):                    Escaped Newlines.   (line    6)
* nextafter:                             Other Builtins.     (line    6)
* nextafterf:                            Other Builtins.     (line    6)
* nextafterl:                            Other Builtins.     (line    6)
* nexttoward:                            Other Builtins.     (line    6)
* nexttowardf:                           Other Builtins.     (line    6)
* nexttowardl:                           Other Builtins.     (line    6)
* NFC:                                   Warning Options.    (line 1467)
* NFKC:                                  Warning Options.    (line 1467)
* Nios II options:                       Nios II Options.    (line    6)
* 'nmi' function attribute, NDS32:       Function Attributes.
                                                             (line 1350)
* NMI handler functions on the Blackfin processor: Function Attributes.
                                                             (line 1057)
* 'nmi_handler' function attribute, Blackfin: Function Attributes.
                                                             (line 1057)
* 'noclone' function attribute:          Function Attributes.
                                                             (line 1096)
* 'nocommon' variable attribute:         Variable Attributes.
                                                             (line  105)
* 'nocompression' function attribute, MIPS: Function Attributes.
                                                             (line 1063)
* 'noinline' function attribute:         Function Attributes.
                                                             (line 1085)
* 'nomicromips' function attribute:      Function Attributes.
                                                             (line  952)
* 'nomips16' function attribute, MIPS:   Function Attributes.
                                                             (line  936)
* non-constant initializers:             Initializers.       (line    6)
* non-static inline function:            Inline.             (line   85)
* 'nonnull' function attribute:          Function Attributes.
                                                             (line 1106)
* 'noreturn' function attribute:         Function Attributes.
                                                             (line 1148)
* 'nosave_low_regs' function attribute, SH: Function Attributes.
                                                             (line 1186)
* note GCC_COLORS capability:            Language Independent Options.
                                                             (line   75)
* 'nothrow' function attribute:          Function Attributes.
                                                             (line 1179)
* 'notshared' type attribute, ARM:       Type Attributes.    (line  327)
* 'not_nested' function attribute, NDS32: Function Attributes.
                                                             (line  775)
* 'no_icf' function attribute:           Function Attributes.
                                                             (line 1102)
* 'no_instrument_function' function attribute: Function Attributes.
                                                             (line 1069)
* 'no_reorder' function attribute:       Function Attributes.
                                                             (line 1130)
* 'no_sanitize_address' function attribute: Function Attributes.
                                                             (line 1299)
* 'no_sanitize_thread' function attribute: Function Attributes.
                                                             (line 1307)
* 'no_sanitize_undefined' function attribute: Function Attributes.
                                                             (line 1312)
* 'no_split_stack' function attribute:   Function Attributes.
                                                             (line 1074)
* Nvidia PTX options:                    Nvidia PTX Options. (line    6)
* nvptx options:                         Nvidia PTX Options. (line    6)
* 'o' in constraint:                     Simple Constraints. (line   23)
* OBJC_INCLUDE_PATH:                     Environment Variables.
                                                             (line  130)
* Objective-C:                           G++ and GCC.        (line    6)
* Objective-C <1>:                       Standards.          (line  161)
* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options.
                                                             (line    6)
* Objective-C++:                         G++ and GCC.        (line    6)
* Objective-C++ <1>:                     Standards.          (line  161)
* offsettable address:                   Simple Constraints. (line   23)
* old-style function definitions:        Function Prototypes.
                                                             (line    6)
* omitted middle-operands:               Conditionals.       (line    6)
* open coding:                           Inline.             (line    6)
* OpenACC accelerator programming:       C Dialect Options.  (line  263)
* OpenMP parallel:                       C Dialect Options.  (line  276)
* OpenMP SIMD:                           C Dialect Options.  (line  285)
* operand constraints, 'asm':            Constraints.        (line    6)
* 'optimize' function attribute:         Function Attributes.
                                                             (line 1192)
* optimize options:                      Optimize Options.   (line    6)
* options to control diagnostics formatting: Language Independent Options.
                                                             (line    6)
* options to control warnings:           Warning Options.    (line    6)
* options, C++:                          C++ Dialect Options.
                                                             (line    6)
* options, code generation:              Code Gen Options.   (line    6)
* options, debugging:                    Debugging Options.  (line    6)
* options, dialect:                      C Dialect Options.  (line    6)
* options, directory search:             Directory Options.  (line    6)
* options, GCC command:                  Invoking GCC.       (line    6)
* options, grouping:                     Invoking GCC.       (line   26)
* options, linking:                      Link Options.       (line    6)
* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
                                                             (line    6)
* options, optimization:                 Optimize Options.   (line    6)
* options, order:                        Invoking GCC.       (line   30)
* options, preprocessor:                 Preprocessor Options.
                                                             (line    6)
* order of evaluation, side effects:     Non-bugs.           (line  196)
* order of options:                      Invoking GCC.       (line   30)
* 'OS_main' function attribute, AVR:     Function Attributes.
                                                             (line 1210)
* 'OS_task' function attribute, AVR:     Function Attributes.
                                                             (line 1210)
* other register constraints:            Simple Constraints. (line  161)
* output file option:                    Overall Options.    (line  191)
* overloaded virtual function, warning:  C++ Dialect Options.
                                                             (line  666)
* 'p' in constraint:                     Simple Constraints. (line  152)
* 'packed' type attribute:               Type Attributes.    (line  108)
* 'packed' variable attribute:           Variable Attributes.
                                                             (line  145)
* parameter forward declaration:         Variable Length.    (line   68)
* 'partial_save' function attribute, NDS32: Function Attributes.
                                                             (line  785)
* Pascal:                                G++ and GCC.        (line   23)
* 'pcs' function attribute, ARM:         Function Attributes.
                                                             (line 1234)
* PDP-11 Options:                        PDP-11 Options.     (line    6)
* PIC:                                   Code Gen Options.   (line  279)
* picoChip options:                      picoChip Options.   (line    6)
* pmf:                                   Bound member functions.
                                                             (line    6)
* pointer arguments:                     Function Attributes.
                                                             (line  226)
* Pointer Bounds Checker attributes:     Function Attributes.
                                                             (line 1318)
* Pointer Bounds Checker attributes <1>: Type Attributes.    (line  295)
* Pointer Bounds Checker builtins:       Pointer Bounds Checker builtins.
                                                             (line    6)
* Pointer Bounds Checker options:        Debugging Options.  (line  392)
* pointer to member function:            Bound member functions.
                                                             (line    6)
* pointers to arrays:                    Pointers to Arrays. (line    6)
* portions of temporary objects, pointers to: Temporaries.   (line    6)
* pow:                                   Other Builtins.     (line    6)
* pow10:                                 Other Builtins.     (line    6)
* pow10f:                                Other Builtins.     (line    6)
* pow10l:                                Other Builtins.     (line    6)
* PowerPC options:                       PowerPC Options.    (line    6)
* powf:                                  Other Builtins.     (line    6)
* powl:                                  Other Builtins.     (line    6)
* pragma GCC ivdep:                      Loop-Specific Pragmas.
                                                             (line    7)
* pragma GCC optimize:                   Function Specific Option Pragmas.
                                                             (line   20)
* pragma GCC pop_options:                Function Specific Option Pragmas.
                                                             (line   31)
* pragma GCC push_options:               Function Specific Option Pragmas.
                                                             (line   31)
* pragma GCC reset_options:              Function Specific Option Pragmas.
                                                             (line   39)
* pragma GCC target:                     Function Specific Option Pragmas.
                                                             (line    7)
* pragma, address:                       M32C Pragmas.       (line   15)
* pragma, align:                         Solaris Pragmas.    (line   11)
* pragma, call:                          MeP Pragmas.        (line   48)
* pragma, coprocessor available:         MeP Pragmas.        (line   13)
* pragma, coprocessor call_saved:        MeP Pragmas.        (line   20)
* pragma, coprocessor subclass:          MeP Pragmas.        (line   28)
* pragma, custom io_volatile:            MeP Pragmas.        (line    7)
* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
* pragma, diagnostic <1>:                Diagnostic Pragmas. (line   57)
* pragma, disinterrupt:                  MeP Pragmas.        (line   38)
* pragma, fini:                          Solaris Pragmas.    (line   20)
* pragma, init:                          Solaris Pragmas.    (line   26)
* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
                                                             (line   14)
* pragma, long_calls:                    ARM Pragmas.        (line   11)
* pragma, long_calls_off:                ARM Pragmas.        (line   17)
* pragma, mark:                          Darwin Pragmas.     (line   11)
* pragma, memregs:                       M32C Pragmas.       (line    7)
* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
* pragma, options align:                 Darwin Pragmas.     (line   14)
* pragma, pop_macro:                     Push/Pop Macro Pragmas.
                                                             (line   15)
* pragma, push_macro:                    Push/Pop Macro Pragmas.
                                                             (line   11)
* pragma, reason for not using:          Function Attributes.
                                                             (line 2042)
* pragma, redefine_extname:              Symbol-Renaming Pragmas.
                                                             (line   13)
* pragma, segment:                       Darwin Pragmas.     (line   21)
* pragma, unused:                        Darwin Pragmas.     (line   24)
* pragma, visibility:                    Visibility Pragmas. (line    8)
* pragma, weak:                          Weak Pragmas.       (line   10)
* pragmas:                               Pragmas.            (line    6)
* pragmas in C++, effect on inlining:    C++ Interface.      (line   57)
* pragmas, interface and implementation: C++ Interface.      (line    6)
* pragmas, warning of unknown:           Warning Options.    (line  722)
* precompiled headers:                   Precompiled Headers.
                                                             (line    6)
* preprocessing numbers:                 Incompatibilities.  (line  173)
* preprocessing tokens:                  Incompatibilities.  (line  173)
* preprocessor options:                  Preprocessor Options.
                                                             (line    6)
* printf:                                Other Builtins.     (line    6)
* printf_unlocked:                       Other Builtins.     (line    6)
* 'prof':                                Debugging Options.  (line  643)
* 'progmem' variable attribute, AVR:     Variable Attributes.
                                                             (line  315)
* promotion of formal parameters:        Function Prototypes.
                                                             (line    6)
* 'pure' function attribute:             Function Attributes.
                                                             (line 1253)
* push address instruction:              Simple Constraints. (line  152)
* putchar:                               Other Builtins.     (line    6)
* puts:                                  Other Builtins.     (line    6)
* 'q' floating point suffix:             Floating Types.     (line    6)
* 'Q' floating point suffix:             Floating Types.     (line    6)
* 'qsort', and global register variables: Global Reg Vars.   (line   41)
* question mark:                         Multi-Alternative.  (line   27)
* quote GCC_COLORS capability:           Language Independent Options.
                                                             (line   85)
* 'r' fixed-suffix:                      Fixed-Point.        (line    6)
* 'R' fixed-suffix:                      Fixed-Point.        (line    6)
* 'r' in constraint:                     Simple Constraints. (line   64)
* 'RAMPD':                               AVR Options.        (line  354)
* 'RAMPX':                               AVR Options.        (line  354)
* 'RAMPY':                               AVR Options.        (line  354)
* 'RAMPZ':                               AVR Options.        (line  354)
* ranges in case statements:             Case Ranges.        (line    6)
* read-only strings:                     Incompatibilities.  (line    9)
* 'reentrant' function attribute, MSP430: Function Attributes.
                                                             (line  690)
* register variable after 'longjmp':     Global Reg Vars.    (line   65)
* registers for local variables:         Local Reg Vars.     (line    6)
* registers in constraints:              Simple Constraints. (line   64)
* registers, global allocation:          Explicit Reg Vars.  (line    6)
* registers, global variables in:        Global Reg Vars.    (line    6)
* 'regparm' function attribute, x86:     Function Attributes.
                                                             (line 1328)
* relocation truncated to fit (ColdFire): M680x0 Options.    (line  325)
* relocation truncated to fit (MIPS):    MIPS Options.       (line  235)
* remainder:                             Other Builtins.     (line    6)
* remainderf:                            Other Builtins.     (line    6)
* remainderl:                            Other Builtins.     (line    6)
* remquo:                                Other Builtins.     (line    6)
* remquof:                               Other Builtins.     (line    6)
* remquol:                               Other Builtins.     (line    6)
* 'renesas' function attribute, SH:      Function Attributes.
                                                             (line 1371)
* reordering, warning:                   C++ Dialect Options.
                                                             (line  584)
* reporting bugs:                        Bugs.               (line    6)
* 'resbank' function attribute, SH:      Function Attributes.
                                                             (line 1375)
* 'reset' function attribute, NDS32:     Function Attributes.
                                                             (line 1345)
* reset handler functions:               Function Attributes.
                                                             (line 1345)
* rest argument (in macro):              Variadic Macros.    (line    6)
* restricted pointers:                   Restricted Pointers.
                                                             (line    6)
* restricted references:                 Restricted Pointers.
                                                             (line    6)
* restricted this pointer:               Restricted Pointers.
                                                             (line    6)
* 'returns_nonnull' function attribute:  Function Attributes.
                                                             (line 1138)
* 'returns_twice' function attribute:    Function Attributes.
                                                             (line 1389)
* rindex:                                Other Builtins.     (line    6)
* rint:                                  Other Builtins.     (line    6)
* rintf:                                 Other Builtins.     (line    6)
* rintl:                                 Other Builtins.     (line    6)
* RL78 Options:                          RL78 Options.       (line    6)
* round:                                 Other Builtins.     (line    6)
* roundf:                                Other Builtins.     (line    6)
* roundl:                                Other Builtins.     (line    6)
* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
                                                             (line    6)
* RTTI:                                  Vague Linkage.      (line   42)
* run-time options:                      Code Gen Options.   (line    6)
* RX Options:                            RX Options.         (line    6)
* 's' in constraint:                     Simple Constraints. (line  100)
* S/390 and zSeries Options:             S/390 and zSeries Options.
                                                             (line    6)
* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
                                                             (line 1398)
* 'saveall' function attribute, Blackfin: Function Attributes.
                                                             (line 1398)
* 'saveall' function attribute, H8/300:  Function Attributes.
                                                             (line 1398)
* 'save_all' function attribute, NDS32:  Function Attributes.
                                                             (line  782)
* 'save_volatiles' function attribute, MicroBlaze: Function Attributes.
                                                             (line 1403)
* scalb:                                 Other Builtins.     (line    6)
* scalbf:                                Other Builtins.     (line    6)
* scalbl:                                Other Builtins.     (line    6)
* scalbln:                               Other Builtins.     (line    6)
* scalblnf:                              Other Builtins.     (line    6)
* scalblnf <1>:                          Other Builtins.     (line    6)
* scalbn:                                Other Builtins.     (line    6)
* scalbnf:                               Other Builtins.     (line    6)
* 'scanf', and constant strings:         Incompatibilities.  (line   17)
* scanfnl:                               Other Builtins.     (line    6)
* scope of a variable length array:      Variable Length.    (line   22)
* scope of declaration:                  Disappointments.    (line   21)
* scope of external declarations:        Incompatibilities.  (line   80)
* Score Options:                         Score Options.      (line    6)
* search path:                           Directory Options.  (line    6)
* 'section' function attribute:          Function Attributes.
                                                             (line 1420)
* 'section' variable attribute:          Variable Attributes.
                                                             (line  166)
* 'selectany' variable attribute:        Variable Attributes.
                                                             (line  280)
* 'sentinel' function attribute:         Function Attributes.
                                                             (line 1436)
* setjmp:                                Global Reg Vars.    (line   65)
* 'setjmp' incompatibilities:            Incompatibilities.  (line   39)
* shared strings:                        Incompatibilities.  (line    9)
* 'shared' variable attribute:           Variable Attributes.
                                                             (line  211)
* 'shortcall' function attribute, Blackfin: Function Attributes.
                                                             (line  899)
* 'shortcall' function attribute, PowerPC: Function Attributes.
                                                             (line  899)
* 'short_call' function attribute, ARC:  Function Attributes.
                                                             (line  875)
* 'short_call' function attribute, ARM:  Function Attributes.
                                                             (line  875)
* 'short_call' function attribute, Epiphany: Function Attributes.
                                                             (line  875)
* side effect in '?:':                   Conditionals.       (line   20)
* side effects, macro argument:          Statement Exprs.    (line   35)
* side effects, order of evaluation:     Non-bugs.           (line  196)
* 'signal' function attribute, AVR:      Function Attributes.
                                                             (line 1467)
* signbit:                               Other Builtins.     (line    6)
* signbitd128:                           Other Builtins.     (line    6)
* signbitd32:                            Other Builtins.     (line    6)
* signbitd64:                            Other Builtins.     (line    6)
* signbitf:                              Other Builtins.     (line    6)
* signbitl:                              Other Builtins.     (line    6)
* signed and unsigned values, comparison warning: Warning Options.
                                                             (line 1285)
* significand:                           Other Builtins.     (line    6)
* significandf:                          Other Builtins.     (line    6)
* significandl:                          Other Builtins.     (line    6)
* SIMD:                                  C Dialect Options.  (line  285)
* simple constraints:                    Simple Constraints. (line    6)
* sin:                                   Other Builtins.     (line    6)
* sincos:                                Other Builtins.     (line    6)
* sincosf:                               Other Builtins.     (line    6)
* sincosl:                               Other Builtins.     (line    6)
* sinf:                                  Other Builtins.     (line    6)
* sinh:                                  Other Builtins.     (line    6)
* sinhf:                                 Other Builtins.     (line    6)
* sinhl:                                 Other Builtins.     (line    6)
* sinl:                                  Other Builtins.     (line    6)
* sizeof:                                Typeof.             (line    6)
* smaller data references:               M32R/D Options.     (line   57)
* smaller data references <1>:           Nios II Options.    (line    9)
* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
                                                             (line  767)
* snprintf:                              Other Builtins.     (line    6)
* Solaris 2 options:                     Solaris 2 Options.  (line    6)
* SPARC options:                         SPARC Options.      (line    6)
* Spec Files:                            Spec Files.         (line    6)
* specified registers:                   Explicit Reg Vars.  (line    6)
* specifying compiler version and target machine: Target Options.
                                                             (line    6)
* specifying hardware config:            Submodel Options.   (line    6)
* specifying machine version:            Target Options.     (line    6)
* specifying registers for local variables: Local Reg Vars.  (line    6)
* speed of compilation:                  Precompiled Headers.
                                                             (line    6)
* sprintf:                               Other Builtins.     (line    6)
* SPU options:                           SPU Options.        (line    6)
* 'spu_vector' type attribute, SPU:      Type Attributes.    (line  378)
* 'spu_vector' variable attribute, SPU:  Variable Attributes.
                                                             (line  515)
* 'sp_switch' function attribute, SH:    Function Attributes.
                                                             (line 1485)
* sqrt:                                  Other Builtins.     (line    6)
* sqrtf:                                 Other Builtins.     (line    6)
* sqrtl:                                 Other Builtins.     (line    6)
* sscanf:                                Other Builtins.     (line    6)
* 'sscanf', and constant strings:        Incompatibilities.  (line   17)
* 'sseregparm' function attribute, x86:  Function Attributes.
                                                             (line 1356)
* 'stack_protect' function attribute:    Function Attributes.
                                                             (line 1080)
* statements inside expressions:         Statement Exprs.    (line    6)
* static data in C++, declaring and defining: Static Definitions.
                                                             (line    6)
* 'stdcall' function attribute, x86-32:  Function Attributes.
                                                             (line 1495)
* stpcpy:                                Other Builtins.     (line    6)
* stpncpy:                               Other Builtins.     (line    6)
* strcasecmp:                            Other Builtins.     (line    6)
* strcat:                                Other Builtins.     (line    6)
* strchr:                                Other Builtins.     (line    6)
* strcmp:                                Other Builtins.     (line    6)
* strcpy:                                Other Builtins.     (line    6)
* strcspn:                               Other Builtins.     (line    6)
* strdup:                                Other Builtins.     (line    6)
* strfmon:                               Other Builtins.     (line    6)
* strftime:                              Other Builtins.     (line    6)
* string constants:                      Incompatibilities.  (line    9)
* strlen:                                Other Builtins.     (line    6)
* strncasecmp:                           Other Builtins.     (line    6)
* strncat:                               Other Builtins.     (line    6)
* strncmp:                               Other Builtins.     (line    6)
* strncpy:                               Other Builtins.     (line    6)
* strndup:                               Other Builtins.     (line    6)
* strpbrk:                               Other Builtins.     (line    6)
* strrchr:                               Other Builtins.     (line    6)
* strspn:                                Other Builtins.     (line    6)
* strstr:                                Other Builtins.     (line    6)
* 'struct':                              Unnamed Fields.     (line    6)
* struct __htm_tdb:                      S/390 System z Built-in Functions.
                                                             (line   49)
* structures:                            Incompatibilities.  (line  146)
* structures, constructor expression:    Compound Literals.  (line    6)
* submodel options:                      Submodel Options.   (line    6)
* subscripting:                          Subscripting.       (line    6)
* subscripting and function values:      Subscripting.       (line    6)
* suffixes for C++ source:               Invoking G++.       (line    6)
* SUNPRO_DEPENDENCIES:                   Environment Variables.
                                                             (line  170)
* suppressing warnings:                  Warning Options.    (line    6)
* surprises in C++:                      C++ Misunderstandings.
                                                             (line    6)
* syntax checking:                       Warning Options.    (line   13)
* 'syscall_linkage' function attribute, IA-64: Function Attributes.
                                                             (line 1500)
* system headers, warnings from:         Warning Options.    (line  941)
* 'sysv_abi' function attribute, x86:    Function Attributes.
                                                             (line  991)
* tan:                                   Other Builtins.     (line    6)
* tanf:                                  Other Builtins.     (line    6)
* tanh:                                  Other Builtins.     (line    6)
* tanhf:                                 Other Builtins.     (line    6)
* tanhl:                                 Other Builtins.     (line    6)
* tanl:                                  Other Builtins.     (line    6)
* 'target' function attribute:           Function Attributes.
                                                             (line 1507)
* target machine, specifying:            Target Options.     (line    6)
* target options:                        Target Options.     (line    6)
* 'target("abm")' function attribute, x86: Function Attributes.
                                                             (line 1540)
* 'target("aes")' function attribute, x86: Function Attributes.
                                                             (line 1545)
* 'target("align-stringops")' function attribute, x86: Function Attributes.
                                                             (line 1639)
* 'target("altivec")' function attribute, PowerPC: Function Attributes.
                                                             (line 1665)
* 'target("arch=ARCH")' function attribute, x86: Function Attributes.
                                                             (line 1648)
* 'target("avoid-indexed-addresses")' function attribute, PowerPC: Function Attributes.
                                                             (line 1786)
* 'target("cld")' function attribute, x86: Function Attributes.
                                                             (line 1610)
* 'target("cmpb")' function attribute, PowerPC: Function Attributes.
                                                             (line 1671)
* 'target("cpu=CPU")' function attribute, PowerPC: Function Attributes.
                                                             (line 1801)
* 'target("custom-fpu-cfg=NAME")' function attribute, Nios II: Function Attributes.
                                                             (line 1827)
* 'target("custom-INSN=N")' function attribute, Nios II: Function Attributes.
                                                             (line 1818)
* 'target("default")' function attribute, x86: Function Attributes.
                                                             (line 1548)
* 'target("dlmzb")' function attribute, PowerPC: Function Attributes.
                                                             (line 1677)
* 'target("fancy-math-387")' function attribute, x86: Function Attributes.
                                                             (line 1614)
* 'target("fma4")' function attribute, x86: Function Attributes.
                                                             (line 1594)
* 'target("fpmath=FPMATH")' function attribute, x86: Function Attributes.
                                                             (line 1656)
* 'target("fprnd")' function attribute, PowerPC: Function Attributes.
                                                             (line 1684)
* 'target("friz")' function attribute, PowerPC: Function Attributes.
                                                             (line 1777)
* 'target("fused-madd")' function attribute, x86: Function Attributes.
                                                             (line 1619)
* 'target("hard-dfp")' function attribute, PowerPC: Function Attributes.
                                                             (line 1690)
* 'target("ieee-fp")' function attribute, x86: Function Attributes.
                                                             (line 1624)
* 'target("inline-all-stringops")' function attribute, x86: Function Attributes.
                                                             (line 1629)
* 'target("inline-stringops-dynamically")' function attribute, x86: Function Attributes.
                                                             (line 1633)
* 'target("isel")' function attribute, PowerPC: Function Attributes.
                                                             (line 1696)
* 'target("longcall")' function attribute, PowerPC: Function Attributes.
                                                             (line 1796)
* 'target("lwp")' function attribute, x86: Function Attributes.
                                                             (line 1602)
* 'target("mfcrf")' function attribute, PowerPC: Function Attributes.
                                                             (line 1700)
* 'target("mfpgpr")' function attribute, PowerPC: Function Attributes.
                                                             (line 1707)
* 'target("mmx")' function attribute, x86: Function Attributes.
                                                             (line 1553)
* 'target("mulhw")' function attribute, PowerPC: Function Attributes.
                                                             (line 1714)
* 'target("multiple")' function attribute, PowerPC: Function Attributes.
                                                             (line 1721)
* 'target("no-custom-INSN")' function attribute, Nios II: Function Attributes.
                                                             (line 1818)
* 'target("paired")' function attribute, PowerPC: Function Attributes.
                                                             (line 1791)
* 'target("pclmul")' function attribute, x86: Function Attributes.
                                                             (line 1557)
* 'target("popcnt")' function attribute, x86: Function Attributes.
                                                             (line 1561)
* 'target("popcntb")' function attribute, PowerPC: Function Attributes.
                                                             (line 1732)
* 'target("popcntd")' function attribute, PowerPC: Function Attributes.
                                                             (line 1739)
* 'target("powerpc-gfxopt")' function attribute, PowerPC: Function Attributes.
                                                             (line 1745)
* 'target("powerpc-gpopt")' function attribute, PowerPC: Function Attributes.
                                                             (line 1751)
* 'target("recip")' function attribute, x86: Function Attributes.
                                                             (line 1643)
* 'target("recip-precision")' function attribute, PowerPC: Function Attributes.
                                                             (line 1757)
* 'target("sse")' function attribute, x86: Function Attributes.
                                                             (line 1565)
* 'target("sse2")' function attribute, x86: Function Attributes.
                                                             (line 1569)
* 'target("sse3")' function attribute, x86: Function Attributes.
                                                             (line 1573)
* 'target("sse4")' function attribute, x86: Function Attributes.
                                                             (line 1577)
* 'target("sse4.1")' function attribute, x86: Function Attributes.
                                                             (line 1582)
* 'target("sse4.2")' function attribute, x86: Function Attributes.
                                                             (line 1586)
* 'target("sse4a")' function attribute, x86: Function Attributes.
                                                             (line 1590)
* 'target("ssse3")' function attribute, x86: Function Attributes.
                                                             (line 1606)
* 'target("string")' function attribute, PowerPC: Function Attributes.
                                                             (line 1763)
* 'target("tune=TUNE")' function attribute, PowerPC: Function Attributes.
                                                             (line 1808)
* 'target("tune=TUNE")' function attribute, x86: Function Attributes.
                                                             (line 1652)
* 'target("update")' function attribute, PowerPC: Function Attributes.
                                                             (line 1726)
* 'target("vsx")' function attribute, PowerPC: Function Attributes.
                                                             (line 1769)
* 'target("xop")' function attribute, x86: Function Attributes.
                                                             (line 1598)
* TC1:                                   Standards.          (line   13)
* TC2:                                   Standards.          (line   13)
* TC3:                                   Standards.          (line   13)
* Technical Corrigenda:                  Standards.          (line   13)
* Technical Corrigendum 1:               Standards.          (line   13)
* Technical Corrigendum 2:               Standards.          (line   13)
* Technical Corrigendum 3:               Standards.          (line   13)
* template instantiation:                Template Instantiation.
                                                             (line    6)
* temporaries, lifetime of:              Temporaries.        (line    6)
* tgamma:                                Other Builtins.     (line    6)
* tgammaf:                               Other Builtins.     (line    6)
* tgammal:                               Other Builtins.     (line    6)
* 'thiscall' function attribute, x86-32: Function Attributes.
                                                             (line  410)
* Thread-Local Storage:                  Thread-Local.       (line    6)
* thunks:                                Nested Functions.   (line    6)
* TILE-Gx options:                       TILE-Gx Options.    (line    6)
* TILEPro options:                       TILEPro Options.    (line    6)
* tiny data section on the H8/300H and H8S: Variable Attributes.
                                                             (line  413)
* 'tiny' type attribute, MeP:            Type Attributes.    (line  348)
* 'tiny' variable attribute, MeP:        Variable Attributes.
                                                             (line  468)
* 'tiny_data' variable attribute, H8/300: Variable Attributes.
                                                             (line  413)
* TLS:                                   Thread-Local.       (line    6)
* 'tls_model' variable attribute:        Variable Attributes.
                                                             (line  234)
* TMPDIR:                                Environment Variables.
                                                             (line   45)
* toascii:                               Other Builtins.     (line    6)
* tolower:                               Other Builtins.     (line    6)
* toupper:                               Other Builtins.     (line    6)
* towlower:                              Other Builtins.     (line    6)
* towupper:                              Other Builtins.     (line    6)
* traditional C language:                C Dialect Options.  (line  345)
* 'transparent_union' type attribute:    Type Attributes.    (line  143)
* 'trapa_handler' function attribute, SH: Function Attributes.
                                                             (line 1844)
* 'trap_exit' function attribute, SH:    Function Attributes.
                                                             (line 1839)
* trunc:                                 Other Builtins.     (line    6)
* truncf:                                Other Builtins.     (line    6)
* truncl:                                Other Builtins.     (line    6)
* two-stage name lookup:                 Name lookup.        (line    6)
* type alignment:                        Alignment.          (line    6)
* type attributes:                       Type Attributes.    (line    6)
* typedef names as function parameters:  Incompatibilities.  (line   97)
* typeof:                                Typeof.             (line    6)
* 'type_info':                           Vague Linkage.      (line   42)
* 'uhk' fixed-suffix:                    Fixed-Point.        (line    6)
* 'UHK' fixed-suffix:                    Fixed-Point.        (line    6)
* 'uhr' fixed-suffix:                    Fixed-Point.        (line    6)
* 'UHR' fixed-suffix:                    Fixed-Point.        (line    6)
* 'uk' fixed-suffix:                     Fixed-Point.        (line    6)
* 'UK' fixed-suffix:                     Fixed-Point.        (line    6)
* 'ulk' fixed-suffix:                    Fixed-Point.        (line    6)
* 'ULK' fixed-suffix:                    Fixed-Point.        (line    6)
* 'ULL' integer suffix:                  Long Long.          (line    6)
* 'ullk' fixed-suffix:                   Fixed-Point.        (line    6)
* 'ULLK' fixed-suffix:                   Fixed-Point.        (line    6)
* 'ullr' fixed-suffix:                   Fixed-Point.        (line    6)
* 'ULLR' fixed-suffix:                   Fixed-Point.        (line    6)
* 'ulr' fixed-suffix:                    Fixed-Point.        (line    6)
* 'ULR' fixed-suffix:                    Fixed-Point.        (line    6)
* undefined behavior:                    Bug Criteria.       (line   17)
* undefined function value:              Bug Criteria.       (line   17)
* underscores in variables in macros:    Typeof.             (line   46)
* 'union':                               Unnamed Fields.     (line    6)
* union, casting to a:                   Cast to Union.      (line    6)
* unions:                                Incompatibilities.  (line  146)
* unknown pragmas, warning:              Warning Options.    (line  722)
* unresolved references and '-nodefaultlibs': Link Options.  (line   91)
* unresolved references and '-nostdlib': Link Options.       (line   91)
* 'unused' function attribute:           Function Attributes.
                                                             (line 1848)
* 'unused' label attribute:              Label Attributes.   (line   29)
* 'unused' type attribute:               Type Attributes.    (line  196)
* 'unused' variable attribute:           Variable Attributes.
                                                             (line  243)
* 'ur' fixed-suffix:                     Fixed-Point.        (line    6)
* 'UR' fixed-suffix:                     Fixed-Point.        (line    6)
* 'used' function attribute:             Function Attributes.
                                                             (line 1853)
* 'used' variable attribute:             Variable Attributes.
                                                             (line  248)
* User stack pointer in interrupts on the Blackfin: Function Attributes.
                                                             (line  829)
* 'use_debug_exception_return' function attribute, MIPS: Function Attributes.
                                                             (line  750)
* 'use_shadow_register_set' function attribute, MIPS: Function Attributes.
                                                             (line  741)
* 'V' in constraint:                     Simple Constraints. (line   43)
* V850 Options:                          V850 Options.       (line    6)
* vague linkage:                         Vague Linkage.      (line    6)
* value after 'longjmp':                 Global Reg Vars.    (line   65)
* variable addressability on the M32R/D: Variable Attributes.
                                                             (line  440)
* variable alignment:                    Alignment.          (line    6)
* variable attributes:                   Variable Attributes.
                                                             (line    6)
* variable number of arguments:          Variadic Macros.    (line    6)
* variable-length array in a structure:  Variable Length.    (line   26)
* variable-length array scope:           Variable Length.    (line   22)
* variable-length arrays:                Variable Length.    (line    6)
* variables in specified registers:      Explicit Reg Vars.  (line    6)
* variables, local, in macros:           Typeof.             (line   46)
* variadic macros:                       Variadic Macros.    (line    6)
* VAX options:                           VAX Options.        (line    6)
* 'vector' function attribute, RX:       Function Attributes.
                                                             (line 1863)
* 'vector_size' variable attribute:      Variable Attributes.
                                                             (line  257)
* 'version_id' function attribute, IA-64: Function Attributes.
                                                             (line 1870)
* vfprintf:                              Other Builtins.     (line    6)
* vfscanf:                               Other Builtins.     (line    6)
* 'visibility' function attribute:       Function Attributes.
                                                             (line 1880)
* 'visibility' type attribute:           Type Attributes.    (line  270)
* Visium options:                        Visium Options.     (line    6)
* VLAs:                                  Variable Length.    (line    6)
* 'vliw' function attribute, MeP:        Function Attributes.
                                                             (line 1976)
* void pointers, arithmetic:             Pointer Arith.      (line    6)
* void, size of pointer to:              Pointer Arith.      (line    6)
* volatile access:                       Volatiles.          (line    6)
* volatile access <1>:                   C++ Volatiles.      (line    6)
* 'volatile' applied to function:        Function Attributes.
                                                             (line    6)
* volatile 'asm':                        Extended Asm.       (line  109)
* volatile read:                         Volatiles.          (line    6)
* volatile read <1>:                     C++ Volatiles.      (line    6)
* volatile write:                        Volatiles.          (line    6)
* volatile write <1>:                    C++ Volatiles.      (line    6)
* vprintf:                               Other Builtins.     (line    6)
* vscanf:                                Other Builtins.     (line    6)
* vsnprintf:                             Other Builtins.     (line    6)
* vsprintf:                              Other Builtins.     (line    6)
* vsscanf:                               Other Builtins.     (line    6)
* vtable:                                Vague Linkage.      (line   27)
* VxWorks Options:                       VxWorks Options.    (line    6)
* 'w' floating point suffix:             Floating Types.     (line    6)
* 'W' floating point suffix:             Floating Types.     (line    6)
* 'wakeup' function attribute, MSP430:   Function Attributes.
                                                             (line  696)
* 'warm' function attribute, NDS32:      Function Attributes.
                                                             (line 1352)
* warning for comparison of signed and unsigned values: Warning Options.
                                                             (line 1285)
* warning for overloaded virtual function: C++ Dialect Options.
                                                             (line  666)
* warning for reordering of member initializers: C++ Dialect Options.
                                                             (line  584)
* warning for unknown pragmas:           Warning Options.    (line  722)
* 'warning' function attribute:          Function Attributes.
                                                             (line  204)
* warning GCC_COLORS capability:         Language Independent Options.
                                                             (line   72)
* warning messages:                      Warning Options.    (line    6)
* warnings from system headers:          Warning Options.    (line  941)
* warnings vs errors:                    Warnings and Errors.
                                                             (line    6)
* 'warn_unused' type attribute:          C++ Attributes.     (line   79)
* 'warn_unused_result' function attribute: Function Attributes.
                                                             (line 1982)
* 'weak' function attribute:             Function Attributes.
                                                             (line 1999)
* 'weak' variable attribute:             Variable Attributes.
                                                             (line  301)
* 'weakref' function attribute:          Function Attributes.
                                                             (line 2008)
* whitespace:                            Incompatibilities.  (line  112)
* Windows Options for x86:               x86 Windows Options.
                                                             (line    6)
* 'X' in constraint:                     Simple Constraints. (line  122)
* X3.159-1989:                           Standards.          (line   13)
* x86 Options:                           x86 Options.        (line    6)
* x86 Windows Options:                   x86 Windows Options.
                                                             (line    6)
* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
* Xtensa Options:                        Xtensa Options.     (line    6)
* y0:                                    Other Builtins.     (line    6)
* y0f:                                   Other Builtins.     (line    6)
* y0l:                                   Other Builtins.     (line    6)
* y1:                                    Other Builtins.     (line    6)
* y1f:                                   Other Builtins.     (line    6)
* y1l:                                   Other Builtins.     (line    6)
* yn:                                    Other Builtins.     (line    6)
* ynf:                                   Other Builtins.     (line    6)
* ynl:                                   Other Builtins.     (line    6)
* zero-length arrays:                    Zero Length.        (line    6)
* zero-size structures:                  Empty Structures.   (line    6)
* zSeries options:                       zSeries Options.    (line    6)



Tag Table:
Node: Top1969
Node: G++ and GCC3813
Node: Standards5870
Node: Invoking GCC17962
Node: Option Summary21707
Node: Overall Options66035
Node: Invoking G++80222
Node: C Dialect Options81745
Node: C++ Dialect Options98999
Node: Objective-C and Objective-C++ Dialect Options130522
Node: Language Independent Options141757
Node: Warning Options146581
Node: Debugging Options224963
Node: Optimize Options296279
Ref: Type-punning359522
Node: Preprocessor Options448441
Ref: Wtrigraphs453224
Ref: dashMF457974
Ref: fdollars-in-identifiers468855
Node: Assembler Options479056
Node: Link Options479747
Ref: Link Options-Footnote-1493260
Node: Directory Options493596
Node: Spec Files500150
Node: Target Options521966
Node: Submodel Options522365
Node: AArch64 Options524130
Node: Adapteva Epiphany Options529867
Node: ARC Options535815
Node: ARM Options548259
Node: AVR Options565945
Node: Blackfin Options587253
Node: C6X Options595271
Node: CRIS Options596814
Node: CR16 Options600553
Node: Darwin Options601464
Node: DEC Alpha Options608904
Node: FR30 Options620520
Node: FRV Options621084
Node: GNU/Linux Options627848
Node: H8/300 Options629108
Node: HPPA Options630560
Node: IA-64 Options639750
Node: LM32 Options647797
Node: M32C Options648320
Node: M32R/D Options649593
Node: M680x0 Options653138
Node: MCore Options667173
Node: MeP Options668675
Node: MicroBlaze Options672635
Node: MIPS Options675437
Node: MMIX Options708894
Node: MN10300 Options711371
Node: Moxie Options713912
Node: MSP430 Options714399
Node: NDS32 Options717898
Node: Nios II Options719792
Node: Nvidia PTX Options729991
Node: PDP-11 Options730382
Node: picoChip Options732079
Node: PowerPC Options734217
Node: RL78 Options734438
Node: RS/6000 and PowerPC Options735285
Node: RX Options775606
Node: S/390 and zSeries Options782954
Node: Score Options791491
Node: SH Options792340
Node: Solaris 2 Options813211
Node: SPARC Options814733
Node: SPU Options828022
Node: System V Options832961
Node: TILE-Gx Options833787
Node: TILEPro Options834805
Node: V850 Options835309
Node: VAX Options841996
Node: Visium Options842534
Node: VMS Options844842
Node: VxWorks Options845658
Node: x86 Options846810
Node: x86 Windows Options890421
Node: Xstormy16 Options893218
Node: Xtensa Options893512
Node: zSeries Options897837
Node: Code Gen Options898033
Node: Environment Variables928817
Node: Precompiled Headers936820
Node: C Implementation942823
Node: Translation implementation944513
Node: Environment implementation945104
Node: Identifiers implementation945658
Node: Characters implementation946744
Node: Integers implementation950394
Node: Floating point implementation952279
Node: Arrays and pointers implementation955342
Ref: Arrays and pointers implementation-Footnote-1956802
Node: Hints implementation956928
Node: Structures unions enumerations and bit-fields implementation958413
Node: Qualifiers implementation960637
Node: Declarators implementation962417
Node: Statements implementation962758
Node: Preprocessing directives implementation963084
Node: Library functions implementation965405
Node: Architecture implementation966054
Node: Locale-specific behavior implementation967699
Node: C++ Implementation968004
Node: Conditionally-supported behavior969287
Node: Exception handling969904
Node: C Extensions970312
Node: Statement Exprs975468
Node: Local Labels979945
Node: Labels as Values982918
Ref: Labels as Values-Footnote-1985445
Node: Nested Functions985630
Node: Constructing Calls989588
Node: Typeof994305
Node: Conditionals998234
Node: __int128999123
Node: Long Long999648
Node: Complex1001124
Node: Floating Types1003712
Node: Half-Precision1004832
Node: Decimal Float1007017
Node: Hex Floats1008873
Node: Fixed-Point1009910
Node: Named Address Spaces1013170
Ref: AVR Named Address Spaces1013851
Node: Zero Length1019059
Node: Empty Structures1022099
Node: Variable Length1022505
Node: Variadic Macros1025361
Node: Escaped Newlines1027739
Node: Subscripting1028600
Node: Pointer Arith1029325
Node: Pointers to Arrays1029899
Node: Initializers1030644
Node: Compound Literals1031145
Node: Designated Inits1034491
Node: Case Ranges1038229
Node: Cast to Union1038910
Node: Mixed Declarations1040000
Node: Function Attributes1040510
Node: Label Attributes1134442
Node: Attribute Syntax1136285
Node: Function Prototypes1146496
Node: C++ Comments1148276
Node: Dollar Signs1148795
Node: Character Escapes1149260
Node: Variable Attributes1149554
Ref: AVR Variable Attributes1163260
Ref: MeP Variable Attributes1168624
Ref: x86 Variable Attributes1171184
Node: Type Attributes1176220
Ref: MeP Type Attributes1191465
Ref: PowerPC Type Attributes1191739
Ref: SPU Type Attributes1192600
Ref: x86 Type Attributes1192891
Node: Alignment1193580
Node: Inline1194950
Node: Volatiles1199926
Node: Using Assembly Language with C1202825
Node: Basic Asm1204029
Node: Extended Asm1208173
Ref: Volatile1211977
Ref: AssemblerTemplate1216062
Ref: OutputOperands1220300
Ref: InputOperands1227219
Ref: Clobbers1231455
Ref: GotoLabels1234761
Ref: x86Operandmodifiers1236896
Ref: x86floatingpointasmoperands1239067
Node: Constraints1242396
Node: Simple Constraints1243502
Node: Multi-Alternative1250816
Node: Modifiers1252823
Node: Machine Constraints1256327
Node: Asm Labels1312665
Node: Explicit Reg Vars1314363
Node: Global Reg Vars1315979
Node: Local Reg Vars1320479
Node: Size of an asm1323602
Node: Alternate Keywords1324846
Node: Incomplete Enums1326345
Node: Function Names1327101
Node: Return Address1328704
Node: Vector Extensions1332211
Node: Offsetof1339506
Node: __sync Builtins1340339
Node: __atomic Builtins1345915
Node: Integer Overflow Builtins1357513
Node: x86 specific memory model extensions for transactional memory1361638
Node: Object Size Checking1362907
Node: Pointer Bounds Checker builtins1368413
Node: Cilk Plus Builtins1374419
Node: Other Builtins1375324
Node: Target Builtins1404951
Node: AArch64 Built-in Functions1406443
Node: Alpha Built-in Functions1406898
Node: Altera Nios II Built-in Functions1409946
Node: ARC Built-in Functions1413933
Node: ARC SIMD Built-in Functions1419145
Node: ARM iWMMXt Built-in Functions1428041
Node: ARM C Language Extensions (ACLE)1435037
Node: ARM Floating Point Status and Control Intrinsics1436314
Node: AVR Built-in Functions1436790
Node: Blackfin Built-in Functions1439897
Node: FR-V Built-in Functions1440516
Node: Argument Types1441384
Node: Directly-mapped Integer Functions1443138
Node: Directly-mapped Media Functions1444222
Node: Raw read/write Functions1452428
Node: Other Built-in Functions1453336
Node: MIPS DSP Built-in Functions1454522
Node: MIPS Paired-Single Support1467019
Node: MIPS Loongson Built-in Functions1468518
Node: Paired-Single Arithmetic1475033
Node: Paired-Single Built-in Functions1475981
Node: MIPS-3D Built-in Functions1478648
Node: Other MIPS Built-in Functions1484026
Node: MSP430 Built-in Functions1485031
Node: NDS32 Built-in Functions1486432
Node: picoChip Built-in Functions1487725
Node: PowerPC Built-in Functions1489068
Node: PowerPC AltiVec/VSX Built-in Functions1492776
Node: PowerPC Hardware Transactional Memory Built-in Functions1632567
Node: RX Built-in Functions1639540
Node: S/390 System z Built-in Functions1643573
Node: SH Built-in Functions1648802
Node: SPARC VIS Built-in Functions1650530
Node: SPU Built-in Functions1656133
Node: TI C6X Built-in Functions1657950
Node: TILE-Gx Built-in Functions1658975
Node: TILEPro Built-in Functions1660094
Node: x86 Built-in Functions1661194
Node: x86 transactional memory intrinsics1720439
Node: Target Format Checks1723659
Node: Solaris Format Checks1724091
Node: Darwin Format Checks1724517
Node: Pragmas1725335
Node: ARM Pragmas1726071
Node: M32C Pragmas1726674
Node: MeP Pragmas1727746
Node: RS/6000 and PowerPC Pragmas1729814
Node: Darwin Pragmas1730555
Node: Solaris Pragmas1731622
Node: Symbol-Renaming Pragmas1732786
Node: Structure-Packing Pragmas1734403
Node: Weak Pragmas1736047
Node: Diagnostic Pragmas1736781
Node: Visibility Pragmas1739890
Node: Push/Pop Macro Pragmas1740575
Node: Function Specific Option Pragmas1741548
Node: Loop-Specific Pragmas1743396
Node: Unnamed Fields1744489
Node: Thread-Local1746686
Node: C99 Thread-Local Edits1748791
Node: C++98 Thread-Local Edits1750789
Node: Binary constants1754234
Node: C++ Extensions1754905
Node: C++ Volatiles1756616
Node: Restricted Pointers1758964
Node: Vague Linkage1760555
Node: C++ Interface1764178
Ref: C++ Interface-Footnote-11767975
Node: Template Instantiation1768113
Node: Bound member functions1774698
Node: C++ Attributes1776230
Node: Function Multiversioning1780669
Node: Namespace Association1782486
Node: Type Traits1783866
Node: Java Exceptions1790349
Node: Deprecated Features1791739
Node: Backwards Compatibility1794706
Node: Objective-C1796053
Node: GNU Objective-C runtime API1796660
Node: Modern GNU Objective-C runtime API1797667
Node: Traditional GNU Objective-C runtime API1800103
Node: Executing code before main1800830
Node: What you can and what you cannot do in +load1803574
Node: Type encoding1805944
Node: Legacy type encoding1810971
Node: @encode1812061
Node: Method signatures1812606
Node: Garbage Collection1814598
Node: Constant string objects1817288
Node: compatibility_alias1819797
Node: Exceptions1820522
Node: Synchronization1823232
Node: Fast enumeration1824416
Node: Using fast enumeration1824728
Node: c99-like fast enumeration syntax1825939
Node: Fast enumeration details1826642
Node: Fast enumeration protocol1828982
Node: Messaging with the GNU Objective-C runtime1832134
Node: Dynamically registering methods1833506
Node: Forwarding hook1835197
Node: Compatibility1838237
Node: Gcov1844793
Node: Gcov Intro1845328
Node: Invoking Gcov1848046
Node: Gcov and Optimization1862286
Node: Gcov Data Files1865288
Node: Cross-profiling1866683
Node: Gcov-tool1868537
Node: Gcov-tool Intro1868960
Node: Invoking Gcov-tool1870930
Node: Trouble1873509
Node: Actual Bugs1874926
Node: Interoperation1875373
Node: Incompatibilities1882264
Node: Fixed Headers1890416
Node: Standard Libraries1892074
Node: Disappointments1893446
Node: C++ Misunderstandings1897805
Node: Static Definitions1898616
Node: Name lookup1899669
Ref: Name lookup-Footnote-11904449
Node: Temporaries1904638
Node: Copy Assignment1906614
Node: Non-bugs1908421
Node: Warnings and Errors1918927
Node: Bugs1920689
Node: Bug Criteria1921156
Node: Bug Reporting1923366
Node: Service1923582
Node: Contributing1924401
Node: Funding1925141
Node: GNU Project1927631
Node: Copying1928277
Node: GNU Free Documentation License1965786
Node: Contributors1990904
Node: Option Index2029669
Node: Keyword Index2251664

End Tag Table
