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

Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
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.
END-INFO-DIR-ENTRY

 This file documents the use of the GNU compilers.

 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
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 (crosstool-NG 1.20.0) version 4.6.4.  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 Extensions::    GNU extensions to the C language family.
* C++ Implementation:: How GCC implements the ISO C++ specification.
* C++ Extensions::  GNU extensions to the C++ language.
* Objective-C::     GNU Objective-C runtime features.
* Compatibility::   Binary Compatibility
* Gcov::            'gcov'--a test coverage program.
* Trouble::         If you have trouble using GCC.
* Bugs::            How, why and where to report bugs.
* Service::         How to find suppliers of support for 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 incomplete support
for this standard version; see
<http://gcc.gnu.org/gcc-4.6/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 "C1X", is under
development; GCC has limited preliminary support for parts of this
standard, enabled with '-std=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=gnu1x' (for C1X with
GNU extensions).  The default, if no C language dialect options are
given, is '-std=gnu90'; this will change to '-std=gnu99' in some future
release when the C99 support is complete.  Some features that are part
of the C99 standard are accepted as extensions in C90 mode.

 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>'; and in C99, also
those in '<stdbool.h>' and '<stdint.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; 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 ISO C++ standard (1998) and contains experimental
support for the upcoming ISO C++ standard (200x).

 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' or '-std=c++98'; 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).

 The ISO C++ committee is working on a new ISO C++ standard, dubbed
C++0x, that is intended to be published by 2009.  C++0x contains several
changes to the C++ language, some of which have been implemented in an
experimental C++0x mode in GCC.  The C++0x mode in GCC tracks the draft
working paper for the C++0x standard; the latest working paper is
available on the ISO C++ committee's web site at
<http://www.open-std.org/jtc1/sc22/wg21/>.  For information regarding
the C++0x features available in the experimental C++0x mode, see
<http://gcc.gnu.org/projects/cxx0x.html>.  To select this standard in
GCC, use the option '-std=c++0x'; 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).

 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++0x' (for C++0x 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
===============

The Go language continues to evolve as of this writing; see the current
language specifications (http://golang.org/doc/go_spec.html).  At
present there are no specific versions of Go, and there is no way to
describe the language supported by GCC in terms of a specific version.
In general GCC tracks the evolving specification closely, and any given
release will support the language as of the date that the release was
frozen.

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'
would be '-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] -fdump-go-spec=FILE

_C Language Options_
     *Note Options Controlling C Dialect: C Dialect Options.
          -ansi  -std=STANDARD  -fgnu89-inline
          -aux-info FILENAME
          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
          -fhosted  -ffreestanding -fopenmp -fms-extensions -fplan9-extensions
          -trigraphs  -no-integrated-cpp  -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
          -fconserve-space  -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  -fstats  -ftemplate-depth=N
          -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
          -fno-default-inline  -fvisibility-inlines-hidden
          -fvisibility-ms-compat
          -Wabi  -Wconversion-null  -Wctor-dtor-privacy
          -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
          -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]
          -fno-diagnostics-show-option

_Warning Options_
     *Note Options to Request or Suppress Warnings: Warning Options.
          -fsyntax-only  -fmax-errors=N  -pedantic
          -pedantic-errors
          -w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Warray-bounds
          -Wno-attributes -Wno-builtin-macro-redefined
          -Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual
          -Wchar-subscripts -Wclobbered  -Wcomment
          -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wno-deprecated
          -Wno-deprecated-declarations -Wdisabled-optimization
          -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-y2k
          -Wframe-larger-than=LEN -Wjump-misses-init -Wignored-qualifiers
          -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
          -Winit-self  -Winline
          -Wno-int-to-pointer-cast -Wno-invalid-offsetof
          -Winvalid-pch -Wlarger-than=LEN  -Wunsafe-loop-optimizations
          -Wlogical-op -Wlong-long
          -Wmain  -Wmissing-braces  -Wmissing-field-initializers
          -Wmissing-format-attribute  -Wmissing-include-dirs
          -Wno-mudflap
          -Wno-multichar  -Wnonnull  -Wno-overflow
          -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded
          -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format
          -Wpointer-arith  -Wno-pointer-to-int-cast
          -Wredundant-decls
          -Wreturn-type  -Wsequence-point  -Wshadow
          -Wsign-compare  -Wsign-conversion  -Wstack-protector
          -Wstrict-aliasing -Wstrict-aliasing=n
          -Wstrict-overflow -Wstrict-overflow=N
          -Wsuggest-attribute=[pure|const|noreturn]
          -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand
          -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef
          -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas
          -Wunsuffixed-float-constants  -Wunused  -Wunused-function
          -Wunused-label  -Wunused-parameter -Wno-unused-result -Wunused-value
          -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable
          -Wvariadic-macros -Wvla -Wvolatile-register-var  -Wwrite-strings

_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
          -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-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-statistics
          -fdump-tree-all
          -fdump-tree-original[-N]
          -fdump-tree-optimized[-N]
          -fdump-tree-cfg -fdump-tree-vcg -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-mudflap[-N]
          -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-vrp[-N]
          -ftree-vectorizer-verbose=N
          -fdump-tree-storeccp[-N]
          -fdump-final-insns=FILE
          -fcompare-debug[=OPTS]  -fcompare-debug-second
          -feliminate-dwarf2-dups -feliminate-unused-debug-types
          -feliminate-unused-debug-symbols -femit-class-debug-always
          -fenable-icf-debug
          -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs
          -frandom-seed=STRING -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  -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf
          -gvms  -gxcoff  -gxcoff+
          -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.
          -falign-functions[=N] -falign-jumps[=N]
          -falign-labels[=N] -falign-loops[=N] -fassociative-math
          -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 -fdce -fdelayed-branch
          -fdelete-null-pointer-checks -fdse -fdevirtualize -fdse
          -fearly-inlining -fipa-sra -fexpensive-optimizations -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 -fif-conversion -fif-conversion2 -findirect-inlining
          -finline-functions -finline-functions-called-once -finline-limit=N
          -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg
          -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference
          -fipa-struct-reorg -fira-algorithm=ALGORITHM
          -fira-region=REGION
          -fira-loop-pressure -fno-ira-share-save-slots
          -fno-ira-share-spill-slots -fira-verbose=N
          -fivopts -fkeep-inline-functions -fkeep-static-consts
          -floop-block -floop-flatten -floop-interchange -floop-strip-mine
          -floop-parallelize-all -flto -flto-compression-level
          -flto-partition=ALG -flto-report -fmerge-all-constants
          -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves
          -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg
          -fno-default-inline
          -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-register-move -foptimize-sibling-calls
          -fpartial-inlining -fpeel-loops -fpredictive-commoning
          -fprefetch-loop-arrays
          -fprofile-correction -fprofile-dir=PATH -fprofile-generate
          -fprofile-generate=PATH
          -fprofile-use -fprofile-use=PATH -fprofile-values
          -freciprocal-math -fregmove -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-insns -fschedule-insns2 -fsection-anchors
          -fselective-scheduling -fselective-scheduling2
          -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops
          -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
          -fsplit-wide-types -fstack-protector -fstack-protector-all
          -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer
          -ftree-bit-ccp
          -ftree-builtin-call-dce -ftree-ccp -ftree-ch -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-parallelize-loops=N -ftree-pre -ftree-pta -ftree-reassoc
          -ftree-sink -ftree-sra -ftree-switch-conversion
          -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp
          -funit-at-a-time -funroll-all-loops -funroll-loops
          -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
          -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

_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  -fworking-directory  -remap
          -trigraphs  -undef  -UMACRO  -Wp,OPTION
          -Xpreprocessor OPTION

_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  -lLIBRARY
          -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
          -s  -static  -static-libgcc  -static-libstdc++ -shared
          -shared-libgcc  -symbolic
          -T SCRIPT  -Wl,OPTION  -Xlinker OPTION
          -u SYMBOL

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

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

     _ARC Options_
          -EB  -EL
          -mmangle-cpu  -mcpu=CPU  -mtext=TEXT-SECTION
          -mdata=DATA-SECTION  -mrodata=READONLY-DATA-SECTION

     _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  -mwords-little-endian
          -mfloat-abi=NAME  -msoft-float  -mhard-float  -mfpe
          -mfp16-format=NAME
          -mthumb-interwork  -mno-thumb-interwork
          -mcpu=NAME  -march=NAME  -mfpu=NAME
          -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
          -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
          -mpoke-function-name
          -mthumb  -marm
          -mtpcs-frame  -mtpcs-leaf-frame
          -mcaller-super-interworking  -mcallee-super-interworking
          -mtp=NAME
          -mword-relocations
          -mfix-cortex-m3-ldrd

     _AVR Options_
          -mmcu=MCU  -mno-interrupts
          -mcall-prologues  -mtiny-stack  -mint8

     _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

     _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

     _CRX Options_
          -mmac -mpush-args

     _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  -malpha-as  -mgas
          -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

     _DEC Alpha/VMS Options_
          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64

     _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  -mint32  -malign-300

     _HPPA Options_
          -march=ARCHITECTURE-TYPE
          -mbig-switch  -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-big-switch  -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

     _i386 and x86-64 Options_
          -mtune=CPU-TYPE  -march=CPU-TYPE
          -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
          -mvzeroupper -mprefer-avx128
          -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx
          -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfused-madd
          -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlwp
          -mthreads  -mno-align-stringops  -minline-all-stringops
          -minline-stringops-dynamically -mstringop-strategy=ALG
          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
          -m96bit-long-double  -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
          -m32  -m64 -mlarge-data-threshold=NUM
          -msse2avx -mfentry -m8bit-idiv
          -mavx256-split-unaligned-load -mavx256-split-unaligned-store

     _i386 and x86-64 Windows Options_
          -mconsole -mcygwin -mno-cygwin -mdll
          -mnop-fun-dllimport -mthread
          -municode -mwin32 -mwindows -fno-set-stack-executable

     _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

     _IA-64/VMS Options_
          -mvms-return-codes -mdebug-main=PREFIX -mmalloc64

     _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

     _M68hc1x Options_
          -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12
          -mauto-incdec  -minmax  -mlong-calls  -mshort
          -msoft-reg-count=COUNT

     _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
          -mxl-mode-APP-MODEL

     _MIPS Options_
          -EL  -EB  -march=ARCH  -mtune=ARCH
          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2
          -mips64  -mips64r2
          -mips16  -mno-mips16  -mflip-mips16
          -minterlink-mips16  -mno-interlink-mips16
          -mabi=ABI  -mabicalls  -mno-abicalls
          -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
          -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
          -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
          -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  -mfused-madd  -mno-fused-madd  -nocpp
          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
          -mfix-r10000 -mno-fix-r10000  -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

     _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.

     _RS/6000 and PowerPC Options_
          -mcpu=CPU-TYPE
          -mtune=CPU-TYPE
          -mcmodel=CODE-MODEL
          -mpower  -mno-power  -mpower2  -mno-power2
          -mpowerpc  -mpowerpc64  -mno-powerpc
          -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
          -mnew-mnemonics  -mold-mnemonics
          -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

     _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=
          -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

     _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
          -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
          -maccumulate-outgoing-args -minvalid-symbols

     _Solaris 2 Options_
          -mimpure-text  -mno-impure-text
          -threads -pthreads -pthread

     _SPARC Options_
          -mcpu=CPU-TYPE
          -mtune=CPU-TYPE
          -mcmodel=CODE-MODEL
          -m32  -m64  -mapp-regs  -mno-app-regs
          -mfaster-structs  -mno-faster-structs
          -mfpu  -mno-fpu  -mhard-float  -msoft-float
          -mhard-quad-float  -msoft-quad-float
          -mlittle-endian
          -mstack-bias  -mno-stack-bias
          -munaligned-doubles  -mno-unaligned-doubles
          -mv8plus  -mno-v8plus  -mvis  -mno-vis
          -mfix-at697f

     _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

     _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  -mbig-switch

     _VAX Options_
          -mg  -mgnu  -munix

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

     _x86-64 Options_ See i386 and x86-64 Options.

     _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  -funwind-tables
          -fasynchronous-unwind-tables
          -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
          -ftrapv  -fwrapv  -fbounds-check
          -fvisibility -fstrict-volatile-bitfields

* Menu:

* Overall Options::     Controlling the kind of output:
                        an executable, object files, assembler files,
                        or preprocessed source.
* 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.


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 which must be preprocessed.

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

'FILE.ii'
     C++ source code which 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 which 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 which 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 which 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 which must be preprocessed.

'FILE.mii'
     Objective-C++ source code which 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 which should not be preprocessed.

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

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

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

'FILE.go'
     Go source code.

'FILE.ads'
     Ada source code file which 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 which 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 will exit 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 will instead return
     with numerically highest error produced by any phase that returned
     an error indication.  The C, C++, and Fortran frontends 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 which don't require preprocessing are ignored.

'-o FILE'
     Place output in file FILE.  This applies regardless 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' will also be 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 which
     have no documentation associated with them will also be 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'
          This will display all of the optimization options supported by
          the compiler.

     'warnings'
          This will display all of the options controlling warning
          messages produced by the compiler.

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

     'params'
          This will display the values recognized by the '--param'
          option.

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

     'common'
          This will display the options that are common to all
          languages.

     These are the supported qualifiers:

     'undocumented'
          Display only those options which are undocumented.

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

     'separate'
          Display options which take 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 the following can be used:

          --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), which have a description the following can be used:

          --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 by so much that there is nothing to display.
     One case where it does work however is when one of the classes is
     TARGET.  So for example to display all the target-specific
     optimization options the following can be used:

          --help=target,optimizers

     The '--help=' option can be repeated on the command line.  Each
     successive use will display 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 will invoke all subprograms of 'gcc' under 'gdb --args', thus
     the invocation of 'cc1' will be '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.

'-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 treats '.c', '.h' and '.i' files as C++
source files instead of C source files unless '-x' is used, and
automatically specifies linking against the C++ library.  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, '-pedantic' 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 would normally be 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'.  By specifying a base standard, the compiler will accept
     all programs following that standard and 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, by specifying a GNU
     dialect of a standard, all features the compiler support are
     enabled, even when those features change the meaning of the base
     standard and some strict-conforming programs may be rejected.  The
     particular standard is used by '-pedantic' to identify which
     features are GNU extensions given that version of the standard.
     For example '-std=gnu90 -pedantic' would warn about C++ style '//'
     comments, while '-std=gnu99 -pedantic' would 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.  Note that this standard is not yet fully supported;
          see <http://gcc.gnu.org/gcc-4.6/c99status.html> for more
          information.  The names 'c9x' and 'iso9899:199x' are
          deprecated.

     'c1x'
          ISO C1X, the draft of the next revision of the ISO C standard.
          Support is limited and experimental and features enabled by
          this option may be changed or removed if changed in or removed
          from the standard draft.

     'gnu90'
     'gnu89'
          GNU dialect of ISO C90 (including some C99 features).  This is
          the default for C code.

     'gnu99'
     'gnu9x'
          GNU dialect of ISO C99.  When ISO C99 is fully implemented in
          GCC, this will become the default.  The name 'gnu9x' is
          deprecated.

     'gnu1x'
          GNU dialect of ISO C1X. Support is limited and experimental
          and features enabled by this option may be changed or removed
          if changed in or removed from the standard draft.

     'c++98'
          The 1998 ISO C++ standard plus amendments.  Same as '-ansi'
          for C++ code.

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

     'c++0x'
          The working draft of the upcoming ISO C++0x standard.  This
          option enables experimental features that are likely to be
          included in C++0x.  The working draft is constantly changing,
          and any feature that is enabled by this flag may be removed
          from future versions of GCC if it is not part of the C++0x
          standard.

     'gnu++0x'
          GNU dialect of '-std=c++0x'.  This option enables experimental
          features that may be removed in future versions of GCC.

'-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.  This option is accepted
     and ignored by GCC versions 4.1.3 up to but not including 4.3.  In
     GCC versions 4.3 and later it changes the behavior of GCC in C99
     mode.  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 was first supported
     in GCC 4.3.  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.

'-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 that 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 takes place in 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 takes place in 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.

'-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 v3.0 <http://www.openmp.org/>.  This option implies
     '-pthread', and thus is only supported on targets that have support
     for '-pthread'.

'-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.

'-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 which 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'.

'-no-integrated-cpp'
     Performs a compilation in two passes: preprocessing and compiling.
     This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
     via the '-B' option.  The user supplied compilation step can then
     add in an additional preprocessing step after normal preprocessing
     but before compiling.  The default is to use the integrated cpp
     (internal cpp)

     The semantics of this option will change if "cc1", "cc1plus", and
     "cc1obj" are merged.

'-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; but 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.  Version 2 is the version of the C++
     ABI that first appeared in G++ 3.4.  Version 1 is the version of
     the C++ ABI that first appeared in G++ 3.2.  Version 0 will always
     be the version that conforms most closely to the C++ ABI
     specification.  Therefore, the ABI obtained using version 0 will
     change as ABI bugs are fixed.

     The default is version 2.

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

     Version 4 implements a standard mangling for vector types.

     Version 5 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.

     See also '-Wabi'.

'-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' will only return '0' if it is declared 'throw()', in
     which case the compiler will always check 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)'.

'-fconserve-space'
     Put uninitialized or runtime-initialized global variables into the
     common segment, as C does.  This saves space in the executable at
     the cost of not diagnosing duplicate definitions.  If you compile
     with this flag and your program mysteriously crashes after 'main()'
     has completed, you may have an object that is being destroyed twice
     because two definitions were merged.

     This option is no longer useful on most targets, now that support
     has been added for putting variables into BSS without making them
     common.

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

'-fno-deduce-init-list'
     Disable 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 option is present because this deduction is an extension to
     the current specification in the C++0x working draft, and there was
     some concern about potential overload resolution problems.

'-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, and versions of G++ before 4.1
     always worked that way.  However, in ISO C++ a friend function
     which is not declared in an enclosing scope can only be found using
     argument dependent lookup.  This option causes friends to be
     injected as they were in earlier releases.

     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 which 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 runtime.  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 will still optimize based on the specifications, so
     throwing an unexpected exception will result in undefined behavior.

'-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++.

     The default if neither flag is given 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 which 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 will 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 will cause linker
     errors if these functions are not inlined everywhere they are
     called.

'-fms-extensions'
     Disable pedantic 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 though 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 will actually make 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 will result
     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' will allow some nonconforming
     code to compile.

'-fno-pretty-templates'
     When an error message refers to a specialization of a function
     template, the compiler will normally print 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 will omit any template arguments which match
     the default template arguments for that template.  If either of
     these behaviors make it harder to understand the error message
     rather than easier, using '-fno-pretty-templates' will 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++ runtime 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 it will generate
     it as needed.  The 'dynamic_cast' operator can still be used for
     casts that do not require runtime type information, i.e. casts to
     'void *' or to unambiguous base classes.

'-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
     enumeration type can only be one of the values of the enumeration
     (as defined in the C++ standard; basically, a value which 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
     enumeration type.

'-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++0x).

'-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 will only work if your C library supports
     '__cxa_atexit'.

'-fno-use-cxa-get-exception-ptr'
     Don't use the '__cxa_get_exception_ptr' runtime routine.  This will
     cause '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 methods where the addresses of the two functions
     were 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 will have 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 which are defined in more than one
          different shared object: those declarations are permitted if
          they would have been permitted when this option was not used.

     In new code it is better to use '-fvisibility=hidden' and export
     those classes which 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 will be different, so changing one will
     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.

'-fno-weak'
     Do not use weak symbol support, even if it is provided by the
     linker.  By default, G++ will use weak symbols if they are
     available.  This option exists only for testing, and should not be
     used by end-users; it will result 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:

'-fno-default-inline'
     Do not assume 'inline' for functions defined inside a class scope.
     *Note Options That Control Optimization: Optimize Options.  Note
     that these functions will have linkage like inline functions; they
     just won't be inlined by default.

'-Wabi (C, Objective-C, C++ and Objective-C++ only)'
     Warn when G++ generates code that is probably not compatible with
     the vendor-neutral C++ ABI.  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 will be 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.

     The known incompatibilities in '-fabi-version=2' (the default)
     include:

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

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

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

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

     The known incompatibilities in '-fabi-version=1' include:

        * Incorrect handling of tail-padding for bit-fields.  G++ may
          attempt to pack data into the same byte as a base class.  For
          example:

               struct A { virtual void f(); int f1 : 1; };
               struct B : public A { int f2 : 1; };

          In this case, G++ will place 'B::f2' into the same byte
          as'A::f1'; other compilers will not.  You can avoid this
          problem by explicitly padding 'A' so that its size is a
          multiple of the byte size on your platform; that will cause
          G++ and other compilers to layout 'B' identically.

        * Incorrect handling of tail-padding for virtual bases.  G++
          does not use tail padding when laying out virtual bases.  For
          example:

               struct A { virtual void f(); char c1; };
               struct B { B(); char c2; };
               struct C : public A, public virtual B {};

          In this case, G++ will not place 'B' into the tail-padding for
          'A'; other compilers will.  You can avoid this problem by
          explicitly padding 'A' so that its size is a multiple of its
          alignment (ignoring virtual base classes); that will cause G++
          and other compilers to layout 'C' identically.

        * Incorrect handling of bit-fields with declared widths greater
          than that of their underlying types, when the bit-fields
          appear in a union.  For example:

               union U { int i : 4096; };

          Assuming that an 'int' does not have 4096 bits, G++ will make
          the union too small by the number of bits in an 'int'.

        * Empty classes can be placed at incorrect offsets.  For
          example:

               struct A {};

               struct B {
                 A a;
                 virtual void f ();
               };

               struct C : public B, public A {};

          G++ will place the 'A' base class of 'C' at a nonzero offset;
          it should be placed at offset zero.  G++ mistakenly believes
          that the 'A' data member of 'B' is already at offset zero.

        * Names of template functions whose types involve 'typename' or
          template template parameters can be mangled incorrectly.

               template <typename Q>
               void f(typename Q::X) {}

               template <template <typename> class Q>
               void f(typename Q<int>::X) {}

          Instantiations of these templates may be mangled incorrectly.

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

        * For SYSV/x86-64, when passing union with long double, it is
          changed to pass in memory as specified in psABI. For example:

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

          'union U' will always be passed in memory.

'-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.

'-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 accessible non-virtual
     destructor, in which case it would be possible but unsafe to delete
     an instance of a derived class through a pointer to the base class.
     This warning is also 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 will rearrange 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'.

 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++' book:

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

        * Item 12: Prefer initialization to assignment in constructors.

        * Item 14: Make destructors virtual in base classes.

        * Item 15: Have 'operator=' return a reference to '*this'.

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

     Also warn about violations of the following style guidelines from
     Scott Meyers' 'More Effective C++' book:

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

        * Item 7: Never overload '&&', '||', or ','.

     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 also 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 not 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();

     will fail 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++ would try to
     preserve unsignedness, but the standard mandates the current
     behavior.

          struct A {
            operator int ();
            A& operator = (int);
          };

          main ()
          {
            A a,b;
            a = b;
          }

     In this example, G++ will synthesize a default 'A& operator =
     (const A&);', while cfront will use the user-defined 'operator ='.


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, but 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, will
     override 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 that
     will run 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 that will run all such default destructors,
     in reverse order.

     The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods
     thusly generated will 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 will be invoked by the runtime
     immediately after a new object instance is allocated; the '- (void)
     .cxx_destruct' methods will be 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.

'-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
     will omit such warnings if any differences found are confined to
     types which 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, ...).  The options described
below can be used to control the diagnostic messages formatting
algorithm, e.g. how many characters per line, how often source location
information should be reported.  Right now, only the C++ front end can
honor these options.  However it is expected, in the near future, that
the remaining front ends would be able to digest them correctly.

'-fmessage-length=N'
     Try to format error messages so that they fit on lines of about N
     characters.  The default is 72 characters for 'g++' and 0 for the
     rest of the front ends supported by GCC.  If N is zero, then no
     line-wrapping will be done; each error message will appear on a
     single line.

'-fdiagnostics-show-location=once'
     Only meaningful in line-wrapping mode.  Instructs the diagnostic
     messages reporter to emit _once_ source location information; 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.

'-fno-diagnostics-show-option'
     By default, each diagnostic emitted includes text which indicates
     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.

'-Wcoverage-mismatch'
     Warn if feedback profiles do not match when using the
     '-fprofile-use' option.  If a source file was changed between
     '-fprofile-gen' and '-fprofile-use', the files with the profile
     feedback can fail to match the source file and GCC can not 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.  Disable the error for this warning can
     result in poorly optimized code, so disabling the error 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.


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 which are not
inherently erroneous but which 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 which 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 '-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::.

 When an unrecognized warning option is requested (e.g.,
'-Wunknown-warning'), GCC will emit a diagnostic stating that the option
is not recognized.  However, if the '-Wno-' form is used, the behavior
is slightly different: No diagnostic will be 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 will warn that an unrecognized option
was used.

'-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 will 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.

     '-pedantic' 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 '-pedantic' 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 '-pedantic'.  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 '-pedantic' are given where they
     are required by the base standard.  (It would 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'
     Like '-pedantic', except that errors are produced rather than
     warnings.

'-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 (only with -O2)
          -Wc++0x-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)
          -Wmissing-braces
          -Wnonnull
          -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 which has been declared
          'register'.

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

        * (C++ only) A base class is not initialized in a derived class'
          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-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 will perform the entire computation with 'double'
     because the floating-point literal is a 'double'.

'-Wformat'
     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
     '-pedantic' is used with '-Wformat', warnings will be 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.

     Since '-Wformat' also checks for null format arguments for several
     functions, '-Wformat' also implies '-Wnonnull'.

     '-Wformat' is included in '-Wall'.  For more control over some
     aspects of format checking, the options '-Wformat-y2k',
     '-Wno-format-extra-args', '-Wno-format-zero-length',
     '-Wformat-nonliteral', '-Wformat-security', and '-Wformat=2' are
     available, but are not included in '-Wall'.

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

'-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 will suppress 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 (C and Objective-C only)'
     If '-Wformat' is specified, do not warn about zero-length formats.
     The C standard specifies that zero-length formats are allowed.

'-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=2'
     Enable '-Wformat' plus format checks not included in '-Wformat'.
     Currently equivalent to '-Wformat -Wformat-nonliteral
     -Wformat-security -Wformat-y2k'.

'-Wnonnull (C and Objective-C only)'
     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 which are initialized with
     themselves.  Note this option can only be used with the
     '-Wuninitialized' option.

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

'-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 '-pedantic'.

'-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.

          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 will issue 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'
     could belong to the enclosing 'if'.  The resulting code would look
     like this:

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

     Also warn for dangerous uses of the ?: with omitted middle operand
     GNU extension.  When the condition in the ?: operator is a boolean
     expression the omitted value will be always 1.  Often the user
     expects 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 defines 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++.

'-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'.

'-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.

'-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-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 Variable 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]' will cause a warning, while
     'x[(void)i,j]' will 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 which 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 which 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 will depend 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.

     These warnings are made optional because GCC is not smart enough to
     see all the reasons why the code might be correct despite 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.  Here is another common
     case:

          {
            int save_y;
            if (change_y) save_y = y, y = new_y;
            ...
            if (change_y) y = save_y;
          }

     This has no bug because 'save_y' is used only if it is set.

     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 which 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 which is not
     understood by GCC.  If this command line option is used, warnings
     will even be issued for unknown pragmas in system header files.
     This is not the case if the warnings were 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 which 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 which 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=n', with
     n=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 frontend 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 frontend 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 frontend:
     '*(int*)&some_float'.  If optimization is enabled, it also runs in
     the backend, 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 which 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 which 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 will require, in particular when determining whether a loop
     will be executed at all.

     '-Wstrict-overflow=1'
          Warn about cases which are both questionable and easy to
          avoid.  For example: 'x + 1 > x'; with '-fstrict-overflow',
          the compiler will simplify this 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' will be simplified to 'x > 0'.

     '-Wstrict-overflow=4'
          Also warn about other simplifications not covered by the above
          cases.  For example: '(x * 10) / 5' will be 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' will be 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 will give a
          very large number of false positives.

'-Wsuggest-attribute=[pure|const|noreturn]'
     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 which 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 nor returns 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.

'-Warray-bounds'
     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'.

'-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 will _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 would 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 which
     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 does not in ISO C.

        * In traditional C, some preprocessor directives did not exist.
          Traditional preprocessors would only consider 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 would ignore 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 would not recognize '#elif', so it 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 would cause 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 will 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 and was
     not supported by GCC versions before GCC 3.0.  *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, or class member (in C++), or whenever a
     built-in function is shadowed.  Note that in C++, the compiler will
     not warn if a local variable shadows a struct/class/enum, but will
     warn if it shadows an explicit typedef.

'-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.

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

'-Wno-pedantic-ms-format (MinGW targets only)'
     Disables the warnings about non-ISO 'printf' / 'scanf' format width
     specifiers 'I32', 'I64', and 'I' used on Windows targets depending
     on the MS runtime, when you are using the options '-Wformat' and
     '-pedantic' without gnu-extensions.

'-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 '-pedantic'.

'-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 whenever a function call is cast to a non-matching type.  For
     example, warn if 'int malloc()' is cast to 'anything *'.

'-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++0x-compat (C++ and Objective-C++ only)'
     Warn about C++ constructs whose meaning differs between ISO C++
     1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will
     become keywords in ISO C++ 200x.  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 which 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 will get a warning.  These warnings will 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 will just be
     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'.

'-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 will 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.

'-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 enum types.  In
     C++ this 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 which 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'.

'-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.

'-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-attributes'
     Do not warn if an unexpected '__attribute__' is used, such as
     unrecognized attributes, function attributes applied to variables,
     etc.  This will 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 which 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.  The aim is to detect global functions that
     fail to be declared in header files.

'-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
     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 would cause 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 would not trigger a warning:

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

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

'-Wmissing-format-attribute'
     Warn about function pointers which might be candidates for 'format'
     attributes.  Note these are only possible candidates, not absolute
     ones.  GCC will guess 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 will also warn about function definitions which might be
     candidates for 'format' attributes.  Again, these are only possible
     candidates.  GCC will guess 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.

'-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 which have not been normalized;
     this option controls that warning.

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

     Unfortunately, there are some characters which ISO C and ISO C++
     allow in identifiers that when turned into NFC aren't allowable as
     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'.  You would only want to do this if you were
     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", will display just like a regular 'n' which
     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 will warn 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
     is unable to 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.

'-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' will be
     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.

'-Winline'
     Warn if a function can not be inlined and it was declared as
     inline.  Even with this option, the compiler will 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 1998 ISO C++ standard, applying 'offsetof'
     to a non-POD type is undefined.  In existing C++ implementations,
     however, 'offsetof' typically gives meaningful results even when
     applied to certain kinds of non-POD types.  (Such as a simple
     'struct' that fails to be a POD type only by virtue of having a
     constructor.)  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
     '-pedantic' 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 pedantic ISO C90 mode, or the
     GNU alternate syntax when in pedantic ISO C99 mode.  This is
     default.  To inhibit the warning messages, use
     '-Wno-variadic-macros'.

'-Wvla'
     Warn if variable length array is used in the code.  '-Wno-vla' will
     prevent the '-pedantic' 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 were unable to
     handle the code effectively.  Often, the problem is that your code
     is too big or too complex; GCC will refuse 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 '-pedantic', 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 will not be protected against stack
     smashing.

'-Wno-mudflap'
     Suppress warnings about constructs that cannot be instrumented by
     '-fmudflap'.

'-Woverlength-strings'
     Warn about string constants which are longer than the "minimum
     maximum" length specified in the C standard.  Modern compilers
     generally allow string constants which 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 '-pedantic', and can be disabled with
     '-Wno-overlength-strings'.

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

     GCC will issue a warning for any floating constant that does not
     have a suffix.  When used together with '-Wsystem-headers' it will
     warn 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.


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 will probably make 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
     were already at hand; some statements may execute in different
     places because they were 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.

'-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.

'-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 which 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 will increase the size of debugging
     information by as much as a factor of two.

'-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).  This is the format used by DBX on IRIX 6.  The value
     of VERSION may be either 2, 3 or 4; the default version is 2.

     Note that with DWARF version 2 some ports require, and will 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.

'-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'.

'-gvms'
     Produce debugging information in VMS debug format (if that is
     supported).  This is the format used by DEBUG on 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, but no
     information about local variables and no line numbers.

     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 would
     have generated 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'.

'-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 will be 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 will reject 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 DWARF2 debugging information by eliminating duplicated
     information about each symbol.  This option only makes sense when
     generating DWARF2 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 was 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 was 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 will generate
     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 will serve 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 would be legal, 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 will 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 types declared in 'foo.c' and 'foo.h'
     will have debug information, but types declared in other header
     will not.  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.

'-fenable-icf-debug'
     Generate additional debug information to support identical code
     folding (ICF). This option only works with DWARF version 2 or
     higher.

'-fno-merge-debug-strings'
     Direct the linker to not merge together strings in the debugging
     information which 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.

'-fpre-ipa-mem-report'
'-fpost-ipa-mem-report'
     Makes the compiler print some statistics about permanent memory
     allocation before or after interprocedural optimization.

'-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 will match 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.  e.g.  With
     -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true only for
     first 10 invocations and dbg_cnt(tail_call) will return false
     always.

'-dLETTERS'
'-fdump-rtl-PASS'
     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.  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 sub-expression 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 pro and epilogues.

     '-fdump-rtl-regmove'
          Dump after the register move pass.

     '-fdump-rtl-sched1'
     '-fdump-rtl-sched2'
          '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping
          after the basic block scheduling passes.

     '-fdump-rtl-see'
          Dump after sign 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'
          '-fdump-rtl-split1', '-fdump-rtl-split2', '-fdump-rtl-split3',
          '-fdump-rtl-split4' and '-fdump-rtl-split5' 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 was 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.

     '-dv'
          For each of the other indicated dump files
          ('-fdump-rtl-PASS'), dump a representation of the control flow
          graph suitable for viewing with VCG to 'FILE.PASS.vcg'.

     '-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.

'-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-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' will cause counters to be summed over the whole
     compilation unit while '-details' will dump 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'
     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.  If
     the '-OPTIONS' form is used, OPTIONS is a list of '-' separated
     options that control the details of the dump.  Not all options are
     applicable to all dumps, those which are not meaningful will be
     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'
          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.
     '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).
     'stats'
          Enable dumping various statistics about the pass (not honored
          by every dump option).
     'blocks'
          Enable showing basic block boundaries (disabled in raw dumps).
     '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.
     'all'
          Turn on all options, except 'raw', 'slim', 'verbose' and
          'lineno'.

     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.

     'vcg'
          Dump the control flow graph of each function to a file in VCG
          format.  The file name is made by appending '.vcg' to the
          source file name.  Note that if the file contains more than
          one function, the generated file cannot be used directly by
          VCG.  You will need to cut and paste each function's graph
          into its own separate file first.

     '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.

     'mudflap'
          Dump each function after adding mudflap instrumentation.  The
          file name is made by appending '.mudflap' 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.

'-ftree-vectorizer-verbose=N'
     This option controls the amount of debugging output the vectorizer
     prints.  This information is written to standard error, unless
     '-fdump-tree-all' or '-fdump-tree-vect' is specified, in which case
     it is output to the usual dump listing file, '.vect'.  For N=0 no
     diagnostic information is reported.  If N=1 the vectorizer reports
     each loop that got vectorized, and the total number of loops that
     got vectorized.  If N=2 the vectorizer also reports non-vectorized
     loops that passed the first analysis phase (vect_analyze_loop_form)
     - i.e. countable, inner-most, single-bb, single-entry/exit loops.
     This is the same verbosity level that '-fdump-tree-vect-stats'
     uses.  Higher verbosity levels mean either more information dumped
     for each reported loop, or same amount of information reported for
     more loops: if N=3, vectorizer cost model information is reported.
     If N=4, alignment related information is added to the reports.  If
     N=5, data-references related information (e.g. memory dependences,
     memory access-patterns) is added to the reports.  If N=6, the
     vectorizer reports also non-vectorized inner-most loops that did
     not pass the first analysis phase (i.e., may not be countable, or
     may have complicated control-flow).  If N=7, the vectorizer reports
     also non-vectorized nested loops.  If N=8, SLP related information
     is added to the reports.  For N=9, all the information the
     vectorizer generates during its analysis and transformation is
     reported.  This is the same verbosity level that
     '-fdump-tree-vect-details' uses.

'-frandom-seed=STRING'
     This option provides a seed that GCC uses when it would otherwise
     use random numbers.  It is used to generate 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 STRING 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' would produce
     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

     would create '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 will be created and maintained, but discarded at the
     end.

'-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' will search--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 will be 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::.

'-feliminate-unused-debug-types'
     Normally, when producing DWARF2 output, GCC will emit debugging
     information for all types declared in a compilation unit,
     regardless of whether or not they are actually used in that
     compilation unit.  Sometimes this is useful, such as 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.  With this option,
     GCC will avoid producing debug symbol output for types that are
     nowhere used in the source file being compiled.


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 would 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
          -fcompare-elim
          -fcprop-registers
          -fdce
          -fdefer-pop
          -fdelayed-branch
          -fdse
          -fguess-branch-probability
          -fif-conversion2
          -fif-conversion
          -fipa-pure-const
          -fipa-profile
          -fipa-reference
          -fmerge-constants
          -fsplit-wide-types
          -ftree-bit-ccp
          -ftree-builtin-call-dce
          -ftree-ccp
          -ftree-ch
          -ftree-copyrename
          -ftree-dce
          -ftree-dominator-opts
          -ftree-dse
          -ftree-forwprop
          -ftree-fre
          -ftree-phiprop
          -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
          -fexpensive-optimizations
          -fgcse  -fgcse-lm
          -finline-small-functions
          -findirect-inlining
          -fipa-sra
          -foptimize-sibling-calls
          -fpartial-inlining
          -fpeephole2
          -fregmove
          -freorder-blocks  -freorder-functions
          -frerun-cse-after-loop
          -fsched-interblock  -fsched-spec
          -fschedule-insns  -fschedule-insns2
          -fstrict-aliasing -fstrict-overflow
          -ftree-switch-conversion
          -ftree-pre
          -ftree-vrp

     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-vectorize' 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  -ftree-vect-loop-version

'-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'.

     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' would be '-fno-foo'.  In the table below, only one of the forms
is listed--the one you typically will 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-default-inline'
     Do not make member functions inline by default merely because they
     are defined inside the class scope (C++ only).  Otherwise, when you
     specify '-O', member functions defined inside class scope are
     compiled inline by default; i.e., you don't need to add 'inline' in
     front of the member function name.

'-fno-defer-pop'
     Always pop the arguments to each function call as soon as that
     function returns.  For machines which 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.

     Starting with GCC version 4.6, the default setting (when not
     optimizing for size) for 32-bit Linux x86 and 32-bit Darwin x86
     targets has been changed to '-fomit-frame-pointer'.  The default
     can be reverted to '-fno-omit-frame-pointer' by configuring GCC
     with the '--enable-frame-pointer' configure option.

     Enabled at levels '-O', '-O2', '-O3', '-Os'.

'-foptimize-sibling-calls'
     Optimize sibling and tail recursive calls.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fno-inline'
     Don't pay attention to the 'inline' keyword.  Normally this option
     is used to keep the compiler from expanding any functions inline.
     Note that if you are not optimizing, no functions can be expanded
     inline.

'-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.

     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'
     Integrate all simple functions into their callers.  The compiler
     heuristically decides which functions are simple enough to be 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 the variable was 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 will result
     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
     will be deleted which will trigger 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.

     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'.

'-fmudflap -fmudflapth -fmudflapir'
     For front-ends that support it (C and C++), instrument all risky
     pointer/array dereferencing operations, some standard library
     string/heap functions, and some other associated constructs with
     range/validity tests.  Modules so instrumented should be immune to
     buffer overflows, invalid heap use, and some other classes of C/C++
     programming errors.  The instrumentation relies on a separate
     runtime library ('libmudflap'), which will be linked into a program
     if '-fmudflap' is given at link time.  Run-time behavior of the
     instrumented program is controlled by the 'MUDFLAP_OPTIONS'
     environment variable.  See 'env MUDFLAP_OPTIONS=-help a.out' for
     its options.

     Use '-fmudflapth' instead of '-fmudflap' to compile and to link if
     your program is multi-threaded.  Use '-fmudflapir', in addition to
     '-fmudflap' or '-fmudflapth', if instrumentation should ignore
     pointer reads.  This produces less instrumentation (and therefore
     faster execution) and still provides some protection against
     outright memory corrupting writes, but allows erroneously read data
     to propagate within a program.

'-fthread-jumps'
     Perform optimizations where we 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 will follow 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 which 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
     has been 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 runtime 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 will attempt to move loads which 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 gcse is enabled.

'-fgcse-sm'
     When '-fgcse-sm' is enabled, a store motion pass is run after
     global common subexpression elimination.  This pass will attempt 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
     cleanup redundant spilling.

'-funsafe-loop-optimizations'
     If given, the loop optimizer will assume that loop indices do not
     overflow, and that the 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.  Using '-Wunsafe-loop-optimizations', the compiler will warn
     you if it finds this kind of loop.

'-fcrossjumping'
     Perform cross-jumping transformation.  This transformation unifies
     equivalent code and save 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 include 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 'if-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'.

'-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 which 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'.

'-fexpensive-optimizations'
     Perform a number of minor optimizations that are relatively
     expensive.

     Enabled at levels '-O2', '-O3', '-Os'.

'-foptimize-register-move'
'-fregmove'
     Attempt to reassign register numbers in move instructions and as
     operands of other simple instructions in order to maximize the
     amount of register tying.  This is especially helpful on machines
     with two-operand instructions.

     Note '-fregmove' and '-foptimize-register-move' are the same
     optimization.

     Enabled at levels '-O2', '-O3', '-Os'.

'-fira-algorithm=ALGORITHM'
     Use specified coloring algorithm for the integrated register
     allocator.  The ALGORITHM argument should be 'priority' or 'CB'.
     The first algorithm specifies Chow's priority coloring, the second
     one specifies Chaitin-Briggs coloring.  The second algorithm can be
     unimplemented for some architectures.  If it is implemented, it is
     the default because Chaitin-Briggs coloring as a rule generates a
     better code.

'-fira-region=REGION'
     Use specified regions for the integrated register allocator.  The
     REGION argument should be one of 'all', 'mixed', or 'one'.  The
     first value means using all loops as register allocation regions,
     the second value which is the default means using all loops except
     for loops with small register pressure as the regions, and third
     one means using all function as a single region.  The first value
     can give best result for machines with small size and irregular
     register set, the third one results in faster and generates decent
     code and the smallest size code, and the default value usually give
     the best results in most cases and for most architectures.

'-fira-loop-pressure'
     Use IRA to evaluate register pressure in loops for decision to move
     loop invariants.  Usage of this option usually results in
     generation of faster and smaller code on machines with big register
     files (>= 32 registers) but it can slow compiler down.

     This option is enabled at level '-O3' for some targets.

'-fno-ira-share-save-slots'
     Switch off sharing stack slots used for saving call used hard
     registers living through a call.  Each hard register will get a
     separate stack slot and as a result function stack frame will be
     bigger.

'-fno-ira-share-spill-slots'
     Switch off sharing stack slots allocated for pseudo-registers.
     Each pseudo-register which did not get a hard register will get a
     separate stack slot and as a result function stack frame will be
     bigger.

'-fira-verbose=N'
     Set up how verbose dump file for the integrated register allocator
     will be.  Default value is 5.  If the value is greater or equal to
     10, the dump file will be stderr as if the value were N minus 10.

'-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 the
     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 as a consequence
     register spills in the 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
     will be 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) will be examined for a
     dependency on a stalled insn that is 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, do use superblock
     scheduling algorithm.  Superblock scheduling allows motion across
     basic block boundaries resulting on 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'
     The modulo scheduling comes before the traditional scheduling, if a
     loop was modulo scheduled we may want to prevent the later
     scheduling passes from changing its schedule, we use this option to
     control that.

'-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 until 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 until
     '-fsel-sched-pipelining' is turned on.

'-fcaller-saves'
     Enable values to be allocated in registers that will be 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 than would otherwise be
     produced.

     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.

'-fconserve-stack'
     Attempt to minimize stack usage.  The compiler will attempt 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-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.

'-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 cannot escape the
     compilation unit.  Enabled by default at '-O' and higher.

'-fipa-struct-reorg'
     Perform structure reorganization optimization, that change C-like
     structures layout in order to better utilize spatial locality.
     This transformation is affective for programs containing arrays of
     structures.  Available in two compilation modes: profile-based
     (enabled with '-fprofile-generate') or static (which uses built-in
     heuristics).  It works only in whole program mode, so it requires
     '-fwhole-program' to be enabled.  Structures considered 'cold' by
     this transformation are not affected (see '--param
     struct-reorg-cold-struct-ratio=VALUE').

     With this flag, the program debug info reflects a new structure
     layout.

'-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 will perform 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-matrix-reorg'
     Perform matrix flattening and transposing.  Matrix flattening tries
     to replace an m-dimensional matrix with its equivalent
     n-dimensional matrix, where n < m.  This reduces the level of
     indirection needed for accessing the elements of the matrix.  The
     second optimization is matrix transposing that attempts to change
     the order of the matrix's dimensions in order to improve cache
     locality.  Both optimizations need the '-fwhole-program' flag.
     Transposing is enabled only if profiling information is available.

'-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.

'-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-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
     builtin 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 which will later be 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-ppl' and '--with-cloog' 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 will transform the loop as if the user had
     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-ppl' and '--with-cloog' 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 will transform the loop as if the user had
     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-ppl' and '--with-cloog' 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 will transform the loop as if the user had 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 will iterate over a smaller amount of data that
     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-ppl' and '--with-cloog' 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
     CLooG, like index splitting and dead code elimination in loops.

'-floop-flatten'
     Removes the loop nesting structure: transforms the loop nest into a
     single loop.  This transformation can be useful to vectorize all
     the levels of the loop nest.

'-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;
     would be 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 would be 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 the loop for
     that 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-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-vectorize'
     Perform loop vectorization on trees.  This flag is enabled by
     default at '-O3'.

'-ftree-slp-vectorize'
     Perform basic block vectorization on trees.  This flag is enabled
     by default at '-O3' and when '-ftree-vectorize' is enabled.

'-ftree-vect-loop-version'
     Perform loop versioning when doing loop vectorization on trees.
     When a loop appears to be vectorizable except that data alignment
     or data dependence cannot be determined at compile time then
     vectorized and non-vectorized versions of the loop are generated
     along with runtime checks for alignment or dependence to control
     which version is executed.  This option is enabled by default
     except at level '-Os' where it is disabled.

'-fvect-cost-model'
     Enable cost model for vectorization.

'-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.

'-ftracer'
     Perform tail duplication to enlarge superblock size.  This
     transformation simplifies the control flow of the function allowing
     other optimizations to do better job.

'-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'.  This option makes code larger, and may
     or may not make it run faster.

'-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',

'-fsplit-ivs-in-unroller'
     Enables expressing 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.

     Combination of '-fweb' and CSE is often sufficient to obtain the
     same effect.  However in cases the loop body is more complicated
     than a single basic block, this is not reliable.  It also does not
     work at all on some of the architectures due to restrictions in the
     CSE pass.

     This optimization is enabled by default.

'-fvariable-expansion-in-unroller'
     With this option, the compiler will create 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 will use 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 will be 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.

'-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 in 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 will
     work 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 will
     not happen.  This permits various optimizations.  For example, the
     compiler will assume that an expression like 'i + 10 > i' will
     always be 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 will overflow 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' would align 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 will not be 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 will not be 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'.  The hope is that the loop will be executed
     many times, which will make up for any execution of the dummy
     operations.

     '-fno-align-loops' and '-falign-loops=1' are equivalent and mean
     that loops will not be 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 will not be 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 will not be removed.  This option is intended to support
     existing code which relies on a particular ordering.  For new code,
     it is better to use attributes.

     Enabled at level '-O0'.  When disabled explicitly, it also imply
     '-fno-section-anchors' that 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 will 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.  If
     '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.  While this
     option is equivalent to proper use of the 'static' keyword for
     programs consisting of a single file, in combination with option
     '-flto' this flag can be used to compile many smaller scale
     programs since the functions and variables become local for the
     whole combined compilation unit, not for the single source file
     itself.

     This option implies '-fwhole-file' for Fortran programs.

'-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' needs to 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 the '-flto' flag needs to be passed to both
     the compile and the link commands.

     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.

     Note that 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.  This means
     that object files with LTO information can be linked as normal
     object files; if '-flto' is not passed to the linker, no
     interprocedural optimizations are applied.

     Additionally, the optimization flags used to compile individual
     files are not necessarily related to those used at link time.  For
     instance,

          gcc -c -O0 -flto foo.c
          gcc -c -O0 -flto bar.c
          gcc -o myprog -flto -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 without '-flto', then
     'myprog' is not optimized.

     When producing the final binary with '-flto', 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 that GCC preserves when
     generating bytecodes, as they need to be used during the final link
     stage.  Currently, the following options are saved into the GIMPLE
     bytecode files: '-fPIC', '-fcommon' and all the '-m' target flags.

     At link time, these options are read in and reapplied.  Note that
     the current implementation makes no attempt to recognize
     conflicting values for these options.  If different files have
     conflicting option values (e.g., one file is compiled with '-fPIC'
     and another isn't), the compiler simply uses the last value read
     from the bytecode files.  It is recommended, then, that you compile
     all the files participating in the same link with the same options.

     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
     runtime.

     Another feature of LTO is that it is possible to apply
     interprocedural optimizations on files written in different
     languages.  This requires support in the language front end.
     Currently, the C, C++ and Fortran front ends are capable of
     emitting GIMPLE bytecodes, so something like this should work:

          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; all you need to add
     is '-flto' to all the compile and link commands.

     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
     enable this feature, use the flag '-fuse-linker-plugin' at link
     time:

          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.

     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 will not work
     with an older/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 wrong 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.

     This option is disabled by default.

'-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).  Specifying 'none' as an
     algorithm disables partitioning and streaming completely.  The
     default value is 'balanced'.

'-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.

'-fuse-linker-plugin'
     Enables the use of a linker plugin during link-time optimization.
     This option relies on the linker plugin support in linker that 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).

'-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, we 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 will use heuristics to correct or
     smooth out such inconsistencies.  By default, GCC will emit 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.  By default, GCC will use the current directory as PATH,
     thus the profile data file will appear 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 will look at the PATH to find the profile
     feedback data files.  See '-fprofile-dir'.

'-fprofile-use'
'-fprofile-use=PATH'
     Enable profile feedback directed optimizations, and optimizations
     generally profitable only with profile feedback available.

     The following options are enabled: '-fbranch-probabilities',
     '-fvpt', '-funroll-loops', '-fpeel-loops', '-ftracer'

     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 will look at the PATH to find the profile
     feedback data files.  See '-fprofile-dir'.

 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
     will follow 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 '-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 which 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 which 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 which 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 a code which
     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 which 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 which 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 constant as single precision constant instead
     of implicitly converting it to double precision constant.

'-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 the 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'.

'-fvpt'
     If combined with '-fprofile-arcs', it instructs the compiler to add
     a 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 operation 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 will most benefit processors with lots of registers.
     Depending on the debug information format adopted by the target,
     however, it can make debugging impossible, since variables will no
     longer stay in a "home register".

     Enabled by default with '-funroll-loops' and '-fpeel-loops'.

'-ftracer'
     Perform tail duplication to enlarge superblock size.  This
     transformation simplifies the control flow of the function allowing
     other optimizations to do 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 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 the loops for that 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
     will create larger object and executable files and will also be
     slower.  You will not be able to 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 in 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.

'-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; }

     would usually calculate the addresses of all three variables, but
     if you compile it with '-fsection-anchors', it will access 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 will not inline
     functions that contain more that 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 given in the following table:

     'struct-reorg-cold-struct-ratio'
          The threshold ratio (as a percentage) between a structure
          frequency and the frequency of the hottest structure in the
          program.  This parameter is used by struct-reorg optimization
          enabled by '-fipa-struct-reorg'.  We say that if the ratio of
          a structure frequency, calculated by profiling, to the hottest
          structure frequency in the program is less than this
          parameter, then structure reorganization is not applied to
          this structure.  The default is 10.

     '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
          crossjumping.  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 compile time increase with probably small improvement in
          executable size.

     'min-crossjump-insns'
          The minimum number of instructions which must be matched at
          the end of two blocks before crossjumping will be performed on
          them.  This value is ignored in the case where all
          instructions in the block being crossjumped 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 is searched, the time savings
          from filling the delay slot will be minimal so stop searching.
          Increasing values mean more aggressive optimization, making
          the compile time increase with probably small improvement in
          executable run 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
          compile 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 will be
          allocated in order to perform the global common subexpression
          elimination optimization.  If more memory than specified is
          required, the optimization will not be done.

     'max-gcse-insertion-ratio'
          If the ratio of expression insertions to deletions is larger
          than this value for any expression, then RTL PRE will insert
          or remove the expression and thus leave partially redundant
          computations in the instruction stream.  The default value is
          20.

     'max-pending-list-length'
          The maximum number of pending dependencies scheduling will
          allow 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-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 will consider 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 will be investigated.  To those
          functions, a different (more restrictive) limit compared to
          functions declared inline can be applied.  The default value
          is 40.

     '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 backend.  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 (consider unit consisting of function A that is
          inline and B that just calls A three time.  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 30 which limits unit
          growth to 1.3 times the original 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.
          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 maximum number of instructions out-of-line copy of
          self recursive inline function can grow into by performing
          recursive inlining.

          For functions declared inline '--param
          max-inline-insns-recursive' is taken into account.  For
          function not declared inline, recursive inlining happens only
          when '-finline-functions' (included in '-O3') is enabled and
          '--param max-inline-insns-recursive-auto' is used.  The
          default value is 450.

     'max-inline-recursive-depth'
     'max-inline-recursive-depth-auto'
          Specifies maximum recursion depth used by the recursive
          inlining.

          For functions declared inline '--param
          max-inline-recursive-depth' is taken into account.  For
          function not declared inline, recursive inlining happens only
          when '-finline-functions' (included in '-O3') is enabled and
          '--param max-inline-recursive-depth-auto' is used.  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 will recurse via given call expression.  This
          parameter limits inlining only to call expression whose
          probability exceeds given threshold (in percents).  The
          default value is 10.

     'early-inlining-insns'
          Specify growth that early inliner can make.  In effect it
          increases amount of inlining for code having large abstraction
          penalty.  The default value is 10.

     'max-early-inliner-iterations'
     'max-early-inliner-iterations'
          Limit of iterations of early inliner.  This basically bounds
          number of nested indirect calls early inliner can resolve.
          Deeper chains are still handled by late inlining.

     'comdat-sharing-probability'
     'comdat-sharing-probability'
          Probability (in percent) that C++ inline function with comdat
          visibility will be shared across multiple compilation units.
          The default value is 20.

     'min-vect-loop-bound'
          The minimum number of iterations under which a loop will not
          get 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 will be
          with simple expressions, i.e., the expressions which have cost
          less than 'gcse-unrestricted-cost'.  Specifying 0 will disable
          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 will 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 will be.  Specifying 0
          will allow 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 will avoid limiting the search, but
          may slow down compilation of huge functions.  The default
          value is 30.

     'max-unrolled-insns'
          The maximum number of instructions that a loop should have if
          that loop is unrolled, and if the loop is unrolled, it
          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 should have if that loop is
          unrolled, and if the loop is unrolled, it 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 should have if
          that loop is peeled, and if the loop is peeled, it determines
          how many times the loop code is peeled.

     'max-peel-times'
          The maximum number of peelings of a single loop.

     '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
          that all candidates are considered for each use in induction
          variable optimizations.  Only the most relevant candidates are
          considered if there are more candidates, 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 number of candidates in the set is smaller than this value,
          we always try to remove unnecessary ivs from the set during
          its optimization when a new iv is added to the set.

     '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
          will be 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 runtime checks that can be performed
          when doing loop versioning for alignment in the vectorizer.
          See option ftree-vect-loop-version for more information.

     'vect-max-version-for-alias-checks'
          The maximum number of runtime checks that can be performed
          when doing loop versioning for alias in the vectorizer.  See
          option ftree-vect-loop-version for more information.

     'max-iterations-to-track'

          The maximum number of iterations of a loop the brute force
          algorithm for analysis of # of iterations of the loop tries to
          evaluate.

     'hot-bb-count-fraction'
          Select fraction of the maximal count of repetitions of basic
          block in program given basic block needs to have to be
          considered hot.

     '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 function contain single loop
          with known bound and other loop with unknown.  We predict the
          known number of iterations correctly, while the unknown number
          of iterations average to roughly 10.  This means that the loop
          without bounds would appear artificially cold relative to the
          other one.

     'align-threshold'

          Select fraction of the maximal frequency of executions of
          basic block in function given basic block will get aligned.

     'align-loop-iterations'

          A loop expected to iterate at lest the selected number of
          iterations will get 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' 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 rather hokey argument, as most of the
          duplicates will be 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 do have 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'

          Maximum number of basic blocks on path that cse considers.
          The default is 10.

     'max-cse-insns'
          The maximum instructions CSE process 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
          which 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 compile 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 compile time increase with probably slightly better
          performance.  The default value is 500.

     'reorder-blocks-duplicate'
     'reorder-blocks-duplicate-feedback'

          Used by 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' is used only when
          profile feedback is available and 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.  0 - disable region extension, N - do at most N
          iterations.  The default value is 0.

     '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 insn will be scheduled.  The default value
          is 40.

     '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 will be
          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.

     '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.

     '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.

     'min-virtual-mappings'
          Specifies the minimum number of virtual mappings in the
          incremental SSA updater that should be registered to trigger
          the virtual mappings heuristic defined by
          virtual-mappings-ratio.  The default value is 100.

     'virtual-mappings-ratio'
          If the number of virtual mappings is virtual-mappings-ratio
          bigger than the number of virtual symbols to be updated, then
          the incremental SSA updater switches to a full update for
          those symbols.  The default ratio is 3.

     'ssp-buffer-size'
          The minimum size of buffers (i.e. arrays) that will receive
          stack smashing protection when '-fstack-protection' is used.

     '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 we will treat 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 we prefetch 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 will refuse 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 will allow 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 will not be done and optimizations
          depending on it will be disabled.  The default maximum SCC
          size is 10000.

     'ira-max-loops-num'
          IRA uses a regional register allocation by default.  If a
          function contains loops more than number given by the
          parameter, only at most given number of the most frequently
          executed loops will form regions for the regional register
          allocation.  The default value of the parameter is 100.

     'ira-max-conflict-table-size'
          Although IRA uses a sophisticated algorithm of compression
          conflict table, the table can be still big for huge functions.
          If the conflict table for a function could be more than size
          in MB given by the parameter, the conflict table is not built
          and faster, simpler, and lower quality register allocation
          algorithm will be used.  The algorithm do not use
          pseudo-register conflicts.  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 decision to move loop invariants (see '-O3').  The
          number of available registers reserved for some other purposes
          is described by this parameter.  The default value of the
          parameter is 2 which is minimal number of registers needed for
          execution of typical instruction.  This value is the best
          found from numerous experiments.

     'loop-invariant-max-bbs-in-loop'
          Loop invariant motion can be very expensive, both in compile
          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.

     '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.

     '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 will replace 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.

     '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 compile 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.

     'devirt-type-list-size'
          IPA-CP attempts to track all possible types passed to a
          function's parameter in order to perform devirtualization.
          'devirt-type-list-size' is the maximum number of types it
          stores per a single formal parameter of a function.

     '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.


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 which GCC does not know
     how to 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.

'-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.

     'c1x'
          The next version of the ISO C standard, still under
          development.

     'gnu90'
     'gnu89'
          The 1990 C standard plus GNU extensions.  This is the default.

     'gnu99'
     'gnu9x'
          The 1999 C standard plus GNU extensions.

     'gnu1x'
          The next version of the ISO C standard, still under
          development, 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
     experimental; in a future version of GCC, it will be enabled by
     default for C99 and C++.

'-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.

'-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 which GCC does not know
     how to 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::.

'-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 will be passed to the linker, options
     specifying linkage of the system libraries, such as
     '-static-libgcc' or '-shared-libgcc', will be 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 will
     be passed to the linker, options specifying linkage of the system
     libraries, such as '-static-libgcc' or '-shared-libgcc', will be
     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
     that 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.  (For example, '__main', used to ensure C++
     constructors will be called; *note 'collect2': (gccint)Collect2.)

'-pie'
     Produce a position independent executable on targets which support
     it.  For predictable results, you must also specify the same set of
     options that were used to generate code ('-fpie', '-fPIE', or model
     suboptions) when you specify this 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
     that were used to generate code ('-fpic', '-fPIC', or model
     suboptions) when you specify this 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 will not always be 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 will link the shared version of 'libgcc' into
     shared libraries by default.  Otherwise, it will take advantage of
     the linker and optimize 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-libstdc++'
     When the 'g++' program is used to link a C++ program, it will
     normally automatically link against 'libstdc++'.  If 'libstdc++' is
     available as a shared library, and the '-static' option is not
     used, then this will link 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 which GCC does not know how to
     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.

   ---------- 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 will
     be ignored.  The directory will still be 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 which 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' was not
     specified, the driver tries two standard prefixes, which are
     '/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 will check to see if the path provided by the '-B'
     refers to a directory, and if necessary it will add 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
     includes 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 run-time 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
     will be 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 that 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 would normally search for headers in
     '/usr/include' and libraries in '/usr/lib', it will instead search
     'DIR/usr/include' and 'DIR/usr/lib'.

     If you use both this option and the '-isysroot' option, then the
     '--sysroot' option will apply to libraries, but the '-isysroot'
     option will apply 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' will still work, but
     the library aspect will not.

'-I-'
     This option has been deprecated.  Please use '-iquote' instead for
     '-I' directories before the '-I-' and remove the '-I-'.  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-', 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 which was current when the compiler was
     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 and it 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 will be
     deleted.  (Or, if the spec did not exist, then nothing will
     happened.)  Otherwise, if the spec does not currently exist a new
     spec will be created.  If the spec does exist then its contents
     will be overridden by the text of this directive, unless the first
     character of that text is the '+' character, in which case the text
     will be 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 will 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 that follows
     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 will add 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 will be 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 even if
     '%uSUFFIX' was already seen.

'%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' would involve 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 off; 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' will substitute later.

'%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 will be 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 would
     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.

'%[NAME]'
     Like '%(...)' but put '__' around '-D' arguments.

'%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 will make 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 will be prepended to each of these
     paths.

'%L'
     Process the 'lib' spec.  This is a spec string for deciding which
     libraries should be included on the command line to the linker.

'%G'
     Process the 'libgcc' spec.  This is a spec string for deciding
     which GCC support library should be included on the command line to
     the linker.

'%S'
     Process the 'startfile' spec.  This is a spec for deciding which
     object files should be 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 will be 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 will see '-S', '%' commands in the spec string
     after this one will 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 was given to GCC.  If
     that switch was 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}' would match the command-line option '-foo' and
     would output 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 names starts with 'o'.  %{o*} would
     substitute this text, including the space.  Thus two arguments
     would be 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 was given to GCC.

'%{!S:X}'
     Substitutes 'X', if the '-S' switch was _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' will be substituted once for each
     matching switch, with the '%*' replaced by the part of that switch
     that matched the '*'.

'%{.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' was 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}

     will output 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' was given to GCC, substitutes 'X'; else if 'T' was 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:

* ARC Options::
* ARM Options::
* AVR Options::
* Blackfin Options::
* CRIS Options::
* CRX Options::
* Darwin Options::
* DEC Alpha Options::
* DEC Alpha/VMS Options::
* FR30 Options::
* FRV Options::
* GNU/Linux Options::
* H8/300 Options::
* HPPA Options::
* i386 and x86-64 Options::
* i386 and x86-64 Windows Options::
* IA-64 Options::
* IA-64/VMS Options::
* LM32 Options::
* M32C Options::
* M32R/D Options::
* M680x0 Options::
* M68hc1x Options::
* MCore Options::
* MeP Options::
* MicroBlaze Options::
* MIPS Options::
* MMIX Options::
* MN10300 Options::
* PDP-11 Options::
* picoChip Options::
* PowerPC 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::
* V850 Options::
* VAX Options::
* VxWorks Options::
* x86-64 Options::
* Xstormy16 Options::
* Xtensa Options::
* zSeries Options::


File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Up: Submodel Options

3.17.1 ARC Options
------------------

These options are defined for ARC implementations:

'-EL'
     Compile code for little endian mode.  This is the default.

'-EB'
     Compile code for big endian mode.

'-mmangle-cpu'
     Prepend the name of the CPU to all public symbol names.  In
     multiple-processor systems, there are many ARC variants with
     different instruction and register set characteristics.  This flag
     prevents code compiled for one CPU to be linked with code compiled
     for another.  No facility exists for handling variants that are
     "almost identical".  This is an all or nothing option.

'-mcpu=CPU'
     Compile code for ARC variant CPU.  Which variants are supported
     depend on the configuration.  All variants support '-mcpu=base',
     this is the default.

'-mtext=TEXT-SECTION'
'-mdata=DATA-SECTION'
'-mrodata=READONLY-DATA-SECTION'
     Put functions, data, and readonly data in TEXT-SECTION,
     DATA-SECTION, and READONLY-DATA-SECTION respectively by default.
     This can be overridden with the 'section' attribute.  *Note
     Variable Attributes::.


File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options

3.17.2 ARM Options
------------------

These '-m' options are defined for Advanced RISC Machines (ARM)
architectures:

'-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 will cause the stack frames
     not to be generated for leaf functions.  The default is
     '-mno-apcs-frame'.

'-mapcs'
     This is a synonym for '-mapcs-frame'.

'-mthumb-interwork'
     Generate code which supports calling between the ARM and Thumb
     instruction sets.  Without this option 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.

'-mno-sched-prolog'
     Prevent the reordering of instructions in the function prolog, or
     the merging of those instruction with the instructions in the
     function's body.  This means that all functions will 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 if 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.

'-mhard-float'
     Equivalent to '-mfloat-abi=hard'.

'-msoft-float'
     Equivalent to '-mfloat-abi=soft'.

'-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.

'-mwords-little-endian'
     This option only applies when generating code for big-endian
     processors.  Generate code for a little-endian word order but a
     big-endian byte order.  That is, a byte order of the form
     '32107654'.  Note: this option should only be used if you require
     compatibility with code for big-endian ARM processors generated by
     versions of the compiler prior to 2.8.

'-mcpu=NAME'
     This specifies the name of the target ARM processor.  GCC uses this
     name to determine what kind of instructions it can emit when
     generating assembly code.  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-a8', 'cortex-a9', 'cortex-a15', 'cortex-r4', 'cortex-r4f',
     'cortex-m4', 'cortex-m3', 'cortex-m1', 'cortex-m0', 'xscale',
     'iwmmxt', 'iwmmxt2', 'ep9312'.

'-mtune=NAME'
     This option is very similar to the '-mcpu=' option, except that
     instead of specifying the actual target processor type, and hence
     restricting which instructions can be used, it specifies that GCC
     should tune the performance of the code as if the target were of
     the type specified in this option, but still choosing the
     instructions that it will generate based on the CPU specified by a
     '-mcpu=' option.  For some ARM implementations better performance
     can be obtained by using this option.

'-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', 'iwmmxt', 'iwmmxt2', 'ep9312'.

'-mfpu=NAME'
'-mfpe=NUMBER'
'-mfp=NUMBER'
     This specifies what floating point hardware (or hardware emulation)
     is available on the target.  Permissible names are: 'fpa', 'fpe2',
     'fpe3', 'maverick', 'vfp', 'vfpv3', 'vfpv3-fp16', 'vfpv3-d16',
     'vfpv3-d16-fp16', 'vfpv3xd', 'vfpv3xd-fp16', 'neon', 'neon-fp16',
     'vfpv4', 'vfpv4-d16', 'fpv4-sp-d16' and 'neon-vfpv4'.  '-mfp' and
     '-mfpe' are synonyms for '-mfpu'='fpe'NUMBER, for compatibility
     with older versions of GCC.

     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 will
     not be used 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 size of all structures and unions will be 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 the 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 will be 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 will lie 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 will be
     turned into long calls.  The heuristic is that static functions,
     functions which 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, will not be turned into long calls.  The
     exception to this rule is 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, will always be turned into long calls.

     This feature is not enabled by default.  Specifying
     '-mno-long-calls' will restore the default behavior, as will
     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 run-time
     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.  The default is
     R10 unless stack-checking is enabled, when R9 is used.

'-mcirrus-fix-invalid-insns'
     Insert NOPs into the instruction stream to in order to work around
     problems with invalid Maverick instruction combinations.  This
     option is only valid if the '-mcpu=ep9312' option has been used to
     enable generation of instructions for the Cirrus Maverick floating
     point co-processor.  This option is not enabled by default, since
     the problem is only present in older Maverick implementations.  The
     default can be re-enabled by use of the
     '-mno-cirrus-fix-invalid-insns' switch.

'-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'
     Generate code for the Thumb instruction set.  The default is to use
     the 32-bit ARM instruction set.  This option automatically enables
     either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2 instructions based
     on the '-mcpu=NAME' and '-march=NAME' options.  This option is not
     passed to the assembler.  If you want to force assembler files to
     be interpreted as Thumb code, either add a '.thumb' directive to
     the source or pass the '-mthumb' option directly to the assembler
     by prefixing it with '-Wa'.

'-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'.

'-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.


File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options

3.17.3 AVR Options
------------------

These options are defined for AVR implementations:

'-mmcu=MCU'
     Specify ATMEL AVR instruction set or MCU type.

     Instruction set avr1 is for the minimal AVR core, not supported by
     the C compiler, only for assembler programs (MCU types: at90s1200,
     attiny10, attiny11, attiny12, attiny15, attiny28).

     Instruction set avr2 (default) is for the classic AVR core with up
     to 8K program memory space (MCU types: at90s2313, at90s2323,
     attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
     at90s8515, at90c8534, at90s8535).

     Instruction set avr3 is for the classic AVR core with up to 128K
     program memory space (MCU types: atmega103, atmega603, at43usb320,
     at76c711).

     Instruction set avr4 is for the enhanced AVR core with up to 8K
     program memory space (MCU types: atmega8, atmega83, atmega85).

     Instruction set avr5 is for the enhanced AVR core with up to 128K
     program memory space (MCU types: atmega16, atmega161, atmega163,
     atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).

'-mno-interrupts'
     Generated code is not compatible with hardware interrupts.  Code
     size will be smaller.

'-mcall-prologues'
     Functions prologues/epilogues expanded as call to appropriate
     subroutines.  Code size will be smaller.

'-mtiny-stack'
     Change only the low 8 bits of the stack pointer.

'-mint8'
     Assume int to be 8 bit integer.  This affects the sizes of all
     types: A char will be 1 byte, an int will be 1 byte, a long will be
     2 bytes and long long will be 4 bytes.  Please note that this
     option does not comply to the C standards, but it will provide you
     with smaller code size.

3.17.3.1 'EIND' and Devices with more than 128k 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 address any code address in the range of 64k words.

 In order to faciliate indirect jump on devices with more than 128k
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 and
are subject to some limitations:

   * The compiler never sets 'EIND'.

   * 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).

   * The compiler uses 'EIND' implicitely in 'EICALL'/'EIJMP'
     instructions or might read 'EIND' directly.

   * The compiler assumes that 'EIND' never changes during the startup
     code or run of the application.  In particular, 'EIND' is not
     saved/restored in function or interrupt service routine
     prologue/epilogue.

   * It is legitimate for user-specific startup code to set up 'EIND'
     early, for example by means of initialization code located in
     section '.init3', and thus prior to general startup code that
     initializes RAM and calls constructors.

   * For indirect calls to functions and computed goto, the linker will
     generate _stubs_.  Stubs are jump pads sometimes also called
     _trampolines_.  Thus, the indirect call/jump will jump to such a
     stub.  The stub contains a direct jump to the desired address.

   * Stubs will be 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 will emit 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.

   * 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.

   * 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:

          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.


File: gcc.info,  Node: Blackfin Options,  Next: CRIS Options,  Prev: AVR Options,  Up: Submodel Options

3.17.4 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'.  The optional SIREVISION specifies the
     silicon revision of the target Blackfin processor.  Any workarounds
     available for the targeted silicon revision will be enabled.  If
     SIREVISION is 'none', no workarounds are enabled.  If SIREVISION is
     'any', all workarounds for the targeted processor will be 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.

     Support for 'bf561' is incomplete.  For 'bf561', Only the processor
     macro is defined.  Without this option, 'bf532' is used as the
     processor by default.  The corresponding predefined processor
     macros for CPU is to be defined.  And for 'bfin-elf' toolchain,
     this causes the hardware BSP provided by libgloss to be linked in
     if '-msim' is not given.

'-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 will ensure 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 will ensure 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 will be generated for jump and
     call insns.

'-mshared-library-id=n'
     Specified the identification number of the ID based shared library
     being compiled.  Specifying a value of 0 will generate more compact
     code, specifying other values will force 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 will lie 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' will restore 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 standalone application for multicore Blackfin processor.
     Proper start files and link scripts will be used to support
     multicore.  This option defines '__BFIN_MULTICORE'.  It can only be
     used with '-mcpu=bf561[-SIREVISION]'.  It can be used with
     '-mcorea' or '-mcoreb'.  If it's used without '-mcorea' or
     '-mcoreb', single application/dual core programming model is used.
     In this model, the main function of Core B should be named as
     coreb_main.  If it's used with '-mcorea' or '-mcoreb', one
     application per core programming model is used.  If this option is
     not used, single core application programming model is used.

'-mcorea'
     Build standalone application for Core A of BF561 when using one
     application per core programming model.  Proper start files and
     link scripts will be used to support Core A. This option defines
     '__BFIN_COREA'.  It must be used with '-mmulticore'.

'-mcoreb'
     Build standalone application for Core B of BF561 when using one
     application per core programming model.  Proper start files and
     link scripts will be used to support Core B. This option defines
     '__BFIN_COREB'.  When this option is used, coreb_main should be
     used instead of main.  It must be used with '-mmulticore'.

'-msdram'
     Build standalone application for SDRAM. Proper start files and link
     scripts will be used to put the application into SDRAM. Loader
     should initialize SDRAM before loading the application into SDRAM.
     This option defines '__BFIN_SDRAM'.

'-micplb'
     Assume that ICPLBs are enabled at runtime.  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: CRIS Options,  Next: CRX Options,  Prev: Blackfin Options,  Up: Submodel Options

3.17.5 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 to turn 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) arranges (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 that sets 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 variable 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: CRX Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options

3.17.6 CRX Options
------------------

These options are defined specifically for the CRX ports.

'-mmac'
     Enable the use of multiply-accumulate instructions.  Disabled by
     default.

'-mpush-args'
     Push instructions will be used to pass outgoing arguments when
     functions are called.  Enabled by default.


File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CRX Options,  Up: Submodel Options

3.17.7 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 will create an
object file for the single architecture that it 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 targetting,
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', will only permit 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', will fail and print 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', will quietly give
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 will be 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 which
     are compatible with as many systems and code bases as possible.

'-mkernel'
     Enable kernel development mode.  The '-mkernel' option sets
     '-static', '-fno-common', '-fno-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 turn around development.  Needed to
     enable 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 be loading the build
     output file being linked.  See man ld(1) for more information.

'-dynamiclib'
     When passed this option, GCC will produce 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: DEC Alpha/VMS Options,  Prev: Darwin Options,  Up: Submodel Options

3.17.8 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' will be 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 will 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.  Under DEC Unix, this has the effect
     that IEEE-conformant math library routines will be linked in.

'-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 will output the constant as a
     literal and generate code to load it from the data segment at
     runtime.

     Use this option to require GCC to construct _all_ integer constants
     using code, even if it takes more instructions (the maximum is
     six).

     You would 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.

'-malpha-as'
'-mgas'
     Select whether to generate code to be assembled by the
     vendor-supplied assembler ('-malpha-as') or by the GNU assembler
     '-mgas'.

'-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 was
     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 will
     choose the default values for the instruction set from the
     processor you specify.  If you do not specify a processor type, GCC
     will default 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 Linux/GNU 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 Linux/GNU 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: DEC Alpha/VMS Options,  Next: FR30 Options,  Prev: DEC Alpha Options,  Up: Submodel Options

3.17.9 DEC Alpha/VMS Options
----------------------------

These '-m' options are defined for the DEC Alpha/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 64bit memory allocation routines.


File: gcc.info,  Node: FR30 Options,  Next: FRV Options,  Prev: DEC Alpha/VMS Options,  Up: Submodel Options

3.17.10 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 will fit
     into a 20-bit range.

'-mno-lsim'
     Assume that run-time 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.11 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, that 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.12 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.13 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'.

'-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: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options

3.17.14 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 will run
     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.

'-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.

'-mjump-in-delay'
     Fill delay slots of function calls with unconditional jump
     instructions by modifying the return pointer for the function call
     to be the target of the conditional jump.

'-mdisable-fpregs'
     Prevent floating point registers from being used in any manner.
     This is necessary for compiling kernels which perform lazy context
     switching of floating point registers.  If you use this option and
     attempt to perform floating point operations, the compiler will
     abort.

'-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 which performs faster indirect calls.

     This option will 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 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.

'-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 GNU ld specific options.  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 have any affect on 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 HP ld specific options.  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 have any
     affect on 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 will degrade
     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: i386 and x86-64 Options,  Next: i386 and x86-64 Windows Options,  Prev: HPPA Options,  Up: Submodel Options

3.17.15 Intel 386 and AMD x86-64 Options
----------------------------------------

These '-m' options are defined for the i386 and x86-64 family of
computers:

'-mtune=CPU-TYPE'
     Tune to CPU-TYPE everything applicable about the generated code,
     except for the ABI and the set of available instructions.  The
     choices for CPU-TYPE are:
     _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' 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, the code generated option
          will change to reflect the processors that were most common
          when that version of GCC was 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.
     _native_
          This selects the CPU to tune for at compilation time by
          determining the processor type of the compiling machine.
          Using '-mtune=native' will produce code optimized for the
          local machine under the constraints of the selected
          instruction set.  Using '-march=native' will enable all
          instruction subsets supported by the local machine (hence the
          result might not run on different machines).
     _i386_
          Original Intel's i386 CPU.
     _i486_
          Intel's i486 CPU.  (No scheduling is implemented for this
          chip.)
     _i586, pentium_
          Intel Pentium CPU with no MMX support.
     _pentium-mmx_
          Intel PentiumMMX CPU based on Pentium core with MMX
          instruction set support.
     _pentiumpro_
          Intel PentiumPro CPU.
     _i686_
          Same as 'generic', but when used as 'march' option, PentiumPro
          instruction set will be used, so the code will run on all i686
          family chips.
     _pentium2_
          Intel Pentium2 CPU based on PentiumPro core with MMX
          instruction set support.
     _pentium3, pentium3m_
          Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
          instruction set support.
     _pentium-m_
          Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2
          instruction set support.  Used by Centrino notebooks.
     _pentium4, pentium4m_
          Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
          support.
     _prescott_
          Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and
          SSE3 instruction set support.
     _nocona_
          Improved version of Intel Pentium4 CPU with 64-bit extensions,
          MMX, SSE, SSE2 and SSE3 instruction set support.
     _core2_
          Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
          and SSSE3 instruction set support.
     _corei7_
          Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
          SSE3, SSSE3, SSE4.1 and SSE4.2 instruction set support.
     _corei7-avx_
          Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2,
          SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction
          set support.
     _core-avx-i_
          Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3,
          SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and
          F16C instruction set support.
     _atom_
          Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3
          and SSSE3 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_
          AMD K8 core based CPUs with x86-64 instruction set support.
          (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! and
          64-bit instruction set extensions.)
     _k8-sse3, opteron-sse3, athlon64-sse3_
          Improved versions of k8, opteron and athlon64 with SSE3
          instruction set support.
     _amdfam10, barcelona_
          AMD Family 10h core based CPUs with x86-64 instruction set
          support.  (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!,
          enhanced 3DNow!, ABM 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 Winchip2 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 CPU with MMX and SSE instruction set support.  (No
          scheduling is implemented for this chip.)
     _geode_
          Embedded AMD CPU with MMX and 3DNow! instruction set support.

     While picking a specific CPU-TYPE will schedule things
     appropriately for that particular chip, the compiler will not
     generate any code that does not run on the i386 without the
     '-march=CPU-TYPE' option being used.

'-march=CPU-TYPE'
     Generate instructions for the machine type CPU-TYPE.  The choices
     for CPU-TYPE are the same as for '-mtune'.  Moreover, specifying
     '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'.

'-mcpu=CPU-TYPE'
     A deprecated synonym for '-mtune'.

'-mfpmath=UNIT'
     Generate floating point arithmetics for selected unit UNIT.  The
     choices for UNIT are:

     '387'
          Use the standard 387 floating point coprocessor present
          majority of chips and emulated otherwise.  Code compiled with
          this option will run almost everywhere.  The temporary results
          are computed in 80bit precision instead of 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 i386 compiler.

     'sse'
          Use scalar floating point instructions present in the SSE
          instruction set.  This instruction set is supported by
          Pentium3 and newer chips, in the AMD line by Athlon-4,
          Athlon-xp and Athlon-mp chips.  The earlier version of SSE
          instruction set supports only single precision arithmetics,
          thus the double and extended precision arithmetics is still
          done using 387.  Later version, present only in Pentium4 and
          the future AMD x86-64 chips supports double precision
          arithmetics too.

          For the i386 compiler, you need to 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 80bit.

          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 double 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 instable
          performance.

'-masm=DIALECT'
     Output asm instructions using selected DIALECT.  Supported choices
     are 'intel' or 'att' (the default one).  Darwin does not support
     'intel'.

'-mieee-fp'
'-mno-ieee-fp'
     Control whether or not the compiler uses IEEE floating point
     comparisons.  These handle correctly 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 will always have an FPU and so the instruction will
     not need emulation.  As of revision 2.6.1, 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 will produce 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 will be aligned differently than the
     published application binary interface specifications for the 386
     and will not be 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 i386
     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) would prefer 'long double'
     to be aligned to an 8 or 16 byte boundary.  In arrays or structures
     conforming to the ABI, this would not be possible.  So specifying a
     '-m128bit-long-double' will align '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 to be 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,
     the structures and arrays containing 'long double' variables will
     change their size as well as function calling convention for
     function taking 'long double' will be modified.  Hence they will
     not be binary compatible with arrays or structures in code compiled
     without that switch.

'-mlarge-data-threshold=NUMBER'
     When '-mcmodel=medium' is specified, the data greater than
     THRESHOLD are placed in large data section.  This value must be the
     same across all object 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 will be generated for calls to those functions.

     In addition, seriously incorrect code will result 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 Intel x86, the '-mstackrealign'
     option will generate an alternate prologue and epilogue that
     realigns the runtime stack if necessary.  This supports mixing
     legacy codes that keep a 4-byte aligned stack with modern codes
     that keep a 16-byte stack 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).

'-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' will be used.

     On Pentium and PentiumPro, '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 will most likely misalign 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'
'-mno-mmx'
'-msse'
'-mno-sse'
'-msse2'
'-mno-sse2'
'-msse3'
'-mno-sse3'
'-mssse3'
'-mno-ssse3'
'-msse4.1'
'-mno-sse4.1'
'-msse4.2'
'-mno-sse4.2'
'-msse4'
'-mno-sse4'
'-mavx'
'-mno-avx'
'-maes'
'-mno-aes'
'-mpclmul'
'-mno-pclmul'
'-mfsgsbase'
'-mno-fsgsbase'
'-mrdrnd'
'-mno-rdrnd'
'-mf16c'
'-mno-f16c'
'-msse4a'
'-mno-sse4a'
'-mfma4'
'-mno-fma4'
'-mxop'
'-mno-xop'
'-mlwp'
'-mno-lwp'
'-m3dnow'
'-mno-3dnow'
'-mpopcnt'
'-mno-popcnt'
'-mabm'
'-mno-abm'
'-mbmi'
'-mno-bmi'
'-mtbm'
'-mno-tbm'
     These switches enable or disable the use of instructions in the
     MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, FSGSBASE,
     RDRND, F16C, SSE4A, FMA4, XOP, LWP, ABM, BMI, or 3DNow! extended
     instruction sets.  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 have SSE/SSE2 instructions generated 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 will enable GCC to use these extended instructions in
     generated code, even without '-mfpmath=sse'.  Applications which
     perform runtime 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.

'-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.

'-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 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 will enable GCC to use CMPXCHG16B instruction in
     generated code.  CMPXCHG16B allows for atomic operations on 128-bit
     double quadword (or oword) data types.  This is useful for high
     resolution counters that could be updated by multiple processors
     (or cores).  This instruction is generated as part of atomic
     built-in functions: see *note Atomic Builtins:: for details.

'-msahf'
     This option will enable GCC to use SAHF instruction in generated
     64-bit code.  Early Intel CPUs with Intel 64 lacked LAHF and SAHF
     instructions supported by AMD64 until introduction of Pentium 4 G1
     step in December 2005.  LAHF and SAHF are load and store
     instructions, respectively, for certain status flags.  In 64-bit
     mode, SAHF instruction is used to optimize 'fmod', 'drem' or
     'remainder' built-in functions: see *note Other Builtins:: for
     details.

'-mmovbe'
     This option will enable GCC to use movbe instruction to implement
     '__builtin_bswap32' and '__builtin_bswap64'.

'-mcrc32'
     This option will enable 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 will enable GCC to use 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'.

'-mveclibabi=TYPE'
     Specifies the ABI type to use for vectorizing intrinsics using an
     external library.  Supported types are 'svml' for the Intel short
     vector math library and 'acml' for the AMD math core library style
     of interfacing.  GCC will currently emit 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 corresponding function type when
     '-mveclibabi=acml' is used.  Both '-ftree-vectorize' and
     '-funsafe-math-optimizations' have to be enabled.  A SVML or ACML
     ABI compatible library will have to be specified at link time.

'-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 Windows.  On all other systems, the default is
     the SYSV ABI. You can control this behavior for a specific function
     by using the function attribute 'ms_abi'/'sysv_abi'.  *Note
     Function Attributes::.

'-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 will be computed in the function prologue.  This is
     faster on most modern CPUs because of reduced dependencies,
     improved scheduling and reduced stack usage when 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 'Mingw32'.  Code that
     relies 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 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 destination is
     known to be aligned at least to 4 byte boundary.  This enables more
     inlining, increase code size, but may improve performance of code
     that depends on fast memcpy, strlen and memset for short lengths.

'-minline-stringops-dynamically'
     For string operation of unknown size, inline runtime checks so for
     small blocks inline code is used, while for large blocks library
     call is used.

'-mstringop-strategy=ALG'
     Overwrite internal decision heuristic about particular algorithm to
     inline string operation with.  The allowed values are 'rep_byte',
     'rep_4byte', 'rep_8byte' for expanding using i386 'rep' prefix of
     specified size, 'byte_loop', 'loop', 'unrolled_loop' for expanding
     inline loop, 'libcall' for always expanding library call.

'-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.

'-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 legal depends on the operating system, and whether it maps the
     segment to cover the entire TLS area.

     For systems that use GNU libc, 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
     prologue.  Note: On x86 architectures the attribute
     'ms_hook_prologue' isn't possible at the moment for '-mfentry' and
     '-pg'.

'-m8bit-idiv'
'-mno-8bit-idiv'
     On some processors, like Intel Atom, 8bit unsigned integer divide
     is much faster than 32bit/64bit integer divide.  This option will
     generate a runt-time check.  If both dividend and divisor are
     within range of 0 to 255, 8bit unsigned integer divide will be used
     instead of 32bit/64bit integer divide.

'-mavx256-split-unaligned-load'
'-mavx256-split-unaligned-store'
     Split 32-byte AVX unaligned load and store.

 These '-m' switches are supported in addition to the above on AMD
x86-64 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 and generates
     code that runs on any i386 system.  The 64-bit environment sets int
     to 32 bits and long and pointer to 64 bits and generates code for
     AMD's x86-64 architecture.  For darwin only the -m64 option turns
     off the '-fno-pic' and '-mdynamic-no-pic' options.

'-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 will not be 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.


File: gcc.info,  Node: i386 and x86-64 Windows Options,  Next: IA-64 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options

3.17.16 i386 and x86-64 Windows Options
---------------------------------------

These additional options are available for Windows targets:

'-mconsole'
     This option is available for Cygwin and MinGW targets.  It
     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 is the default behavior for Cygwin
     and MinGW 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 specifies that
     the UNICODE macro is getting pre-defined and that the unicode
     capable runtime startup code is chosen.

'-mwin32'
     This option is available for Cygwin and MinGW targets.  It
     specifies that the typical Windows pre-defined 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 stack used by nested functions isn't set.  This
     is necessary for binaries running in kernel mode of Windows, as
     there the user32 API, which is used to set executable privileges,
     isn't available.

'-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 will be enabled by default if GCC detects that
     the target assembler found during configuration supports the
     feature.

 See also under *note i386 and x86-64 Options:: for standard options.


File: gcc.info,  Node: IA-64 Options,  Next: IA-64/VMS Options,  Prev: i386 and x86-64 Windows 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 DWARF2 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 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.

'-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 will
     result in generation of the 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 will
     result in generation of the 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
     will result 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 will be chosen for
     schedule only if there are no other choices at the moment.  This
     will make 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 will be chosen for
     schedule only if there are no other choices at the moment.  This
     will make 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 will be considered during
     computation of the instructions priorities.  This will make 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'
     Disallow more than 'msched-max-memory-insns' in instruction group.
     Otherwise, limit is 'soft' meaning that we would prefer non-memory
     operations when limit is reached but may still schedule memory
     operations.


File: gcc.info,  Node: IA-64/VMS Options,  Next: LM32 Options,  Prev: IA-64 Options,  Up: Submodel Options

3.17.18 IA-64/VMS Options
-------------------------

These '-m' options are defined for the IA-64/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 64bit memory allocation routines.


File: gcc.info,  Node: LM32 Options,  Next: M32C Options,  Prev: IA-64/VMS Options,  Up: Submodel Options

3.17.19 LM32 Options
--------------------

These '-m' options are defined for the Lattice Mico32 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.20 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 will use
     during code generation.  These pseudo-registers will be 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 the default
     runtime libraries gcc builds.


File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options

3.17.21 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 will generate '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 will generate 'seth/add3' instructions to load their
     addresses), and assume subroutines may not be reachable with the
     'bl' instruction (the compiler will generate the much slower
     'seth/add3/jl' instruction sequence).

'-msdata=none'
     Disable use of the small data area.  Variables will be 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 will give an error message--incorrect code will
     not be 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 will be
     preferred over conditional code, if it is 2, then the opposite will
     apply.

'-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 will only be 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: M68hc1x Options,  Prev: M32R/D Options,  Up: Submodel Options

3.17.22 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' '51cn' '51em' '51qe'
     '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 which 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 which 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 will be generated for calls to those functions.

     In addition, seriously incorrect code will result 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 will align
     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 will be 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'
     Specified the identification number of the ID based shared library
     being compiled.  Specifying a value of 0 will generate more compact
     code, specifying other values will force 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: M68hc1x Options,  Next: MCore Options,  Prev: M680x0 Options,  Up: Submodel Options

3.17.23 M68hc1x Options
-----------------------

These are the '-m' options defined for the 68hc11 and 68hc12
microcontrollers.  The default values for these options depends on which
style of microcontroller was selected when the compiler was configured;
the defaults for the most common choices are given below.

'-m6811'
'-m68hc11'
     Generate output for a 68HC11.  This is the default when the
     compiler is configured for 68HC11-based systems.

'-m6812'
'-m68hc12'
     Generate output for a 68HC12.  This is the default when the
     compiler is configured for 68HC12-based systems.

'-m68S12'
'-m68hcs12'
     Generate output for a 68HCS12.

'-mauto-incdec'
     Enable the use of 68HC12 pre and post auto-increment and
     auto-decrement addressing modes.

'-minmax'
'-mnominmax'
     Enable the use of 68HC12 min and max instructions.

'-mlong-calls'
'-mno-long-calls'
     Treat all calls as being far away (near).  If calls are assumed to
     be far away, the compiler will use the 'call' instruction to call a
     function and the 'rtc' instruction for returning.

'-mshort'
     Consider type 'int' to be 16 bits wide, like 'short int'.

'-msoft-reg-count=COUNT'
     Specify the number of pseudo-soft registers which are used for the
     code generation.  The maximum number is 32.  Using more pseudo-soft
     register may or may not result in better code depending on the
     program.  The default is 4 for 68HC11 and 2 for 68HC12.


File: gcc.info,  Node: MCore Options,  Next: MeP Options,  Prev: M68hc1x Options,  Up: Submodel Options

3.17.24 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 four 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 run-time 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 which 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.25 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 will be 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 will be 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 build-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 runtime 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 will be 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.26 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 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.

'-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 be 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.27 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 will run 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', 'mips64' and 'mips64r2'.  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', '74kc', '74kf2_1',
     '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1', '1004kf1_1',
     'loongson2e', 'loongson2f', 'loongson3a', 'm4k', 'octeon', 'orion',
     'r2000', 'r3000', 'r3900', 'r4000', 'r4400', 'r4600', 'r4650',
     'r6000', 'r8000', 'rm7000', 'rm9000', 'r10000', 'r12000', 'r14000',
     'r16000', 'sb1', 'sr71000', 'vr4100', 'vr4111', 'vr4120', 'vr4130',
     'vr4300', 'vr5000', 'vr5400', 'vr5500' and 'xlr'.  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).

     Native Linux/GNU toolchains also support 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' will set '_MIPS_ARCH' to '"r2000"' and define the
     macro '_MIPS_ARCH_R2000'.

     Note that the '_MIPS_ARCH' macro uses the processor names given
     above.  In other words, it will have the full prefix and will 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 will optimize for the processor
     specified by '-march'.  By using '-march' and '-mtune' together, it
     is possible to generate code that will run 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'.

'-mips32r2'
     Equivalent to '-march=mips32r2'.

'-mips64'
     Equivalent to '-march=mips64'.

'-mips64r2'
     Equivalent to '-march=mips64r2'.

'-mips16'
'-mno-mips16'
     Generate (do not generate) MIPS16 code.  If GCC is targetting a
     MIPS32 or MIPS64 architecture, it will make 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-mips16'
'-mno-interlink-mips16'
     Require (do not require) that non-MIPS16 code be link-compatible
     with MIPS16 code.

     For example, non-MIPS16 code cannot jump directly to MIPS16 code;
     it must either use a call or an indirect jump.
     '-minterlink-mips16' therefore disables direct jumps unless GCC
     knows that the target of the jump is not MIPS16.

'-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 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, but
     all 64 bits are saved.

'-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' will
     generally make 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 will only work if the GOT is
     smaller than about 64k.  Anything larger will cause 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'.  It
     should then work with very large GOTs, although it will also be
     less efficient, since it will take 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.

'-mhard-float'
     Use floating-point coprocessor instructions.

'-msoft-float'
     Do not use floating-point coprocessor instructions.  Implement
     floating-point calculations using library calls instead.

'-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.

'-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 will use 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'.

'-mmt'
'-mno-mt'
     Use (do not use) MT Multithreading 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 access the
     data more efficiently; 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 will be in a
     small data section if 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 will pass an unknown value in '$gp'.  (In
     such situations, the boot monitor itself would usually be 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.

'-mfused-madd'
'-mno-fused-madd'
     Enable (disable) use of the floating point multiply-accumulate
     instructions, when they are available.  The default is
     '-mfused-madd'.

     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.

'-nocpp'
     Tell the MIPS assembler to not run its preprocessor over user
     assembler files (with a '.s' suffix) when assembling them.

'-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-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 will
     avoid 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 was 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 will overwrite 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 will 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 which implement those architectures;
     for those, Branch Likely instructions will 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 we
     schedule FP instructions 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 will align 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) will be generated when '__builtin___clear_cache()' is
     compiled.

     This option defaults to '-mno-synci', but the default can be
     overridden by configuring 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
     will 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 supports 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.28 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: PDP-11 Options,  Prev: MMIX Options,  Up: Submodel Options

3.17.29 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 which uses features specific to the AM33 processor.

'-mno-am33'
     Do not generate code which uses features specific to the AM33
     processor.  This is the default.

'-mam33-2'
     Generate code which uses features specific to the AM33/2.0
     processor.

'-mam34'
     Generate code which uses 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 which 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
     would 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__'.


File: gcc.info,  Node: PDP-11 Options,  Next: picoChip Options,  Prev: MN10300 Options,  Up: Submodel Options

3.17.30 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.31 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 will run on any of the other AE types.  The code
     will not be as efficient as it would be if compiled for a specific
     AE type, and some types of operation (e.g., multiplication) will
     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 will generate 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 which
     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 will be generated
     indicating to the programmer that they should rewrite the code to
     avoid byte operations, or to target an AE type which has the
     necessary hardware support.  This option enables the warning to be
     turned off.


File: gcc.info,  Node: PowerPC Options,  Next: RS/6000 and PowerPC Options,  Prev: picoChip Options,  Up: Submodel Options

3.17.32 PowerPC Options
-----------------------

These are listed under *Note RS/6000 and PowerPC Options::.


File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: RX Options,  Prev: PowerPC Options,  Up: Submodel Options

3.17.33 IBM RS/6000 and PowerPC Options
---------------------------------------

These '-m' options are defined for the IBM RS/6000 and PowerPC:
'-mpower'
'-mno-power'
'-mpower2'
'-mno-power2'
'-mpowerpc'
'-mno-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'
     GCC supports two related instruction set architectures for the
     RS/6000 and PowerPC.  The "POWER" instruction set are those
     instructions supported by the 'rios' chip set used in the original
     RS/6000 systems and the "PowerPC" instruction set is the
     architecture of the Freescale MPC5xx, MPC6xx, MPC8xx
     microprocessors, and the IBM 4xx, 6xx, and follow-on
     microprocessors.

     Neither architecture is a subset of the other.  However there is a
     large common subset of instructions supported by both.  An MQ
     register is included in processors supporting the POWER
     architecture.

     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.

     The '-mpower' option allows GCC to generate instructions that are
     found only in the POWER architecture and to use the MQ register.
     Specifying '-mpower2' implies '-power' and also allows GCC to
     generate instructions that are present in the POWER2 architecture
     but not the original POWER architecture.

     The '-mpowerpc' option allows GCC to generate instructions that are
     found only in the 32-bit subset of the PowerPC architecture.
     Specifying '-mpowerpc-gpopt' implies '-mpowerpc' and also allows
     GCC to use the optional PowerPC architecture instructions in the
     General Purpose group, including floating-point square root.
     Specifying '-mpowerpc-gfxopt' implies '-mpowerpc' and also 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'.

     If you specify both '-mno-power' and '-mno-powerpc', GCC will use
     only the instructions in the common subset of both architectures
     plus some special AIX common-mode calls, and will not use the MQ
     register.  Specifying both '-mpower' and '-mpowerpc' permits GCC to
     use any instruction from either architecture and to allow use of
     the MQ register; specify this for the Motorola MPC601.

'-mnew-mnemonics'
'-mold-mnemonics'
     Select which mnemonics to use in the generated assembler code.
     With '-mnew-mnemonics', GCC uses the assembler mnemonics defined
     for the PowerPC architecture.  With '-mold-mnemonics' it uses the
     assembler mnemonics defined for the POWER architecture.
     Instructions defined in only one architecture have only one
     mnemonic; GCC uses that mnemonic irrespective of which of these
     options is specified.

     GCC defaults to the mnemonics appropriate for the architecture in
     use.  Specifying '-mcpu=CPU_TYPE' sometimes overrides the value of
     these option.  Unless you are building a cross-compiler, you should
     normally not specify either '-mnew-mnemonics' or '-mold-mnemonics',
     but should instead accept the default.

'-mcpu=CPU_TYPE'
     Set architecture type, register usage, choice of mnemonics, 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', 'ec603e', 'G3', 'G4',
     'G5', 'titan', 'power', 'power2', 'power3', 'power4', 'power5',
     'power5+', 'power6', 'power6x', 'power7', 'common', 'powerpc',
     'powerpc64', 'rios', 'rios1', 'rios2', 'rsc', and 'rs64'.

     '-mcpu=common' selects a completely generic processor.  Code
     generated under this option will run on any POWER or PowerPC
     processor.  GCC will use only the instructions in the common subset
     of both architectures, and will not use the MQ register.  GCC
     assumes a generic processor model for scheduling purposes.

     '-mcpu=power', '-mcpu=power2', '-mcpu=powerpc', and
     '-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit
     PowerPC (i.e., not MPC601), and 64-bit 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 will run 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
          -mnew-mnemonics  -mpopcntb -mpopcntd  -mpower  -mpower2  -mpowerpc64
          -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float
          -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx

     The particular options set for any particular CPU will vary 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, register usage, or
     choice of mnemonics, as '-mcpu=CPU_TYPE' would.  The same values
     for CPU_TYPE are used for '-mtune' as for '-mcpu'.  If both are
     specified, the code generated will use the architecture, registers,
     and mnemonics 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.

'-mvrsave'
'-mno-vrsave'
     Generate VRSAVE instructions when generating AltiVec code.

'-mgen-cell-microcode'
     Generate Cell microcode instructions

'-mwarn-cell-microcode'
     Warning when a Cell microcode instruction is going to 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-exec .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.

'-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 will allocate at least one TOC entry
     for each unique non-automatic variable reference in your program.
     GCC will also place 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 will produce 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' and '-mpowerpc', 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 which
     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'
     Specify type of floating point unit.  Valid values 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 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 the instructions usage 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 the
     instructions usage 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 targetting 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
     targetting 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 targetting 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 would be aligned to a 4 byte
     boundary and have a size of 4 bytes.  By using '-mno-bit-align',
     the structure would be aligned to a 1 byte boundary and be one byte
     in size.

'-mno-strict-align'
'-mstrict-align'
     On System V.4 and embedded PowerPC systems do not (do) assume that
     unaligned memory references will be 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 runtime.  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 runtime, 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 run-time
     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/2 to assign
     NO/HIGHEST/SECOND-HIGHEST 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
     which latency >= NUMBER is costly.

'-minsert-sched-nops=SCHEME'
     This option controls which nop insertion scheme will be 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 which 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 adheres 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-gnu'
     On System V.4 and embedded PowerPC systems compile code for the
     Hurd-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.

'-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 Booke 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.

'-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 were passed in the floating
     point registers in case the function takes a variable arguments.
     With '-mprototype', only calls to prototyped variable argument
     functions will 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 to 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, do not call an
     initialization function from 'main', and the '-msdata' option will
     only use '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 more
     expensive calling sequence is required.  This is required for calls
     further than 32 megabytes (33,554,432 bytes) from the current
     location.  A short call will be 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' will generate "jbsr
     callee, L42", plus a "branch island" (glue code).  The two target
     addresses represent the callee and the "branch island".  The
     Darwin/PPC linker will prefer the first address and generate a "bl
     callee" if the PPC "bl" instruction will reach the callee directly;
     otherwise, the linker will generate "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, we may cause GCC to 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 ld 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 will enable GCC to use 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 allows to control which reciprocal estimate
     instructions may be used.  OPT is a comma separated list of
     options, that 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' would enable the 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' or '-mcpu=power7' 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 will currently emit 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' have to be enabled.  The MASS
     libraries will have to 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 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.


File: gcc.info,  Node: RX Options,  Next: S/390 and zSeries Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options

3.17.34 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 will only be generated for 32-bit
     floating point values however, so if the '-m64bit-doubles' option
     is in use then the FPU hardware will not be used for doubles.

     _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 ('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 which once could
     have been held in 'r13' are now pushed onto the stack.

     Note, common variables (variables which have not been initialised)
     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 register 'r13'.  It is up to the programmer to experiment
     and discover whether this feature is of benefit to their program.

'-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 generating it is
     not the default option.

'-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 will attempt 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' will be 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.

 _Note:_ The generic GCC command line '-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 will will ensure 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.35 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' will be 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' will be 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
     64bit 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 will run 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' and
     'z10'.  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 which 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 s390 back end emits additional
     instructions in the function prologue which trigger a trap if the
     stack size is STACK-GUARD bytes above the STACK-SIZE (remember that
     the stack on s390 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.


File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options

3.17.36 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 generate bcnz instruction.

'-muls'
     Enable generate unaligned load and store instruction.

'-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.37 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.

'-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.

'-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 will 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.

'-mhitachi'
     Comply with the calling conventions defined by Renesas.

'-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 except for 'sh-symbianelf'.

'-mnomacsave'
     Mark the 'MAC' register as call-clobbered, even if '-mhitachi' 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 will
     manipulate the instruction cache address array directly with an
     associative write.  This not only requires privileged mode, but it
     will also fail 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.

'-mspace'
     Optimize for space instead of speed.  Implied by '-Os'.

'-mprefergot'
     When generating position-independent code, emit function calls
     using the Global Offset Table instead of the Procedure Linkage
     Table.

'-musermode'
     Don't generate privileged mode only code; implies
     -mno-inline-ic_invalidate if the inlined code would not work in
     user mode.  This is the default when the target is 'sh-*-linux*'.

'-multcost=NUMBER'
     Set the cost to assume for a multiply insn.

'-mdiv=STRATEGY'
     Set the division strategy to use for SHmedia code.  STRATEGY must
     be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
     inv:call, inv:call2, inv:fp .  "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" is a variant of "inv" where if no cse / 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 / code hoisting optimizations.  "inv:call", "inv:call2"
     and "inv:fp" all 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 fp operations or a call is
     not possible in that case.  "inv20u" and "inv20l" are variants of
     the "inv:minlat" strategy.  In the case that the inverse
     calculation was nor 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.

'-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 affect the name used in the call and
     inv:call division strategies, and the compiler will still expect
     the same sets of input/output/clobbered registers as if this option
     was 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.

'-madjust-unroll'
     Throttle unrolling to avoid thrashing target registers.  This
     option only has an effect if the gcc code base supports the
     TARGET_ADJUST_UNROLL_MAX target hook.

'-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 will generally generate
     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 ptabs / ptrel before a branch, or
     hoist it 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 will be done before testing against -1.  That means that
     all the constructors will be run a bit quicker, 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 the user specifies a specific
     cost with '-mgettrcost', -mno-pt-fixed also implies
     '-mgettrcost=100'; this deters register allocation using target
     registers for storing ordinary integers.

'-minvalid-symbols'
     Assume symbols might be invalid.  Ordinary function symbols
     generated by the compiler will always be 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 will cause
     ptabs / ptrel to trap.  This option is only meaningful when
     '-mno-pt-fixed' is in effect.  It will then prevent
     cross-basic-block cse, hoisting and most scheduling of symbol
     loads.  The default is '-mno-invalid-symbols'.


File: gcc.info,  Node: Solaris 2 Options,  Next: SPARC Options,  Prev: SH Options,  Up: Submodel Options

3.17.38 Solaris 2 Options
-------------------------

These '-m' options are supported on Solaris 2:

'-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 will 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:

'-threads'
     Add support for multithreading using the Solaris 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.

'-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.39 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.
     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.

'-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.

'-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 will not be 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', 'sparclite', 'f930', 'f934', 'sparclite86x', 'sparclet',
     'tsc701', 'v9', 'ultrasparc', 'ultrasparc3', 'niagara' and
     'niagara2'.

     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
              v8:             supersparc, hypersparc, leon
              sparclite:      f930, f934, sparclite86x
              sparclet:       tsc701
              v9:             ultrasparc, ultrasparc3, niagara, niagara2

     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.

'-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.

     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', 'f930', 'f934', 'sparclite86x',
     'tsc701', 'ultrasparc', 'ultrasparc3', 'niagara', and 'niagara2'.

'-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-bit 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'.

'-mfix-at697f'
     Enable the documented workaround for the single erratum of the
     Atmel AT697F processor (which corresponds to erratum #13 of the
     AT697E processor).

 These '-m' options are supported in addition to the above on SPARC-V9
processors in 64-bit environments:

'-mlittle-endian'
     Generate code for a processor running in little-endian mode.  It is
     only available for a few configurations and most notably not on
     Solaris and Linux.

'-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=medlow'
     Generate code for 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.

'-mcmodel=medmid'
     Generate code for 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.

'-mcmodel=medany'
     Generate code for 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.

'-mcmodel=embmedany'
     Generate code for 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.

'-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.40 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 will give an error when it generates code that
     requires a dynamic relocation.  '-mno-error-reloc' disables the
     error, '-mwarn-reloc' will generate a warning instead.

'-msafe-dma'
'-munsafe-dma'

     Instructions which initiate or test completion of DMA must not be
     reordered with respect to loads and stores of the memory which is
     being accessed.  Users typically address this problem using the
     volatile keyword, but that can lead to inefficient code in places
     where the memory is known to not change.  Rather than mark the
     memory as volatile we treat the DMA instructions as potentially
     effecting all memory.  With '-munsafe-dma' users must use the
     volatile keyword to protect memory accesses.

'-mbranch-hints'

     By default, GCC will generate a branch hint instruction to avoid
     pipeline stalls for always taken or probably taken branches.  A
     hint will not be 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 will link 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 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.

'-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 will 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 will be more efficient.
     The default behavior is to use atomic updates.

'-mdual-nops'
'-mdual-nops=N'
     By default, GCC will insert nops to increase dual issue when it
     expects it to increase performance.  N can be a value from 0 to 10.
     A smaller N will insert 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
     effecting.  GCC will insert up to N nops to enforce this, otherwise
     it will 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 effecting.  By default,
     GCC makes sure it is within 125.

'-msafe-hints'
     Work around a hardware bug which causes the SPU to stall
     indefinitely.  By default, GCC will insert the 'hbrp' instruction
     to make sure this stall won't happen.


File: gcc.info,  Node: System V Options,  Next: V850 Options,  Prev: SPU Options,  Up: Submodel Options

3.17.41 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: V850 Options,  Next: VAX Options,  Prev: System V Options,  Up: Submodel Options

3.17.42 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 will always load the functions address up
     into a register, and call 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.

'-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 will cause r2 and r5 to be used in the code generated
     by the compiler.  This setting is the default.

'-mno-app-regs'
     This option will cause r2 and r5 to be treated as fixed registers.

'-mv850e2v3'
     Specify that the target processor is the V850E2V3.  The
     preprocessor constants '__v850e2v3__' will be defined if this
     option is used.

'-mv850e2'
     Specify that the target processor is the V850E2.  The preprocessor
     constants '__v850e2__' will be defined if

'-mv850e1'
     Specify that the target processor is the V850E1.  The preprocessor
     constants '__v850e1__' and '__v850e__' will be defined if

'-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__' will be defined if this option is used.

     If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor
     '-mv850e2v3' are defined then a default target processor will be
     chosen and the relevant '__v850*__' preprocessor constant will be
     defined.

     The preprocessor constants '__v850' and '__v851__' are always
     defined, regardless of which processor variant is the target.

'-mdisable-callt'
     This option will suppress generation of the CALLT instruction for
     the v850e, v850e1, v850e2 and v850e2v3 flavors of the v850
     architecture.  The default is '-mno-disable-callt' which allows the
     CALLT instruction to be used.


File: gcc.info,  Node: VAX Options,  Next: VxWorks Options,  Prev: V850 Options,  Up: Submodel Options

3.17.43 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 you will
     assemble with the GNU assembler.

'-mg'
     Output code for g-format floating point numbers instead of
     d-format.


File: gcc.info,  Node: VxWorks Options,  Next: x86-64 Options,  Prev: VAX Options,  Up: Submodel Options

3.17.44 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-64 Options,  Next: Xstormy16 Options,  Prev: VxWorks Options,  Up: Submodel Options

3.17.45 x86-64 Options
----------------------

These are listed under *Note i386 and x86-64 Options::.


File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options

3.17.46 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.47 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'
     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 will be
     performed.  The default is '-mtarget-align'.  These options do not
     affect the treatment of auto-aligned instructions like 'LOOP',
     which the assembler will always align, either by widening density
     instructions or by inserting no-op 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 will still show
     direct call instructions--look at the disassembled object code to
     see the actual instructions.  Note that the assembler will use an
     indirect call for every cross-file call, not just those that really
     will be out of range.


File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options

3.17.48 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' would be '-fno-foo'.  In the table below, only one of the
forms is listed--the one which 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.

'-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 will
     generate 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 will enable it
     by default for languages like C++ which normally require exception
     handling, and disable 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'.

'-funwind-tables'
     Similar to '-fexceptions', except that it will just generate any
     needed static data, but will not affect the generated code in any
     other way.  You will normally not enable this option; instead, a
     language processor that needs this handling would enable it on your
     behalf.

'-fasynchronous-unwind-tables'
     Generate unwind table in dwarf2 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).

'-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
     will be equivalent to the smallest integer type which 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 will 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
     which 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 that was 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.

'-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
     386 has no such limit.)

     Position-independent code requires special support, and therefore
     works only on certain machines.  For the 386, 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 will be 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
     which 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 will not save and restore the register REG.

     It is an error to used 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 will produce
     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 will save and
     restore the register REG if they use it.

     It is an error to used 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 will produce
     disastrous results.

     A different sort of disaster will result 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 will be 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 will be 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 will 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 anyways,
     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 will not be 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

     will exclude 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 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 will
          always be 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, the performances of the code
          are 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 the stack would grow beyond the value, a signal is
     raised.  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 i386 and x86_64
     backends 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'.

     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 will be 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 will be 'hidden'.  The
     default if '-fvisibility' isn't specified is 'default', i.e., make
     every symbol public--this causes the same behavior as previous
     versions of GCC.

     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://people.redhat.com/~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 DLL's 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 will 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 will be
     thrown between DSOs must be explicitly marked with default
     visibility so that the 'type_info' nodes will be 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 bitfields (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 the
     user could declare all peripheral bitfields 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 will use the most
     efficient instruction.  In the previous example, that might be a
     32-bit load instruction, even though that will access bytes that do
     not contain any portion of the bitfield, or memory-mapped registers
     unrelated to the one being updated.

     If the target requires strict alignment, and honoring the field
     type would require violating this alignment, a warning is issued.
     If the field has 'packed' attribute, the access is done without
     honoring the field type.  If the field doesn't have 'packed'
     attribute, the access is done honoring the field type.  In both
     cases, GCC assumes that the user knows something about the target
     hardware that it is unaware of.

     The default value of this option is determined by the application
     binary interface for the target processor.


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 that allow 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 would otherwise be
     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_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 will attempt to figure out an
     appropriate prefix to use based on the pathname it was 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 will search
     'foo/bar' where it would normally search '/usr/local/lib/bar'.
     These alternate directories are searched first; the standard
     directories come next.  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 will use mblen and mbtowc as defined by the default locale
     to recognize and translate multibyte characters.

Some additional environments 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 users to
'precompile' a header file; then, if builds can use the precompiled
header file they will be much faster.

 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 will probably 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 will be 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 will
be used if possible, and the original header will be 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 will be 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 will be considered.
The first precompiled header encountered in the directory that is valid
for this compilation will be 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 can even include a precompiled header from inside another
     header, so long as there are no C tokens before the '#include'.

   * 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 will automatically
ignore 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 will be 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 and ISO/IEC 9899:1999 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 3.10, C90 and C99
     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 and C99 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 and C99
     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 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 and C99 5.2.4.1, C99 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 requires 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 3.6).'

     Determined by ABI.

   * 'The values of the members of the execution character set (C90 and
     C99 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
     and C99 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 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 6.2.5, C99 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 6.4.4.4, C90 and C99 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
     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 containing a multibyte character or escape
     sequence not represented in the extended execution character set
     (C90 6.1.3.4, C99 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 6.4.4.4).'

     *Note Implementation-defined behavior: (cpp)Implementation-defined
     behavior.

   * 'The current locale used to convert a wide string literal into
     corresponding wide character codes (C90 6.1.4, C99 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 6.4.5).'

     *Note Implementation-defined behavior: (cpp)Implementation-defined
     behavior.


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
     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 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 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 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 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 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 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 and C99 5.2.4.2.2).'

     The accuracy is unknown.

   * 'The rounding behaviors characterized by non-standard values of
     'FLT_ROUNDS' (C90 and C99 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 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 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
     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 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 6.5).'

     Expressions are currently only contracted if
     '-funsafe-math-optimizations' or '-ffast-math' are used.  This is
     subject to change.

   * 'The default state for the 'FENV_ACCESS' pragma (C99 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 7.6,
     C99 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 7.12.2).'

     This pragma is not implemented.  Expressions are currently only
     contracted if '-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 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 6.5.6/8.

   * 'The size of the result of subtracting two pointers to elements of
     the same array (C90 6.3.6, C99 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 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 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 6.7.2, C99 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 6.7.2.1).'

     No other types are permitted in strictly conforming mode.

   * 'Whether a bit-field can straddle a storage-unit boundary (C90
     6.5.2.1, C99 6.7.2.1).'

     Determined by ABI.

   * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1,
     C99 6.7.2.1).'

     Determined by ABI.

   * 'The alignment of non-bit-field members of structures (C90 6.5.2.1,
     C99 6.7.2.1).'

     Determined by ABI.

   * 'The integer type compatible with each enumerated type (C90
     6.5.2.2, C99 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 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.

   * 'How sequences in both forms of header names are mapped to headers
     or external source file names (C90 6.1.7, C99 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
     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 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 6.10.2).'

   * 'How the named source file is searched for in an included '""'
     delimited header (C90 6.8.2, C99 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 6.10.2).'

   * 'The nesting limit for '#include' processing (C90 6.8.2, C99
     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 6.10.3.2).'

   * 'The behavior on each recognized non-'STDC #pragma' directive (C90
     6.8.6, C99 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).'


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).'

     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 and C99
     5.2.4.2, C99 7.18.2, C99 7.18.3).'

     Determined by ABI.

   * 'The number, order, and encoding of bytes in any object (when not
     explicitly specified in this International Standard) (C99
     6.2.6.1).'

     Determined by ABI.

   * 'The value of the result of the 'sizeof' operator (C90 6.3.3.4, C99
     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 14822:1998 and ISO/IEC
14822: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 not supported.


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.
* Long Long::           Double-word integers--'long long int'.
* __int128::			128-bit integers--'__int128'.
* 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.
* Variable Length::     Arrays whose length is computed at run time.
* Empty Structures::    Structures with no members.
* 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.
* Initializers::        Non-constant initializers.
* Compound Literals::   Compound literals give structures, unions
                        or arrays as values.
* Designated Inits::    Labeling elements of initializers.
* Cast to Union::       Casting to union type from any member of the union.
* Case Ranges::         'case 1 ... 9' and such.
* Mixed Declarations::  Mixing declarations and code.
* Function Attributes:: Declaring that functions have no side effects,
                        or that they can never return.
* 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.
* Extended Asm::        Assembler instructions with C expressions as operands.
                        (With them you can define "built-in" functions.)
* 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.
* 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'.
* Atomic Builtins::     Built-in functions for atomic memory access.
* Object Size Checking:: Built-in functions for limited buffer overflow
                        checking.
* 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' (*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 ()

will construct a temporary 'A' object to hold the result of the
statement expression, and that will be used to invoke 'Foo'.  Therefore
the 'this' pointer observed by 'Foo' will not be the address of 'a'.

 Any temporaries created within a statement within a statement
expression will be destroyed at the statement's end.  This makes
statement expressions inside macros slightly different from function
calls.  In the latter case temporaries introduced during argument
evaluation will be destroyed at the end of the statement that includes
the function call.  In the statement expression case they will be
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 ());
     }

will have different places where temporaries are destroyed.  For the
'macro' case, the temporary 'X' will be destroyed just after the
initialization of 'b'.  In the 'function' case that temporary will be
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-expression 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::)
yields 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();

will call 'foo' and 'bar1' and will not call 'baz' but may or may not
call 'bar2'.  If 'bar2' is called, it will be 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 was 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 will be 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
will serve 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 will 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.

 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 not supported for 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 has exited, all hell will break loose.  If you try
to call it after a containing scope level has exited, 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 was explicitly declared in the containing
function (*note Local Labels::).  Such a jump returns instantly to the
containing function, exiting the nested function which 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 were 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 was 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 which
     will be 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 which
     will be 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 will do link or runtime 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 could 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 the
statements-within-expressions feature.  Here is how the two together can
be used to define a safe "maximum" macro that 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'.

 _Compatibility Note:_ In addition to 'typeof', GCC 2 supported a more
limited extension which permitted one to write

     typedef T = EXPR;

with the effect of declaring T to have the type of the expression EXPR.
This extension does not work with GCC 3 (versions between 3.0 and 3.2
will crash; 3.2.1 and later give an error).  Code which relies on it
should be rewritten to use 'typeof':

     typedef typeof(EXPR) T;

This will work with all versions of GCC.


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-bits integers
=====================

As an extension the integer scalar type '__int128' is supported for
targets having an integer mode wide enough to hold 128-bit.  Simply
write '__int128' for a signed 128-bit integer, or 'unsigned __int128'
for an unsigned 128-bit integer.  There is no support in GCC to express
an integer constant of type '__int128' for targets having 'long long'
integer with less then 128 bit width.


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 fullword-to-doubleword a 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, unless you declare function prototypes.  If a function
expects type 'int' for its argument, and you pass a value of type 'long
long int', confusion will result because the caller and the subroutine
will 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++, and 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 GNU libc), 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 DWARF2
debug info format can represent this, so use of DWARF2 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, the GNU C compiler supports additional floating types,
'__float80' and '__float128' to support 80bit ('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 i386, x86_64 and ia64 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, the GNU C compiler 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 DWARF2 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 will be 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, the GNU C compiler 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 DWARF2 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, the GNU C compiler 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 SPU and M32C targets support other address spaces.  On the SPU
target, for example, variables may be declared as belonging to another
address space by qualifying the type with the '__ea' address space
identifier:

     extern int __ea i;

 When the variable 'i' is accessed, the compiler will generate special
code to access this variable.  It may use runtime library support, or
generate special machine instructions to access that address space.

 The '__ea' identifier may be used exactly like any other C type
qualifier (e.g., 'const' or 'volatile').  See the N1275 document for
more details.

 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 64k bytes.  If '__far' is used with the
M32CM or M32C cpu variants, it has no effect.


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 which 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.)

 GCC versions before 3.0 allowed zero-length arrays to be statically
initialized, as if they were flexible arrays.  In addition to those
cases that were useful, it also allowed initializations in situations
that would corrupt later data.  Non-empty initialization of zero-length
arrays is now 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.

 Instead 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.
I.e. 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 will have 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 brace-level is exited.  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.

 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 will also
deallocate 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
===============================================

Recently, the preprocessor has relaxed its treatment of escaped
newlines.  Previously, the newline had to immediately follow a
backslash.  The current 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, GCC 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: Initializers,  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: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions

6.24 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.25 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++.

 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.  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 is 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 was 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};


File: gcc.info,  Node: Designated Inits,  Next: Case Ranges,  Prev: Compound Literals,  Up: C Extensions

6.26 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 which 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 will 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 which has the same meaning, obsolete since GCC 2.5, is
'FIELDNAME:', as shown here:

     struct point p = { y: yvalue, x: xvalue };

 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 };

will convert 4 to a 'double' to store it in the union using the second
element.  By contrast, casting 4 to type 'union foo' would store 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 will have 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 will discard them and issue a warning.


File: gcc.info,  Node: Case Ranges,  Next: Cast to Union,  Prev: Designated Inits,  Up: C Extensions

6.27 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.28 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
though, 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.29 Mixed Declarations and Code
================================

ISO C99 and ISO C++ allow declarations and code to be freely mixed
within compound statements.  As an extension, GCC 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: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions

6.30 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',
'noreturn', 'returns_twice', 'noinline', 'noclone', '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',
'gnu_inline', 'externally_visible', 'hot', 'cold', 'artificial', '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::) 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 will override 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 will return memory of the size given by the
     product of parameter 1 and 2 and that my_realloc will return memory
     of the size given by parameter 2.

'always_inline'
     Generally, functions are not inlined unless optimization is
     specified.  For functions declared inline, this attribute inlines
     the function even if no optimization level was specified.

'gnu_inline'
     This attribute should be used with a function which 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 will cause most calls to the
     function to be inlined.  If any uses of the function remain, they
     will 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 which if
     possible should appear during debugging as a unit, depending on the
     debug info format it will either mean 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 will be
     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 which will include MESSAGE will be
     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 will be 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 which will include MESSAGE will be
     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 will
     be diagnosed earlier and with exact location of the call even in
     presence of inline functions or when not emitting debugging
     information.

'cdecl'
     On the Intel 386, the 'cdecl' attribute causes the compiler to
     assume that the calling function will pop 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'.

     The attribute 'const' is not implemented in GCC versions earlier
     than 2.5.  An alternative way to declare that a function has no
     side effects, which works in the current version and in some older
     versions, is as follows:

          typedef int intfn ();

          extern const intfn square;

     This approach does not work in GNU C++ from 2.6.0 on, since the
     language specifies that the 'const' must be attached to the return
     value.

'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 ()' has completed or 'exit ()' has been
     called.  Functions with these attributes are useful for
     initializing data that will be 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, will be 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 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.

     In previous versions of GCC, the 'dllexport' attribute was ignored
     for inlined functions, unless the '-fkeep-inline-functions' flag
     had been used.  The default behaviour now is to emit all
     dllexported inline functions; however, this can cause object
     file-size bloat, in which case the old behaviour can be restored by
     using '-fno-keep-inline-dllexport'.

     The attribute is also 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 dllimport'ed 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 based 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 was required on
     older versions of the GNU linker, but can now 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.

'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 will generate 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.

'exception_handler'
     Use this attribute on the Blackfin to indicate that the specified
     function is an exception handler.  The compiler will generate
     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 68HC11 and 68HC12 the 'far' attribute causes the compiler to use
     a calling convention that takes care of switching memory banks when
     entering and leaving a function.  This calling convention is also
     the default when using the '-mlong-calls' option.

     On 68HC12 the compiler will use the 'call' and 'rtc' instructions
     to call and return from a function.

     On 68HC11 the compiler will generate a sequence of instructions to
     invoke a board-specific routine to switch the memory bank and call
     the real function.  The board-specific routine simulates a 'call'.
     At the end of a function, it will jump to a board-specific routine
     instead of using 'rts'.  The board-specific return routine
     simulates the 'rtc'.

     On MeP targets this causes the compiler to use a calling convention
     which 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 the Intel 386, 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 will pop the arguments off the stack.  If the
     number of arguments is variable all arguments are pushed on the
     stack.

'thiscall'
     On the Intel 386, 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 will pop 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 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 which 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.  ARCHTYPE values such as 'printf'
     refer to the formats accepted by the system's C run-time library,
     while 'gnu_' values always refer to the formats accepted by the GNU
     C Library.  On Microsoft Windows targets, 'ms_' values 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
     which 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 will be parsed for correct syntax, however the
     result of checking of such format strings is not yet defined, and
     will not be 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 which 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 will reduce
     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.

     In SH2A target, 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
     the successful jump, register TBR should contain the start address
     of this TBR relative vector table.  In the startup routine of the
     user application, user needs to care of this TBR register
     initialization.  The TBR relative vector table can have at max 256
     function entries.  The jumps to these functions will be 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
     will save at least 8 bytes of code; and if other successive calls
     are being made to the same function, it will save 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) which are used in 'jsrs'
     instruction.  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 will be 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.

'interrupt'
     Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, MeP,
     MIPS, RX and Xstormy16 ports to indicate that the specified
     function is an interrupt handler.  The compiler will generate
     function entry and exit sequences suitable for use in an interrupt
     handler when this attribute is present.

     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 AVR, interrupts will be enabled inside the function.

     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.

     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 ();

'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, and require a recent binutils
     (at least version 2.20.1), and GNU C library (at least version
     2.11.1).

'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 will generate 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 will be 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 will be put into a specific section
     named '.l1.text'.  With '-mfdpic', function calls with a such
     function as the callee or caller will use inlined PLT.

'l2'
     On the Blackfin, this attribute specifies a function to be placed
     into L2 SRAM. The function will be put into a specific section
     named '.l1.text'.  With '-mfdpic', callers of such functions will
     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/short_call'
     This attribute specifies how a particular function is called on
     ARM.  Both attributes override the '-mlong-calls' (*note ARM
     Options::) command-line switch and '#pragma long_calls' settings.
     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.

'longcall/shortcall'
     On the Blackfin, RS/6000 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'
     The 'malloc' attribute is used to tell the compiler that a function
     may be treated as if any non-'NULL' pointer it returns cannot alias
     any other pointer valid when the function returns.  This will often
     improve optimization.  Standard functions with this property
     include 'malloc' and 'calloc'.  'realloc'-like functions have this
     property as long as the old pointer is never referred to (including
     comparing it to the new pointer) after the function returns a
     non-'NULL' value.

'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::).

'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 will generate '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 will generate 'seth/add3' instructions to load their
     addresses), and may not be reachable with the 'bl' instruction (the
     compiler will generate the much slower 'seth/add3/jl' instruction
     sequence).

     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.

'ms_abi/sysv_abi'

     On 64-bit x86_64-*-* 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 AMD ABI.

     Note, the 'ms_abi' attribute for Windows targets currently requires
     the '-maccumulate-outgoing-args' option.

'callee_pop_aggregate_return (NUMBER)'

     On 32-bit i?86-*-* targets, you can control by those attribute for
     aggregate return in memory, if the caller is responsible to pop the
     hidden pointer together with the rest of the arguments - NUMBER
     equal to zero -, or if the callee is responsible to pop hidden
     pointer - NUMBER equal to one.

     For i?86-netware, the caller pops the stack for the hidden
     arguments pointing to aggregate return value.  This differs from
     the default i386 ABI which assumes that the callee pops the stack
     for hidden pointer.

'ms_hook_prologue'

     On 32 bit i[34567]86-*-* targets and 64 bit x86_64-*-* 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.

'naked'
     Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to
     indicate that the specified function does not need
     prologue/epilogue sequences generated by the compiler.  It is up to
     the programmer to provide these sequences.  The only statements
     that can be safely included in naked functions are 'asm' statements
     that do not have operands.  All other statements, including
     declarations of local variables, 'if' statements, and so forth,
     should be avoided.  Naked functions should be used to implement the
     body of an assembly function, while allowing the compiler to
     construct the requisite function declaration for the assembler.

'near'
     On 68HC11 and 68HC12 the 'near' attribute causes the compiler to
     use the normal calling convention based on 'jsr' and 'rts'.  This
     attribute can be used to cancel the effect of the '-mlong-calls'
     option.

     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 will generate function
     entry and exit sequences suitable for use in an NMI handler when
     this attribute is present.

'no_instrument_function'
     If '-finstrument-functions' is given, profiling function calls will
     be generated at entry and exit of most user-compiled functions.
     Functions with this attribute will not be so instrumented.

'no_split_stack'
     If '-fsplit-stack' is given, functions will have a small prologue
     which decides whether to split the stack.  Functions with the
     'no_split_stack' attribute will not have that prologue, and thus
     may run with only a small amount of stack space available.

'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 causes 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 which produces specialized copies of
     functions and which is (currently) performed by interprocedural
     constant propagation.

'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 not 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));

'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'.

     The attribute 'noreturn' is not implemented in GCC versions earlier
     than 2.5.  An alternative way to declare that a function does not
     return, which works in the current version and in some older
     versions, is as follows:

          typedef void voidfn ();

          volatile voidfn fatal;

     This approach does not work in GNU C++.

'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.  The 'nothrow' attribute is not
     implemented in GCC versions earlier than 3.3.

'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 called 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 will save 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 will be guarded by save/clear/restore of the global
     interrupt enable flag.

     The differences to the 'naked' function attrubute are:
        * 'naked' functions do not have a return instruction whereas
          'OS_main' and 'OS_task' functions will 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 that) 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 will reject 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).

     The attribute 'pure' is not implemented in GCC versions earlier
     than 2.96.

'hot'
     The 'hot' attribute is used to inform the compiler that a function
     is a hot spot of the compiled program.  The function is optimized
     more aggressively and on many target it is placed into special
     subsection of the text section so all hot functions appears close
     together improving locality.

     When profile feedback is available, via '-fprofile-use', hot
     functions are automatically detected and this attribute is ignored.

     The 'hot' attribute is not implemented in GCC versions earlier than
     4.3.

'cold'
     The 'cold' attribute is used to inform the compiler that a function
     is unlikely executed.  The function is optimized for size rather
     than speed and on many targets it is placed into special subsection
     of the text section so all cold functions appears close together
     improving code locality of non-cold parts of program.  The paths
     leading to call 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', hot
     functions are automatically detected and this attribute is ignored.

     The 'cold' attribute is not implemented in GCC versions earlier
     than 4.3.

'regparm (NUMBER)'
     On the Intel 386, 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 will 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 will send 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.  GNU systems with GLIBC 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.)

'sseregparm'
     On the Intel 386 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 will continue to pass all of their floating
     point arguments on the stack.

'force_align_arg_pointer'
     On the Intel x86, the 'force_align_arg_pointer' attribute may be
     applied to individual function definitions, generating an alternate
     prologue and epilogue that realigns the runtime 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.

'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 will ensure that all
     registers are dead before calling such a function and will emit 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) will be 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.

'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/short_call.

'shortcall'
     See longcall/shortcall.

'signal'
     Use this attribute on the AVR to indicate that the specified
     function is a signal handler.  The compiler will generate function
     entry and exit sequences suitable for use in a signal handler when
     this attribute is present.  Interrupts will be disabled inside the
     function.

'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 the Intel 386, the 'stdcall' attribute causes the compiler to
     assume that the called function will pop 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 IA64 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 a 386, you could compile one function with
     'target("sse4.1,arch=core2")' and another with
     'target("sse4a,arch=amdfam10")' that would be 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 was compiled for (for example by using 'cpuid' on
     386 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")));

     On the 386, 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.

     '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' was 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
          targetting 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 targetting 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' was 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 will tune for the CPU architecture, and
          not the default tuning specified on the command line.

     On the 386/x86_64 and PowerPC backends, you can use either multiple
     strings to specify multiple options, or you can separate the option
     with a comma (',').

     On the 386/x86_64 and PowerPC backends, the inliner will 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'.

     The 'target' attribute is not implemented in GCC versions earlier
     than 4.4 for the i386/x86_64 and 4.6 for the PowerPC backends.  It
     is not currently implemented for other backends.

'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 will generate more efficient code for loads and stores
     on data in the tiny data section.  Note the tiny data area is
     limited to slightly under 32kbytes of data.

'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.

'unused'
     This attribute, attached to a function, means that the function is
     meant to be possibly unused.  GCC will 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.

'version_id'
     This IA64 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 version level functioning for some system calls.

          extern int foo () __attribute__((version_id ("20040821")));

     Calls to FOO will be 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 will have
          a new form of linkage, which we'll 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 will 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
     which 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.
     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 which 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 will be
     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
Miscellaneous Preprocessing Directives: (cpp)Other Directives.


File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions

6.31 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.

 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.

 In GNU C, an attribute specifier list may appear after the colon
following a label, other than a 'case' or 'default' label.  The only
attribute it makes sense to use after a label is 'unused'.  This feature
is intended for code generated by programs which contains labels that
may be unused but which is compiled with '-Wall'.  It would not normally
be 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.  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.

 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.

 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 which 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 will make 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 will be 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 will be 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 will be treated as
applying to the function type, and such an attribute applied to an array
element type will be 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 will be 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 will be treated as applying
to the function type.


File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions

6.32 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.33 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.34 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.35 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.36 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::) 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
     that 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 which
     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 will generate 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__' will still only
     provide 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 will be 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, will be 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 will change 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 will not produce a warning for
     this variable.

'used'
     This attribute, attached to a variable, means that the variable
     must be emitted even if it appears that the variable is not
     referenced.

'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' will be 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.36.1 AVR Variable Attributes
------------------------------

'progmem'
     The 'progmem' attribute is used on the AVR to place data in the
     program memory address space (flash).  This is accomplished by
     putting respective variables into a section whose name starts with
     '.progmem'.

     AVR is a Harvard architecture processor and data and reas only data
     normally resides in the data memory address space (RAM).

6.36.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 will be put into the
     specific section named '.l1.data'.  Those with 'l1_data_A'
     attribute will be put into the specific section named '.l1.data.A'.
     Those with 'l1_data_B' attribute will be 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 will be put into the specific
     section named '.l2.data'.

6.36.3 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 will generate 'seth/add3' instructions
     to load their addresses).

6.36.4 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 which 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 will be assigned to the
     '.based' section, and will be 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 will assign 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.36.5 i386 Variable Attributes
-------------------------------

Two attributes are currently defined for i386 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 would
     normally pack 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.

     The Microsoft structure layout algorithm is fairly simple with the
     exception of the bitfield packing:

     The padding and alignment of members of structures and whether a
     bit field can straddle a storage-unit boundary

       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.

     Handling of zero-length bitfields:

     MSVC interprets zero-length bitfields in the following ways:

       1. If a zero-length bitfield is inserted between two bitfields
          that would normally be coalesced, the bitfields will not be
          coalesced.

          For example:

               struct
                {
                  unsigned long bf_1 : 12;
                  unsigned long : 0;
                  unsigned long bf_2 : 12;
                } t1;

          The size of 't1' would be 8 bytes with the zero-length
          bitfield.  If the zero-length bitfield were removed, 't1''s
          size would be 4 bytes.

       2. If a zero-length bitfield is inserted after a bitfield, 'foo',
          and the alignment of the zero-length bitfield is greater than
          the member that follows it, 'bar', 'bar' will be aligned as
          the type of the zero-length bitfield.

          For example:

               struct
                {
                  char foo : 4;
                  short : 0;
                  char bar;
                } t2;

               struct
                {
                  char foo : 4;
                  short : 0;
                  double bar;
                } t3;

          For 't2', 'bar' will be placed at offset 2, rather than offset
          1.  Accordingly, the size of 't2' will be 4.  For 't3', the
          zero-length bitfield will 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 bitfield follows a normal bitfield, the
               type of the zero-length bitfield may affect the alignment
               of the structure as whole.  For example, 't2' has a size
               of 4 bytes, since the zero-length bitfield follows a
               normal bitfield, and is of type short.

            2. Even if a zero-length bitfield is not followed by a
               normal bitfield, it may still affect the alignment of the
               structure:

                    struct
                     {
                       char foo : 6;
                       long : 0;
                     } t4;

               Here, 't4' will take up 4 bytes.

       3. Zero-length bitfields following non-bitfield members are
          ignored:

               struct
                {
                  char foo;
                  long : 0;
                  char bar;
                } t5;

          Here, 't5' will take up 2 bytes.

6.36.6 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 i386 Variable Attributes::.

 For documentation of 'altivec' attribute please see the documentation
in *note PowerPC Type Attributes::.

6.36.7 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.36.8 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 will place the variable in the first 0x100 bytes of
     memory and use special opcodes to access it.  Such variables will
     be 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.37 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.  Seven
attributes are currently defined for types: 'aligned', 'packed',
'transparent_union', 'unused', 'deprecated', 'visibility', and
'may_alias'.  Other attributes are defined for functions (*note Function
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 insure (as far as it can) that each variable
     whose type is 'struct S' or 'more_aligned_int' will be 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 which 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 which
     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 which 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 will also be doing 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 will often be 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__' will still only
     provide 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 bitfields) 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' would need
     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' which 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 will 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, will be 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 6.5/7
     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 in
     recent GCC versions.

'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 will be unable to use
     the same typeinfo node and exception handling will break.

6.37.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.37.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.37.3 i386 Type Attributes
---------------------------

Two attributes are currently defined for i386 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 would
     normally pack 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.

 To specify multiple attributes, separate them by commas within the
double parentheses: for example, '__attribute__ ((aligned (16),
packed))'.

6.37.4 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 i386 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.37.5 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.


File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions

6.38 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 will give 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.39 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=c1x', '-std=gnu99' or '-std=gnu1x' (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: use of
varargs, use of alloca, use of variable sized 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' will warn when a function marked 'inline' could not be
substituted, and will give 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 will cause most calls to the function to be inlined.  If
any uses of the function remain, they will refer to the single copy in
the library.


File: gcc.info,  Node: Volatiles,  Next: Extended Asm,  Prev: Inline,  Up: C Extensions

6.40 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 which 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 will have occurred by the time the update of VOBJ has
happened.  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 bitfields are not individually addressable, volatile bitfields may
be implicitly read when written to, or when adjacent bitfields are
accessed.  Bitfield operations may be optimized such that adjacent
bitfields are only partially accessed, if they straddle a storage unit
boundary.  For these reasons it is unwise to use volatile bitfields to
access hardware.


File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Volatiles,  Up: C Extensions

6.41 Assembler Instructions with C Expression Operands
======================================================

In an assembler instruction using 'asm', you can specify the operands of
the instruction using C expressions.  This means you need not guess
which registers or memory locations will contain the data you want to
use.

 You must specify an assembler instruction template much like what
appears in a machine description, plus an operand constraint string for
each operand.

 For example, here is how to use the 68881's 'fsinx' instruction:

     asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));

Here 'angle' is the C expression for the input operand while 'result' is
that of the output operand.  Each has '"f"' as its operand constraint,
saying that a floating point register is required.  The '=' in '=f'
indicates that the operand is an output; all output operands'
constraints must use '='.  The constraints use the same language used in
the machine description (*note Constraints::).

 Each operand is described by an operand-constraint string followed by
the C expression in parentheses.  A colon separates the assembler
template from the first output operand and another separates the last
output operand from the first input, if any.  Commas separate the
operands within each group.  The total number of operands is currently
limited to 30; this limitation may be lifted in some future version of
GCC.

 If there are no output operands but there are input operands, you must
place two consecutive colons surrounding the place where the output
operands would go.

 As of GCC version 3.1, it is also possible to specify input and output
operands using symbolic names which can be referenced within the
assembler code.  These names are specified inside square brackets
preceding the constraint string, and can be referenced inside the
assembler code using '%[NAME]' instead of a percentage sign followed by
the operand number.  Using named operands the above example could look
like:

     asm ("fsinx %[angle],%[output]"
          : [output] "=f" (result)
          : [angle] "f" (angle));

Note that the symbolic operand names have no relation whatsoever to
other C identifiers.  You may use any name you like, even those of
existing C symbols, but you must ensure that no two operands within the
same assembler construct use the same symbolic name.

 Output operand expressions must be lvalues; the compiler can check
this.  The input operands need not be lvalues.  The compiler cannot
check whether the operands have data types that are reasonable for the
instruction being executed.  It does not parse the assembler instruction
template and does not know what it means or even whether it is valid
assembler input.  The extended 'asm' feature is most often used for
machine instructions the compiler itself does not know exist.  If the
output expression cannot be directly addressed (for example, it is a
bit-field), your constraint must allow a register.  In that case, GCC
will use the register as the output of the 'asm', and then store that
register into the output.

 The ordinary output operands must be write-only; GCC will assume that
the values in these operands before the instruction are dead and need
not be generated.  Extended asm supports input-output or read-write
operands.  Use the constraint character '+' to indicate such an operand
and list it with the output operands.  You should only use read-write
operands when the constraints for the operand (or the operand in which
only some of the bits are to be changed) allow a register.

 You may, as an alternative, logically split its function into two
separate operands, one input operand and one write-only output operand.
The connection between them is expressed by constraints which say they
need to be in the same location when the instruction executes.  You can
use the same C expression for both operands, or different expressions.
For example, here we write the (fictitious) 'combine' instruction with
'bar' as its read-only source operand and 'foo' as its read-write
destination:

     asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));

The constraint '"0"' for operand 1 says that it must occupy the same
location as operand 0.  A number in constraint is allowed only in an
input operand and it must refer to an output operand.

 Only a number in the constraint can guarantee that one operand will be
in the same place as another.  The mere fact that 'foo' is the value of
both operands is not enough to guarantee that they will be in the same
place in the generated assembler code.  The following would not work
reliably:

     asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));

 Various optimizations or reloading could cause operands 0 and 1 to be
in different registers; GCC knows no reason not to do so.  For example,
the compiler might find a copy of the value of 'foo' in one register and
use it for operand 1, but generate the output operand 0 in a different
register (copying it afterward to 'foo''s own address).  Of course,
since the register for operand 1 is not even mentioned in the assembler
code, the result will not work, but GCC can't tell that.

 As of GCC version 3.1, one may write '[NAME]' instead of the operand
number for a matching constraint.  For example:

     asm ("cmoveq %1,%2,%[result]"
          : [result] "=r"(result)
          : "r" (test), "r"(new), "[result]"(old));

 Sometimes you need to make an 'asm' operand be a specific register, but
there's no matching constraint letter for that register _by itself_.  To
force the operand into that register, use a local variable for the
operand and specify the register in the variable declaration.  *Note
Explicit Reg Vars::.  Then for the 'asm' operand, use any register
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));

 In the above example, beware that a register that is call-clobbered by
the target ABI will be overwritten by any function call in the
assignment, including library calls for arithmetic operators.  Also a
register may be clobbered when generating some operations, like variable
shift, memory copy or memory move on x86.  Assuming it is a
call-clobbered register, this may happen to 'r0' above by the assignment
to 'p2'.  If you have to use such a register, use temporary variables
for expressions between the register assignment and use:

     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));

 Some instructions clobber specific hard registers.  To describe this,
write a third colon after the input operands, followed by the names of
the clobbered hard registers (given as strings).  Here is a realistic
example for the VAX:

     asm volatile ("movc3 %0,%1,%2"
                   : /* no outputs */
                   : "g" (from), "g" (to), "g" (count)
                   : "r0", "r1", "r2", "r3", "r4", "r5");

 You may not write a clobber description in a way that overlaps with an
input or output operand.  For example, you may not have an operand
describing a register class with one member if you mention 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.  There is no way
for you to specify that an input operand is modified without also
specifying it as an output operand.  Note that if all the output
operands you specify are for this purpose (and hence unused), you will
then also need to specify 'volatile' for the 'asm' construct, as
described below, to prevent GCC from deleting the 'asm' statement as
unused.

 If you refer to a particular hardware register from the assembler code,
you will probably have to list the register after the third colon to
tell the compiler the register's value is modified.  In some assemblers,
the register names begin with '%'; to produce one '%' in the assembler
code, you must write '%%' in the input.

 If your assembler instruction can alter the condition code register,
add 'cc' to the list of clobbered registers.  GCC on some machines
represents the condition codes as a specific hardware register; 'cc'
serves to name this register.  On other machines, the condition code is
handled differently, and specifying 'cc' has no effect.  But it is valid
no matter what the machine.

 If your assembler instructions access memory in an unpredictable
fashion, add 'memory' to the list of clobbered registers.  This will
cause GCC to not keep memory values cached in registers across the
assembler instruction and not optimize stores or loads to that memory.
You will also want to add the 'volatile' keyword if the memory affected
is not listed in the inputs or outputs of the 'asm', as the 'memory'
clobber does not count as a side-effect of the 'asm'.  If you know how
large the accessed memory is, you can add it as input or output but if
this is not known, you should add 'memory'.  As an example, if you
access ten bytes of a string, you can use a memory input like:

     {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.

 Note that in the following example the memory input is necessary,
otherwise GCC might optimize the store to 'x' away:
     int foo ()
     {
       int x = 42;
       int *y = &x;
       int result;
       asm ("magic stuff accessing an 'int' pointed to by '%1'"
             "=&d" (r) : "a" (y), "m" (*y));
       return result;
     }

 You can put multiple assembler instructions together in a single 'asm'
template, 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').  Sometimes semicolons can be used, if the assembler
allows semicolons as a line-breaking character.  Note that some
assembler dialects use semicolons to start a comment.  The input
operands are guaranteed not to use any of the clobbered registers, and
neither will the output operands' addresses, so you can read and write
the clobbered registers as many times as you like.  Here is an example
of multiple instructions in a template; it assumes the subroutine '_foo'
accepts arguments in registers 9 and 10:

     asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
          : /* no outputs */
          : "g" (from), "g" (to)
          : "r9", "r10");

 Unless an output operand has the '&' constraint modifier, GCC may
allocate it in the same register as an unrelated input operand, on the
assumption the inputs are consumed before the outputs are produced.
This assumption may be false if the assembler code actually consists of
more than one instruction.  In such a case, use '&' for each output
operand that may not overlap an input.  *Note Modifiers::.

 If you want to test the condition code produced by an assembler
instruction, you must include a branch and a label in the 'asm'
construct, as follows:

     asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
          : "g" (result)
          : "g" (input));

This assumes your assembler supports local labels, as the GNU assembler
and most Unix assemblers do.

 Speaking of labels, jumps from one 'asm' to another are not supported.
The compiler's optimizers do not know about these jumps, and therefore
they cannot take account of them when deciding how to optimize.  *Note
Extended asm with goto::.

 Usually the most convenient way to use these 'asm' instructions is to
encapsulate them in macros that look like functions.  For example,

     #define sin(x)       \
     ({ double __value, __arg = (x);   \
        asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
        __value; })

Here the variable '__arg' is used to make sure that the instruction
operates on a proper 'double' value, and to accept only those arguments
'x' which can convert automatically to a 'double'.

 Another way to make sure the instruction operates on the correct data
type is to use a cast in the 'asm'.  This is different from using a
variable '__arg' in that it converts more different types.  For example,
if the desired type were 'int', casting the argument to 'int' would
accept a pointer with no complaint, while assigning the argument to an
'int' variable named '__arg' would warn about using a pointer unless the
caller explicitly casts it.

 If an 'asm' has output operands, GCC assumes for optimization purposes
the instruction has no side effects except to change the output
operands.  This does not mean instructions with a side effect cannot be
used, but you must be careful, because the compiler may eliminate them
if the output operands aren't used, or move them out of loops, or
replace two with one if they constitute a common subexpression.  Also,
if your instruction does have a side effect on a variable that otherwise
appears not to change, the old value of the variable may be reused later
if it happens to be found in a register.

 You can prevent an 'asm' instruction from being deleted by writing the
keyword 'volatile' after the 'asm'.  For example:

     #define get_and_set_priority(new)              \
     ({ int __old;                                  \
        asm volatile ("get_and_set_priority %0, %1" \
                      : "=g" (__old) : "g" (new));  \
        __old; })

The 'volatile' keyword indicates that the instruction has important
side-effects.  GCC will not delete a volatile 'asm' if it is reachable.
(The instruction can still be deleted if GCC can prove that control-flow
will never reach the location of the instruction.)  Note that even a
volatile 'asm' instruction can be moved relative to other code,
including across jump instructions.  For example, on many targets there
is a system register which can be set to control the rounding mode of
floating point operations.  You might try setting it with a volatile
'asm', like this PowerPC example:

            asm volatile("mtfsf 255,%0" : : "f" (fpenv));
            sum = x + y;

This will not work reliably, as the compiler may move the addition back
before the volatile 'asm'.  To make it work you need to add an
artificial dependency to the 'asm' referencing a variable in the code
you don't want moved, for example:

         asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
         sum = x + y;

 Similarly, you can't expect a sequence of volatile 'asm' instructions
to remain perfectly consecutive.  If you want consecutive output, use a
single 'asm'.  Also, GCC will perform some optimizations across a
volatile 'asm' instruction; GCC does not "forget everything" when it
encounters a volatile 'asm' instruction the way some other compilers do.

 An 'asm' instruction without any output operands will be treated
identically to a volatile 'asm' instruction.

 It is a natural idea to look for a way to give access to the condition
code left by the assembler instruction.  However, when we attempted to
implement this, we found no way to make it work reliably.  The problem
is that output operands might need reloading, which would result in
additional following "store" instructions.  On most machines, these
instructions would alter the condition code before there was time to
test it.  This problem doesn't arise for ordinary "test" and "compare"
instructions because they don't have any output operands.

 For reasons similar to those described above, it is not possible to
give an assembler instruction access to the condition code left by
previous instructions.

 As of GCC version 4.5, 'asm goto' may be used to have the assembly jump
to one or more C labels.  In this form, a fifth section after the
clobber list contains a list of all C labels to which the assembly may
jump.  Each label operand is implicitly self-named.  The 'asm' is also
assumed to fall through to the next statement.

 This form of 'asm' is restricted to not have outputs.  This is due to a
internal restriction in the compiler that control transfer instructions
cannot have outputs.  This restriction on 'asm goto' may be lifted in
some future version of the compiler.  In the mean time, 'asm goto' may
include a memory clobber, and so leave outputs in memory.

     int frob(int x)
     {
       int y;
       asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5"
                 : : "r"(x), "r"(&y) : "r5", "memory" : error);
       return y;
      error:
       return -1;
     }

 In this (inefficient) example, the 'frob' instruction sets the carry
bit to indicate an error.  The 'jc' instruction detects this and
branches to the 'error' label.  Finally, the output of the 'frob'
instruction ('%r5') is stored into the memory for variable 'y', which is
later read by the 'return' statement.

     void doit(void)
     {
       int i = 0;
       asm goto ("mfsr %%r1, 123; jmp %%r1;"
                 ".pushsection doit_table;"
                 ".long %l0, %l1, %l2, %l3;"
                 ".popsection"
                 : : : "r1" : label1, label2, label3, label4);
       __builtin_unreachable ();

      label1:
       f1();
       return;
      label2:
       f2();
       return;
      label3:
       i = 1;
      label4:
       f3(i);
     }

 In this (also inefficient) example, the 'mfsr' instruction reads an
address from some out-of-band machine register, and the following 'jmp'
instruction branches to that address.  The address read by the 'mfsr'
instruction is assumed to have been previously set via some
application-specific mechanism to be one of the four values stored in
the 'doit_table' section.  Finally, the 'asm' is followed by a call to
'__builtin_unreachable' to indicate that the 'asm' does not in fact fall
through.

     #define TRACE1(NUM)                         \
       do {                                      \
         asm goto ("0: nop;"                     \
                   ".pushsection trace_table;"   \
                   ".long 0b, %l0;"              \
                   ".popsection"                 \
                   : : : : trace#NUM);           \
         if (0) { trace#NUM: trace(); }          \
       } while (0)
     #define TRACE  TRACE1(__COUNTER__)

 In this example (which in fact inspired the 'asm goto' feature) we want
on rare occasions to call the 'trace' function; on other occasions we'd
like to keep the overhead to the absolute minimum.  The normal code path
consists of a single 'nop' instruction.  However, we record the address
of this 'nop' together with the address of a label that calls the
'trace' function.  This allows the 'nop' instruction to be patched at
runtime to be an unconditional branch to the stored label.  It is
assumed that an optimizing compiler will move the labeled block out of
line, to optimize the fall through path from the 'asm'.

 If you are writing a header file that should be includable in ISO C
programs, write '__asm__' instead of 'asm'.  *Note Alternate Keywords::.

6.41.1 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 an 'asm' is
only known by the assembler, GCC must make an estimate as to how big it
will be.  The estimate is formed by counting the number of statements in
the pattern of the 'asm' and multiplying that by the length of the
longest instruction on that processor.  Statements in the 'asm' are
identified by newline characters and whatever statement separator
characters are supported by the assembler; on most processors this is
the '';'' character.

 Normally, GCC's estimate is perfectly 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 would be needed for a single instruction.
If this happens then the assembler will produce a diagnostic saying that
a label is unreachable.

6.41.2 i386 floating point asm operands
---------------------------------------

There are several rules on the usage of stack-like regs in asm_operands
insns.  These rules apply only to the operands that are stack-like regs:

  1. Given a set of input regs that die in an asm_operands, it is
     necessary to know which are implicitly popped by the asm, and which
     must be explicitly popped by gcc.

     An input reg that is implicitly popped by the asm must be
     explicitly clobbered, unless it is constrained to match an output
     operand.

  2. For any input reg 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 reg, 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 regs 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 insn, reload might use
     the input reg for an output reload.  Consider this example:

          asm ("foo" : "=t" (a) : "f" (b));

     This asm 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 will think that it can use the same reg for both the input
     and the output, if input B dies in this insn.

     If any input operand uses the 'f' constraint, all output reg
     constraints must use the '&' earlyclobber.

     The asm above would be 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--there is no other way to
     know which regs the outputs appear in unless the user indicates
     this in the constraints.

     Output operands must specifically indicate which reg an output
     appears in after an asm.  '=f' is not allowed: the operand
     constraints must select a class with a single reg.

  4. Output operands may not be "inserted" between existing stack regs.
     Since no 387 opcode uses a read/write operand, all output operands
     are dead before the asm_operands, and are pushed by the
     asm_operands.  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 reg.

  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.

 Here are a couple of reasonable asms to want to write.  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 user must code the 'st(1)'
clobber for reg-stack.c 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: C Extensions

6.42 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.42.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.42.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.


File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints

6.42.3 Constraint Modifier Characters
-------------------------------------

Here are constraint modifier characters.

'='
     Means that this operand is write-only for this instruction: the
     previous value is discarded and replaced by output 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 inputs to the instruction and
     which are outputs from it.  '=' identifies an output; '+'
     identifies an operand that is both input and output; all other
     operands are assumed to be input only.

     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 modified before the instruction is
     finished using the input operands.  Therefore, this operand may not
     lie in a register that is used as an input operand 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.

     An input operand 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 inputs can be affected by the earlyclobber.
     See, for example, the 'mulsi3' insn of the ARM.

     '&' does not obviate the need to write '='.

'%'
     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.  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.


File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints

6.42.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.

_ARM family--'config/arm/arm.h'_
     'f'
          Floating-point register

     'w'
          VFP floating-point register

     'F'
          One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
          4.0, 5.0 or 10.0

     'G'
          Floating-point constant that would satisfy the constraint 'F'
          if it were negated

     '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

     'R'
          Integer constant in the range -6 ... 5.

     'Q'
          A memory address based on Y or Z pointer with displacement.

_CRX Architecture--'config/crx/crx.h'_

     'b'
          Registers from r0 to r14 (registers without stack pointer)

     'l'
          Register r16 (64-bit accumulator lo register)

     'h'
          Register r17 (64-bit accumulator hi register)

     'k'
          Register pair r16-r17.  (64-bit accumulator lo-hi pair)

     'I'
          Constant that fits in 3 bits

     'J'
          Constant that fits in 4 bits

     'K'
          Constant that fits in 5 bits

     'L'
          Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48

     'G'
          Floating point constant that is legal for store immediate

_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

_picoChip family--'picochip.h'_
     'k'
          Stack register.

     'f'
          Pointer register.  A register which can be used to access
          memory without supplying an offset.  Any other register can be
          used to access memory, but will need a constant offset.  In
          the case of the offset being zero, it is more efficient to use
          a pointer register, since this reduces code size.

     't'
          A twin register.  A register which may be paired with an
          adjacent register to create a 32-bit register.

     'a'
          Any absolute memory address (e.g., symbolic constant, symbolic
          constant + offset).

     'I'
          4-bit signed integer.

     'J'
          4-bit unsigned integer.

     'K'
          8-bit signed integer.

     'M'
          Any constant whose absolute value is no greater than 4-bits.

     'N'
          10-bit signed integer

     'O'
          16-bit signed integer.

_PowerPC and IBM RS6000--'config/rs6000/rs6000.h'_
     'b'
          Address base register

     'd'
          Floating point register (containing 64-bit value)

     'f'
          Floating point register (containing 32-bit value)

     'v'
          Altivec vector register

     'wd'
          VSX vector register to hold vector double data

     'wf'
          VSX vector register to hold vector float data

     'ws'
          VSX vector register to hold scalar float data

     'wa'
          Any VSX register

     '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.

_Intel 386--'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).

_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 '>'.

_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.

_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.

_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.

_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

_Motorola 68HC11 & 68HC12 families--'config/m68hc11/m68hc11.h'_
     'a'
          Register 'a'

     'b'
          Register 'b'

     'd'
          Register 'd'

     'q'
          An 8-bit register

     't'
          Temporary soft register _.tmp

     'u'
          A soft register _.d1 to _.d31

     'w'
          Stack pointer register

     'x'
          Register 'x'

     'y'
          Register 'y'

     'z'
          Pseudo register 'z' (replaced by 'x' or 'y' at the end)

     'A'
          An address register: x, y or z

     'B'
          An address register: x or y

     'D'
          Register pair (x:d) to form a 32-bit value

     'L'
          Constants in the range -65536 to 65535

     'M'
          Constants whose 16-bit low part is zero

     'N'
          Constant integer 1 or -1

     'O'
          Constant integer 16

     'P'
          Constants in the range -8 to 2

_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.

_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.

_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.

_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.

     '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

     'M'
          A constant in the range supported by 'movrcc' instructions

     '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

     '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

     '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.

_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.

_Score family--'config/score/score.h'_
     'd'
          Registers from r0 to r32.

     'e'
          Registers from r0 to r16.

     't'
          r8--r11 or r22--r27 registers.

     'h'
          hi register.

     'l'
          lo register.

     'x'
          hi + lo register.

     'q'
          cnt register.

     'y'
          lcb register.

     'z'
          scb register.

     'a'
          cnt + lcb + scb register.

     'c'
          cr0--cr15 register.

     'b'
          cp1 registers.

     'f'
          cp2 registers.

     'i'
          cp3 registers.

     'j'
          cp1 + cp2 + cp3 registers.

     'I'
          High 16-bit constant (32-bit constant with 16 LSBs zero).

     'J'
          Unsigned 5 bit integer (in the range 0 to 31).

     'K'
          Unsigned 16 bit integer (in the range 0 to 65535).

     'L'
          Signed 16 bit integer (in the range -32768 to 32767).

     'M'
          Unsigned 14 bit integer (in the range 0 to 16383).

     'N'
          Signed 14 bit integer (in the range -8192 to 8191).

     'Z'
          Any SYMBOL_REF.

_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: C Extensions

6.43 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: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions

6.44 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 which 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 will work 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.44.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 which should be used.  Choose a
register which 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 would need to
conditionalize your program according to cpu type.  The register 'a5'
would be 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, operating systems on one type of cpu may differ in how
they name the registers; then you would 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 will not be allocated for any other purpose in the
functions in the current compilation.  The register will not be saved
and restored by these functions.  Stores into this register are never
deleted even if they would 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
was compiled without knowledge of this variable (i.e. in a different
source file in which the variable wasn'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 which do not
actually use your global register variable, so that they will 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 which 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 which is the entry point into the part
of the program that uses the global register variable must explicitly
save and restore the value which belongs to its caller.

 On most machines, 'longjmp' will restore to each global register
variable the value it had at the time of the 'setjmp'.  On some
machines, however, 'longjmp' will 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
will happen 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 will 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.44.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 which should be used.  Note that
this is the same syntax used for defining global register variables, but
for a local variable it would appear 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 would 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 will generate 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 will
always refer to this variable.  However, using the variable as an 'asm'
_operand_ guarantees that the specified register is used for the
operand.

 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 for global register variables, it's recommended that you choose a
register which is normally saved and restored by function calls on your
machine, so that library routines will not clobber it.  A common pitfall
is to initialize multiple call-clobbered registers with arbitrary
expressions, where a function call or library call for an arithmetic
operator will overwrite a register value from a previous assignment, for
example 'r0' below:
     register int *p1 asm ("r0") = ...;
     register int *p2 asm ("r1") = ...;
 In those cases, a solution is to use a temporary variable for each
arbitrary expression.  *Note Example of asm with clobbered asm reg::.


File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions

6.45 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=c1x').  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.46 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 which
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.47 Function Names as Strings
==============================

GCC provides three magic variables which 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__'.  Older versions of GCC
recognize only this name.  However, it is not standardized.  For maximum
portability, we recommend you use '__func__', but provide a fallback
definition with the preprocessor:

     #if __STDC_VERSION__ < 199901L
     # if __GNUC__ >= 2
     #  define __func__ __FUNCTION__
     # else
     #  define __func__ "<unknown>"
     # endif
     #endif

 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 not preprocessor macros.  In GCC 3.3 and earlier,
in C only, '__FUNCTION__' and '__PRETTY_FUNCTION__' were treated as
string literals; they could be used to initialize 'char' arrays, and
they could be concatenated with other string literals.  GCC 3.4 and
later treat them as variables, like '__func__'.  In C++, '__FUNCTION__'
and '__PRETTY_FUNCTION__' have always been variables.


File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions

6.48 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 will return the
     address of the function that will be 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 will
     return '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_address'.

     This function should only be used with a nonzero argument for
     debugging purposes.

 -- Built-in Function: void * __builtin_extract_return_address (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_address'.

 -- 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 which 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' will return 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 will
     return '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.49 Using vector instructions through built-in functions
=========================================================

On some targets, the instruction set contains SIMD vector instructions
that operate on multiple values contained in one large register at the
same time.  For example, on the i386 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' will be 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.

 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
will cause 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 will
produce code that uses 4 'SIs'.

 The types defined in this manner can be used with a subset of normal C
operations.  Currently, GCC will allow 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 will be added to the
corresponding 4 elements in B and the resulting vector will be 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.

 In C 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.  Additionally
second operands can be a scalar integer in which case the scalar is
converted to the type used by the vector operand (with possible
truncation) and each element of this new vector is the scalar's value.
Consider the following code.

     typedef int v4si __attribute__ ((vector_size (16)));

     v4si a, b;

     b = a >> 1;     /* b = a >> {1,1,1,1}; */

 In C 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 runtime.  Warnings for out of bound accesses for
vector subscription can be enabled with '-Warray-bounds'.

 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.

 A port that supports hardware vector operations, usually provides a set
of built-in functions that can be used to operate on vectors.  For
example, a function to add two vectors and multiply the result by a
third could look like this:

     v4si f (v4si a, v4si b, v4si c)
     {
       v4si tmp = __builtin_addv4si (a, b);
       return __builtin_mulv4si (tmp, c);
     }



File: gcc.info,  Node: Offsetof,  Next: Atomic Builtins,  Prev: Vector Extensions,  Up: C Extensions

6.50 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: Atomic Builtins,  Next: Object Size Checking,  Prev: Offsetof,  Up: C Extensions

6.51 Built-in functions for atomic memory access
================================================

The following builtins 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 the normal GCC
practice of using the "__builtin_" prefix, and further that they are
overloaded such 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' as well as their unsigned
counterparts.  GCC will allow any integral scalar or pointer type that
is 1, 2, 4 or 8 bytes in length.

 Not all operations are supported by all target processors.  If a
particular operation cannot be implemented on the target processor, a
warning will be generated and a call an external function will be
generated.  The external function will carry the same name as the
builtin, with an additional suffix '_N' where N is the size of the data
type.

 In most cases, these builtins are considered a "full barrier".  That
is, no memory operand will be moved across the operation, either forward
or backward.  Further, instructions will be 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 following
variables are protected, or it could mean that these variables should in
addition be protected.  At present GCC ignores this list and protects
all variables which are globally accessible.  If in the future we make
some use of this list, an empty list will continue to mean all globally
accessible variables.

'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 builtins 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' builtin
     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 builtins 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' builtin
     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 builtins 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 was written.  The "val" version returns the contents of
     '*PTR' before the operation.

'__sync_synchronize (...)'
     This builtin issues a full memory barrier.

'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
     This builtin, 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 builtin is not a full barrier, but rather an "acquire
     barrier".  This means that references after the builtin cannot move
     to (or be speculated to) before the builtin, 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 builtin releases the lock acquired by
     '__sync_lock_test_and_set'.  Normally this means writing the
     constant 0 to '*PTR'.

     This builtin 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: Object Size Checking,  Next: Other Builtins,  Prev: Atomic Builtins,  Up: C Extensions

6.52 Object Size Checking Builtins
==================================

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 runtime.  */
     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 runtime.  */
     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
will, otherwise the checking function should be called and the FLAG
argument passed to it.


File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions

6.53 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 will not be
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_' will always be
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 will be
emitted.

 Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or
'-std=c1x'), 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' builtins 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 would 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_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 was 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: 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 would typically use this function in an embedded application
     where memory was 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
     will never return 1 when you call the inline function with a string
     constant or compound literal (*note Compound Literals::) and will
     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 would not
     otherwise be 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.

     Previous versions of GCC did not accept this built-in in data
     initializers.  The earliest version where it is completely safe is
     3.0.1.

 -- 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 ();

     would indicate 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))
            error ();

     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 will
     either never terminate, or one that transfers control elsewhere and
     never returns.  In this example, without the
     '__builtin_unreachable', GCC would issue a warning that control
     reaches the end of a non-void function.  It would also generate
     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 will never reach 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___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 will be 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' will not fault if 'p->next' is not a valid address,
     but evaluation will fault 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 will be negative 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 (unsigned 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_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 (unsigned long)
     Similar to '__builtin_ffs', except the argument type is 'unsigned
     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_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 (unsigned long long)
     Similar to '__builtin_ffs', except the argument type is 'unsigned
     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_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: int32_t __builtin_bswap32 (int32_t x)
     Returns X with the order of the bytes reversed; for example,
     '0xaabbccdd' becomes '0xddccbbaa'.  Byte here always means exactly
     8 bits.

 -- Built-in Function: int64_t __builtin_bswap64 (int64_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.54 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:

* Alpha Built-in Functions::
* ARM iWMMXt Built-in Functions::
* ARM NEON Intrinsics::
* Blackfin Built-in Functions::
* FR-V Built-in Functions::
* X86 Built-in Functions::
* MIPS DSP Built-in Functions::
* MIPS Paired-Single Support::
* MIPS Loongson Built-in Functions::
* Other MIPS Built-in Functions::
* picoChip Built-in Functions::
* PowerPC AltiVec/VSX Built-in Functions::
* RX Built-in Functions::
* SPARC VIS Built-in Functions::
* SPU Built-in Functions::


File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM iWMMXt Built-in Functions,  Up: Target Builtins

6.54.1 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 builtins 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: ARM iWMMXt Built-in Functions,  Next: ARM NEON Intrinsics,  Prev: Alpha Built-in Functions,  Up: Target Builtins

6.54.2 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_getwcx (int)
     void __builtin_arm_setwcx (int, 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)
     v4hi __builtin_arm_tinsrh (v4hi, int)
     v2si __builtin_arm_tinsrw (v2si, 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 (v8qi, v8qi)
     v2si __builtin_arm_wsadbz (v8qi, v8qi)
     v2si __builtin_arm_wsadh (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 NEON Intrinsics,  Next: Blackfin Built-in Functions,  Prev: ARM iWMMXt Built-in Functions,  Up: Target Builtins

6.54.3 ARM NEON Intrinsics
--------------------------

These built-in intrinsics for the ARM Advanced SIMD extension are
available when the '-mfpu=neon' switch is used:

6.54.3.1 Addition
.................

   * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0'

   * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0'

   * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0'

   * int32x2_t vadd_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0'

   * int16x4_t vadd_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0'

   * int8x8_t vadd_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0'

   * float32x2_t vadd_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vadd.f32 D0, D0, D0'

   * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t)

   * int64x1_t vadd_s64 (int64x1_t, int64x1_t)

   * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0'

   * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0'

   * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0'

   * int32x4_t vaddq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0'

   * int16x8_t vaddq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0'

   * int8x16_t vaddq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0'

   * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0'

   * int64x2_t vaddq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0'

   * float32x4_t vaddq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vadd.f32 Q0, Q0, Q0'

   * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vaddl.u32 Q0, D0, D0'

   * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vaddl.u16 Q0, D0, D0'

   * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vaddl.u8 Q0, D0, D0'

   * int64x2_t vaddl_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vaddl.s32 Q0, D0, D0'

   * int32x4_t vaddl_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vaddl.s16 Q0, D0, D0'

   * int16x8_t vaddl_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vaddl.s8 Q0, D0, D0'

   * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vaddw.u32 Q0, Q0, D0'

   * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vaddw.u16 Q0, Q0, D0'

   * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vaddw.u8 Q0, Q0, D0'

   * int64x2_t vaddw_s32 (int64x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vaddw.s32 Q0, Q0, D0'

   * int32x4_t vaddw_s16 (int32x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vaddw.s16 Q0, Q0, D0'

   * int16x8_t vaddw_s8 (int16x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vaddw.s8 Q0, Q0, D0'

   * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vhadd.u32 D0, D0, D0'

   * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vhadd.u16 D0, D0, D0'

   * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vhadd.u8 D0, D0, D0'

   * int32x2_t vhadd_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vhadd.s32 D0, D0, D0'

   * int16x4_t vhadd_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vhadd.s16 D0, D0, D0'

   * int8x8_t vhadd_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vhadd.s8 D0, D0, D0'

   * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vhadd.u32 Q0, Q0, Q0'

   * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vhadd.u16 Q0, Q0, Q0'

   * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vhadd.u8 Q0, Q0, Q0'

   * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vhadd.s32 Q0, Q0, Q0'

   * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vhadd.s16 Q0, Q0, Q0'

   * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vhadd.s8 Q0, Q0, Q0'

   * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vrhadd.u32 D0, D0, D0'

   * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vrhadd.u16 D0, D0, D0'

   * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vrhadd.u8 D0, D0, D0'

   * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vrhadd.s32 D0, D0, D0'

   * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vrhadd.s16 D0, D0, D0'

   * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vrhadd.s8 D0, D0, D0'

   * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vrhadd.u32 Q0, Q0, Q0'

   * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vrhadd.u16 Q0, Q0, Q0'

   * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vrhadd.u8 Q0, Q0, Q0'

   * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vrhadd.s32 Q0, Q0, Q0'

   * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vrhadd.s16 Q0, Q0, Q0'

   * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vrhadd.s8 Q0, Q0, Q0'

   * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vqadd.u32 D0, D0, D0'

   * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vqadd.u16 D0, D0, D0'

   * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vqadd.u8 D0, D0, D0'

   * int32x2_t vqadd_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vqadd.s32 D0, D0, D0'

   * int16x4_t vqadd_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vqadd.s16 D0, D0, D0'

   * int8x8_t vqadd_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vqadd.s8 D0, D0, D0'

   * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t)
     _Form of expected instruction(s):_ 'vqadd.u64 D0, D0, D0'

   * int64x1_t vqadd_s64 (int64x1_t, int64x1_t)
     _Form of expected instruction(s):_ 'vqadd.s64 D0, D0, D0'

   * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vqadd.u32 Q0, Q0, Q0'

   * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vqadd.u16 Q0, Q0, Q0'

   * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vqadd.u8 Q0, Q0, Q0'

   * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vqadd.s32 Q0, Q0, Q0'

   * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vqadd.s16 Q0, Q0, Q0'

   * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vqadd.s8 Q0, Q0, Q0'

   * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vqadd.u64 Q0, Q0, Q0'

   * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vqadd.s64 Q0, Q0, Q0'

   * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0'

   * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0'

   * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0'

   * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0'

   * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0'

   * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0'

   * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0'

   * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0'

   * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0'

   * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0'

   * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0'

   * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0'

6.54.3.2 Multiplication
.......................

   * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0'

   * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0'

   * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0'

   * int32x2_t vmul_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0'

   * int16x4_t vmul_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0'

   * int8x8_t vmul_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0'

   * float32x2_t vmul_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0'

   * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t)
     _Form of expected instruction(s):_ 'vmul.p8 D0, D0, D0'

   * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0'

   * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0'

   * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0'

   * int32x4_t vmulq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0'

   * int16x8_t vmulq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0'

   * int8x16_t vmulq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0'

   * float32x4_t vmulq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, Q0'

   * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t)
     _Form of expected instruction(s):_ 'vmul.p8 Q0, Q0, Q0'

   * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0'

   * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0'

   * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, Q0'

   * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, Q0'

   * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0'

   * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0'

   * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, Q0'

   * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, Q0'

   * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0'

   * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0'

   * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vmull.u8 Q0, D0, D0'

   * int64x2_t vmull_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0'

   * int32x4_t vmull_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0'

   * int16x8_t vmull_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vmull.s8 Q0, D0, D0'

   * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t)
     _Form of expected instruction(s):_ 'vmull.p8 Q0, D0, D0'

   * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0'

   * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0'

6.54.3.3 Multiply-accumulate
............................

   * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0'

   * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0'

   * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0'

   * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0'

   * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0'

   * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0'

   * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0'

   * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0'

   * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0'

   * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0'

   * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0'

   * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0'

   * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0'

   * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, Q0'

   * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0'

   * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0'

   * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vmlal.u8 Q0, D0, D0'

   * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0'

   * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0'

   * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vmlal.s8 Q0, D0, D0'

   * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0'

   * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0'

6.54.3.4 Multiply-subtract
..........................

   * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0'

   * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0'

   * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0'

   * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0'

   * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0'

   * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0'

   * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0'

   * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0'

   * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0'

   * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0'

   * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0'

   * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0'

   * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0'

   * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, Q0'

   * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0'

   * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0'

   * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vmlsl.u8 Q0, D0, D0'

   * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0'

   * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0'

   * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vmlsl.s8 Q0, D0, D0'

   * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0'

   * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0'

6.54.3.5 Subtraction
....................

   * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0'

   * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0'

   * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0'

   * int32x2_t vsub_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0'

   * int16x4_t vsub_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0'

   * int8x8_t vsub_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0'

   * float32x2_t vsub_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vsub.f32 D0, D0, D0'

   * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t)

   * int64x1_t vsub_s64 (int64x1_t, int64x1_t)

   * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0'

   * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0'

   * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0'

   * int32x4_t vsubq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0'

   * int16x8_t vsubq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0'

   * int8x16_t vsubq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0'

   * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0'

   * int64x2_t vsubq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0'

   * float32x4_t vsubq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vsub.f32 Q0, Q0, Q0'

   * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vsubl.u32 Q0, D0, D0'

   * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vsubl.u16 Q0, D0, D0'

   * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vsubl.u8 Q0, D0, D0'

   * int64x2_t vsubl_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vsubl.s32 Q0, D0, D0'

   * int32x4_t vsubl_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vsubl.s16 Q0, D0, D0'

   * int16x8_t vsubl_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vsubl.s8 Q0, D0, D0'

   * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vsubw.u32 Q0, Q0, D0'

   * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vsubw.u16 Q0, Q0, D0'

   * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vsubw.u8 Q0, Q0, D0'

   * int64x2_t vsubw_s32 (int64x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vsubw.s32 Q0, Q0, D0'

   * int32x4_t vsubw_s16 (int32x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vsubw.s16 Q0, Q0, D0'

   * int16x8_t vsubw_s8 (int16x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vsubw.s8 Q0, Q0, D0'

   * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vhsub.u32 D0, D0, D0'

   * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vhsub.u16 D0, D0, D0'

   * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vhsub.u8 D0, D0, D0'

   * int32x2_t vhsub_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vhsub.s32 D0, D0, D0'

   * int16x4_t vhsub_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vhsub.s16 D0, D0, D0'

   * int8x8_t vhsub_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vhsub.s8 D0, D0, D0'

   * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vhsub.u32 Q0, Q0, Q0'

   * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vhsub.u16 Q0, Q0, Q0'

   * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vhsub.u8 Q0, Q0, Q0'

   * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vhsub.s32 Q0, Q0, Q0'

   * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vhsub.s16 Q0, Q0, Q0'

   * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vhsub.s8 Q0, Q0, Q0'

   * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vqsub.u32 D0, D0, D0'

   * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vqsub.u16 D0, D0, D0'

   * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vqsub.u8 D0, D0, D0'

   * int32x2_t vqsub_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vqsub.s32 D0, D0, D0'

   * int16x4_t vqsub_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vqsub.s16 D0, D0, D0'

   * int8x8_t vqsub_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vqsub.s8 D0, D0, D0'

   * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t)
     _Form of expected instruction(s):_ 'vqsub.u64 D0, D0, D0'

   * int64x1_t vqsub_s64 (int64x1_t, int64x1_t)
     _Form of expected instruction(s):_ 'vqsub.s64 D0, D0, D0'

   * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vqsub.u32 Q0, Q0, Q0'

   * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vqsub.u16 Q0, Q0, Q0'

   * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vqsub.u8 Q0, Q0, Q0'

   * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vqsub.s32 Q0, Q0, Q0'

   * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vqsub.s16 Q0, Q0, Q0'

   * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vqsub.s8 Q0, Q0, Q0'

   * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vqsub.u64 Q0, Q0, Q0'

   * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vqsub.s64 Q0, Q0, Q0'

   * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0'

   * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0'

   * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0'

   * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0'

   * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0'

   * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0'

   * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0'

   * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0'

   * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0'

   * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0'

   * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0'

   * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0'

6.54.3.6 Comparison (equal-to)
..............................

   * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0'

   * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0'

   * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'

   * uint32x2_t vceq_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0'

   * uint16x4_t vceq_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0'

   * uint8x8_t vceq_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'

   * uint32x2_t vceq_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vceq.f32 D0, D0, D0'

   * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t)
     _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0'

   * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0'

   * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0'

   * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'

   * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0'

   * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0'

   * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'

   * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vceq.f32 Q0, Q0, Q0'

   * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t)
     _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0'

6.54.3.7 Comparison (greater-than-or-equal-to)
..............................................

   * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0'

   * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0'

   * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0'

   * uint32x2_t vcge_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0'

   * uint16x4_t vcge_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0'

   * uint8x8_t vcge_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0'

   * uint32x2_t vcge_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0'

   * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0'

   * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0'

   * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0'

   * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0'

   * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0'

   * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0'

   * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0'

6.54.3.8 Comparison (less-than-or-equal-to)
...........................................

   * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0'

   * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0'

   * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0'

   * uint32x2_t vcle_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0'

   * uint16x4_t vcle_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0'

   * uint8x8_t vcle_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0'

   * uint32x2_t vcle_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0'

   * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0'

   * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0'

   * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0'

   * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0'

   * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0'

   * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0'

   * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0'

6.54.3.9 Comparison (greater-than)
..................................

   * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0'

   * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0'

   * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0'

   * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0'

   * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0'

   * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0'

   * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0'

   * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0'

   * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0'

   * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0'

   * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0'

   * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0'

   * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0'

   * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0'

6.54.3.10 Comparison (less-than)
................................

   * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0'

   * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0'

   * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0'

   * uint32x2_t vclt_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0'

   * uint16x4_t vclt_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0'

   * uint8x8_t vclt_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0'

   * uint32x2_t vclt_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0'

   * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0'

   * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0'

   * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0'

   * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0'

   * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0'

   * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0'

   * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0'

6.54.3.11 Comparison (absolute greater-than-or-equal-to)
........................................................

   * uint32x2_t vcage_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0'

   * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0'

6.54.3.12 Comparison (absolute less-than-or-equal-to)
.....................................................

   * uint32x2_t vcale_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0'

   * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0'

6.54.3.13 Comparison (absolute greater-than)
............................................

   * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0'

   * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0'

6.54.3.14 Comparison (absolute less-than)
.........................................

   * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0'

   * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0'

6.54.3.15 Test bits
...................

   * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0'

   * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0'

   * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'

   * uint32x2_t vtst_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0'

   * uint16x4_t vtst_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0'

   * uint8x8_t vtst_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'

   * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t)
     _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0'

   * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0'

   * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0'

   * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'

   * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0'

   * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0'

   * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'

   * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t)
     _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0'

6.54.3.16 Absolute difference
.............................

   * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vabd.u32 D0, D0, D0'

   * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vabd.u16 D0, D0, D0'

   * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vabd.u8 D0, D0, D0'

   * int32x2_t vabd_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vabd.s32 D0, D0, D0'

   * int16x4_t vabd_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vabd.s16 D0, D0, D0'

   * int8x8_t vabd_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vabd.s8 D0, D0, D0'

   * float32x2_t vabd_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vabd.f32 D0, D0, D0'

   * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vabd.u32 Q0, Q0, Q0'

   * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vabd.u16 Q0, Q0, Q0'

   * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vabd.u8 Q0, Q0, Q0'

   * int32x4_t vabdq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vabd.s32 Q0, Q0, Q0'

   * int16x8_t vabdq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vabd.s16 Q0, Q0, Q0'

   * int8x16_t vabdq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vabd.s8 Q0, Q0, Q0'

   * float32x4_t vabdq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vabd.f32 Q0, Q0, Q0'

   * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vabdl.u32 Q0, D0, D0'

   * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vabdl.u16 Q0, D0, D0'

   * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vabdl.u8 Q0, D0, D0'

   * int64x2_t vabdl_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vabdl.s32 Q0, D0, D0'

   * int32x4_t vabdl_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vabdl.s16 Q0, D0, D0'

   * int16x8_t vabdl_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vabdl.s8 Q0, D0, D0'

6.54.3.17 Absolute difference and accumulate
............................................

   * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vaba.u32 D0, D0, D0'

   * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vaba.u16 D0, D0, D0'

   * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vaba.u8 D0, D0, D0'

   * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vaba.s32 D0, D0, D0'

   * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vaba.s16 D0, D0, D0'

   * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vaba.s8 D0, D0, D0'

   * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vaba.u32 Q0, Q0, Q0'

   * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vaba.u16 Q0, Q0, Q0'

   * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vaba.u8 Q0, Q0, Q0'

   * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vaba.s32 Q0, Q0, Q0'

   * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vaba.s16 Q0, Q0, Q0'

   * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vaba.s8 Q0, Q0, Q0'

   * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vabal.u32 Q0, D0, D0'

   * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vabal.u16 Q0, D0, D0'

   * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vabal.u8 Q0, D0, D0'

   * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vabal.s32 Q0, D0, D0'

   * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vabal.s16 Q0, D0, D0'

   * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vabal.s8 Q0, D0, D0'

6.54.3.18 Maximum
.................

   * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vmax.u32 D0, D0, D0'

   * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vmax.u16 D0, D0, D0'

   * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vmax.u8 D0, D0, D0'

   * int32x2_t vmax_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vmax.s32 D0, D0, D0'

   * int16x4_t vmax_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vmax.s16 D0, D0, D0'

   * int8x8_t vmax_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vmax.s8 D0, D0, D0'

   * float32x2_t vmax_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vmax.f32 D0, D0, D0'

   * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vmax.u32 Q0, Q0, Q0'

   * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vmax.u16 Q0, Q0, Q0'

   * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vmax.u8 Q0, Q0, Q0'

   * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vmax.s32 Q0, Q0, Q0'

   * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vmax.s16 Q0, Q0, Q0'

   * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vmax.s8 Q0, Q0, Q0'

   * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vmax.f32 Q0, Q0, Q0'

6.54.3.19 Minimum
.................

   * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vmin.u32 D0, D0, D0'

   * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vmin.u16 D0, D0, D0'

   * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vmin.u8 D0, D0, D0'

   * int32x2_t vmin_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vmin.s32 D0, D0, D0'

   * int16x4_t vmin_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vmin.s16 D0, D0, D0'

   * int8x8_t vmin_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vmin.s8 D0, D0, D0'

   * float32x2_t vmin_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vmin.f32 D0, D0, D0'

   * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vmin.u32 Q0, Q0, Q0'

   * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vmin.u16 Q0, Q0, Q0'

   * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vmin.u8 Q0, Q0, Q0'

   * int32x4_t vminq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vmin.s32 Q0, Q0, Q0'

   * int16x8_t vminq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vmin.s16 Q0, Q0, Q0'

   * int8x16_t vminq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vmin.s8 Q0, Q0, Q0'

   * float32x4_t vminq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vmin.f32 Q0, Q0, Q0'

6.54.3.20 Pairwise add
......................

   * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0'

   * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0'

   * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0'

   * int32x2_t vpadd_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0'

   * int16x4_t vpadd_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0'

   * int8x8_t vpadd_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0'

   * float32x2_t vpadd_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vpadd.f32 D0, D0, D0'

   * uint64x1_t vpaddl_u32 (uint32x2_t)
     _Form of expected instruction(s):_ 'vpaddl.u32 D0, D0'

   * uint32x2_t vpaddl_u16 (uint16x4_t)
     _Form of expected instruction(s):_ 'vpaddl.u16 D0, D0'

   * uint16x4_t vpaddl_u8 (uint8x8_t)
     _Form of expected instruction(s):_ 'vpaddl.u8 D0, D0'

   * int64x1_t vpaddl_s32 (int32x2_t)
     _Form of expected instruction(s):_ 'vpaddl.s32 D0, D0'

   * int32x2_t vpaddl_s16 (int16x4_t)
     _Form of expected instruction(s):_ 'vpaddl.s16 D0, D0'

   * int16x4_t vpaddl_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vpaddl.s8 D0, D0'

   * uint64x2_t vpaddlq_u32 (uint32x4_t)
     _Form of expected instruction(s):_ 'vpaddl.u32 Q0, Q0'

   * uint32x4_t vpaddlq_u16 (uint16x8_t)
     _Form of expected instruction(s):_ 'vpaddl.u16 Q0, Q0'

   * uint16x8_t vpaddlq_u8 (uint8x16_t)
     _Form of expected instruction(s):_ 'vpaddl.u8 Q0, Q0'

   * int64x2_t vpaddlq_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vpaddl.s32 Q0, Q0'

   * int32x4_t vpaddlq_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vpaddl.s16 Q0, Q0'

   * int16x8_t vpaddlq_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vpaddl.s8 Q0, Q0'

6.54.3.21 Pairwise add, single_opcode widen and accumulate
..........................................................

   * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vpadal.u32 D0, D0'

   * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vpadal.u16 D0, D0'

   * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vpadal.u8 D0, D0'

   * int64x1_t vpadal_s32 (int64x1_t, int32x2_t)
     _Form of expected instruction(s):_ 'vpadal.s32 D0, D0'

   * int32x2_t vpadal_s16 (int32x2_t, int16x4_t)
     _Form of expected instruction(s):_ 'vpadal.s16 D0, D0'

   * int16x4_t vpadal_s8 (int16x4_t, int8x8_t)
     _Form of expected instruction(s):_ 'vpadal.s8 D0, D0'

   * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vpadal.u32 Q0, Q0'

   * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vpadal.u16 Q0, Q0'

   * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vpadal.u8 Q0, Q0'

   * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t)
     _Form of expected instruction(s):_ 'vpadal.s32 Q0, Q0'

   * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t)
     _Form of expected instruction(s):_ 'vpadal.s16 Q0, Q0'

   * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t)
     _Form of expected instruction(s):_ 'vpadal.s8 Q0, Q0'

6.54.3.22 Folding maximum
.........................

   * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vpmax.u32 D0, D0, D0'

   * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vpmax.u16 D0, D0, D0'

   * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vpmax.u8 D0, D0, D0'

   * int32x2_t vpmax_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vpmax.s32 D0, D0, D0'

   * int16x4_t vpmax_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vpmax.s16 D0, D0, D0'

   * int8x8_t vpmax_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vpmax.s8 D0, D0, D0'

   * float32x2_t vpmax_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vpmax.f32 D0, D0, D0'

6.54.3.23 Folding minimum
.........................

   * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vpmin.u32 D0, D0, D0'

   * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vpmin.u16 D0, D0, D0'

   * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vpmin.u8 D0, D0, D0'

   * int32x2_t vpmin_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vpmin.s32 D0, D0, D0'

   * int16x4_t vpmin_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vpmin.s16 D0, D0, D0'

   * int8x8_t vpmin_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vpmin.s8 D0, D0, D0'

   * float32x2_t vpmin_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vpmin.f32 D0, D0, D0'

6.54.3.24 Reciprocal step
.........................

   * float32x2_t vrecps_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vrecps.f32 D0, D0, D0'

   * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vrecps.f32 Q0, Q0, Q0'

   * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vrsqrts.f32 D0, D0, D0'

   * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vrsqrts.f32 Q0, Q0, Q0'

6.54.3.25 Vector shift left
...........................

   * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vshl.u32 D0, D0, D0'

   * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vshl.u16 D0, D0, D0'

   * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vshl.u8 D0, D0, D0'

   * int32x2_t vshl_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vshl.s32 D0, D0, D0'

   * int16x4_t vshl_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vshl.s16 D0, D0, D0'

   * int8x8_t vshl_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vshl.s8 D0, D0, D0'

   * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t)
     _Form of expected instruction(s):_ 'vshl.u64 D0, D0, D0'

   * int64x1_t vshl_s64 (int64x1_t, int64x1_t)
     _Form of expected instruction(s):_ 'vshl.s64 D0, D0, D0'

   * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vshl.u32 Q0, Q0, Q0'

   * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vshl.u16 Q0, Q0, Q0'

   * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vshl.u8 Q0, Q0, Q0'

   * int32x4_t vshlq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vshl.s32 Q0, Q0, Q0'

   * int16x8_t vshlq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vshl.s16 Q0, Q0, Q0'

   * int8x16_t vshlq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vshl.s8 Q0, Q0, Q0'

   * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vshl.u64 Q0, Q0, Q0'

   * int64x2_t vshlq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vshl.s64 Q0, Q0, Q0'

   * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vrshl.u32 D0, D0, D0'

   * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vrshl.u16 D0, D0, D0'

   * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vrshl.u8 D0, D0, D0'

   * int32x2_t vrshl_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vrshl.s32 D0, D0, D0'

   * int16x4_t vrshl_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vrshl.s16 D0, D0, D0'

   * int8x8_t vrshl_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vrshl.s8 D0, D0, D0'

   * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t)
     _Form of expected instruction(s):_ 'vrshl.u64 D0, D0, D0'

   * int64x1_t vrshl_s64 (int64x1_t, int64x1_t)
     _Form of expected instruction(s):_ 'vrshl.s64 D0, D0, D0'

   * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vrshl.u32 Q0, Q0, Q0'

   * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vrshl.u16 Q0, Q0, Q0'

   * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vrshl.u8 Q0, Q0, Q0'

   * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vrshl.s32 Q0, Q0, Q0'

   * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vrshl.s16 Q0, Q0, Q0'

   * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vrshl.s8 Q0, Q0, Q0'

   * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vrshl.u64 Q0, Q0, Q0'

   * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vrshl.s64 Q0, Q0, Q0'

   * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, D0'

   * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, D0'

   * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, D0'

   * int32x2_t vqshl_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, D0'

   * int16x4_t vqshl_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, D0'

   * int8x8_t vqshl_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, D0'

   * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t)
     _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, D0'

   * int64x1_t vqshl_s64 (int64x1_t, int64x1_t)
     _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, D0'

   * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, Q0'

   * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, Q0'

   * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, Q0'

   * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, Q0'

   * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, Q0'

   * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, Q0'

   * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, Q0'

   * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, Q0'

   * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vqrshl.u32 D0, D0, D0'

   * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vqrshl.u16 D0, D0, D0'

   * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vqrshl.u8 D0, D0, D0'

   * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vqrshl.s32 D0, D0, D0'

   * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vqrshl.s16 D0, D0, D0'

   * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vqrshl.s8 D0, D0, D0'

   * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t)
     _Form of expected instruction(s):_ 'vqrshl.u64 D0, D0, D0'

   * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t)
     _Form of expected instruction(s):_ 'vqrshl.s64 D0, D0, D0'

   * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vqrshl.u32 Q0, Q0, Q0'

   * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vqrshl.u16 Q0, Q0, Q0'

   * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vqrshl.u8 Q0, Q0, Q0'

   * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vqrshl.s32 Q0, Q0, Q0'

   * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vqrshl.s16 Q0, Q0, Q0'

   * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vqrshl.s8 Q0, Q0, Q0'

   * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vqrshl.u64 Q0, Q0, Q0'

   * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vqrshl.s64 Q0, Q0, Q0'

6.54.3.26 Vector shift left by constant
.......................................

   * uint32x2_t vshl_n_u32 (uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0'

   * uint16x4_t vshl_n_u16 (uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0'

   * uint8x8_t vshl_n_u8 (uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0'

   * int32x2_t vshl_n_s32 (int32x2_t, const int)
     _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0'

   * int16x4_t vshl_n_s16 (int16x4_t, const int)
     _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0'

   * int8x8_t vshl_n_s8 (int8x8_t, const int)
     _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0'

   * uint64x1_t vshl_n_u64 (uint64x1_t, const int)
     _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0'

   * int64x1_t vshl_n_s64 (int64x1_t, const int)
     _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0'

   * uint32x4_t vshlq_n_u32 (uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0'

   * uint16x8_t vshlq_n_u16 (uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0'

   * uint8x16_t vshlq_n_u8 (uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0'

   * int32x4_t vshlq_n_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0'

   * int16x8_t vshlq_n_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0'

   * int8x16_t vshlq_n_s8 (int8x16_t, const int)
     _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0'

   * uint64x2_t vshlq_n_u64 (uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0'

   * int64x2_t vshlq_n_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0'

   * uint32x2_t vqshl_n_u32 (uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, #0'

   * uint16x4_t vqshl_n_u16 (uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, #0'

   * uint8x8_t vqshl_n_u8 (uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, #0'

   * int32x2_t vqshl_n_s32 (int32x2_t, const int)
     _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, #0'

   * int16x4_t vqshl_n_s16 (int16x4_t, const int)
     _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, #0'

   * int8x8_t vqshl_n_s8 (int8x8_t, const int)
     _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, #0'

   * uint64x1_t vqshl_n_u64 (uint64x1_t, const int)
     _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, #0'

   * int64x1_t vqshl_n_s64 (int64x1_t, const int)
     _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, #0'

   * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, #0'

   * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, #0'

   * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, #0'

   * int32x4_t vqshlq_n_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, #0'

   * int16x8_t vqshlq_n_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, #0'

   * int8x16_t vqshlq_n_s8 (int8x16_t, const int)
     _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, #0'

   * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, #0'

   * int64x2_t vqshlq_n_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, #0'

   * uint64x1_t vqshlu_n_s64 (int64x1_t, const int)
     _Form of expected instruction(s):_ 'vqshlu.s64 D0, D0, #0'

   * uint32x2_t vqshlu_n_s32 (int32x2_t, const int)
     _Form of expected instruction(s):_ 'vqshlu.s32 D0, D0, #0'

   * uint16x4_t vqshlu_n_s16 (int16x4_t, const int)
     _Form of expected instruction(s):_ 'vqshlu.s16 D0, D0, #0'

   * uint8x8_t vqshlu_n_s8 (int8x8_t, const int)
     _Form of expected instruction(s):_ 'vqshlu.s8 D0, D0, #0'

   * uint64x2_t vqshluq_n_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vqshlu.s64 Q0, Q0, #0'

   * uint32x4_t vqshluq_n_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vqshlu.s32 Q0, Q0, #0'

   * uint16x8_t vqshluq_n_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vqshlu.s16 Q0, Q0, #0'

   * uint8x16_t vqshluq_n_s8 (int8x16_t, const int)
     _Form of expected instruction(s):_ 'vqshlu.s8 Q0, Q0, #0'

   * uint64x2_t vshll_n_u32 (uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vshll.u32 Q0, D0, #0'

   * uint32x4_t vshll_n_u16 (uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vshll.u16 Q0, D0, #0'

   * uint16x8_t vshll_n_u8 (uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vshll.u8 Q0, D0, #0'

   * int64x2_t vshll_n_s32 (int32x2_t, const int)
     _Form of expected instruction(s):_ 'vshll.s32 Q0, D0, #0'

   * int32x4_t vshll_n_s16 (int16x4_t, const int)
     _Form of expected instruction(s):_ 'vshll.s16 Q0, D0, #0'

   * int16x8_t vshll_n_s8 (int8x8_t, const int)
     _Form of expected instruction(s):_ 'vshll.s8 Q0, D0, #0'

6.54.3.27 Vector shift right by constant
........................................

   * uint32x2_t vshr_n_u32 (uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vshr.u32 D0, D0, #0'

   * uint16x4_t vshr_n_u16 (uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vshr.u16 D0, D0, #0'

   * uint8x8_t vshr_n_u8 (uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vshr.u8 D0, D0, #0'

   * int32x2_t vshr_n_s32 (int32x2_t, const int)
     _Form of expected instruction(s):_ 'vshr.s32 D0, D0, #0'

   * int16x4_t vshr_n_s16 (int16x4_t, const int)
     _Form of expected instruction(s):_ 'vshr.s16 D0, D0, #0'

   * int8x8_t vshr_n_s8 (int8x8_t, const int)
     _Form of expected instruction(s):_ 'vshr.s8 D0, D0, #0'

   * uint64x1_t vshr_n_u64 (uint64x1_t, const int)
     _Form of expected instruction(s):_ 'vshr.u64 D0, D0, #0'

   * int64x1_t vshr_n_s64 (int64x1_t, const int)
     _Form of expected instruction(s):_ 'vshr.s64 D0, D0, #0'

   * uint32x4_t vshrq_n_u32 (uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vshr.u32 Q0, Q0, #0'

   * uint16x8_t vshrq_n_u16 (uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vshr.u16 Q0, Q0, #0'

   * uint8x16_t vshrq_n_u8 (uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vshr.u8 Q0, Q0, #0'

   * int32x4_t vshrq_n_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vshr.s32 Q0, Q0, #0'

   * int16x8_t vshrq_n_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vshr.s16 Q0, Q0, #0'

   * int8x16_t vshrq_n_s8 (int8x16_t, const int)
     _Form of expected instruction(s):_ 'vshr.s8 Q0, Q0, #0'

   * uint64x2_t vshrq_n_u64 (uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vshr.u64 Q0, Q0, #0'

   * int64x2_t vshrq_n_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vshr.s64 Q0, Q0, #0'

   * uint32x2_t vrshr_n_u32 (uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vrshr.u32 D0, D0, #0'

   * uint16x4_t vrshr_n_u16 (uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vrshr.u16 D0, D0, #0'

   * uint8x8_t vrshr_n_u8 (uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vrshr.u8 D0, D0, #0'

   * int32x2_t vrshr_n_s32 (int32x2_t, const int)
     _Form of expected instruction(s):_ 'vrshr.s32 D0, D0, #0'

   * int16x4_t vrshr_n_s16 (int16x4_t, const int)
     _Form of expected instruction(s):_ 'vrshr.s16 D0, D0, #0'

   * int8x8_t vrshr_n_s8 (int8x8_t, const int)
     _Form of expected instruction(s):_ 'vrshr.s8 D0, D0, #0'

   * uint64x1_t vrshr_n_u64 (uint64x1_t, const int)
     _Form of expected instruction(s):_ 'vrshr.u64 D0, D0, #0'

   * int64x1_t vrshr_n_s64 (int64x1_t, const int)
     _Form of expected instruction(s):_ 'vrshr.s64 D0, D0, #0'

   * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vrshr.u32 Q0, Q0, #0'

   * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vrshr.u16 Q0, Q0, #0'

   * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vrshr.u8 Q0, Q0, #0'

   * int32x4_t vrshrq_n_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vrshr.s32 Q0, Q0, #0'

   * int16x8_t vrshrq_n_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vrshr.s16 Q0, Q0, #0'

   * int8x16_t vrshrq_n_s8 (int8x16_t, const int)
     _Form of expected instruction(s):_ 'vrshr.s8 Q0, Q0, #0'

   * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vrshr.u64 Q0, Q0, #0'

   * int64x2_t vrshrq_n_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vrshr.s64 Q0, Q0, #0'

   * uint32x2_t vshrn_n_u64 (uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0'

   * uint16x4_t vshrn_n_u32 (uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0'

   * uint8x8_t vshrn_n_u16 (uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0'

   * int32x2_t vshrn_n_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0'

   * int16x4_t vshrn_n_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0'

   * int8x8_t vshrn_n_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0'

   * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0'

   * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0'

   * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0'

   * int32x2_t vrshrn_n_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0'

   * int16x4_t vrshrn_n_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0'

   * int8x8_t vrshrn_n_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0'

   * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vqshrn.u64 D0, Q0, #0'

   * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vqshrn.u32 D0, Q0, #0'

   * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vqshrn.u16 D0, Q0, #0'

   * int32x2_t vqshrn_n_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vqshrn.s64 D0, Q0, #0'

   * int16x4_t vqshrn_n_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vqshrn.s32 D0, Q0, #0'

   * int8x8_t vqshrn_n_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vqshrn.s16 D0, Q0, #0'

   * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vqrshrn.u64 D0, Q0, #0'

   * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vqrshrn.u32 D0, Q0, #0'

   * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vqrshrn.u16 D0, Q0, #0'

   * int32x2_t vqrshrn_n_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vqrshrn.s64 D0, Q0, #0'

   * int16x4_t vqrshrn_n_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vqrshrn.s32 D0, Q0, #0'

   * int8x8_t vqrshrn_n_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vqrshrn.s16 D0, Q0, #0'

   * uint32x2_t vqshrun_n_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vqshrun.s64 D0, Q0, #0'

   * uint16x4_t vqshrun_n_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vqshrun.s32 D0, Q0, #0'

   * uint8x8_t vqshrun_n_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vqshrun.s16 D0, Q0, #0'

   * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vqrshrun.s64 D0, Q0, #0'

   * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vqrshrun.s32 D0, Q0, #0'

   * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vqrshrun.s16 D0, Q0, #0'

6.54.3.28 Vector shift right by constant and accumulate
.......................................................

   * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vsra.u32 D0, D0, #0'

   * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vsra.u16 D0, D0, #0'

   * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vsra.u8 D0, D0, #0'

   * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vsra.s32 D0, D0, #0'

   * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vsra.s16 D0, D0, #0'

   * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int)
     _Form of expected instruction(s):_ 'vsra.s8 D0, D0, #0'

   * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int)
     _Form of expected instruction(s):_ 'vsra.u64 D0, D0, #0'

   * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int)
     _Form of expected instruction(s):_ 'vsra.s64 D0, D0, #0'

   * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vsra.u32 Q0, Q0, #0'

   * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vsra.u16 Q0, Q0, #0'

   * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vsra.u8 Q0, Q0, #0'

   * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int)
     _Form of expected instruction(s):_ 'vsra.s32 Q0, Q0, #0'

   * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int)
     _Form of expected instruction(s):_ 'vsra.s16 Q0, Q0, #0'

   * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int)
     _Form of expected instruction(s):_ 'vsra.s8 Q0, Q0, #0'

   * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vsra.u64 Q0, Q0, #0'

   * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int)
     _Form of expected instruction(s):_ 'vsra.s64 Q0, Q0, #0'

   * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vrsra.u32 D0, D0, #0'

   * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vrsra.u16 D0, D0, #0'

   * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vrsra.u8 D0, D0, #0'

   * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vrsra.s32 D0, D0, #0'

   * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vrsra.s16 D0, D0, #0'

   * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int)
     _Form of expected instruction(s):_ 'vrsra.s8 D0, D0, #0'

   * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int)
     _Form of expected instruction(s):_ 'vrsra.u64 D0, D0, #0'

   * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int)
     _Form of expected instruction(s):_ 'vrsra.s64 D0, D0, #0'

   * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vrsra.u32 Q0, Q0, #0'

   * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vrsra.u16 Q0, Q0, #0'

   * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vrsra.u8 Q0, Q0, #0'

   * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int)
     _Form of expected instruction(s):_ 'vrsra.s32 Q0, Q0, #0'

   * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int)
     _Form of expected instruction(s):_ 'vrsra.s16 Q0, Q0, #0'

   * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int)
     _Form of expected instruction(s):_ 'vrsra.s8 Q0, Q0, #0'

   * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vrsra.u64 Q0, Q0, #0'

   * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int)
     _Form of expected instruction(s):_ 'vrsra.s64 Q0, Q0, #0'

6.54.3.29 Vector shift right and insert
.......................................

   * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0'

   * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'

   * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'

   * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0'

   * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'

   * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int)
     _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'

   * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int)
     _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0'

   * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int)
     _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0'

   * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int)
     _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0'

   * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int)
     _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0'

   * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0'

   * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'

   * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'

   * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int)
     _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0'

   * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int)
     _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'

   * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int)
     _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'

   * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0'

   * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int)
     _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0'

   * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int)
     _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0'

   * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int)
     _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0'

6.54.3.30 Vector shift left and insert
......................................

   * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0'

   * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'

   * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'

   * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0'

   * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'

   * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int)
     _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'

   * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int)
     _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0'

   * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int)
     _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0'

   * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int)
     _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0'

   * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int)
     _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0'

   * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0'

   * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'

   * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'

   * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int)
     _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0'

   * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int)
     _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'

   * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int)
     _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'

   * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0'

   * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int)
     _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0'

   * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int)
     _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0'

   * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int)
     _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0'

6.54.3.31 Absolute value
........................

   * float32x2_t vabs_f32 (float32x2_t)
     _Form of expected instruction(s):_ 'vabs.f32 D0, D0'

   * int32x2_t vabs_s32 (int32x2_t)
     _Form of expected instruction(s):_ 'vabs.s32 D0, D0'

   * int16x4_t vabs_s16 (int16x4_t)
     _Form of expected instruction(s):_ 'vabs.s16 D0, D0'

   * int8x8_t vabs_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vabs.s8 D0, D0'

   * float32x4_t vabsq_f32 (float32x4_t)
     _Form of expected instruction(s):_ 'vabs.f32 Q0, Q0'

   * int32x4_t vabsq_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vabs.s32 Q0, Q0'

   * int16x8_t vabsq_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vabs.s16 Q0, Q0'

   * int8x16_t vabsq_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vabs.s8 Q0, Q0'

   * int32x2_t vqabs_s32 (int32x2_t)
     _Form of expected instruction(s):_ 'vqabs.s32 D0, D0'

   * int16x4_t vqabs_s16 (int16x4_t)
     _Form of expected instruction(s):_ 'vqabs.s16 D0, D0'

   * int8x8_t vqabs_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vqabs.s8 D0, D0'

   * int32x4_t vqabsq_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vqabs.s32 Q0, Q0'

   * int16x8_t vqabsq_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vqabs.s16 Q0, Q0'

   * int8x16_t vqabsq_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vqabs.s8 Q0, Q0'

6.54.3.32 Negation
..................

   * float32x2_t vneg_f32 (float32x2_t)
     _Form of expected instruction(s):_ 'vneg.f32 D0, D0'

   * int32x2_t vneg_s32 (int32x2_t)
     _Form of expected instruction(s):_ 'vneg.s32 D0, D0'

   * int16x4_t vneg_s16 (int16x4_t)
     _Form of expected instruction(s):_ 'vneg.s16 D0, D0'

   * int8x8_t vneg_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vneg.s8 D0, D0'

   * float32x4_t vnegq_f32 (float32x4_t)
     _Form of expected instruction(s):_ 'vneg.f32 Q0, Q0'

   * int32x4_t vnegq_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vneg.s32 Q0, Q0'

   * int16x8_t vnegq_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vneg.s16 Q0, Q0'

   * int8x16_t vnegq_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vneg.s8 Q0, Q0'

   * int32x2_t vqneg_s32 (int32x2_t)
     _Form of expected instruction(s):_ 'vqneg.s32 D0, D0'

   * int16x4_t vqneg_s16 (int16x4_t)
     _Form of expected instruction(s):_ 'vqneg.s16 D0, D0'

   * int8x8_t vqneg_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vqneg.s8 D0, D0'

   * int32x4_t vqnegq_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vqneg.s32 Q0, Q0'

   * int16x8_t vqnegq_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vqneg.s16 Q0, Q0'

   * int8x16_t vqnegq_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vqneg.s8 Q0, Q0'

6.54.3.33 Bitwise not
.....................

   * uint32x2_t vmvn_u32 (uint32x2_t)
     _Form of expected instruction(s):_ 'vmvn D0, D0'

   * uint16x4_t vmvn_u16 (uint16x4_t)
     _Form of expected instruction(s):_ 'vmvn D0, D0'

   * uint8x8_t vmvn_u8 (uint8x8_t)
     _Form of expected instruction(s):_ 'vmvn D0, D0'

   * int32x2_t vmvn_s32 (int32x2_t)
     _Form of expected instruction(s):_ 'vmvn D0, D0'

   * int16x4_t vmvn_s16 (int16x4_t)
     _Form of expected instruction(s):_ 'vmvn D0, D0'

   * int8x8_t vmvn_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vmvn D0, D0'

   * poly8x8_t vmvn_p8 (poly8x8_t)
     _Form of expected instruction(s):_ 'vmvn D0, D0'

   * uint32x4_t vmvnq_u32 (uint32x4_t)
     _Form of expected instruction(s):_ 'vmvn Q0, Q0'

   * uint16x8_t vmvnq_u16 (uint16x8_t)
     _Form of expected instruction(s):_ 'vmvn Q0, Q0'

   * uint8x16_t vmvnq_u8 (uint8x16_t)
     _Form of expected instruction(s):_ 'vmvn Q0, Q0'

   * int32x4_t vmvnq_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vmvn Q0, Q0'

   * int16x8_t vmvnq_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vmvn Q0, Q0'

   * int8x16_t vmvnq_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vmvn Q0, Q0'

   * poly8x16_t vmvnq_p8 (poly8x16_t)
     _Form of expected instruction(s):_ 'vmvn Q0, Q0'

6.54.3.34 Count leading sign bits
.................................

   * int32x2_t vcls_s32 (int32x2_t)
     _Form of expected instruction(s):_ 'vcls.s32 D0, D0'

   * int16x4_t vcls_s16 (int16x4_t)
     _Form of expected instruction(s):_ 'vcls.s16 D0, D0'

   * int8x8_t vcls_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vcls.s8 D0, D0'

   * int32x4_t vclsq_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vcls.s32 Q0, Q0'

   * int16x8_t vclsq_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vcls.s16 Q0, Q0'

   * int8x16_t vclsq_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vcls.s8 Q0, Q0'

6.54.3.35 Count leading zeros
.............................

   * uint32x2_t vclz_u32 (uint32x2_t)
     _Form of expected instruction(s):_ 'vclz.i32 D0, D0'

   * uint16x4_t vclz_u16 (uint16x4_t)
     _Form of expected instruction(s):_ 'vclz.i16 D0, D0'

   * uint8x8_t vclz_u8 (uint8x8_t)
     _Form of expected instruction(s):_ 'vclz.i8 D0, D0'

   * int32x2_t vclz_s32 (int32x2_t)
     _Form of expected instruction(s):_ 'vclz.i32 D0, D0'

   * int16x4_t vclz_s16 (int16x4_t)
     _Form of expected instruction(s):_ 'vclz.i16 D0, D0'

   * int8x8_t vclz_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vclz.i8 D0, D0'

   * uint32x4_t vclzq_u32 (uint32x4_t)
     _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0'

   * uint16x8_t vclzq_u16 (uint16x8_t)
     _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0'

   * uint8x16_t vclzq_u8 (uint8x16_t)
     _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0'

   * int32x4_t vclzq_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0'

   * int16x8_t vclzq_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0'

   * int8x16_t vclzq_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0'

6.54.3.36 Count number of set bits
..................................

   * uint8x8_t vcnt_u8 (uint8x8_t)
     _Form of expected instruction(s):_ 'vcnt.8 D0, D0'

   * int8x8_t vcnt_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vcnt.8 D0, D0'

   * poly8x8_t vcnt_p8 (poly8x8_t)
     _Form of expected instruction(s):_ 'vcnt.8 D0, D0'

   * uint8x16_t vcntq_u8 (uint8x16_t)
     _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'

   * int8x16_t vcntq_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'

   * poly8x16_t vcntq_p8 (poly8x16_t)
     _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0'

6.54.3.37 Reciprocal estimate
.............................

   * float32x2_t vrecpe_f32 (float32x2_t)
     _Form of expected instruction(s):_ 'vrecpe.f32 D0, D0'

   * uint32x2_t vrecpe_u32 (uint32x2_t)
     _Form of expected instruction(s):_ 'vrecpe.u32 D0, D0'

   * float32x4_t vrecpeq_f32 (float32x4_t)
     _Form of expected instruction(s):_ 'vrecpe.f32 Q0, Q0'

   * uint32x4_t vrecpeq_u32 (uint32x4_t)
     _Form of expected instruction(s):_ 'vrecpe.u32 Q0, Q0'

6.54.3.38 Reciprocal square-root estimate
.........................................

   * float32x2_t vrsqrte_f32 (float32x2_t)
     _Form of expected instruction(s):_ 'vrsqrte.f32 D0, D0'

   * uint32x2_t vrsqrte_u32 (uint32x2_t)
     _Form of expected instruction(s):_ 'vrsqrte.u32 D0, D0'

   * float32x4_t vrsqrteq_f32 (float32x4_t)
     _Form of expected instruction(s):_ 'vrsqrte.f32 Q0, Q0'

   * uint32x4_t vrsqrteq_u32 (uint32x4_t)
     _Form of expected instruction(s):_ 'vrsqrte.u32 Q0, Q0'

6.54.3.39 Get lanes from a vector
.................................

   * uint32_t vget_lane_u32 (uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'

   * uint16_t vget_lane_u16 (uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'

   * uint8_t vget_lane_u8 (uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'

   * int32_t vget_lane_s32 (int32x2_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'

   * int16_t vget_lane_s16 (int16x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]'

   * int8_t vget_lane_s8 (int8x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]'

   * float32_t vget_lane_f32 (float32x2_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'

   * poly16_t vget_lane_p16 (poly16x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'

   * poly8_t vget_lane_p8 (poly8x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'

   * uint64_t vget_lane_u64 (uint64x1_t, const int)

   * int64_t vget_lane_s64 (int64x1_t, const int)

   * uint32_t vgetq_lane_u32 (uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'

   * uint16_t vgetq_lane_u16 (uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'

   * uint8_t vgetq_lane_u8 (uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'

   * int32_t vgetq_lane_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'

   * int16_t vgetq_lane_s16 (int16x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]'

   * int8_t vgetq_lane_s8 (int8x16_t, const int)
     _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]'

   * float32_t vgetq_lane_f32 (float32x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]'

   * poly16_t vgetq_lane_p16 (poly16x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]'

   * poly8_t vgetq_lane_p8 (poly8x16_t, const int)
     _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]'

   * uint64_t vgetq_lane_u64 (uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vmov R0, R0, D0'

   * int64_t vgetq_lane_s64 (int64x2_t, const int)
     _Form of expected instruction(s):_ 'vmov R0, R0, D0'

6.54.3.40 Set lanes in a vector
...............................

   * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'

   * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'

   * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'

   * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'

   * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'

   * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'

   * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'

   * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'

   * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'

   * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int)

   * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int)

   * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'

   * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'

   * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'

   * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'

   * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'

   * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int)
     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'

   * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int)
     _Form of expected instruction(s):_ 'vmov.32 D0[0], R0'

   * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int)
     _Form of expected instruction(s):_ 'vmov.16 D0[0], R0'

   * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int)
     _Form of expected instruction(s):_ 'vmov.8 D0[0], R0'

   * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vmov D0, R0, R0'

   * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int)
     _Form of expected instruction(s):_ 'vmov D0, R0, R0'

6.54.3.41 Create vector from literal bit pattern
................................................

   * uint32x2_t vcreate_u32 (uint64_t)

   * uint16x4_t vcreate_u16 (uint64_t)

   * uint8x8_t vcreate_u8 (uint64_t)

   * int32x2_t vcreate_s32 (uint64_t)

   * int16x4_t vcreate_s16 (uint64_t)

   * int8x8_t vcreate_s8 (uint64_t)

   * uint64x1_t vcreate_u64 (uint64_t)

   * int64x1_t vcreate_s64 (uint64_t)

   * float32x2_t vcreate_f32 (uint64_t)

   * poly16x4_t vcreate_p16 (uint64_t)

   * poly8x8_t vcreate_p8 (uint64_t)

6.54.3.42 Set all lanes to the same value
.........................................

   * uint32x2_t vdup_n_u32 (uint32_t)
     _Form of expected instruction(s):_ 'vdup.32 D0, R0'

   * uint16x4_t vdup_n_u16 (uint16_t)
     _Form of expected instruction(s):_ 'vdup.16 D0, R0'

   * uint8x8_t vdup_n_u8 (uint8_t)
     _Form of expected instruction(s):_ 'vdup.8 D0, R0'

   * int32x2_t vdup_n_s32 (int32_t)
     _Form of expected instruction(s):_ 'vdup.32 D0, R0'

   * int16x4_t vdup_n_s16 (int16_t)
     _Form of expected instruction(s):_ 'vdup.16 D0, R0'

   * int8x8_t vdup_n_s8 (int8_t)
     _Form of expected instruction(s):_ 'vdup.8 D0, R0'

   * float32x2_t vdup_n_f32 (float32_t)
     _Form of expected instruction(s):_ 'vdup.32 D0, R0'

   * poly16x4_t vdup_n_p16 (poly16_t)
     _Form of expected instruction(s):_ 'vdup.16 D0, R0'

   * poly8x8_t vdup_n_p8 (poly8_t)
     _Form of expected instruction(s):_ 'vdup.8 D0, R0'

   * uint64x1_t vdup_n_u64 (uint64_t)

   * int64x1_t vdup_n_s64 (int64_t)

   * uint32x4_t vdupq_n_u32 (uint32_t)
     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'

   * uint16x8_t vdupq_n_u16 (uint16_t)
     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'

   * uint8x16_t vdupq_n_u8 (uint8_t)
     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'

   * int32x4_t vdupq_n_s32 (int32_t)
     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'

   * int16x8_t vdupq_n_s16 (int16_t)
     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'

   * int8x16_t vdupq_n_s8 (int8_t)
     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'

   * float32x4_t vdupq_n_f32 (float32_t)
     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'

   * poly16x8_t vdupq_n_p16 (poly16_t)
     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'

   * poly8x16_t vdupq_n_p8 (poly8_t)
     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'

   * uint64x2_t vdupq_n_u64 (uint64_t)

   * int64x2_t vdupq_n_s64 (int64_t)

   * uint32x2_t vmov_n_u32 (uint32_t)
     _Form of expected instruction(s):_ 'vdup.32 D0, R0'

   * uint16x4_t vmov_n_u16 (uint16_t)
     _Form of expected instruction(s):_ 'vdup.16 D0, R0'

   * uint8x8_t vmov_n_u8 (uint8_t)
     _Form of expected instruction(s):_ 'vdup.8 D0, R0'

   * int32x2_t vmov_n_s32 (int32_t)
     _Form of expected instruction(s):_ 'vdup.32 D0, R0'

   * int16x4_t vmov_n_s16 (int16_t)
     _Form of expected instruction(s):_ 'vdup.16 D0, R0'

   * int8x8_t vmov_n_s8 (int8_t)
     _Form of expected instruction(s):_ 'vdup.8 D0, R0'

   * float32x2_t vmov_n_f32 (float32_t)
     _Form of expected instruction(s):_ 'vdup.32 D0, R0'

   * poly16x4_t vmov_n_p16 (poly16_t)
     _Form of expected instruction(s):_ 'vdup.16 D0, R0'

   * poly8x8_t vmov_n_p8 (poly8_t)
     _Form of expected instruction(s):_ 'vdup.8 D0, R0'

   * uint64x1_t vmov_n_u64 (uint64_t)

   * int64x1_t vmov_n_s64 (int64_t)

   * uint32x4_t vmovq_n_u32 (uint32_t)
     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'

   * uint16x8_t vmovq_n_u16 (uint16_t)
     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'

   * uint8x16_t vmovq_n_u8 (uint8_t)
     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'

   * int32x4_t vmovq_n_s32 (int32_t)
     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'

   * int16x8_t vmovq_n_s16 (int16_t)
     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'

   * int8x16_t vmovq_n_s8 (int8_t)
     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'

   * float32x4_t vmovq_n_f32 (float32_t)
     _Form of expected instruction(s):_ 'vdup.32 Q0, R0'

   * poly16x8_t vmovq_n_p16 (poly16_t)
     _Form of expected instruction(s):_ 'vdup.16 Q0, R0'

   * poly8x16_t vmovq_n_p8 (poly8_t)
     _Form of expected instruction(s):_ 'vdup.8 Q0, R0'

   * uint64x2_t vmovq_n_u64 (uint64_t)

   * int64x2_t vmovq_n_s64 (int64_t)

   * uint32x2_t vdup_lane_u32 (uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'

   * uint16x4_t vdup_lane_u16 (uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'

   * uint8x8_t vdup_lane_u8 (uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'

   * int32x2_t vdup_lane_s32 (int32x2_t, const int)
     _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'

   * int16x4_t vdup_lane_s16 (int16x4_t, const int)
     _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'

   * int8x8_t vdup_lane_s8 (int8x8_t, const int)
     _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'

   * float32x2_t vdup_lane_f32 (float32x2_t, const int)
     _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]'

   * poly16x4_t vdup_lane_p16 (poly16x4_t, const int)
     _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]'

   * poly8x8_t vdup_lane_p8 (poly8x8_t, const int)
     _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]'

   * uint64x1_t vdup_lane_u64 (uint64x1_t, const int)

   * int64x1_t vdup_lane_s64 (int64x1_t, const int)

   * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'

   * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'

   * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'

   * int32x4_t vdupq_lane_s32 (int32x2_t, const int)
     _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'

   * int16x8_t vdupq_lane_s16 (int16x4_t, const int)
     _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'

   * int8x16_t vdupq_lane_s8 (int8x8_t, const int)
     _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'

   * float32x4_t vdupq_lane_f32 (float32x2_t, const int)
     _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]'

   * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int)
     _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]'

   * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int)
     _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]'

   * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int)

   * int64x2_t vdupq_lane_s64 (int64x1_t, const int)

6.54.3.43 Combining vectors
...........................

   * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t)

   * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t)

   * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t)

   * int32x4_t vcombine_s32 (int32x2_t, int32x2_t)

   * int16x8_t vcombine_s16 (int16x4_t, int16x4_t)

   * int8x16_t vcombine_s8 (int8x8_t, int8x8_t)

   * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t)

   * int64x2_t vcombine_s64 (int64x1_t, int64x1_t)

   * float32x4_t vcombine_f32 (float32x2_t, float32x2_t)

   * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t)

   * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t)

6.54.3.44 Splitting vectors
...........................

   * uint32x2_t vget_high_u32 (uint32x4_t)

   * uint16x4_t vget_high_u16 (uint16x8_t)

   * uint8x8_t vget_high_u8 (uint8x16_t)

   * int32x2_t vget_high_s32 (int32x4_t)

   * int16x4_t vget_high_s16 (int16x8_t)

   * int8x8_t vget_high_s8 (int8x16_t)

   * uint64x1_t vget_high_u64 (uint64x2_t)

   * int64x1_t vget_high_s64 (int64x2_t)

   * float32x2_t vget_high_f32 (float32x4_t)

   * poly16x4_t vget_high_p16 (poly16x8_t)

   * poly8x8_t vget_high_p8 (poly8x16_t)

   * uint32x2_t vget_low_u32 (uint32x4_t)
     _Form of expected instruction(s):_ 'vmov D0, D0'

   * uint16x4_t vget_low_u16 (uint16x8_t)
     _Form of expected instruction(s):_ 'vmov D0, D0'

   * uint8x8_t vget_low_u8 (uint8x16_t)
     _Form of expected instruction(s):_ 'vmov D0, D0'

   * int32x2_t vget_low_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vmov D0, D0'

   * int16x4_t vget_low_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vmov D0, D0'

   * int8x8_t vget_low_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vmov D0, D0'

   * float32x2_t vget_low_f32 (float32x4_t)
     _Form of expected instruction(s):_ 'vmov D0, D0'

   * poly16x4_t vget_low_p16 (poly16x8_t)
     _Form of expected instruction(s):_ 'vmov D0, D0'

   * poly8x8_t vget_low_p8 (poly8x16_t)
     _Form of expected instruction(s):_ 'vmov D0, D0'

   * uint64x1_t vget_low_u64 (uint64x2_t)

   * int64x1_t vget_low_s64 (int64x2_t)

6.54.3.45 Conversions
.....................

   * float32x2_t vcvt_f32_u32 (uint32x2_t)
     _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0'

   * float32x2_t vcvt_f32_s32 (int32x2_t)
     _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0'

   * uint32x2_t vcvt_u32_f32 (float32x2_t)
     _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0'

   * int32x2_t vcvt_s32_f32 (float32x2_t)
     _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0'

   * float32x4_t vcvtq_f32_u32 (uint32x4_t)
     _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0'

   * float32x4_t vcvtq_f32_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0'

   * uint32x4_t vcvtq_u32_f32 (float32x4_t)
     _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0'

   * int32x4_t vcvtq_s32_f32 (float32x4_t)
     _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0'

   * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0, #0'

   * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int)
     _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0, #0'

   * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int)
     _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0, #0'

   * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int)
     _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0, #0'

   * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0, #0'

   * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int)
     _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0, #0'

   * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int)
     _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0, #0'

   * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int)
     _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0, #0'

6.54.3.46 Move, single_opcode narrowing
.......................................

   * uint32x2_t vmovn_u64 (uint64x2_t)
     _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0'

   * uint16x4_t vmovn_u32 (uint32x4_t)
     _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0'

   * uint8x8_t vmovn_u16 (uint16x8_t)
     _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0'

   * int32x2_t vmovn_s64 (int64x2_t)
     _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0'

   * int16x4_t vmovn_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0'

   * int8x8_t vmovn_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0'

   * uint32x2_t vqmovn_u64 (uint64x2_t)
     _Form of expected instruction(s):_ 'vqmovn.u64 D0, Q0'

   * uint16x4_t vqmovn_u32 (uint32x4_t)
     _Form of expected instruction(s):_ 'vqmovn.u32 D0, Q0'

   * uint8x8_t vqmovn_u16 (uint16x8_t)
     _Form of expected instruction(s):_ 'vqmovn.u16 D0, Q0'

   * int32x2_t vqmovn_s64 (int64x2_t)
     _Form of expected instruction(s):_ 'vqmovn.s64 D0, Q0'

   * int16x4_t vqmovn_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vqmovn.s32 D0, Q0'

   * int8x8_t vqmovn_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vqmovn.s16 D0, Q0'

   * uint32x2_t vqmovun_s64 (int64x2_t)
     _Form of expected instruction(s):_ 'vqmovun.s64 D0, Q0'

   * uint16x4_t vqmovun_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vqmovun.s32 D0, Q0'

   * uint8x8_t vqmovun_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vqmovun.s16 D0, Q0'

6.54.3.47 Move, single_opcode long
..................................

   * uint64x2_t vmovl_u32 (uint32x2_t)
     _Form of expected instruction(s):_ 'vmovl.u32 Q0, D0'

   * uint32x4_t vmovl_u16 (uint16x4_t)
     _Form of expected instruction(s):_ 'vmovl.u16 Q0, D0'

   * uint16x8_t vmovl_u8 (uint8x8_t)
     _Form of expected instruction(s):_ 'vmovl.u8 Q0, D0'

   * int64x2_t vmovl_s32 (int32x2_t)
     _Form of expected instruction(s):_ 'vmovl.s32 Q0, D0'

   * int32x4_t vmovl_s16 (int16x4_t)
     _Form of expected instruction(s):_ 'vmovl.s16 Q0, D0'

   * int16x8_t vmovl_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vmovl.s8 Q0, D0'

6.54.3.48 Table lookup
......................

   * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'

   * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'

   * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0'

   * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'

   * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'

   * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0'

   * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'

   * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'

   * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0'

   * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
     D0'

   * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
     D0'

   * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3},
     D0'

6.54.3.49 Extended table lookup
...............................

   * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'

   * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'

   * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0'

   * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'

   * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'

   * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0'

   * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'

   * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'

   * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0'

   * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
     D0'

   * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
     D0'

   * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3},
     D0'

6.54.3.50 Multiply, lane
........................

   * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int)
     _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]'

   * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'

   * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'

   * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'

   * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'

   * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int)
     _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]'

   * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'

   * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'

   * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'

   * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'

6.54.3.51 Long multiply, lane
.............................

   * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]'

   * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]'

   * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]'

   * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]'

6.54.3.52 Saturating doubling long multiply, lane
.................................................

   * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]'

   * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]'

6.54.3.53 Saturating doubling multiply high, lane
.................................................

   * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]'

   * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]'

   * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]'

   * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]'

   * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]'

   * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]'

   * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]'

   * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]'

6.54.3.54 Multiply-accumulate, lane
...................................

   * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
     const int)
     _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]'

   * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const
     int)
     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'

   * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const
     int)
     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'

   * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
     int)
     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'

   * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
     int)
     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'

   * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
     const int)
     _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]'

   * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
     const int)
     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'

   * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
     const int)
     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'

   * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
     int)
     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'

   * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
     int)
     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'

   * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
     const int)
     _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]'

   * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
     const int)
     _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]'

   * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
     int)
     _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]'

   * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
     int)
     _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]'

   * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
     int)
     _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]'

   * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
     int)
     _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]'

6.54.3.55 Multiply-subtract, lane
.................................

   * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t,
     const int)
     _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]'

   * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const
     int)
     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'

   * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const
     int)
     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'

   * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const
     int)
     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'

   * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const
     int)
     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'

   * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t,
     const int)
     _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]'

   * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t,
     const int)
     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'

   * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t,
     const int)
     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'

   * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const
     int)
     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'

   * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const
     int)
     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'

   * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t,
     const int)
     _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]'

   * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t,
     const int)
     _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]'

   * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
     int)
     _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]'

   * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
     int)
     _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]'

   * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const
     int)
     _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]'

   * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const
     int)
     _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]'

6.54.3.56 Vector multiply by scalar
...................................

   * float32x2_t vmul_n_f32 (float32x2_t, float32_t)
     _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]'

   * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t)
     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'

   * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t)
     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'

   * int32x2_t vmul_n_s32 (int32x2_t, int32_t)
     _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]'

   * int16x4_t vmul_n_s16 (int16x4_t, int16_t)
     _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]'

   * float32x4_t vmulq_n_f32 (float32x4_t, float32_t)
     _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]'

   * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t)
     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'

   * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t)
     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'

   * int32x4_t vmulq_n_s32 (int32x4_t, int32_t)
     _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]'

   * int16x8_t vmulq_n_s16 (int16x8_t, int16_t)
     _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]'

6.54.3.57 Vector long multiply by scalar
........................................

   * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t)
     _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]'

   * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t)
     _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]'

   * int64x2_t vmull_n_s32 (int32x2_t, int32_t)
     _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]'

   * int32x4_t vmull_n_s16 (int16x4_t, int16_t)
     _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]'

6.54.3.58 Vector saturating doubling long multiply by scalar
............................................................

   * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t)
     _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]'

   * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t)
     _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]'

6.54.3.59 Vector saturating doubling multiply high by scalar
............................................................

   * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t)
     _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]'

   * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t)
     _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]'

   * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t)
     _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]'

   * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t)
     _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]'

   * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t)
     _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]'

   * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t)
     _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]'

   * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t)
     _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]'

   * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t)
     _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]'

6.54.3.60 Vector multiply-accumulate by scalar
..............................................

   * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t)
     _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]'

   * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'

   * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'

   * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t)
     _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]'

   * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t)
     _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]'

   * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t)
     _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]'

   * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'

   * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'

   * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t)
     _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]'

   * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t)
     _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]'

   * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
     _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]'

   * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
     _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]'

   * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
     _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]'

   * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
     _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]'

   * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t)
     _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]'

   * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t)
     _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]'

6.54.3.61 Vector multiply-subtract by scalar
............................................

   * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t)
     _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]'

   * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t)
     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'

   * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t)
     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'

   * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t)
     _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]'

   * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t)
     _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]'

   * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t)
     _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]'

   * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t)
     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'

   * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t)
     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'

   * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t)
     _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]'

   * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t)
     _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]'

   * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t)
     _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]'

   * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t)
     _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]'

   * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
     _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]'

   * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
     _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]'

   * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t)
     _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]'

   * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t)
     _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]'

6.54.3.62 Vector extract
........................

   * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'

   * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'

   * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'

   * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'

   * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'

   * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int)
     _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'

   * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int)
     _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0'

   * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int)
     _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0'

   * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int)
     _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0'

   * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int)
     _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0'

   * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int)
     _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0'

   * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'

   * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'

   * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'

   * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int)
     _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'

   * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int)
     _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'

   * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int)
     _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'

   * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0'

   * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int)
     _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0'

   * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int)
     _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0'

   * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int)
     _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0'

   * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int)
     _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0'

6.54.3.63 Reverse elements
..........................

   * uint32x2_t vrev64_u32 (uint32x2_t)
     _Form of expected instruction(s):_ 'vrev64.32 D0, D0'

   * uint16x4_t vrev64_u16 (uint16x4_t)
     _Form of expected instruction(s):_ 'vrev64.16 D0, D0'

   * uint8x8_t vrev64_u8 (uint8x8_t)
     _Form of expected instruction(s):_ 'vrev64.8 D0, D0'

   * int32x2_t vrev64_s32 (int32x2_t)
     _Form of expected instruction(s):_ 'vrev64.32 D0, D0'

   * int16x4_t vrev64_s16 (int16x4_t)
     _Form of expected instruction(s):_ 'vrev64.16 D0, D0'

   * int8x8_t vrev64_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vrev64.8 D0, D0'

   * float32x2_t vrev64_f32 (float32x2_t)
     _Form of expected instruction(s):_ 'vrev64.32 D0, D0'

   * poly16x4_t vrev64_p16 (poly16x4_t)
     _Form of expected instruction(s):_ 'vrev64.16 D0, D0'

   * poly8x8_t vrev64_p8 (poly8x8_t)
     _Form of expected instruction(s):_ 'vrev64.8 D0, D0'

   * uint32x4_t vrev64q_u32 (uint32x4_t)
     _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'

   * uint16x8_t vrev64q_u16 (uint16x8_t)
     _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'

   * uint8x16_t vrev64q_u8 (uint8x16_t)
     _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'

   * int32x4_t vrev64q_s32 (int32x4_t)
     _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'

   * int16x8_t vrev64q_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'

   * int8x16_t vrev64q_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'

   * float32x4_t vrev64q_f32 (float32x4_t)
     _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0'

   * poly16x8_t vrev64q_p16 (poly16x8_t)
     _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0'

   * poly8x16_t vrev64q_p8 (poly8x16_t)
     _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0'

   * uint16x4_t vrev32_u16 (uint16x4_t)
     _Form of expected instruction(s):_ 'vrev32.16 D0, D0'

   * int16x4_t vrev32_s16 (int16x4_t)
     _Form of expected instruction(s):_ 'vrev32.16 D0, D0'

   * uint8x8_t vrev32_u8 (uint8x8_t)
     _Form of expected instruction(s):_ 'vrev32.8 D0, D0'

   * int8x8_t vrev32_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vrev32.8 D0, D0'

   * poly16x4_t vrev32_p16 (poly16x4_t)
     _Form of expected instruction(s):_ 'vrev32.16 D0, D0'

   * poly8x8_t vrev32_p8 (poly8x8_t)
     _Form of expected instruction(s):_ 'vrev32.8 D0, D0'

   * uint16x8_t vrev32q_u16 (uint16x8_t)
     _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'

   * int16x8_t vrev32q_s16 (int16x8_t)
     _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'

   * uint8x16_t vrev32q_u8 (uint8x16_t)
     _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'

   * int8x16_t vrev32q_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'

   * poly16x8_t vrev32q_p16 (poly16x8_t)
     _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0'

   * poly8x16_t vrev32q_p8 (poly8x16_t)
     _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0'

   * uint8x8_t vrev16_u8 (uint8x8_t)
     _Form of expected instruction(s):_ 'vrev16.8 D0, D0'

   * int8x8_t vrev16_s8 (int8x8_t)
     _Form of expected instruction(s):_ 'vrev16.8 D0, D0'

   * poly8x8_t vrev16_p8 (poly8x8_t)
     _Form of expected instruction(s):_ 'vrev16.8 D0, D0'

   * uint8x16_t vrev16q_u8 (uint8x16_t)
     _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'

   * int8x16_t vrev16q_s8 (int8x16_t)
     _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'

   * poly8x16_t vrev16q_p8 (poly8x16_t)
     _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0'

6.54.3.64 Bit selection
.......................

   * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
     D0, D0' _or_ 'vbif D0, D0, D0'

   * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
     D0, D0' _or_ 'vbif D0, D0, D0'

   * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
     D0, D0' _or_ 'vbif D0, D0, D0'

   * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
     D0, D0' _or_ 'vbif D0, D0, D0'

   * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
     D0, D0' _or_ 'vbif D0, D0, D0'

   * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
     D0, D0' _or_ 'vbif D0, D0, D0'

   * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t)
     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
     D0, D0' _or_ 'vbif D0, D0, D0'

   * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t)
     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
     D0, D0' _or_ 'vbif D0, D0, D0'

   * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
     D0, D0' _or_ 'vbif D0, D0, D0'

   * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t)
     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
     D0, D0' _or_ 'vbif D0, D0, D0'

   * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t)
     _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0,
     D0, D0' _or_ 'vbif D0, D0, D0'

   * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'

   * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'

   * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'

   * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'

   * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'

   * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'

   * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'

   * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'

   * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'

   * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t)
     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'

   * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t)
     _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0,
     Q0, Q0' _or_ 'vbif Q0, Q0, Q0'

6.54.3.65 Transpose elements
............................

   * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vtrn.32 D0, D1'

   * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vtrn.16 D0, D1'

   * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vtrn.8 D0, D1'

   * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vtrn.32 D0, D1'

   * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vtrn.16 D0, D1'

   * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vtrn.8 D0, D1'

   * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vtrn.32 D0, D1'

   * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t)
     _Form of expected instruction(s):_ 'vtrn.16 D0, D1'

   * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t)
     _Form of expected instruction(s):_ 'vtrn.8 D0, D1'

   * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'

   * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'

   * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'

   * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'

   * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'

   * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'

   * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1'

   * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t)
     _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1'

   * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t)
     _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1'

6.54.3.66 Zip elements
......................

   * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vzip.32 D0, D1'

   * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vzip.16 D0, D1'

   * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vzip.8 D0, D1'

   * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vzip.32 D0, D1'

   * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vzip.16 D0, D1'

   * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vzip.8 D0, D1'

   * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vzip.32 D0, D1'

   * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t)
     _Form of expected instruction(s):_ 'vzip.16 D0, D1'

   * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t)
     _Form of expected instruction(s):_ 'vzip.8 D0, D1'

   * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'

   * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'

   * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'

   * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'

   * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'

   * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'

   * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vzip.32 Q0, Q1'

   * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t)
     _Form of expected instruction(s):_ 'vzip.16 Q0, Q1'

   * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t)
     _Form of expected instruction(s):_ 'vzip.8 Q0, Q1'

6.54.3.67 Unzip elements
........................

   * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'

   * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vuzp.16 D0, D1'

   * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vuzp.8 D0, D1'

   * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'

   * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vuzp.16 D0, D1'

   * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vuzp.8 D0, D1'

   * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t)
     _Form of expected instruction(s):_ 'vuzp.32 D0, D1'

   * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t)
     _Form of expected instruction(s):_ 'vuzp.16 D0, D1'

   * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t)
     _Form of expected instruction(s):_ 'vuzp.8 D0, D1'

   * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'

   * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'

   * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'

   * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'

   * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'

   * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'

   * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t)
     _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1'

   * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t)
     _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1'

   * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t)
     _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1'

6.54.3.68 Element/structure loads, VLD1 variants
................................................

   * uint32x2_t vld1_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'

   * uint16x4_t vld1_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'

   * uint8x8_t vld1_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'

   * int32x2_t vld1_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'

   * int16x4_t vld1_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'

   * int8x8_t vld1_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'

   * uint64x1_t vld1_u64 (const uint64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'

   * int64x1_t vld1_s64 (const int64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'

   * float32x2_t vld1_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]'

   * poly16x4_t vld1_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]'

   * poly8x8_t vld1_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]'

   * uint32x4_t vld1q_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'

   * uint16x8_t vld1q_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'

   * uint8x16_t vld1q_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'

   * int32x4_t vld1q_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'

   * int16x8_t vld1q_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'

   * int8x16_t vld1q_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'

   * uint64x2_t vld1q_u64 (const uint64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'

   * int64x2_t vld1q_s64 (const int64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'

   * float32x4_t vld1q_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]'

   * poly16x8_t vld1q_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]'

   * poly8x16_t vld1q_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]'

   * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'

   * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'

   * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'

   * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'

   * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'

   * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int)
     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'

   * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const
     int)
     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'

   * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int)
     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'

   * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int)
     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'

   * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int)
     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'

   * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int)
     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'

   * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int)

     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'

   * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int)

     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'

   * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'

   * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int)
     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'

   * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int)
     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'

   * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int)
     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'

   * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const
     int)
     _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]'

   * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int)

     _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]'

   * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int)
     _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]'

   * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int)

     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'

   * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int)
     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'

   * uint32x2_t vld1_dup_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'

   * uint16x4_t vld1_dup_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'

   * uint8x8_t vld1_dup_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'

   * int32x2_t vld1_dup_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'

   * int16x4_t vld1_dup_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'

   * int8x8_t vld1_dup_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'

   * float32x2_t vld1_dup_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]'

   * poly16x4_t vld1_dup_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]'

   * poly8x8_t vld1_dup_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]'

   * uint64x1_t vld1_dup_u64 (const uint64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'

   * int64x1_t vld1_dup_s64 (const int64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]'

   * uint32x4_t vld1q_dup_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'

   * uint16x8_t vld1q_dup_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'

   * uint8x16_t vld1q_dup_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'

   * int32x4_t vld1q_dup_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'

   * int16x8_t vld1q_dup_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'

   * int8x16_t vld1q_dup_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'

   * float32x4_t vld1q_dup_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]'

   * poly16x8_t vld1q_dup_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]'

   * poly8x16_t vld1q_dup_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]'

   * uint64x2_t vld1q_dup_u64 (const uint64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'

   * int64x2_t vld1q_dup_s64 (const int64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'

6.54.3.69 Element/structure stores, VST1 variants
.................................................

   * void vst1_u32 (uint32_t *, uint32x2_t)
     _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'

   * void vst1_u16 (uint16_t *, uint16x4_t)
     _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'

   * void vst1_u8 (uint8_t *, uint8x8_t)
     _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'

   * void vst1_s32 (int32_t *, int32x2_t)
     _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'

   * void vst1_s16 (int16_t *, int16x4_t)
     _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'

   * void vst1_s8 (int8_t *, int8x8_t)
     _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'

   * void vst1_u64 (uint64_t *, uint64x1_t)
     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'

   * void vst1_s64 (int64_t *, int64x1_t)
     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'

   * void vst1_f32 (float32_t *, float32x2_t)
     _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]'

   * void vst1_p16 (poly16_t *, poly16x4_t)
     _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]'

   * void vst1_p8 (poly8_t *, poly8x8_t)
     _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]'

   * void vst1q_u32 (uint32_t *, uint32x4_t)
     _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'

   * void vst1q_u16 (uint16_t *, uint16x8_t)
     _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'

   * void vst1q_u8 (uint8_t *, uint8x16_t)
     _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'

   * void vst1q_s32 (int32_t *, int32x4_t)
     _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'

   * void vst1q_s16 (int16_t *, int16x8_t)
     _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'

   * void vst1q_s8 (int8_t *, int8x16_t)
     _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'

   * void vst1q_u64 (uint64_t *, uint64x2_t)
     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'

   * void vst1q_s64 (int64_t *, int64x2_t)
     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'

   * void vst1q_f32 (float32_t *, float32x4_t)
     _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]'

   * void vst1q_p16 (poly16_t *, poly16x8_t)
     _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]'

   * void vst1q_p8 (poly8_t *, poly8x16_t)
     _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]'

   * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int)
     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'

   * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int)
     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'

   * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int)
     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'

   * void vst1_lane_s32 (int32_t *, int32x2_t, const int)
     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'

   * void vst1_lane_s16 (int16_t *, int16x4_t, const int)
     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'

   * void vst1_lane_s8 (int8_t *, int8x8_t, const int)
     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'

   * void vst1_lane_f32 (float32_t *, float32x2_t, const int)
     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'

   * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int)
     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'

   * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int)
     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'

   * void vst1_lane_s64 (int64_t *, int64x1_t, const int)
     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'

   * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int)
     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'

   * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int)
     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'

   * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int)
     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'

   * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int)
     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'

   * void vst1q_lane_s32 (int32_t *, int32x4_t, const int)
     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'

   * void vst1q_lane_s16 (int16_t *, int16x8_t, const int)
     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'

   * void vst1q_lane_s8 (int8_t *, int8x16_t, const int)
     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'

   * void vst1q_lane_f32 (float32_t *, float32x4_t, const int)
     _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]'

   * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int)
     _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]'

   * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int)
     _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]'

   * void vst1q_lane_s64 (int64_t *, int64x2_t, const int)
     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'

   * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int)
     _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]'

6.54.3.70 Element/structure loads, VLD2 variants
................................................

   * uint32x2x2_t vld2_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'

   * uint16x4x2_t vld2_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'

   * uint8x8x2_t vld2_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'

   * int32x2x2_t vld2_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'

   * int16x4x2_t vld2_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'

   * int8x8x2_t vld2_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'

   * float32x2x2_t vld2_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'

   * poly16x4x2_t vld2_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'

   * poly8x8x2_t vld2_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'

   * uint64x1x2_t vld2_u64 (const uint64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'

   * int64x1x2_t vld2_s64 (const int64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'

   * uint32x4x2_t vld2q_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'

   * uint16x8x2_t vld2q_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'

   * uint8x16x2_t vld2q_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'

   * int32x4x2_t vld2q_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'

   * int16x8x2_t vld2q_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'

   * int8x16x2_t vld2q_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'

   * float32x4x2_t vld2q_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]'

   * poly16x8x2_t vld2q_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]'

   * poly8x16x2_t vld2q_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]'

   * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const
     int)
     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'

   * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const
     int)
     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'

   * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int)
     _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'

   * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int)

     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'

   * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int)

     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'

   * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int)
     _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'

   * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t,
     const int)
     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'

   * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const
     int)
     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'

   * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int)
     _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]'

   * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const
     int)
     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'

   * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const
     int)
     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'

   * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const
     int)
     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'

   * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const
     int)
     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'

   * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t,
     const int)
     _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]'

   * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const
     int)
     _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]'

   * uint32x2x2_t vld2_dup_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'

   * uint16x4x2_t vld2_dup_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'

   * uint8x8x2_t vld2_dup_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'

   * int32x2x2_t vld2_dup_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'

   * int16x4x2_t vld2_dup_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'

   * int8x8x2_t vld2_dup_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'

   * float32x2x2_t vld2_dup_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]'

   * poly16x4x2_t vld2_dup_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]'

   * poly8x8x2_t vld2_dup_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]'

   * uint64x1x2_t vld2_dup_u64 (const uint64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'

   * int64x1x2_t vld2_dup_s64 (const int64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]'

6.54.3.71 Element/structure stores, VST2 variants
.................................................

   * void vst2_u32 (uint32_t *, uint32x2x2_t)
     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'

   * void vst2_u16 (uint16_t *, uint16x4x2_t)
     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'

   * void vst2_u8 (uint8_t *, uint8x8x2_t)
     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'

   * void vst2_s32 (int32_t *, int32x2x2_t)
     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'

   * void vst2_s16 (int16_t *, int16x4x2_t)
     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'

   * void vst2_s8 (int8_t *, int8x8x2_t)
     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'

   * void vst2_f32 (float32_t *, float32x2x2_t)
     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'

   * void vst2_p16 (poly16_t *, poly16x4x2_t)
     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'

   * void vst2_p8 (poly8_t *, poly8x8x2_t)
     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'

   * void vst2_u64 (uint64_t *, uint64x1x2_t)
     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'

   * void vst2_s64 (int64_t *, int64x1x2_t)
     _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]'

   * void vst2q_u32 (uint32_t *, uint32x4x2_t)
     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'

   * void vst2q_u16 (uint16_t *, uint16x8x2_t)
     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'

   * void vst2q_u8 (uint8_t *, uint8x16x2_t)
     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'

   * void vst2q_s32 (int32_t *, int32x4x2_t)
     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'

   * void vst2q_s16 (int16_t *, int16x8x2_t)
     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'

   * void vst2q_s8 (int8_t *, int8x16x2_t)
     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'

   * void vst2q_f32 (float32_t *, float32x4x2_t)
     _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]'

   * void vst2q_p16 (poly16_t *, poly16x8x2_t)
     _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]'

   * void vst2q_p8 (poly8_t *, poly8x16x2_t)
     _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]'

   * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'

   * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'

   * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'

   * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'

   * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'

   * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'

   * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'

   * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'

   * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]'

   * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'

   * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'

   * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'

   * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'

   * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]'

   * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int)
     _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]'

6.54.3.72 Element/structure loads, VLD3 variants
................................................

   * uint32x2x3_t vld3_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'

   * uint16x4x3_t vld3_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'

   * uint8x8x3_t vld3_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'

   * int32x2x3_t vld3_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'

   * int16x4x3_t vld3_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'

   * int8x8x3_t vld3_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'

   * float32x2x3_t vld3_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'

   * poly16x4x3_t vld3_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'

   * poly8x8x3_t vld3_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'

   * uint64x1x3_t vld3_u64 (const uint64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'

   * int64x1x3_t vld3_s64 (const int64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'

   * uint32x4x3_t vld3q_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'

   * uint16x8x3_t vld3q_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'

   * uint8x16x3_t vld3q_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'

   * int32x4x3_t vld3q_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'

   * int16x8x3_t vld3q_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'

   * int8x16x3_t vld3q_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'

   * float32x4x3_t vld3q_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]'

   * poly16x8x3_t vld3q_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]'

   * poly8x16x3_t vld3q_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]'

   * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const
     int)
     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const
     int)
     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
     [R0]'

   * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int)
     _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
     [R0]'

   * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int)

     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int)

     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
     [R0]'

   * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int)
     _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
     [R0]'

   * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t,
     const int)
     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const
     int)
     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
     [R0]'

   * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int)
     _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]},
     [R0]'

   * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const
     int)
     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const
     int)
     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
     [R0]'

   * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const
     int)
     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const
     int)
     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
     [R0]'

   * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t,
     const int)
     _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const
     int)
     _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]},
     [R0]'

   * uint32x2x3_t vld3_dup_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
     [R0]'

   * uint16x4x3_t vld3_dup_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
     [R0]'

   * uint8x8x3_t vld3_dup_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
     [R0]'

   * int32x2x3_t vld3_dup_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
     [R0]'

   * int16x4x3_t vld3_dup_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
     [R0]'

   * int8x8x3_t vld3_dup_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
     [R0]'

   * float32x2x3_t vld3_dup_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]},
     [R0]'

   * poly16x4x3_t vld3_dup_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]},
     [R0]'

   * poly8x8x3_t vld3_dup_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]},
     [R0]'

   * uint64x1x3_t vld3_dup_u64 (const uint64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'

   * int64x1x3_t vld3_dup_s64 (const int64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]'

6.54.3.73 Element/structure stores, VST3 variants
.................................................

   * void vst3_u32 (uint32_t *, uint32x2x3_t)
     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'

   * void vst3_u16 (uint16_t *, uint16x4x3_t)
     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'

   * void vst3_u8 (uint8_t *, uint8x8x3_t)
     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'

   * void vst3_s32 (int32_t *, int32x2x3_t)
     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'

   * void vst3_s16 (int16_t *, int16x4x3_t)
     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'

   * void vst3_s8 (int8_t *, int8x8x3_t)
     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'

   * void vst3_f32 (float32_t *, float32x2x3_t)
     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]'

   * void vst3_p16 (poly16_t *, poly16x4x3_t)
     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]'

   * void vst3_p8 (poly8_t *, poly8x8x3_t)
     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]'

   * void vst3_u64 (uint64_t *, uint64x1x3_t)
     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'

   * void vst3_s64 (int64_t *, int64x1x3_t)
     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'

   * void vst3q_u32 (uint32_t *, uint32x4x3_t)
     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'

   * void vst3q_u16 (uint16_t *, uint16x8x3_t)
     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'

   * void vst3q_u8 (uint8_t *, uint8x16x3_t)
     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'

   * void vst3q_s32 (int32_t *, int32x4x3_t)
     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'

   * void vst3q_s16 (int16_t *, int16x8x3_t)
     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'

   * void vst3q_s8 (int8_t *, int8x16x3_t)
     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'

   * void vst3q_f32 (float32_t *, float32x4x3_t)
     _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]'

   * void vst3q_p16 (poly16_t *, poly16x8x3_t)
     _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]'

   * void vst3q_p8 (poly8_t *, poly8x16x3_t)
     _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]'

   * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]},
     [R0]'

   * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int)
     _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]},
     [R0]'

6.54.3.74 Element/structure loads, VLD4 variants
................................................

   * uint32x2x4_t vld4_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'

   * uint16x4x4_t vld4_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'

   * uint8x8x4_t vld4_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'

   * int32x2x4_t vld4_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'

   * int16x4x4_t vld4_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'

   * int8x8x4_t vld4_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'

   * float32x2x4_t vld4_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'

   * poly16x4x4_t vld4_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'

   * poly8x8x4_t vld4_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'

   * uint64x1x4_t vld4_u64 (const uint64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'

   * int64x1x4_t vld4_s64 (const int64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'

   * uint32x4x4_t vld4q_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'

   * uint16x8x4_t vld4q_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'

   * uint8x16x4_t vld4q_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'

   * int32x4x4_t vld4q_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'

   * int16x8x4_t vld4q_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'

   * int8x16x4_t vld4q_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'

   * float32x4x4_t vld4q_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]'

   * poly16x8x4_t vld4q_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]'

   * poly8x16x4_t vld4q_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]'

   * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const
     int)
     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const
     int)
     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int)
     _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int)

     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int)

     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int)
     _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t,
     const int)
     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const
     int)
     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int)
     _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const
     int)
     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const
     int)
     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const
     int)
     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const
     int)
     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t,
     const int)
     _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const
     int)
     _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * uint32x2x4_t vld4_dup_u32 (const uint32_t *)
     _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
     D3[]}, [R0]'

   * uint16x4x4_t vld4_dup_u16 (const uint16_t *)
     _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
     D3[]}, [R0]'

   * uint8x8x4_t vld4_dup_u8 (const uint8_t *)
     _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
     D3[]}, [R0]'

   * int32x2x4_t vld4_dup_s32 (const int32_t *)
     _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
     D3[]}, [R0]'

   * int16x4x4_t vld4_dup_s16 (const int16_t *)
     _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
     D3[]}, [R0]'

   * int8x8x4_t vld4_dup_s8 (const int8_t *)
     _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
     D3[]}, [R0]'

   * float32x2x4_t vld4_dup_f32 (const float32_t *)
     _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[],
     D3[]}, [R0]'

   * poly16x4x4_t vld4_dup_p16 (const poly16_t *)
     _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[],
     D3[]}, [R0]'

   * poly8x8x4_t vld4_dup_p8 (const poly8_t *)
     _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[],
     D3[]}, [R0]'

   * uint64x1x4_t vld4_dup_u64 (const uint64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'

   * int64x1x4_t vld4_dup_s64 (const int64_t *)
     _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]'

6.54.3.75 Element/structure stores, VST4 variants
.................................................

   * void vst4_u32 (uint32_t *, uint32x2x4_t)
     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'

   * void vst4_u16 (uint16_t *, uint16x4x4_t)
     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'

   * void vst4_u8 (uint8_t *, uint8x8x4_t)
     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'

   * void vst4_s32 (int32_t *, int32x2x4_t)
     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'

   * void vst4_s16 (int16_t *, int16x4x4_t)
     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'

   * void vst4_s8 (int8_t *, int8x8x4_t)
     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'

   * void vst4_f32 (float32_t *, float32x2x4_t)
     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'

   * void vst4_p16 (poly16_t *, poly16x4x4_t)
     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'

   * void vst4_p8 (poly8_t *, poly8x8x4_t)
     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'

   * void vst4_u64 (uint64_t *, uint64x1x4_t)
     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'

   * void vst4_s64 (int64_t *, int64x1x4_t)
     _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]'

   * void vst4q_u32 (uint32_t *, uint32x4x4_t)
     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'

   * void vst4q_u16 (uint16_t *, uint16x8x4_t)
     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'

   * void vst4q_u8 (uint8_t *, uint8x16x4_t)
     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'

   * void vst4q_s32 (int32_t *, int32x4x4_t)
     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'

   * void vst4q_s16 (int16_t *, int16x8x4_t)
     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'

   * void vst4q_s8 (int8_t *, int8x16x4_t)
     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'

   * void vst4q_f32 (float32_t *, float32x4x4_t)
     _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]'

   * void vst4q_p16 (poly16_t *, poly16x8x4_t)
     _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]'

   * void vst4q_p8 (poly8_t *, poly8x16x4_t)
     _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]'

   * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

   * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int)
     _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0],
     D3[0]}, [R0]'

6.54.3.76 Logical operations (AND)
..................................

   * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vand D0, D0, D0'

   * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vand D0, D0, D0'

   * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vand D0, D0, D0'

   * int32x2_t vand_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vand D0, D0, D0'

   * int16x4_t vand_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vand D0, D0, D0'

   * int8x8_t vand_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vand D0, D0, D0'

   * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t)

   * int64x1_t vand_s64 (int64x1_t, int64x1_t)

   * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'

   * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'

   * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'

   * int32x4_t vandq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'

   * int16x8_t vandq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'

   * int8x16_t vandq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'

   * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'

   * int64x2_t vandq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vand Q0, Q0, Q0'

6.54.3.77 Logical operations (OR)
.................................

   * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vorr D0, D0, D0'

   * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vorr D0, D0, D0'

   * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vorr D0, D0, D0'

   * int32x2_t vorr_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vorr D0, D0, D0'

   * int16x4_t vorr_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vorr D0, D0, D0'

   * int8x8_t vorr_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vorr D0, D0, D0'

   * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t)

   * int64x1_t vorr_s64 (int64x1_t, int64x1_t)

   * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'

   * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'

   * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'

   * int32x4_t vorrq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'

   * int16x8_t vorrq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'

   * int8x16_t vorrq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'

   * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'

   * int64x2_t vorrq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0'

6.54.3.78 Logical operations (exclusive OR)
...........................................

   * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'veor D0, D0, D0'

   * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'veor D0, D0, D0'

   * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'veor D0, D0, D0'

   * int32x2_t veor_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'veor D0, D0, D0'

   * int16x4_t veor_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'veor D0, D0, D0'

   * int8x8_t veor_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'veor D0, D0, D0'

   * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t)

   * int64x1_t veor_s64 (int64x1_t, int64x1_t)

   * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'

   * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'

   * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'

   * int32x4_t veorq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'

   * int16x8_t veorq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'

   * int8x16_t veorq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'

   * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'

   * int64x2_t veorq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'veor Q0, Q0, Q0'

6.54.3.79 Logical operations (AND-NOT)
......................................

   * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vbic D0, D0, D0'

   * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vbic D0, D0, D0'

   * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vbic D0, D0, D0'

   * int32x2_t vbic_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vbic D0, D0, D0'

   * int16x4_t vbic_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vbic D0, D0, D0'

   * int8x8_t vbic_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vbic D0, D0, D0'

   * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t)

   * int64x1_t vbic_s64 (int64x1_t, int64x1_t)

   * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'

   * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'

   * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'

   * int32x4_t vbicq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'

   * int16x8_t vbicq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'

   * int8x16_t vbicq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'

   * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'

   * int64x2_t vbicq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0'

6.54.3.80 Logical operations (OR-NOT)
.....................................

   * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t)
     _Form of expected instruction(s):_ 'vorn D0, D0, D0'

   * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t)
     _Form of expected instruction(s):_ 'vorn D0, D0, D0'

   * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t)
     _Form of expected instruction(s):_ 'vorn D0, D0, D0'

   * int32x2_t vorn_s32 (int32x2_t, int32x2_t)
     _Form of expected instruction(s):_ 'vorn D0, D0, D0'

   * int16x4_t vorn_s16 (int16x4_t, int16x4_t)
     _Form of expected instruction(s):_ 'vorn D0, D0, D0'

   * int8x8_t vorn_s8 (int8x8_t, int8x8_t)
     _Form of expected instruction(s):_ 'vorn D0, D0, D0'

   * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t)

   * int64x1_t vorn_s64 (int64x1_t, int64x1_t)

   * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t)
     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'

   * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t)
     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'

   * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t)
     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'

   * int32x4_t vornq_s32 (int32x4_t, int32x4_t)
     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'

   * int16x8_t vornq_s16 (int16x8_t, int16x8_t)
     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'

   * int8x16_t vornq_s8 (int8x16_t, int8x16_t)
     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'

   * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t)
     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'

   * int64x2_t vornq_s64 (int64x2_t, int64x2_t)
     _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0'

6.54.3.81 Reinterpret casts
...........................

   * poly8x8_t vreinterpret_p8_u32 (uint32x2_t)

   * poly8x8_t vreinterpret_p8_u16 (uint16x4_t)

   * poly8x8_t vreinterpret_p8_u8 (uint8x8_t)

   * poly8x8_t vreinterpret_p8_s32 (int32x2_t)

   * poly8x8_t vreinterpret_p8_s16 (int16x4_t)

   * poly8x8_t vreinterpret_p8_s8 (int8x8_t)

   * poly8x8_t vreinterpret_p8_u64 (uint64x1_t)

   * poly8x8_t vreinterpret_p8_s64 (int64x1_t)

   * poly8x8_t vreinterpret_p8_f32 (float32x2_t)

   * poly8x8_t vreinterpret_p8_p16 (poly16x4_t)

   * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t)

   * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t)

   * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t)

   * poly8x16_t vreinterpretq_p8_s32 (int32x4_t)

   * poly8x16_t vreinterpretq_p8_s16 (int16x8_t)

   * poly8x16_t vreinterpretq_p8_s8 (int8x16_t)

   * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t)

   * poly8x16_t vreinterpretq_p8_s64 (int64x2_t)

   * poly8x16_t vreinterpretq_p8_f32 (float32x4_t)

   * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t)

   * poly16x4_t vreinterpret_p16_u32 (uint32x2_t)

   * poly16x4_t vreinterpret_p16_u16 (uint16x4_t)

   * poly16x4_t vreinterpret_p16_u8 (uint8x8_t)

   * poly16x4_t vreinterpret_p16_s32 (int32x2_t)

   * poly16x4_t vreinterpret_p16_s16 (int16x4_t)

   * poly16x4_t vreinterpret_p16_s8 (int8x8_t)

   * poly16x4_t vreinterpret_p16_u64 (uint64x1_t)

   * poly16x4_t vreinterpret_p16_s64 (int64x1_t)

   * poly16x4_t vreinterpret_p16_f32 (float32x2_t)

   * poly16x4_t vreinterpret_p16_p8 (poly8x8_t)

   * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t)

   * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t)

   * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t)

   * poly16x8_t vreinterpretq_p16_s32 (int32x4_t)

   * poly16x8_t vreinterpretq_p16_s16 (int16x8_t)

   * poly16x8_t vreinterpretq_p16_s8 (int8x16_t)

   * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t)

   * poly16x8_t vreinterpretq_p16_s64 (int64x2_t)

   * poly16x8_t vreinterpretq_p16_f32 (float32x4_t)

   * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t)

   * float32x2_t vreinterpret_f32_u32 (uint32x2_t)

   * float32x2_t vreinterpret_f32_u16 (uint16x4_t)

   * float32x2_t vreinterpret_f32_u8 (uint8x8_t)

   * float32x2_t vreinterpret_f32_s32 (int32x2_t)

   * float32x2_t vreinterpret_f32_s16 (int16x4_t)

   * float32x2_t vreinterpret_f32_s8 (int8x8_t)

   * float32x2_t vreinterpret_f32_u64 (uint64x1_t)

   * float32x2_t vreinterpret_f32_s64 (int64x1_t)

   * float32x2_t vreinterpret_f32_p16 (poly16x4_t)

   * float32x2_t vreinterpret_f32_p8 (poly8x8_t)

   * float32x4_t vreinterpretq_f32_u32 (uint32x4_t)

   * float32x4_t vreinterpretq_f32_u16 (uint16x8_t)

   * float32x4_t vreinterpretq_f32_u8 (uint8x16_t)

   * float32x4_t vreinterpretq_f32_s32 (int32x4_t)

   * float32x4_t vreinterpretq_f32_s16 (int16x8_t)

   * float32x4_t vreinterpretq_f32_s8 (int8x16_t)

   * float32x4_t vreinterpretq_f32_u64 (uint64x2_t)

   * float32x4_t vreinterpretq_f32_s64 (int64x2_t)

   * float32x4_t vreinterpretq_f32_p16 (poly16x8_t)

   * float32x4_t vreinterpretq_f32_p8 (poly8x16_t)

   * int64x1_t vreinterpret_s64_u32 (uint32x2_t)

   * int64x1_t vreinterpret_s64_u16 (uint16x4_t)

   * int64x1_t vreinterpret_s64_u8 (uint8x8_t)

   * int64x1_t vreinterpret_s64_s32 (int32x2_t)

   * int64x1_t vreinterpret_s64_s16 (int16x4_t)

   * int64x1_t vreinterpret_s64_s8 (int8x8_t)

   * int64x1_t vreinterpret_s64_u64 (uint64x1_t)

   * int64x1_t vreinterpret_s64_f32 (float32x2_t)

   * int64x1_t vreinterpret_s64_p16 (poly16x4_t)

   * int64x1_t vreinterpret_s64_p8 (poly8x8_t)

   * int64x2_t vreinterpretq_s64_u32 (uint32x4_t)

   * int64x2_t vreinterpretq_s64_u16 (uint16x8_t)

   * int64x2_t vreinterpretq_s64_u8 (uint8x16_t)

   * int64x2_t vreinterpretq_s64_s32 (int32x4_t)

   * int64x2_t vreinterpretq_s64_s16 (int16x8_t)

   * int64x2_t vreinterpretq_s64_s8 (int8x16_t)

   * int64x2_t vreinterpretq_s64_u64 (uint64x2_t)

   * int64x2_t vreinterpretq_s64_f32 (float32x4_t)

   * int64x2_t vreinterpretq_s64_p16 (poly16x8_t)

   * int64x2_t vreinterpretq_s64_p8 (poly8x16_t)

   * uint64x1_t vreinterpret_u64_u32 (uint32x2_t)

   * uint64x1_t vreinterpret_u64_u16 (uint16x4_t)

   * uint64x1_t vreinterpret_u64_u8 (uint8x8_t)

   * uint64x1_t vreinterpret_u64_s32 (int32x2_t)

   * uint64x1_t vreinterpret_u64_s16 (int16x4_t)

   * uint64x1_t vreinterpret_u64_s8 (int8x8_t)

   * uint64x1_t vreinterpret_u64_s64 (int64x1_t)

   * uint64x1_t vreinterpret_u64_f32 (float32x2_t)

   * uint64x1_t vreinterpret_u64_p16 (poly16x4_t)

   * uint64x1_t vreinterpret_u64_p8 (poly8x8_t)

   * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t)

   * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t)

   * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t)

   * uint64x2_t vreinterpretq_u64_s32 (int32x4_t)

   * uint64x2_t vreinterpretq_u64_s16 (int16x8_t)

   * uint64x2_t vreinterpretq_u64_s8 (int8x16_t)

   * uint64x2_t vreinterpretq_u64_s64 (int64x2_t)

   * uint64x2_t vreinterpretq_u64_f32 (float32x4_t)

   * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t)

   * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t)

   * int8x8_t vreinterpret_s8_u32 (uint32x2_t)

   * int8x8_t vreinterpret_s8_u16 (uint16x4_t)

   * int8x8_t vreinterpret_s8_u8 (uint8x8_t)

   * int8x8_t vreinterpret_s8_s32 (int32x2_t)

   * int8x8_t vreinterpret_s8_s16 (int16x4_t)

   * int8x8_t vreinterpret_s8_u64 (uint64x1_t)

   * int8x8_t vreinterpret_s8_s64 (int64x1_t)

   * int8x8_t vreinterpret_s8_f32 (float32x2_t)

   * int8x8_t vreinterpret_s8_p16 (poly16x4_t)

   * int8x8_t vreinterpret_s8_p8 (poly8x8_t)

   * int8x16_t vreinterpretq_s8_u32 (uint32x4_t)

   * int8x16_t vreinterpretq_s8_u16 (uint16x8_t)

   * int8x16_t vreinterpretq_s8_u8 (uint8x16_t)

   * int8x16_t vreinterpretq_s8_s32 (int32x4_t)

   * int8x16_t vreinterpretq_s8_s16 (int16x8_t)

   * int8x16_t vreinterpretq_s8_u64 (uint64x2_t)

   * int8x16_t vreinterpretq_s8_s64 (int64x2_t)

   * int8x16_t vreinterpretq_s8_f32 (float32x4_t)

   * int8x16_t vreinterpretq_s8_p16 (poly16x8_t)

   * int8x16_t vreinterpretq_s8_p8 (poly8x16_t)

   * int16x4_t vreinterpret_s16_u32 (uint32x2_t)

   * int16x4_t vreinterpret_s16_u16 (uint16x4_t)

   * int16x4_t vreinterpret_s16_u8 (uint8x8_t)

   * int16x4_t vreinterpret_s16_s32 (int32x2_t)

   * int16x4_t vreinterpret_s16_s8 (int8x8_t)

   * int16x4_t vreinterpret_s16_u64 (uint64x1_t)

   * int16x4_t vreinterpret_s16_s64 (int64x1_t)

   * int16x4_t vreinterpret_s16_f32 (float32x2_t)

   * int16x4_t vreinterpret_s16_p16 (poly16x4_t)

   * int16x4_t vreinterpret_s16_p8 (poly8x8_t)

   * int16x8_t vreinterpretq_s16_u32 (uint32x4_t)

   * int16x8_t vreinterpretq_s16_u16 (uint16x8_t)

   * int16x8_t vreinterpretq_s16_u8 (uint8x16_t)

   * int16x8_t vreinterpretq_s16_s32 (int32x4_t)

   * int16x8_t vreinterpretq_s16_s8 (int8x16_t)

   * int16x8_t vreinterpretq_s16_u64 (uint64x2_t)

   * int16x8_t vreinterpretq_s16_s64 (int64x2_t)

   * int16x8_t vreinterpretq_s16_f32 (float32x4_t)

   * int16x8_t vreinterpretq_s16_p16 (poly16x8_t)

   * int16x8_t vreinterpretq_s16_p8 (poly8x16_t)

   * int32x2_t vreinterpret_s32_u32 (uint32x2_t)

   * int32x2_t vreinterpret_s32_u16 (uint16x4_t)

   * int32x2_t vreinterpret_s32_u8 (uint8x8_t)

   * int32x2_t vreinterpret_s32_s16 (int16x4_t)

   * int32x2_t vreinterpret_s32_s8 (int8x8_t)

   * int32x2_t vreinterpret_s32_u64 (uint64x1_t)

   * int32x2_t vreinterpret_s32_s64 (int64x1_t)

   * int32x2_t vreinterpret_s32_f32 (float32x2_t)

   * int32x2_t vreinterpret_s32_p16 (poly16x4_t)

   * int32x2_t vreinterpret_s32_p8 (poly8x8_t)

   * int32x4_t vreinterpretq_s32_u32 (uint32x4_t)

   * int32x4_t vreinterpretq_s32_u16 (uint16x8_t)

   * int32x4_t vreinterpretq_s32_u8 (uint8x16_t)

   * int32x4_t vreinterpretq_s32_s16 (int16x8_t)

   * int32x4_t vreinterpretq_s32_s8 (int8x16_t)

   * int32x4_t vreinterpretq_s32_u64 (uint64x2_t)

   * int32x4_t vreinterpretq_s32_s64 (int64x2_t)

   * int32x4_t vreinterpretq_s32_f32 (float32x4_t)

   * int32x4_t vreinterpretq_s32_p16 (poly16x8_t)

   * int32x4_t vreinterpretq_s32_p8 (poly8x16_t)

   * uint8x8_t vreinterpret_u8_u32 (uint32x2_t)

   * uint8x8_t vreinterpret_u8_u16 (uint16x4_t)

   * uint8x8_t vreinterpret_u8_s32 (int32x2_t)

   * uint8x8_t vreinterpret_u8_s16 (int16x4_t)

   * uint8x8_t vreinterpret_u8_s8 (int8x8_t)

   * uint8x8_t vreinterpret_u8_u64 (uint64x1_t)

   * uint8x8_t vreinterpret_u8_s64 (int64x1_t)

   * uint8x8_t vreinterpret_u8_f32 (float32x2_t)

   * uint8x8_t vreinterpret_u8_p16 (poly16x4_t)

   * uint8x8_t vreinterpret_u8_p8 (poly8x8_t)

   * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t)

   * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t)

   * uint8x16_t vreinterpretq_u8_s32 (int32x4_t)

   * uint8x16_t vreinterpretq_u8_s16 (int16x8_t)

   * uint8x16_t vreinterpretq_u8_s8 (int8x16_t)

   * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t)

   * uint8x16_t vreinterpretq_u8_s64 (int64x2_t)

   * uint8x16_t vreinterpretq_u8_f32 (float32x4_t)

   * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t)

   * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t)

   * uint16x4_t vreinterpret_u16_u32 (uint32x2_t)

   * uint16x4_t vreinterpret_u16_u8 (uint8x8_t)

   * uint16x4_t vreinterpret_u16_s32 (int32x2_t)

   * uint16x4_t vreinterpret_u16_s16 (int16x4_t)

   * uint16x4_t vreinterpret_u16_s8 (int8x8_t)

   * uint16x4_t vreinterpret_u16_u64 (uint64x1_t)

   * uint16x4_t vreinterpret_u16_s64 (int64x1_t)

   * uint16x4_t vreinterpret_u16_f32 (float32x2_t)

   * uint16x4_t vreinterpret_u16_p16 (poly16x4_t)

   * uint16x4_t vreinterpret_u16_p8 (poly8x8_t)

   * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t)

   * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t)

   * uint16x8_t vreinterpretq_u16_s32 (int32x4_t)

   * uint16x8_t vreinterpretq_u16_s16 (int16x8_t)

   * uint16x8_t vreinterpretq_u16_s8 (int8x16_t)

   * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t)

   * uint16x8_t vreinterpretq_u16_s64 (int64x2_t)

   * uint16x8_t vreinterpretq_u16_f32 (float32x4_t)

   * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t)

   * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t)

   * uint32x2_t vreinterpret_u32_u16 (uint16x4_t)

   * uint32x2_t vreinterpret_u32_u8 (uint8x8_t)

   * uint32x2_t vreinterpret_u32_s32 (int32x2_t)

   * uint32x2_t vreinterpret_u32_s16 (int16x4_t)

   * uint32x2_t vreinterpret_u32_s8 (int8x8_t)

   * uint32x2_t vreinterpret_u32_u64 (uint64x1_t)

   * uint32x2_t vreinterpret_u32_s64 (int64x1_t)

   * uint32x2_t vreinterpret_u32_f32 (float32x2_t)

   * uint32x2_t vreinterpret_u32_p16 (poly16x4_t)

   * uint32x2_t vreinterpret_u32_p8 (poly8x8_t)

   * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t)

   * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t)

   * uint32x4_t vreinterpretq_u32_s32 (int32x4_t)

   * uint32x4_t vreinterpretq_u32_s16 (int16x8_t)

   * uint32x4_t vreinterpretq_u32_s8 (int8x16_t)

   * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t)

   * uint32x4_t vreinterpretq_u32_s64 (int64x2_t)

   * uint32x4_t vreinterpretq_u32_f32 (float32x4_t)

   * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t)

   * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t)


File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: ARM NEON Intrinsics,  Up: Target Builtins

6.54.4 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: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins

6.54.5 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.54.5.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 will
select 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.54.5.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.54.5.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.54.5.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.54.5.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 will be issued in slot I1.


File: gcc.info,  Node: X86 Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: FR-V Built-in Functions,  Up: Target Builtins

6.54.6 X86 Built-in Functions
-----------------------------

These built-in functions are available for the i386 and x86-64 family of
computers, depending on the command-line switches used.

 Note that, 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
which perform runtime 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 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 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_pextrw (v4hi, int)
     v4hi __builtin_ia32_pinsrw (v4hi, int, int)
     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)
     v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
     v4si __builtin_ia32_cmpltps (v4sf, v4sf)
     v4si __builtin_ia32_cmpleps (v4sf, v4sf)
     v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
     v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
     v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
     v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
     v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
     v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
     v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
     v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
     v4si __builtin_ia32_cmpordps (v4sf, v4sf)
     v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
     v4si __builtin_ia32_cmpltss (v4sf, v4sf)
     v4si __builtin_ia32_cmpless (v4sf, v4sf)
     v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
     v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
     v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
     v4si __builtin_ia32_cmpnless (v4sf, v4sf)
     v4si __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_loadaps (float *)'
     Generates the 'movaps' machine instruction as a load from memory.
'void __builtin_ia32_storeaps (float *, v4sf)'
     Generates the 'movaps' machine instruction as a store to memory.
'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_loadsss (float *)'
     Generates the 'movss' machine instruction as a load from memory.
'void __builtin_ia32_storess (float *, v4sf)'
     Generates the 'movss' machine instruction as a store to 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_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)
     v2df __builtin_ia32_movddup (v2df)
     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 '-msse3' is used.

'v2df __builtin_ia32_loadddup (double const *)'
     Generates the 'movddup' machine instruction as a load from memory.

 The following built-in functions are available when '-mssse3' is used.
All of them generate the machine instruction that is part of the name
with MMX registers.

     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
with SSE registers.

     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 '-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, v2df)
     v4sf __builtin_ia32_vfrczss (v4sf, 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
with MMX registers.

     v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
     v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
     v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
     v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
     v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
     v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
     v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
     v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
     v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_fmaddsubpd  (v2df, v2df, v2df)
     v4sf __builtin_ia32_fmaddsubps  (v4sf, v4sf, v4sf)
     v2df __builtin_ia32_fmsubaddpd  (v2df, v2df, v2df)
     v4sf __builtin_ia32_fmsubaddps  (v4sf, v4sf, v4sf)
     v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf)
     v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf)
     v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf)
     v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf)
     v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf)
     v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df)
     v8sf __builtin_ia32_fmsubaddps256 (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);
     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 '-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_pfrsqrtit1 (v2sf, 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)


File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 Built-in Functions,  Up: Target Builtins

6.54.7 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 will not delete these
instructions and it will 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 will
set 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 will be 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)
     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.54.8 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 will set 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: picoChip Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins

6.54.9 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.54.9.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.54.9.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 will be 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.54.9.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: picoChip Built-in Functions,  Next: Other MIPS Built-in Functions,  Prev: MIPS Loongson Built-in Functions,  Up: Target Builtins

6.54.10 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
     which 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 will stop execution.  This built-in is useful
     for implementing assertions.


File: gcc.info,  Node: Other MIPS Built-in Functions,  Next: PowerPC AltiVec/VSX Built-in Functions,  Prev: picoChip Built-in Functions,  Up: Target Builtins

6.54.11 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.


File: gcc.info,  Node: PowerPC AltiVec/VSX Built-in Functions,  Next: RX Built-in Functions,  Prev: Other MIPS Built-in Functions,  Up: Target Builtins

6.54.12 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_ctf (vector unsigned int, const int);
     vector float vec_ctf (vector signed int, 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 unsigned int vec_ctu (vector float, 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 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 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 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 float vec_div (vector float, vector float);
     vector double vec_div (vector double, vector double);
     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 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 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 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 double vec_perm (vector double,
                             vector double,
                             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 double vec_sub (vector double, vector double);
     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_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);
     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 *);

 Note that the 'vec_ld' and 'vec_st' builtins will always generate the
Altivec 'LVX' and 'STVX' instructions even if the VSX instruction set is
available.  The 'vec_vsx_ld' and 'vec_vsx_st' builtins will always
generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X'
instructions.

 GCC provides a few other builtins on Powerpc to access certain
instructions:
     float __builtin_recipdivf (float, float);
     float __builtin_rsqrtf (float);
     double __builtin_recipdiv (double, double);
     double __builtin_rsqrt (double);
     long __builtin_bpermd (long, long);
     int __builtin_bswap16 (int);

 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.


File: gcc.info,  Node: RX Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: PowerPC AltiVec/VSX Built-in Functions,  Up: Target Builtins

6.54.13 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: SPARC VIS Built-in Functions,  Next: SPU Built-in Functions,  Prev: RX Built-in Functions,  Up: Target Builtins

6.54.14 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 v2si __attribute__ ((vector_size (8)));
     typedef short v4hi __attribute__ ((vector_size (8)));
     typedef short v2hi __attribute__ ((vector_size (4)));
     typedef char v8qi __attribute__ ((vector_size (8)));
     typedef char v4qi __attribute__ ((vector_size (4)));

     void * __builtin_vis_alignaddr (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, v4hi);
     v4hi __builtin_vis_fmul8x16al (v4qi, v4hi);
     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, v2si);
     v2hi __builtin_vis_fpackfix (v2si);
     v8qi __builtin_vis_fpmerge (v4qi, v4qi);

     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);


File: gcc.info,  Node: SPU Built-in Functions,  Prev: SPARC VIS Built-in Functions,  Up: Target Builtins

6.54.15 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: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions

6.55 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.55.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.55.2 Darwin Format Checks
---------------------------

Darwin targets support the 'CFString' (or '__CFString__') in the format
attribute context.  Declarations made with such attribution will be
parsed for correct syntax and format argument types.  However, parsing
of the format string itself is currently undefined and will not be
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.56 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::


File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas

6.56.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.56.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.56.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.  Any functions so
     named, which are not encountered in the source, cause a warning
     that the pragma was 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.56.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.56.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 will 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.56.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.56.7 Symbol-Renaming Pragmas
------------------------------

For compatibility with the Solaris and Tru64 UNIX system headers, GCC
supports two '#pragma' directives which change the name used in assembly
for a given declaration.  '#pragma extern_prefix' is only available on
platforms whose system headers need it.  To get this effect on all
platforms supported by GCC, use 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' will
     be defined if this pragma is available (currently on all
     platforms).

'extern_prefix STRING'

     This pragma causes all subsequent external function and variable
     declarations to have STRING prepended to their assembly symbols.
     This effect may be terminated with another 'extern_prefix' pragma
     whose argument is an empty string.  The preprocessor macro
     '__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is
     available (currently only on Tru64 UNIX).

 These pragmas and the asm labels extension interact in a complicated
manner.  Here are some corner cases you may want to be aware of.

  1. Both pragmas silently apply only to declarations with external
     linkage.  Asm labels do not have this restriction.

  2. In C++, both pragmas silently apply only to declarations with "C"
     linkage.  Again, asm labels do not have this restriction.

  3. If any of the three ways of changing the assembly name of a
     declaration is 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.

  5. If '#pragma extern_prefix' is in effect, and a declaration occurs
     with an asm label attached, the prefix is silently ignored for that
     declaration.

  6. If '#pragma extern_prefix' and '#pragma redefine_extname' apply to
     the same declaration, whichever triggered first wins, and a warning
     issues if they contradict each other.  (We would like to have
     '#pragma redefine_extname' always win, for consistency with asm
     labels, but if '#pragma extern_prefix' triggers first we have no
     way of knowing that that happened.)


File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas

6.56.8 Structure-Packing Pragmas
--------------------------------

For compatibility with Microsoft Windows compilers, GCC supports a set
of '#pragma' directives which change the maximum alignment of members of
structures (other than zero-width bitfields), 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. i386 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.56.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.56.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 which 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.56.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::, for more information about visibility
     and the attribute syntax.

     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.56.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,  Prev: Push/Pop Macro Pragmas,  Up: Pragmas

6.56.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 will be
     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' attribute is not implemented in GCC
     versions earlier than 4.4 for the i386/x86_64 and 4.6 for the
     PowerPC backends.  At present, it is not implemented for other
     backends.

'#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
     will be 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.

     The '#pragma GCC optimize' pragma is not implemented in GCC
     versions earlier than 4.4.

'#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.

     The '#pragma GCC push_options' and '#pragma GCC pop_options'
     pragmas are not implemented in GCC versions earlier than 4.4.

'#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.

     The '#pragma GCC reset_options' pragma is not implemented in GCC
     versions earlier than 4.4.


File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions

6.57 Unnamed struct/union fields within structs/unions
======================================================

As permitted by ISO C1X 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, the user would be 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, 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.58 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 run-time 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 run-time 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.58.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.58.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 which 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.59 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.
* 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 which 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 will be referred
to.  For instance, VREF will refer 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 will have 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 which
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++ which 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 will always require 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 will still be emitted in every translation unit which
     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
     runtime.  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
will use them.  This way one copy will override all the others, but the
unused copies will still take up space in the executable.

 For targets which do not support either COMDAT or weak symbols, most
entities with vague linkage will be emitted as local symbols to avoid
duplicate definition errors from the linker.  This will not happen for
local statics in inlines, however, as having multiple copies will almost
certainly break 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 #pragma interface and implementation
========================================

'#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:_ As of GCC 2.7.2, these '#pragma's are not useful in most cases,
because of 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.
Currently (3.4) the only benefit of these '#pragma's is reduced
duplication of debugging information, and that should be addressed soon
on DWARF 2 targets with the use of COMDAT groups.

'#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 will not be generated (unless the main input source
     file itself uses '#pragma implementation').  Instead, the object
     files will 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"'.

     In versions of GNU C++ prior to 2.6.0 'allclass.h' was treated as
     an implementation file whenever you would include it from
     'allclass.cc' even if you never specified '#pragma implementation'.
     This was deemed to be more trouble than it was worth, however, and
     disabled.

     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 were
not inlined, you will get linker errors.

   ---------- Footnotes ----------

   (1) A file's "basename" was 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.

 A future version of G++ will support a hybrid model whereby the
compiler will emit any instantiations for which the template definition
is included in the compile, and store template definitions and
instantiation context information into the object file for the rest.
The link wrapper will extract that information as necessary and invoke
the compiler to produce the remaining instantiations.  The linker will
then combine duplicate instantiations.

 In the mean time, you have the following options for dealing with
template instantiations:

  1. Compile your template-using code with '-frepo'.  The compiler will
     generate files with the extension '.rpo' listing all of the
     template instantiations used in the corresponding object files
     which could be instantiated there; the link wrapper, 'collect2',
     will then update 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 will continue to place the instantiations in the same
     files.

     This is your best option for application code written for the
     Borland model, as it will just work.  Code written for the Cfront
     model will need 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.

     G++ has extended the template instantiation syntax given in the ISO
     standard to allow forward declaration of explicit instantiations
     (with 'extern'), 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 will work fine, but
     each translation unit will contain 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 will still be paying 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: Namespace Association,  Prev: Bound member functions,  Up: C++ Extensions

7.7 C++-Specific Variable, Function, and Type Attributes
========================================================

Some attributes only make sense for C++ programs.

'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 has reversed 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 will be
     dispatched using GCJ's interface table mechanism, instead of
     regular virtual table dispatch.

 See also *note Namespace Association::.


File: gcc.info,  Node: Namespace Association,  Next: Type Traits,  Prev: C++ Attributes,  Up: C++ Extensions

7.8 Namespace Association
=========================

*Caution:* The semantics of this extension are not fully defined.  Users
should refrain from using this extension as its semantics may change
subtly over time.  It is possible that 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.9 Type Traits
===============

The C++ front-end implements syntactic extensions that allow to
determine at compile time 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.


File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Type Traits,  Up: C++ Extensions

7.10 Java Exceptions
====================

The Java language uses a slightly different exception handling model
from C++.  Normally, GNU C++ will automatically detect 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 will guess 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.11 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.12 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 which 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 '()' will be 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.

 The traditional API is deprecated but it is still supported in this
release of the runtime; you can access it as usual by including
'objc/objc-api.h'.

 If you are using the traditional API you are urged to upgrade your
software to use the modern API because the traditional API requires
access to private runtime internals to do anything serious with it; for
this reason, there is no guarantee that future releases of the GNU
Objective-C runtime library will be able to provide a fully compatible
'objc/objc-api.h' as the private runtime internals change.  It is
expected that the next release will hide a number of runtime internals
making the traditional API nominally supported but fairly useless beyond
very simple use cases.

 Finally, you can not include both 'objc/objc-api.h' and
'objc/runtime.h' at the same time.  The traditional and modern APIs
unfortunately have some conflicting declarations (such as the one for
'Method') and can not be used at the same time.


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 what you 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
     {
       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_foward2'
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: Trouble,  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] SOURCEFILES

 '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.  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 '..' components renamed to '^'.  This is useful if
     sourcefiles are in several different directories.  It also affects
     the '-l' option.

'-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 source file name, without
     its extension.  If a file is specified here, the data files are
     named after that file, without its extension.  If this option is
     not supplied, it defaults to the current directory.

'-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.

 '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
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.

 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 and '#####' for lines which were never executed.  Some lines of
information at the start have LINE_NUMBER of zero.

 The 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.


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'.  All of these files are placed in the
same directory as the object file, and contain data stored in a
platform-independent format.

 The '.gcno' 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' 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, 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: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top

11 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.
* Cross-Compiler Problems:: Common problems of cross compiling with GCC.
* 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: Cross-Compiler Problems,  Up: Trouble

11.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: Cross-Compiler Problems,  Next: Interoperation,  Prev: Actual Bugs,  Up: Trouble

11.2 Cross-Compiler Problems
============================

You may run into problems with cross compilation on certain machines,
for several reasons.

   * At present, the program 'mips-tfile' which adds debug support to
     object files on MIPS systems does not work in a cross compile
     environment.


File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Cross-Compiler Problems,  Up: Trouble

11.3 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 some SGI systems, when you use '-lgl_s' as an option, it gets
     translated magically to '-lgl_s -lX11_s -lc_s'.  Naturally, this
     does not happen when you use GCC.  You must specify all three
     options explicitly.

   * 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

11.4 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

11.5 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

11.6 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

11.7 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

11.8 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

11.8.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

11.8.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

11.8.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

11.8.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

11.9 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

11.10 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

12 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.
* Known: Trouble.            Known problems.
* Help: Service.             Where to ask for help.


File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs

12.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

12.2 How and where to Report Bugs
=================================

Bugs should be reported to the bug database at
<http://gcc.gnu.org/bugs.html>.


File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top

13 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

14 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.

   * 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.

   * 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, 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 and MeP 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.

   * 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
     continuously 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
     since the late 1980s.

   * 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.

   * 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 Guenther 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.

   * 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.

   * 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.

   * Andreas Jaeger for testing and benchmarking of GCC and various bug
     fixes.

   * 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.

   * 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.

   * 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.

   * Philip Martin for lots of libstdc++ string and vector iterator
     fixes and improvements, and string clean up and testsuites.

   * 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 for GCC 3.x.

   * 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.

   * 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.

   * 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 as well a serving as release manager for
     GCC 2.95.3.

   * 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.

   * 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.

   * Randy Smith finished the Sun FPA support.

   * 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'.

   * 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.

   * 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.

   * 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)
* -fno-keep-inline-dllexport:            Optimize Options.   (line  303)
* -mcpu:                                 RX Options.         (line   30)
* 8bit-idiv:                             i386 and x86-64 Options.
                                                             (line  649)
* A:                                     Preprocessor Options.
                                                             (line  551)
* allowable_client:                      Darwin Options.     (line  197)
* all_load:                              Darwin Options.     (line  111)
* ansi:                                  Standards.          (line   16)
* ansi <1>:                              C Dialect Options.  (line   11)
* ansi <2>:                              Preprocessor Options.
                                                             (line  328)
* ansi <3>:                              Other Builtins.     (line   22)
* ansi <4>:                              Non-bugs.           (line  107)
* arch_errors_fatal:                     Darwin Options.     (line  115)
* aux-info:                              C Dialect Options.  (line  154)
* avx256-split-unaligned-load:           i386 and x86-64 Options.
                                                             (line  657)
* avx256-split-unaligned-store:          i386 and x86-64 Options.
                                                             (line  657)
* B:                                     Directory Options.  (line   44)
* Bdynamic:                              VxWorks Options.    (line   22)
* bind_at_load:                          Darwin Options.     (line  119)
* Bstatic:                               VxWorks Options.    (line   22)
* bundle:                                Darwin Options.     (line  124)
* bundle_loader:                         Darwin Options.     (line  128)
* c:                                     Overall Options.    (line  164)
* C:                                     Preprocessor Options.
                                                             (line  608)
* c <1>:                                 Link Options.       (line   20)
* client_name:                           Darwin Options.     (line  197)
* compatibility_version:                 Darwin Options.     (line  197)
* coverage:                              Debugging Options.  (line  363)
* current_version:                       Darwin Options.     (line  197)
* d:                                     Debugging Options.  (line  426)
* D:                                     Preprocessor Options.
                                                             (line   34)
* da:                                    Debugging Options.  (line  630)
* dA:                                    Debugging Options.  (line  633)
* dD:                                    Debugging Options.  (line  637)
* dD <1>:                                Preprocessor Options.
                                                             (line  582)
* dead_strip:                            Darwin Options.     (line  197)
* dependency-file:                       Darwin Options.     (line  197)
* dH:                                    Debugging Options.  (line  641)
* dI:                                    Preprocessor Options.
                                                             (line  591)
* dM:                                    Preprocessor Options.
                                                             (line  567)
* dN:                                    Preprocessor Options.
                                                             (line  588)
* dp:                                    Debugging Options.  (line  644)
* dP:                                    Debugging Options.  (line  649)
* dU:                                    Preprocessor Options.
                                                             (line  595)
* dumpmachine:                           Debugging Options.  (line 1114)
* dumpspecs:                             Debugging Options.  (line 1122)
* dumpversion:                           Debugging Options.  (line 1118)
* dv:                                    Debugging Options.  (line  653)
* dx:                                    Debugging Options.  (line  658)
* dylib_file:                            Darwin Options.     (line  197)
* dylinker_install_name:                 Darwin Options.     (line  197)
* dynamic:                               Darwin Options.     (line  197)
* dynamiclib:                            Darwin Options.     (line  132)
* E:                                     Overall Options.    (line  185)
* E <1>:                                 Link Options.       (line   20)
* EB:                                    ARC Options.        (line   12)
* EB <1>:                                MIPS Options.       (line    7)
* EL:                                    ARC Options.        (line    9)
* EL <1>:                                MIPS Options.       (line   10)
* exported_symbols_list:                 Darwin Options.     (line  197)
* F:                                     Darwin Options.     (line   31)
* fabi-version:                          C++ Dialect Options.
                                                             (line   19)
* falign-functions:                      Optimize Options.   (line 1392)
* falign-jumps:                          Optimize Options.   (line 1442)
* falign-labels:                         Optimize Options.   (line 1410)
* falign-loops:                          Optimize Options.   (line 1428)
* fassociative-math:                     Optimize Options.   (line 1867)
* fasynchronous-unwind-tables:           Code Gen Options.   (line   63)
* fauto-inc-dec:                         Optimize Options.   (line  508)
* fbounds-check:                         Code Gen Options.   (line   15)
* fbranch-probabilities:                 Optimize Options.   (line 1995)
* fbranch-target-load-optimize:          Optimize Options.   (line 2102)
* fbranch-target-load-optimize2:         Optimize Options.   (line 2108)
* fbtr-bb-exclusive:                     Optimize Options.   (line 2112)
* fcall-saved:                           Code Gen Options.   (line  259)
* fcall-used:                            Code Gen Options.   (line  245)
* fcaller-saves:                         Optimize Options.   (line  777)
* fcheck-data-deps:                      Optimize Options.   (line 1050)
* fcheck-new:                            C++ Dialect Options.
                                                             (line   44)
* fcombine-stack-adjustments:            Optimize Options.   (line  790)
* fcommon:                               Variable Attributes.
                                                             (line  105)
* fcompare-debug:                        Debugging Options.  (line  156)
* fcompare-debug-second:                 Debugging Options.  (line  182)
* fcompare-elim:                         Optimize Options.   (line 1710)
* fcond-mismatch:                        C Dialect Options.  (line  293)
* fconserve-space:                       C++ Dialect Options.
                                                             (line   54)
* fconserve-stack:                       Optimize Options.   (line  796)
* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
                                                             (line   30)
* fconstexpr-depth:                      C++ Dialect Options.
                                                             (line   66)
* fcprop-registers:                      Optimize Options.   (line 1722)
* fcrossjumping:                         Optimize Options.   (line  501)
* fcse-follow-jumps:                     Optimize Options.   (line  429)
* fcse-skip-blocks:                      Optimize Options.   (line  438)
* fcx-fortran-rules:                     Optimize Options.   (line 1982)
* fcx-limited-range:                     Optimize Options.   (line 1970)
* fdata-sections:                        Optimize Options.   (line 2083)
* fdbg-cnt:                              Debugging Options.  (line  415)
* fdbg-cnt-list:                         Debugging Options.  (line  412)
* fdce:                                  Optimize Options.   (line  514)
* fdebug-prefix-map:                     Debugging Options.  (line  282)
* fdelayed-branch:                       Optimize Options.   (line  626)
* fdelete-null-pointer-checks:           Optimize Options.   (line  537)
* fdevirtualize:                         Optimize Options.   (line  555)
* fdiagnostics-show-location:            Language Independent Options.
                                                             (line   21)
* fdiagnostics-show-option:              Language Independent Options.
                                                             (line   36)
* fdirectives-only:                      Preprocessor Options.
                                                             (line  461)
* fdollars-in-identifiers:               Preprocessor Options.
                                                             (line  482)
* fdollars-in-identifiers <1>:           Interoperation.     (line  146)
* fdse:                                  Optimize Options.   (line  518)
* fdump-class-hierarchy:                 Debugging Options.  (line  689)
* fdump-final-insns:                     Debugging Options.  (line  150)
* fdump-ipa:                             Debugging Options.  (line  697)
* fdump-noaddr:                          Debugging Options.  (line  662)
* fdump-rtl-alignments:                  Debugging Options.  (line  445)
* fdump-rtl-all:                         Debugging Options.  (line  630)
* fdump-rtl-asmcons:                     Debugging Options.  (line  448)
* fdump-rtl-auto_inc_dec:                Debugging Options.  (line  452)
* fdump-rtl-barriers:                    Debugging Options.  (line  456)
* fdump-rtl-bbpart:                      Debugging Options.  (line  459)
* fdump-rtl-bbro:                        Debugging Options.  (line  462)
* fdump-rtl-btl2:                        Debugging Options.  (line  466)
* fdump-rtl-btl2 <1>:                    Debugging Options.  (line  466)
* fdump-rtl-bypass:                      Debugging Options.  (line  470)
* fdump-rtl-ce1:                         Debugging Options.  (line  481)
* fdump-rtl-ce2:                         Debugging Options.  (line  481)
* fdump-rtl-ce3:                         Debugging Options.  (line  481)
* fdump-rtl-combine:                     Debugging Options.  (line  473)
* fdump-rtl-compgotos:                   Debugging Options.  (line  476)
* fdump-rtl-cprop_hardreg:               Debugging Options.  (line  485)
* fdump-rtl-csa:                         Debugging Options.  (line  488)
* fdump-rtl-cse1:                        Debugging Options.  (line  492)
* fdump-rtl-cse2:                        Debugging Options.  (line  492)
* fdump-rtl-dbr:                         Debugging Options.  (line  499)
* fdump-rtl-dce:                         Debugging Options.  (line  496)
* fdump-rtl-dce1:                        Debugging Options.  (line  503)
* fdump-rtl-dce2:                        Debugging Options.  (line  503)
* fdump-rtl-dfinish:                     Debugging Options.  (line  626)
* fdump-rtl-dfinit:                      Debugging Options.  (line  626)
* fdump-rtl-eh:                          Debugging Options.  (line  507)
* fdump-rtl-eh_ranges:                   Debugging Options.  (line  510)
* fdump-rtl-expand:                      Debugging Options.  (line  513)
* fdump-rtl-fwprop1:                     Debugging Options.  (line  517)
* fdump-rtl-fwprop2:                     Debugging Options.  (line  517)
* fdump-rtl-gcse1:                       Debugging Options.  (line  522)
* fdump-rtl-gcse2:                       Debugging Options.  (line  522)
* fdump-rtl-init-regs:                   Debugging Options.  (line  526)
* fdump-rtl-initvals:                    Debugging Options.  (line  529)
* fdump-rtl-into_cfglayout:              Debugging Options.  (line  532)
* fdump-rtl-ira:                         Debugging Options.  (line  535)
* fdump-rtl-jump:                        Debugging Options.  (line  538)
* fdump-rtl-loop2:                       Debugging Options.  (line  541)
* fdump-rtl-mach:                        Debugging Options.  (line  545)
* fdump-rtl-mode_sw:                     Debugging Options.  (line  549)
* fdump-rtl-outof_cfglayout:             Debugging Options.  (line  555)
* fdump-rtl-peephole2:                   Debugging Options.  (line  558)
* fdump-rtl-postreload:                  Debugging Options.  (line  561)
* fdump-rtl-pro_and_epilogue:            Debugging Options.  (line  564)
* fdump-rtl-regclass:                    Debugging Options.  (line  626)
* fdump-rtl-regmove:                     Debugging Options.  (line  567)
* fdump-rtl-rnreg:                       Debugging Options.  (line  552)
* fdump-rtl-sched1:                      Debugging Options.  (line  571)
* fdump-rtl-sched2:                      Debugging Options.  (line  571)
* fdump-rtl-see:                         Debugging Options.  (line  575)
* fdump-rtl-seqabstr:                    Debugging Options.  (line  578)
* fdump-rtl-shorten:                     Debugging Options.  (line  581)
* fdump-rtl-sibling:                     Debugging Options.  (line  584)
* fdump-rtl-sms:                         Debugging Options.  (line  596)
* fdump-rtl-split1:                      Debugging Options.  (line  591)
* fdump-rtl-split2:                      Debugging Options.  (line  591)
* fdump-rtl-split3:                      Debugging Options.  (line  591)
* fdump-rtl-split4:                      Debugging Options.  (line  591)
* fdump-rtl-split5:                      Debugging Options.  (line  591)
* fdump-rtl-stack:                       Debugging Options.  (line  600)
* fdump-rtl-subreg1:                     Debugging Options.  (line  606)
* fdump-rtl-subreg2:                     Debugging Options.  (line  606)
* fdump-rtl-subregs_of_mode_finish:      Debugging Options.  (line  626)
* fdump-rtl-subregs_of_mode_init:        Debugging Options.  (line  626)
* fdump-rtl-unshare:                     Debugging Options.  (line  610)
* fdump-rtl-vartrack:                    Debugging Options.  (line  613)
* fdump-rtl-vregs:                       Debugging Options.  (line  616)
* fdump-rtl-web:                         Debugging Options.  (line  619)
* fdump-statistics:                      Debugging Options.  (line  714)
* fdump-translation-unit:                Debugging Options.  (line  680)
* fdump-tree:                            Debugging Options.  (line  725)
* fdump-tree-alias:                      Debugging Options.  (line  808)
* fdump-tree-all:                        Debugging Options.  (line  897)
* fdump-tree-ccp:                        Debugging Options.  (line  812)
* fdump-tree-cfg:                        Debugging Options.  (line  788)
* fdump-tree-ch:                         Debugging Options.  (line  800)
* fdump-tree-copyprop:                   Debugging Options.  (line  828)
* fdump-tree-copyrename:                 Debugging Options.  (line  873)
* fdump-tree-dce:                        Debugging Options.  (line  836)
* fdump-tree-dom:                        Debugging Options.  (line  854)
* fdump-tree-dse:                        Debugging Options.  (line  859)
* fdump-tree-forwprop:                   Debugging Options.  (line  868)
* fdump-tree-fre:                        Debugging Options.  (line  824)
* fdump-tree-gimple:                     Debugging Options.  (line  783)
* fdump-tree-mudflap:                    Debugging Options.  (line  840)
* fdump-tree-nrv:                        Debugging Options.  (line  878)
* fdump-tree-optimized:                  Debugging Options.  (line  780)
* fdump-tree-original:                   Debugging Options.  (line  777)
* fdump-tree-phiopt:                     Debugging Options.  (line  863)
* fdump-tree-pre:                        Debugging Options.  (line  820)
* fdump-tree-sink:                       Debugging Options.  (line  850)
* fdump-tree-slp:                        Debugging Options.  (line  888)
* fdump-tree-sra:                        Debugging Options.  (line  845)
* fdump-tree-ssa:                        Debugging Options.  (line  804)
* fdump-tree-storeccp:                   Debugging Options.  (line  816)
* fdump-tree-store_copyprop:             Debugging Options.  (line  832)
* fdump-tree-vcg:                        Debugging Options.  (line  792)
* fdump-tree-vect:                       Debugging Options.  (line  883)
* fdump-tree-vrp:                        Debugging Options.  (line  893)
* fdump-unnumbered:                      Debugging Options.  (line  668)
* fdump-unnumbered-links:                Debugging Options.  (line  674)
* fdwarf2-cfi-asm:                       Debugging Options.  (line  286)
* fearly-inlining:                       Optimize Options.   (line  262)
* feliminate-dwarf2-dups:                Debugging Options.  (line  195)
* feliminate-unused-debug-symbols:       Debugging Options.  (line   52)
* feliminate-unused-debug-types:         Debugging Options.  (line 1126)
* fenable-icf-debug:                     Debugging Options.  (line  270)
* fexceptions:                           Code Gen Options.   (line   34)
* fexcess-precision:                     Optimize Options.   (line 1794)
* fexec-charset:                         Preprocessor Options.
                                                             (line  509)
* fexpensive-optimizations:              Optimize Options.   (line  562)
* fextended-identifiers:                 Preprocessor Options.
                                                             (line  485)
* ffast-math:                            Optimize Options.   (line 1817)
* ffinite-math-only:                     Optimize Options.   (line 1894)
* ffix-and-continue:                     Darwin Options.     (line  105)
* ffixed:                                Code Gen Options.   (line  233)
* ffloat-store:                          Optimize Options.   (line 1780)
* ffloat-store <1>:                      Disappointments.    (line   77)
* ffor-scope:                            C++ Dialect Options.
                                                             (line  119)
* fforward-propagate:                    Optimize Options.   (line  175)
* ffp-contract:                          Optimize Options.   (line  184)
* ffreestanding:                         Standards.          (line   88)
* ffreestanding <1>:                     C Dialect Options.  (line  226)
* ffreestanding <2>:                     Warning Options.    (line  236)
* ffreestanding <3>:                     Function Attributes.
                                                             (line  455)
* ffriend-injection:                     C++ Dialect Options.
                                                             (line   90)
* ffunction-sections:                    Optimize Options.   (line 2083)
* fgcse:                                 Optimize Options.   (line  452)
* fgcse-after-reload:                    Optimize Options.   (line  488)
* fgcse-las:                             Optimize Options.   (line  481)
* fgcse-lm:                              Optimize Options.   (line  463)
* fgcse-sm:                              Optimize Options.   (line  472)
* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
                                                             (line   39)
* fgnu89-inline:                         C Dialect Options.  (line  133)
* fgraphite-identity:                    Optimize Options.   (line 1031)
* fhosted:                               C Dialect Options.  (line  218)
* fif-conversion:                        Optimize Options.   (line  522)
* fif-conversion2:                       Optimize Options.   (line  531)
* filelist:                              Darwin Options.     (line  197)
* findirect-data:                        Darwin Options.     (line  105)
* findirect-inlining:                    Optimize Options.   (line  235)
* finhibit-size-directive:               Code Gen Options.   (line  156)
* finline-functions:                     Optimize Options.   (line  243)
* finline-functions-called-once:         Optimize Options.   (line  254)
* finline-limit:                         Optimize Options.   (line  278)
* finline-small-functions:               Optimize Options.   (line  227)
* finput-charset:                        Preprocessor Options.
                                                             (line  522)
* finstrument-functions:                 Code Gen Options.   (line  289)
* finstrument-functions <1>:             Function Attributes.
                                                             (line  897)
* finstrument-functions-exclude-file-list: Code Gen Options. (line  326)
* finstrument-functions-exclude-function-list: Code Gen Options.
                                                             (line  347)
* fipa-cp:                               Optimize Options.   (line  866)
* fipa-cp-clone:                         Optimize Options.   (line  874)
* fipa-matrix-reorg:                     Optimize Options.   (line  884)
* fipa-profile:                          Optimize Options.   (line  858)
* fipa-pta:                              Optimize Options.   (line  852)
* fipa-pure-const:                       Optimize Options.   (line  830)
* fipa-reference:                        Optimize Options.   (line  834)
* fipa-sra:                              Optimize Options.   (line  271)
* fipa-struct-reorg:                     Optimize Options.   (line  838)
* fira-loop-pressure:                    Optimize Options.   (line  601)
* fira-verbose:                          Optimize Options.   (line  621)
* fivopts:                               Optimize Options.   (line 1126)
* fkeep-inline-functions:                Optimize Options.   (line  309)
* fkeep-inline-functions <1>:            Inline.             (line   51)
* fkeep-static-consts:                   Optimize Options.   (line  316)
* flat_namespace:                        Darwin Options.     (line  197)
* flax-vector-conversions:               C Dialect Options.  (line  298)
* fleading-underscore:                   Code Gen Options.   (line  430)
* floop-block:                           Optimize Options.   (line 1002)
* floop-flatten:                         Optimize Options.   (line 1039)
* floop-interchange:                     Optimize Options.   (line  955)
* floop-parallelize-all:                 Optimize Options.   (line 1044)
* floop-strip-mine:                      Optimize Options.   (line  980)
* flto:                                  Optimize Options.   (line 1506)
* flto-partition:                        Optimize Options.   (line 1668)
* fmax-errors:                           Warning Options.    (line   18)
* fmem-report:                           Debugging Options.  (line  310)
* fmerge-all-constants:                  Optimize Options.   (line  335)
* fmerge-constants:                      Optimize Options.   (line  325)
* fmerge-debug-strings:                  Debugging Options.  (line  275)
* fmessage-length:                       Language Independent Options.
                                                             (line   15)
* fmodulo-sched:                         Optimize Options.   (line  346)
* fmodulo-sched-allow-regmoves:          Optimize Options.   (line  351)
* fmove-loop-invariants:                 Optimize Options.   (line 2073)
* fms-extensions:                        C Dialect Options.  (line  246)
* fms-extensions <1>:                    C++ Dialect Options.
                                                             (line  154)
* fms-extensions <2>:                    Unnamed Fields.     (line   36)
* fmudflap:                              Optimize Options.   (line  391)
* fmudflapir:                            Optimize Options.   (line  391)
* fmudflapth:                            Optimize Options.   (line  391)
* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
                                                             (line   43)
* fno-access-control:                    C++ Dialect Options.
                                                             (line   40)
* fno-asm:                               C Dialect Options.  (line  170)
* fno-branch-count-reg:                  Optimize Options.   (line  358)
* fno-builtin:                           C Dialect Options.  (line  184)
* fno-builtin <1>:                       Warning Options.    (line  236)
* fno-builtin <2>:                       Function Attributes.
                                                             (line  455)
* fno-builtin <3>:                       Other Builtins.     (line   14)
* fno-common:                            Code Gen Options.   (line  134)
* fno-common <1>:                        Variable Attributes.
                                                             (line  105)
* fno-compare-debug:                     Debugging Options.  (line  156)
* fno-deduce-init-list:                  C++ Dialect Options.
                                                             (line   72)
* fno-default-inline:                    C++ Dialect Options.
                                                             (line  328)
* fno-default-inline <1>:                Optimize Options.   (line  159)
* fno-default-inline <2>:                Inline.             (line   71)
* fno-defer-pop:                         Optimize Options.   (line  167)
* fno-diagnostics-show-option:           Language Independent Options.
                                                             (line   36)
* fno-dwarf2-cfi-asm:                    Debugging Options.  (line  286)
* fno-elide-constructors:                C++ Dialect Options.
                                                             (line  103)
* fno-enforce-eh-specs:                  C++ Dialect Options.
                                                             (line  109)
* fno-for-scope:                         C++ Dialect Options.
                                                             (line  119)
* fno-function-cse:                      Optimize Options.   (line  368)
* fno-gnu-keywords:                      C++ Dialect Options.
                                                             (line  131)
* fno-guess-branch-probability:          Optimize Options.   (line 1264)
* fno-ident:                             Code Gen Options.   (line  153)
* fno-implement-inlines:                 C++ Dialect Options.
                                                             (line  148)
* fno-implement-inlines <1>:             C++ Interface.      (line   75)
* fno-implicit-inline-templates:         C++ Dialect Options.
                                                             (line  142)
* fno-implicit-templates:                C++ Dialect Options.
                                                             (line  136)
* fno-implicit-templates <1>:            Template Instantiation.
                                                             (line   87)
* fno-inline:                            Optimize Options.   (line  221)
* fno-ira-share-save-slots:              Optimize Options.   (line  609)
* fno-ira-share-spill-slots:             Optimize Options.   (line  615)
* fno-jump-tables:                       Code Gen Options.   (line  225)
* fno-math-errno:                        Optimize Options.   (line 1831)
* fno-merge-debug-strings:               Debugging Options.  (line  275)
* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
                                                             (line   49)
* fno-nonansi-builtins:                  C++ Dialect Options.
                                                             (line  159)
* fno-operator-names:                    C++ Dialect Options.
                                                             (line  175)
* fno-optional-diags:                    C++ Dialect Options.
                                                             (line  179)
* fno-peephole:                          Optimize Options.   (line 1255)
* fno-peephole2:                         Optimize Options.   (line 1255)
* fno-pretty-templates:                  C++ Dialect Options.
                                                             (line  189)
* fno-rtti:                              C++ Dialect Options.
                                                             (line  207)
* fno-sched-interblock:                  Optimize Options.   (line  652)
* fno-sched-spec:                        Optimize Options.   (line  657)
* fno-set-stack-executable:              i386 and x86-64 Windows Options.
                                                             (line   46)
* fno-show-column:                       Preprocessor Options.
                                                             (line  546)
* fno-signed-bitfields:                  C Dialect Options.  (line  331)
* fno-signed-zeros:                      Optimize Options.   (line 1906)
* fno-stack-limit:                       Code Gen Options.   (line  398)
* fno-threadsafe-statics:                C++ Dialect Options.
                                                             (line  238)
* fno-toplevel-reorder:                  Optimize Options.   (line 1462)
* fno-trapping-math:                     Optimize Options.   (line 1916)
* fno-unsigned-bitfields:                C Dialect Options.  (line  331)
* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
                                                             (line  251)
* fno-var-tracking-assignments:          Debugging Options.  (line 1033)
* fno-var-tracking-assignments-toggle:   Debugging Options.  (line 1043)
* fno-weak:                              C++ Dialect Options.
                                                             (line  313)
* fno-working-directory:                 Preprocessor Options.
                                                             (line  532)
* fno-zero-initialized-in-bss:           Optimize Options.   (line  379)
* fnon-call-exceptions:                  Code Gen Options.   (line   48)
* fnothrow-opt:                          C++ Dialect Options.
                                                             (line  164)
* 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  195)
* fopenmp:                               C Dialect Options.  (line  237)
* foptimize-register-move:               Optimize Options.   (line  569)
* foptimize-sibling-calls:               Optimize Options.   (line  216)
* force_cpusubtype_ALL:                  Darwin Options.     (line  136)
* force_flat_namespace:                  Darwin Options.     (line  197)
* fpack-struct:                          Code Gen Options.   (line  276)
* fpartial-inlining:                     Optimize Options.   (line 1230)
* fpcc-struct-return:                    Code Gen Options.   (line   69)
* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
* fpch-deps:                             Preprocessor Options.
                                                             (line  284)
* fpch-preprocess:                       Preprocessor Options.
                                                             (line  292)
* fpeel-loops:                           Optimize Options.   (line 2065)
* fpermissive:                           C++ Dialect Options.
                                                             (line  184)
* fpic:                                  Code Gen Options.   (line  182)
* fPIC:                                  Code Gen Options.   (line  203)
* fpie:                                  Code Gen Options.   (line  216)
* fPIE:                                  Code Gen Options.   (line  216)
* fplan9-extensions:                     Unnamed Fields.     (line   43)
* fpost-ipa-mem-report:                  Debugging Options.  (line  315)
* fpre-ipa-mem-report:                   Debugging Options.  (line  314)
* fpredictive-commoning:                 Optimize Options.   (line 1237)
* fprefetch-loop-arrays:                 Optimize Options.   (line 1244)
* fpreprocessed:                         Preprocessor Options.
                                                             (line  490)
* fprofile-arcs:                         Debugging Options.  (line  348)
* fprofile-arcs <1>:                     Other Builtins.     (line  246)
* fprofile-correction:                   Optimize Options.   (line 1729)
* fprofile-dir:                          Optimize Options.   (line 1736)
* fprofile-generate:                     Optimize Options.   (line 1747)
* fprofile-use:                          Optimize Options.   (line 1761)
* fprofile-values:                       Optimize Options.   (line 2014)
* fpu:                                   RX Options.         (line   17)
* frandom-seed:                          Debugging Options.  (line  927)
* freciprocal-math:                      Optimize Options.   (line 1884)
* frecord-gcc-switches:                  Code Gen Options.   (line  172)
* freg-struct-return:                    Code Gen Options.   (line   87)
* fregmove:                              Optimize Options.   (line  569)
* frename-registers:                     Optimize Options.   (line 2032)
* freorder-blocks:                       Optimize Options.   (line 1281)
* freorder-blocks-and-partition:         Optimize Options.   (line 1287)
* freorder-functions:                    Optimize Options.   (line 1298)
* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
                                                             (line  131)
* frepo:                                 C++ Dialect Options.
                                                             (line  202)
* frepo <1>:                             Template Instantiation.
                                                             (line   62)
* frerun-cse-after-loop:                 Optimize Options.   (line  446)
* freschedule-modulo-scheduled-loops:    Optimize Options.   (line  753)
* frounding-math:                        Optimize Options.   (line 1931)
* fsched-critical-path-heuristic:        Optimize Options.   (line  719)
* fsched-dep-count-heuristic:            Optimize Options.   (line  746)
* fsched-group-heuristic:                Optimize Options.   (line  713)
* fsched-last-insn-heuristic:            Optimize Options.   (line  739)
* fsched-pressure:                       Optimize Options.   (line  662)
* fsched-rank-heuristic:                 Optimize Options.   (line  732)
* fsched-spec-insn-heuristic:            Optimize Options.   (line  725)
* fsched-spec-load:                      Optimize Options.   (line  671)
* fsched-spec-load-dangerous:            Optimize Options.   (line  676)
* fsched-stalled-insns:                  Optimize Options.   (line  682)
* fsched-stalled-insns-dep:              Optimize Options.   (line  692)
* fsched-verbose:                        Debugging Options.  (line  937)
* fsched2-use-superblocks:               Optimize Options.   (line  702)
* fschedule-insns:                       Optimize Options.   (line  633)
* fschedule-insns2:                      Optimize Options.   (line  643)
* fsection-anchors:                      Optimize Options.   (line 2128)
* fsel-sched-pipelining:                 Optimize Options.   (line  767)
* fsel-sched-pipelining-outer-loops:     Optimize Options.   (line  772)
* fselective-scheduling:                 Optimize Options.   (line  759)
* fselective-scheduling2:                Optimize Options.   (line  763)
* fshort-double:                         Code Gen Options.   (line  116)
* fshort-enums:                          Code Gen Options.   (line  105)
* fshort-enums <1>:                      Structures unions enumerations and bit-fields implementation.
                                                             (line   43)
* fshort-enums <2>:                      Type Attributes.    (line  113)
* fshort-enums <3>:                      Non-bugs.           (line   42)
* fshort-wchar:                          Code Gen Options.   (line  124)
* fsignaling-nans:                       Optimize Options.   (line 1951)
* fsigned-bitfields:                     C Dialect Options.  (line  331)
* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
* fsigned-char:                          C Dialect Options.  (line  321)
* fsigned-char <1>:                      Characters implementation.
                                                             (line   31)
* fsingle-precision-constant:            Optimize Options.   (line 1966)
* fsplit-ivs-in-unroller:                Optimize Options.   (line 1211)
* fsplit-stack:                          Code Gen Options.   (line  412)
* fsplit-stack <1>:                      Function Attributes.
                                                             (line  902)
* fsplit-wide-types:                     Optimize Options.   (line  421)
* fstack-check:                          Code Gen Options.   (line  359)
* fstack-limit-register:                 Code Gen Options.   (line  398)
* fstack-limit-symbol:                   Code Gen Options.   (line  398)
* fstack-protector:                      Optimize Options.   (line 2116)
* fstack-protector-all:                  Optimize Options.   (line 2125)
* fstack-usage:                          Debugging Options.  (line  319)
* fstats:                                C++ Dialect Options.
                                                             (line  217)
* fstrict-aliasing:                      Optimize Options.   (line 1311)
* fstrict-enums:                         C++ Dialect Options.
                                                             (line  222)
* fstrict-overflow:                      Optimize Options.   (line 1357)
* fstrict-volatile-bitfields:            Code Gen Options.   (line  516)
* fsyntax-only:                          Warning Options.    (line   14)
* ftabstop:                              Preprocessor Options.
                                                             (line  503)
* ftemplate-depth:                       C++ Dialect Options.
                                                             (line  231)
* ftest-coverage:                        Debugging Options.  (line  403)
* fthread-jumps:                         Optimize Options.   (line  412)
* ftime-report:                          Debugging Options.  (line  306)
* ftls-model:                            Code Gen Options.   (line  441)
* ftracer:                               Optimize Options.   (line 1194)
* ftracer <1>:                           Optimize Options.   (line 2042)
* ftrapv:                                Code Gen Options.   (line   22)
* ftree-bit-ccp:                         Optimize Options.   (line  898)
* ftree-builtin-call-dce:                Optimize Options.   (line  918)
* ftree-ccp:                             Optimize Options.   (line  904)
* ftree-ch:                              Optimize Options.   (line  938)
* ftree-copy-prop:                       Optimize Options.   (line  825)
* ftree-copyrename:                      Optimize Options.   (line 1150)
* ftree-dce:                             Optimize Options.   (line  914)
* ftree-dominator-opts:                  Optimize Options.   (line  924)
* ftree-dse:                             Optimize Options.   (line  931)
* ftree-forwprop:                        Optimize Options.   (line  810)
* ftree-fre:                             Optimize Options.   (line  814)
* ftree-loop-im:                         Optimize Options.   (line 1111)
* ftree-loop-ivcanon:                    Optimize Options.   (line 1120)
* ftree-loop-linear:                     Optimize Options.   (line  949)
* ftree-loop-optimize:                   Optimize Options.   (line  945)
* ftree-parallelize-loops:               Optimize Options.   (line 1131)
* ftree-phiprop:                         Optimize Options.   (line  821)
* ftree-pre:                             Optimize Options.   (line  806)
* ftree-pta:                             Optimize Options.   (line 1140)
* ftree-reassoc:                         Optimize Options.   (line  802)
* ftree-sink:                            Optimize Options.   (line  894)
* ftree-slp-vectorize:                   Optimize Options.   (line 1169)
* ftree-sra:                             Optimize Options.   (line 1144)
* ftree-ter:                             Optimize Options.   (line 1157)
* ftree-vect-loop-version:               Optimize Options.   (line 1173)
* ftree-vectorize:                       Optimize Options.   (line 1165)
* ftree-vectorizer-verbose:              Debugging Options.  (line  901)
* ftree-vrp:                             Optimize Options.   (line 1185)
* funit-at-a-time:                       Optimize Options.   (line 1455)
* funroll-all-loops:                     Optimize Options.   (line 1205)
* funroll-all-loops <1>:                 Optimize Options.   (line 2059)
* funroll-loops:                         Optimize Options.   (line 1199)
* funroll-loops <1>:                     Optimize Options.   (line 2049)
* funsafe-loop-optimizations:            Optimize Options.   (line  493)
* funsafe-math-optimizations:            Optimize Options.   (line 1849)
* funsigned-bitfields:                   C Dialect Options.  (line  331)
* 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  303)
* funsigned-char <1>:                    Characters implementation.
                                                             (line   31)
* funswitch-loops:                       Optimize Options.   (line 2077)
* funwind-tables:                        Code Gen Options.   (line   56)
* fuse-cxa-atexit:                       C++ Dialect Options.
                                                             (line  244)
* fvar-tracking:                         Debugging Options.  (line 1023)
* fvar-tracking-assignments:             Debugging Options.  (line 1033)
* fvar-tracking-assignments-toggle:      Debugging Options.  (line 1043)
* fvariable-expansion-in-unroller:       Optimize Options.   (line 1225)
* fvect-cost-model:                      Optimize Options.   (line 1182)
* fverbose-asm:                          Code Gen Options.   (line  163)
* fvisibility:                           Code Gen Options.   (line  449)
* fvisibility-inlines-hidden:            C++ Dialect Options.
                                                             (line  256)
* fvisibility-ms-compat:                 C++ Dialect Options.
                                                             (line  284)
* fvpt:                                  Optimize Options.   (line 2023)
* fweb:                                  Optimize Options.   (line 1474)
* fwhole-program:                        Optimize Options.   (line 1485)
* fwide-exec-charset:                    Preprocessor Options.
                                                             (line  514)
* fworking-directory:                    Preprocessor Options.
                                                             (line  532)
* fwrapv:                                Code Gen Options.   (line   26)
* 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  315)
* G <2>:                                 RS/6000 and PowerPC Options.
                                                             (line  701)
* G <3>:                                 System V Options.   (line   10)
* gcoff:                                 Debugging Options.  (line   70)
* gdwarf-VERSION:                        Debugging Options.  (line   88)
* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
                                                             (line  153)
* gfull:                                 Darwin Options.     (line   70)
* ggdb:                                  Debugging Options.  (line   38)
* gno-strict-dwarf:                      Debugging Options.  (line  105)
* gstabs:                                Debugging Options.  (line   44)
* gstabs+:                               Debugging Options.  (line   64)
* gstrict-dwarf:                         Debugging Options.  (line   99)
* gtoggle:                               Debugging Options.  (line  142)
* gused:                                 Darwin Options.     (line   65)
* gvms:                                  Debugging Options.  (line  109)
* gxcoff:                                Debugging Options.  (line   75)
* gxcoff+:                               Debugging Options.  (line   80)
* H:                                     Preprocessor Options.
                                                             (line  662)
* headerpad_max_install_names:           Darwin Options.     (line  197)
* help:                                  Overall Options.    (line  221)
* help <1>:                              Preprocessor Options.
                                                             (line  654)
* I:                                     Preprocessor Options.
                                                             (line   65)
* I <1>:                                 Directory Options.  (line   10)
* I-:                                    Preprocessor Options.
                                                             (line  375)
* I- <1>:                                Directory Options.  (line  109)
* idirafter:                             Preprocessor Options.
                                                             (line  417)
* iframework:                            Darwin Options.     (line   58)
* imacros:                               Preprocessor Options.
                                                             (line  408)
* image_base:                            Darwin Options.     (line  197)
* imultilib:                             Preprocessor Options.
                                                             (line  442)
* include:                               Preprocessor Options.
                                                             (line  397)
* init:                                  Darwin Options.     (line  197)
* install_name:                          Darwin Options.     (line  197)
* iprefix:                               Preprocessor Options.
                                                             (line  424)
* iquote:                                Preprocessor Options.
                                                             (line  454)
* iquote <1>:                            Directory Options.  (line   34)
* isysroot:                              Preprocessor Options.
                                                             (line  436)
* isystem:                               Preprocessor Options.
                                                             (line  446)
* iwithprefix:                           Preprocessor Options.
                                                             (line  430)
* iwithprefixbefore:                     Preprocessor Options.
                                                             (line  430)
* keep_private_externs:                  Darwin Options.     (line  197)
* l:                                     Link Options.       (line   26)
* L:                                     Directory Options.  (line   40)
* lobjc:                                 Link Options.       (line   53)
* M:                                     Preprocessor Options.
                                                             (line  173)
* m:                                     RS/6000 and PowerPC Options.
                                                             (line  551)
* m1:                                    SH Options.         (line    9)
* m10:                                   PDP-11 Options.     (line   29)
* m128bit-long-double:                   i386 and x86-64 Options.
                                                             (line  250)
* m16-bit:                               CRIS Options.       (line   64)
* 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:                                   i386 and x86-64 Options.
                                                             (line  664)
* m32 <1>:                               RS/6000 and PowerPC Options.
                                                             (line  266)
* m32 <2>:                               SPARC Options.      (line  181)
* m32-bit:                               CRIS Options.       (line   64)
* m32bit-doubles:                        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:                                i386 and x86-64 Options.
                                                             (line  444)
* m3e:                                   SH Options.         (line   37)
* m4:                                    SH Options.         (line   51)
* 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   66)
* m4a-nofpu:                             SH Options.         (line   54)
* m4a-single:                            SH Options.         (line   62)
* m4a-single-only:                       SH Options.         (line   58)
* m4al:                                  SH Options.         (line   69)
* m4byte-functions:                      MCore Options.      (line   27)
* m5200:                                 M680x0 Options.     (line  143)
* m5206e:                                M680x0 Options.     (line  152)
* m528x:                                 M680x0 Options.     (line  156)
* m5307:                                 M680x0 Options.     (line  160)
* m5407:                                 M680x0 Options.     (line  164)
* m64:                                   i386 and x86-64 Options.
                                                             (line  664)
* m64 <1>:                               RS/6000 and PowerPC Options.
                                                             (line  266)
* m64 <2>:                               S/390 and zSeries Options.
                                                             (line   86)
* m64 <3>:                               SPARC Options.      (line  181)
* m64bit-doubles:                        RX Options.         (line   10)
* m68000:                                M680x0 Options.     (line   92)
* m68010:                                M680x0 Options.     (line  100)
* m68020:                                M680x0 Options.     (line  106)
* m68020-40:                             M680x0 Options.     (line  174)
* m68020-60:                             M680x0 Options.     (line  183)
* m68030:                                M680x0 Options.     (line  111)
* m68040:                                M680x0 Options.     (line  116)
* m68060:                                M680x0 Options.     (line  125)
* m6811:                                 M68hc1x Options.    (line   13)
* m6812:                                 M68hc1x Options.    (line   18)
* m68881:                                M680x0 Options.     (line  193)
* m68hc11:                               M68hc1x Options.    (line   13)
* m68hc12:                               M68hc1x Options.    (line   18)
* m68hcs12:                              M68hc1x Options.    (line   23)
* m68S12:                                M68hc1x Options.    (line   23)
* m8-bit:                                CRIS Options.       (line   64)
* m96bit-long-double:                    i386 and x86-64 Options.
                                                             (line  250)
* mabi:                                  ARM Options.        (line   10)
* mabi <1>:                              i386 and x86-64 Options.
                                                             (line  563)
* mabi <2>:                              RS/6000 and PowerPC Options.
                                                             (line  582)
* mabi=32:                               MIPS Options.       (line  130)
* mabi=64:                               MIPS Options.       (line  130)
* mabi=eabi:                             MIPS Options.       (line  130)
* mabi=gnu:                              MMIX Options.       (line   20)
* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
                                                             (line  595)
* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
                                                             (line  599)
* mabi=mmixware:                         MMIX Options.       (line   20)
* mabi=n32:                              MIPS Options.       (line  130)
* mabi=no-spe:                           RS/6000 and PowerPC Options.
                                                             (line  592)
* mabi=o64:                              MIPS Options.       (line  130)
* mabi=spe:                              RS/6000 and PowerPC Options.
                                                             (line  587)
* mabicalls:                             MIPS Options.       (line  154)
* mabort-on-noreturn:                    ARM Options.        (line  162)
* 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-outgoing-args:             i386 and x86-64 Options.
                                                             (line  580)
* maccumulate-outgoing-args <1>:         SH Options.         (line  202)
* maddress-space-conversion:             SPU Options.        (line   68)
* madjust-unroll:                        SH Options.         (line  222)
* mads:                                  RS/6000 and PowerPC Options.
                                                             (line  625)
* maix-struct-return:                    RS/6000 and PowerPC Options.
                                                             (line  575)
* maix32:                                RS/6000 and PowerPC Options.
                                                             (line  304)
* maix64:                                RS/6000 and PowerPC Options.
                                                             (line  304)
* malign-300:                            H8/300 Options.     (line   31)
* malign-double:                         i386 and x86-64 Options.
                                                             (line  235)
* malign-int:                            M680x0 Options.     (line  262)
* malign-labels:                         FRV Options.        (line  128)
* malign-loops:                          M32R/D Options.     (line   73)
* malign-natural:                        RS/6000 and PowerPC Options.
                                                             (line  342)
* malign-power:                          RS/6000 and PowerPC Options.
                                                             (line  342)
* mall-opts:                             MeP Options.        (line   11)
* malloc-cc:                             FRV Options.        (line   31)
* malpha-as:                             DEC Alpha Options.  (line  159)
* maltivec:                              RS/6000 and PowerPC Options.
                                                             (line  191)
* mam33:                                 MN10300 Options.    (line   17)
* mam33-2:                               MN10300 Options.    (line   24)
* mam34:                                 MN10300 Options.    (line   28)
* mandroid:                              GNU/Linux Options.  (line   21)
* mapcs:                                 ARM Options.        (line   22)
* mapcs-frame:                           ARM Options.        (line   14)
* mapp-regs:                             SPARC Options.      (line   10)
* mapp-regs <1>:                         V850 Options.       (line   57)
* march:                                 ARM Options.        (line  108)
* march <1>:                             CRIS Options.       (line   10)
* march <2>:                             HPPA Options.       (line    9)
* march <3>:                             HPPA Options.       (line  162)
* march <4>:                             i386 and x86-64 Options.
                                                             (line  134)
* march <5>:                             M680x0 Options.     (line   12)
* march <6>:                             MIPS Options.       (line   14)
* march <7>:                             S/390 and zSeries Options.
                                                             (line  114)
* mas100-syntax:                         RX Options.         (line   74)
* masm=DIALECT:                          i386 and x86-64 Options.
                                                             (line  191)
* matomic-updates:                       SPU Options.        (line   83)
* mauto-incdec:                          M68hc1x Options.    (line   26)
* mauto-pic:                             IA-64 Options.      (line   50)
* maverage:                              MeP Options.        (line   16)
* mavoid-indexed-addresses:              RS/6000 and PowerPC Options.
                                                             (line  411)
* mb:                                    SH Options.         (line   74)
* mbackchain:                            S/390 and zSeries Options.
                                                             (line   35)
* mbarrel-shift-enabled:                 LM32 Options.       (line    9)
* mbase-addresses:                       MMIX Options.       (line   53)
* mbased=:                               MeP Options.        (line   20)
* mbcopy:                                PDP-11 Options.     (line   36)
* mbcopy-builtin:                        PDP-11 Options.     (line   32)
* mbig:                                  RS/6000 and PowerPC Options.
                                                             (line  492)
* mbig-endian:                           ARM Options.        (line   67)
* mbig-endian <1>:                       IA-64 Options.      (line    9)
* mbig-endian <2>:                       MCore Options.      (line   39)
* mbig-endian <3>:                       RS/6000 and PowerPC Options.
                                                             (line  492)
* mbig-endian-data:                      RX Options.         (line   42)
* mbig-switch:                           HPPA Options.       (line   23)
* mbig-switch <1>:                       V850 Options.       (line   52)
* mbigtable:                             SH Options.         (line   90)
* mbionic:                               GNU/Linux Options.  (line   17)
* mbit-align:                            RS/6000 and PowerPC Options.
                                                             (line  443)
* mbitfield:                             M680x0 Options.     (line  230)
* mbitops:                               MeP Options.        (line   26)
* mbitops <1>:                           SH Options.         (line   94)
* mblock-move-inline-limit:              RS/6000 and PowerPC Options.
                                                             (line  695)
* mbranch-cheap:                         PDP-11 Options.     (line   65)
* mbranch-cost:                          MIPS Options.       (line  603)
* 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  610)
* mbranch-predict:                       MMIX Options.       (line   48)
* mbss-plt:                              RS/6000 and PowerPC Options.
                                                             (line  214)
* mbuild-constants:                      DEC Alpha Options.  (line  142)
* mbwx:                                  DEC Alpha Options.  (line  171)
* mc68000:                               M680x0 Options.     (line   92)
* mc68020:                               M680x0 Options.     (line  106)
* mc=:                                   MeP Options.        (line   31)
* mcache-size:                           SPU Options.        (line   75)
* mcall-eabi:                            RS/6000 and PowerPC Options.
                                                             (line  545)
* mcall-freebsd:                         RS/6000 and PowerPC Options.
                                                             (line  563)
* mcall-gnu:                             RS/6000 and PowerPC Options.
                                                             (line  559)
* mcall-linux:                           RS/6000 and PowerPC Options.
                                                             (line  555)
* mcall-netbsd:                          RS/6000 and PowerPC Options.
                                                             (line  567)
* mcall-netbsd <1>:                      RS/6000 and PowerPC Options.
                                                             (line  571)
* mcall-prologues:                       AVR Options.        (line   36)
* mcall-sysv:                            RS/6000 and PowerPC Options.
                                                             (line  537)
* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
                                                             (line  545)
* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
                                                             (line  548)
* mcallee-super-interworking:            ARM Options.        (line  255)
* mcaller-super-interworking:            ARM Options.        (line  262)
* mcallgraph-data:                       MCore Options.      (line   31)
* mcc-init:                              CRIS Options.       (line   42)
* mcfv4e:                                M680x0 Options.     (line  168)
* mcheck-zero-division:                  MIPS Options.       (line  425)
* mcirrus-fix-invalid-insns:             ARM Options.        (line  202)
* mcix:                                  DEC Alpha Options.  (line  171)
* mcld:                                  i386 and x86-64 Options.
                                                             (line  473)
* mclip:                                 MeP Options.        (line   35)
* mcmodel=embmedany:                     SPARC Options.      (line  203)
* mcmodel=kernel:                        i386 and x86-64 Options.
                                                             (line  686)
* mcmodel=large:                         i386 and x86-64 Options.
                                                             (line  698)
* mcmodel=large <1>:                     RS/6000 and PowerPC Options.
                                                             (line  185)
* mcmodel=medany:                        SPARC Options.      (line  197)
* mcmodel=medium:                        i386 and x86-64 Options.
                                                             (line  691)
* mcmodel=medium <1>:                    RS/6000 and PowerPC Options.
                                                             (line  181)
* mcmodel=medlow:                        SPARC Options.      (line  186)
* mcmodel=medmid:                        SPARC Options.      (line  191)
* mcmodel=small:                         i386 and x86-64 Options.
                                                             (line  680)
* mcmodel=small <1>:                     RS/6000 and PowerPC Options.
                                                             (line  177)
* mcmpb:                                 RS/6000 and PowerPC Options.
                                                             (line   33)
* mcode-readable:                        MIPS Options.       (line  385)
* mcond-exec:                            FRV Options.        (line  187)
* mcond-move:                            FRV Options.        (line  159)
* mconfig=:                              MeP Options.        (line   39)
* mconsole:                              i386 and x86-64 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  150)
* mcoreb:                                Blackfin Options.   (line  156)
* mcpu:                                  ARC Options.        (line   23)
* mcpu <1>:                              ARM Options.        (line   79)
* mcpu <2>:                              CRIS Options.       (line   10)
* mcpu <3>:                              DEC Alpha Options.  (line  223)
* mcpu <4>:                              FRV Options.        (line  258)
* mcpu <5>:                              i386 and x86-64 Options.
                                                             (line  139)
* mcpu <6>:                              M680x0 Options.     (line   28)
* mcpu <7>:                              picoChip Options.   (line    9)
* mcpu <8>:                              RS/6000 and PowerPC Options.
                                                             (line  119)
* mcpu <9>:                              SPARC Options.      (line   81)
* mcpu32:                                M680x0 Options.     (line  134)
* mcpu=:                                 Blackfin Options.   (line    7)
* mcpu= <1>:                             M32C Options.       (line    7)
* mcpu= <2>:                             MicroBlaze Options. (line   20)
* mcrc32:                                i386 and x86-64 Options.
                                                             (line  519)
* mcsync-anomaly:                        Blackfin Options.   (line   56)
* mcx16:                                 i386 and x86-64 Options.
                                                             (line  497)
* MD:                                    Preprocessor Options.
                                                             (line  264)
* mdalign:                               SH Options.         (line   80)
* mdata:                                 ARC Options.        (line   30)
* mdata-align:                           CRIS Options.       (line   55)
* mdc:                                   MeP Options.        (line   62)
* mdebug:                                M32R/D Options.     (line   69)
* mdebug <1>:                            S/390 and zSeries Options.
                                                             (line  110)
* mdebug-main=PREFIX:                    DEC Alpha/VMS Options.
                                                             (line   13)
* mdebug-main=PREFIX <1>:                IA-64/VMS Options.  (line   13)
* mdec-asm:                              PDP-11 Options.     (line   72)
* mdisable-callt:                        V850 Options.       (line   93)
* mdisable-fpregs:                       HPPA Options.       (line   33)
* mdisable-indexing:                     HPPA Options.       (line   40)
* mdiv:                                  M680x0 Options.     (line  205)
* mdiv <1>:                              MCore Options.      (line   15)
* mdiv <2>:                              MeP Options.        (line   65)
* mdiv=STRATEGY:                         SH Options.         (line  161)
* mdivide-breaks:                        MIPS Options.       (line  431)
* mdivide-enabled:                       LM32 Options.       (line   12)
* mdivide-traps:                         MIPS Options.       (line  431)
* mdivsi3_libfunc=NAME:                  SH Options.         (line  208)
* mdll:                                  i386 and x86-64 Windows Options.
                                                             (line   16)
* mdlmzb:                                RS/6000 and PowerPC Options.
                                                             (line  436)
* mdmx:                                  MIPS Options.       (line  279)
* mdouble:                               FRV Options.        (line   48)
* mdouble-float:                         MIPS Options.       (line  237)
* mdouble-float <1>:                     RS/6000 and PowerPC Options.
                                                             (line  360)
* mdsp:                                  MIPS Options.       (line  256)
* mdspr2:                                MIPS Options.       (line  262)
* mdual-nops:                            SPU Options.        (line   95)
* mdwarf2-asm:                           IA-64 Options.      (line   94)
* mdword:                                FRV Options.        (line   40)
* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
                                                             (line  497)
* mea32:                                 SPU Options.        (line   60)
* mea64:                                 SPU Options.        (line   60)
* meabi:                                 RS/6000 and PowerPC Options.
                                                             (line  644)
* mearly-stop-bits:                      IA-64 Options.      (line  100)
* meb:                                   MeP Options.        (line   68)
* meb <1>:                               Score Options.      (line    9)
* mel:                                   MeP Options.        (line   71)
* mel <1>:                               Score Options.      (line   12)
* melf:                                  CRIS Options.       (line   86)
* melf <1>:                              MMIX Options.       (line   43)
* memb:                                  RS/6000 and PowerPC Options.
                                                             (line  639)
* membedded-data:                        MIPS Options.       (line  372)
* memregs=:                              M32C Options.       (line   21)
* mep:                                   V850 Options.       (line   16)
* 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)
* mexplicit-relocs:                      DEC Alpha Options.  (line  184)
* mexplicit-relocs <1>:                  MIPS Options.       (line  416)
* mextern-sdata:                         MIPS Options.       (line  335)
* MF:                                    Preprocessor Options.
                                                             (line  208)
* mfast-fp:                              Blackfin Options.   (line  129)
* mfast-indirect-calls:                  HPPA Options.       (line   52)
* mfaster-structs:                       SPARC Options.      (line   71)
* mfdpic:                                FRV Options.        (line   72)
* mfentry:                               i386 and x86-64 Options.
                                                             (line  642)
* mfix:                                  DEC Alpha Options.  (line  171)
* mfix-and-continue:                     Darwin Options.     (line  105)
* mfix-at697f:                           SPARC Options.      (line  167)
* mfix-cortex-m3-ldrd:                   ARM Options.        (line  284)
* mfix-r10000:                           MIPS Options.       (line  496)
* mfix-r4000:                            MIPS Options.       (line  480)
* mfix-r4400:                            MIPS Options.       (line  490)
* mfix-sb1:                              MIPS Options.       (line  527)
* mfix-vr4120:                           MIPS Options.       (line  507)
* mfix-vr4130:                           MIPS Options.       (line  520)
* mfixed-cc:                             FRV Options.        (line   35)
* mfixed-range:                          HPPA Options.       (line   59)
* mfixed-range <1>:                      IA-64 Options.      (line  105)
* mfixed-range <2>:                      SH Options.         (line  215)
* mfixed-range <3>:                      SPU Options.        (line   52)
* mflip-mips16:                          MIPS Options.       (line  110)
* mfloat-abi:                            ARM Options.        (line   41)
* mfloat-gprs:                           RS/6000 and PowerPC Options.
                                                             (line  249)
* mfloat-ieee:                           DEC Alpha Options.  (line  179)
* mfloat-vax:                            DEC Alpha Options.  (line  179)
* mfloat32:                              PDP-11 Options.     (line   52)
* mfloat64:                              PDP-11 Options.     (line   48)
* mflush-func:                           MIPS Options.       (line  594)
* mflush-func=NAME:                      M32R/D Options.     (line   94)
* mflush-trap=NUMBER:                    M32R/D Options.     (line   87)
* mfmovd:                                SH Options.         (line   97)
* mforce-no-pic:                         Xtensa Options.     (line   41)
* mfp:                                   ARM Options.        (line  120)
* mfp-exceptions:                        MIPS Options.       (line  621)
* 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  141)
* mfp32:                                 MIPS Options.       (line  220)
* mfp64:                                 MIPS Options.       (line  223)
* mfpe:                                  ARM Options.        (line  120)
* mfpmath:                               Optimize Options.   (line 1809)
* mfpmath <1>:                           i386 and x86-64 Options.
                                                             (line  142)
* mfpr-32:                               FRV Options.        (line   15)
* mfpr-64:                               FRV Options.        (line   19)
* mfprnd:                                RS/6000 and PowerPC Options.
                                                             (line   33)
* mfpu:                                  ARM Options.        (line  120)
* mfpu <1>:                              PDP-11 Options.     (line    9)
* mfpu <2>:                              RS/6000 and PowerPC Options.
                                                             (line  368)
* mfpu <3>:                              SPARC Options.      (line   20)
* mfriz:                                 RS/6000 and PowerPC Options.
                                                             (line  824)
* mfull-toc:                             RS/6000 and PowerPC Options.
                                                             (line  277)
* mfused-madd:                           i386 and x86-64 Options.
                                                             (line  468)
* mfused-madd <1>:                       IA-64 Options.      (line   88)
* mfused-madd <2>:                       MIPS Options.       (line  465)
* mfused-madd <3>:                       RS/6000 and PowerPC Options.
                                                             (line  420)
* mfused-madd <4>:                       S/390 and zSeries Options.
                                                             (line  135)
* mfused-madd <5>:                       Xtensa Options.     (line   19)
* MG:                                    Preprocessor Options.
                                                             (line  217)
* mg:                                    VAX Options.        (line   17)
* mgas:                                  DEC Alpha Options.  (line  159)
* mgas <1>:                              HPPA Options.       (line   75)
* mgen-cell-microcode:                   RS/6000 and PowerPC Options.
                                                             (line  202)
* mgettrcost=NUMBER:                     SH Options.         (line  237)
* mglibc:                                GNU/Linux Options.  (line    9)
* mgnu:                                  VAX Options.        (line   13)
* mgnu-as:                               IA-64 Options.      (line   18)
* mgnu-ld:                               HPPA Options.       (line  111)
* mgnu-ld <1>:                           IA-64 Options.      (line   23)
* mgotplt:                               CRIS Options.       (line   80)
* mgp32:                                 MIPS Options.       (line  214)
* mgp64:                                 MIPS Options.       (line  217)
* mgpopt:                                MIPS Options.       (line  357)
* mgpr-32:                               FRV Options.        (line    7)
* mgpr-64:                               FRV Options.        (line   11)
* mgprel-ro:                             FRV Options.        (line   99)
* mh:                                    H8/300 Options.     (line   14)
* mhard-dfp:                             RS/6000 and PowerPC Options.
                                                             (line   33)
* mhard-dfp <1>:                         S/390 and zSeries Options.
                                                             (line   20)
* mhard-float:                           ARM Options.        (line   57)
* mhard-float <1>:                       FRV Options.        (line   23)
* mhard-float <2>:                       M680x0 Options.     (line  193)
* mhard-float <3>:                       MicroBlaze Options. (line   10)
* mhard-float <4>:                       MIPS Options.       (line  226)
* mhard-float <5>:                       RS/6000 and PowerPC Options.
                                                             (line  354)
* mhard-float <6>:                       S/390 and zSeries Options.
                                                             (line   11)
* mhard-float <7>:                       SPARC Options.      (line   20)
* mhard-quad-float:                      SPARC Options.      (line   41)
* mhardlit:                              MCore Options.      (line   10)
* mhint-max-distance:                    SPU Options.        (line  107)
* mhint-max-nops:                        SPU Options.        (line  101)
* mhitachi:                              SH Options.         (line  101)
* mhitachi <1>:                          SH Options.         (line  104)
* mhitachi <2>:                          SH Options.         (line  107)
* mhp-ld:                                HPPA Options.       (line  123)
* micplb:                                Blackfin Options.   (line  169)
* mid-shared-library:                    Blackfin Options.   (line   77)
* mieee:                                 DEC Alpha Options.  (line   39)
* mieee <1>:                             SH Options.         (line  117)
* mieee-conformant:                      DEC Alpha Options.  (line  134)
* mieee-fp:                              i386 and x86-64 Options.
                                                             (line  197)
* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
* milp32:                                IA-64 Options.      (line  121)
* mimpure-text:                          Solaris 2 Options.  (line    9)
* mincoming-stack-boundary:              i386 and x86-64 Options.
                                                             (line  374)
* mindexed-addressing:                   SH Options.         (line  227)
* minline-all-stringops:                 i386 and x86-64 Options.
                                                             (line  601)
* 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  126)
* 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  134)
* 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:         i386 and x86-64 Options.
                                                             (line  607)
* minmax:                                M68hc1x Options.    (line   31)
* minsert-sched-nops:                    RS/6000 and PowerPC Options.
                                                             (line  525)
* mint-register:                         RX Options.         (line   98)
* mint16:                                PDP-11 Options.     (line   40)
* mint32:                                H8/300 Options.     (line   28)
* mint32 <1>:                            PDP-11 Options.     (line   44)
* mint8:                                 AVR Options.        (line   43)
* minterlink-mips16:                     MIPS Options.       (line  117)
* minvalid-symbols:                      SH Options.         (line  260)
* mio-volatile:                          MeP Options.        (line   74)
* mips1:                                 MIPS Options.       (line   77)
* mips16:                                MIPS Options.       (line  102)
* mips2:                                 MIPS Options.       (line   80)
* mips3:                                 MIPS Options.       (line   83)
* mips32:                                MIPS Options.       (line   89)
* mips32r2:                              MIPS Options.       (line   92)
* mips3d:                                MIPS Options.       (line  285)
* mips4:                                 MIPS Options.       (line   86)
* mips64:                                MIPS Options.       (line   95)
* mips64r2:                              MIPS Options.       (line   98)
* misel:                                 RS/6000 and PowerPC Options.
                                                             (line  220)
* misize:                                SH Options.         (line  138)
* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
* mivc2:                                 MeP Options.        (line   59)
* mjump-in-delay:                        HPPA Options.       (line   28)
* mkernel:                               Darwin Options.     (line   83)
* mknuthdiv:                             MMIX Options.       (line   32)
* ml:                                    MeP Options.        (line   78)
* ml <1>:                                SH Options.         (line   77)
* mlarge-data:                           DEC Alpha Options.  (line  195)
* mlarge-data-threshold=NUMBER:          i386 and x86-64 Options.
                                                             (line  276)
* mlarge-mem:                            SPU Options.        (line   38)
* mlarge-text:                           DEC Alpha Options.  (line  213)
* mleadz:                                MeP Options.        (line   81)
* mleaf-id-shared-library:               Blackfin Options.   (line   88)
* mlibfuncs:                             MMIX Options.       (line   10)
* mlibrary-pic:                          FRV Options.        (line  135)
* mlinked-fp:                            FRV Options.        (line  116)
* mlinker-opt:                           HPPA Options.       (line   85)
* mlinux:                                CRIS Options.       (line   90)
* mlittle:                               RS/6000 and PowerPC Options.
                                                             (line  486)
* mlittle-endian:                        ARM Options.        (line   63)
* mlittle-endian <1>:                    IA-64 Options.      (line   13)
* mlittle-endian <2>:                    MCore Options.      (line   39)
* mlittle-endian <3>:                    RS/6000 and PowerPC Options.
                                                             (line  486)
* mlittle-endian <4>:                    SPARC Options.      (line  175)
* mlittle-endian-data:                   RX Options.         (line   42)
* mliw:                                  MN10300 Options.    (line   55)
* mllsc:                                 MIPS Options.       (line  242)
* mlocal-sdata:                          MIPS Options.       (line  323)
* mlong-calls:                           ARM Options.        (line  167)
* mlong-calls <1>:                       Blackfin Options.   (line  117)
* mlong-calls <2>:                       FRV Options.        (line  122)
* mlong-calls <3>:                       M68hc1x Options.    (line   35)
* mlong-calls <4>:                       MIPS Options.       (line  451)
* mlong-calls <5>:                       V850 Options.       (line   10)
* mlong-double-128:                      S/390 and zSeries Options.
                                                             (line   29)
* mlong-double-64:                       S/390 and zSeries Options.
                                                             (line   29)
* mlong-load-store:                      HPPA Options.       (line   66)
* mlong32:                               MIPS Options.       (line  298)
* mlong64:                               MIPS Options.       (line  293)
* mlongcall:                             RS/6000 and PowerPC Options.
                                                             (line  715)
* mlongcalls:                            Xtensa Options.     (line   72)
* mlow-64k:                              Blackfin Options.   (line   66)
* mlp64:                                 IA-64 Options.      (line  121)
* MM:                                    Preprocessor Options.
                                                             (line  198)
* mm:                                    MeP Options.        (line   84)
* mmac:                                  CRX Options.        (line    9)
* mmac <1>:                              Score Options.      (line   21)
* mmad:                                  MIPS Options.       (line  460)
* mmalloc64:                             DEC Alpha/VMS Options.
                                                             (line   17)
* mmalloc64 <1>:                         IA-64/VMS Options.  (line   17)
* mmangle-cpu:                           ARC Options.        (line   15)
* mmax:                                  DEC Alpha Options.  (line  171)
* mmax-constant-size:                    RX Options.         (line   80)
* mmax-stack-frame:                      CRIS Options.       (line   23)
* mmcount-ra-address:                    MIPS Options.       (line  670)
* mmcu:                                  AVR Options.        (line    9)
* MMD:                                   Preprocessor Options.
                                                             (line  280)
* mmedia:                                FRV Options.        (line   56)
* mmemcpy:                               MicroBlaze Options. (line   13)
* mmemcpy <1>:                           MIPS Options.       (line  445)
* mmemory-latency:                       DEC Alpha Options.  (line  276)
* mmfcrf:                                RS/6000 and PowerPC Options.
                                                             (line   33)
* mmfpgpr:                               RS/6000 and PowerPC Options.
                                                             (line   33)
* mminimal-toc:                          RS/6000 and PowerPC Options.
                                                             (line  277)
* mminmax:                               MeP Options.        (line   87)
* mmmx:                                  i386 and x86-64 Options.
                                                             (line  444)
* mmodel=large:                          M32R/D Options.     (line   33)
* mmodel=medium:                         M32R/D Options.     (line   27)
* mmodel=small:                          M32R/D Options.     (line   18)
* mmovbe:                                i386 and x86-64 Options.
                                                             (line  515)
* mmt:                                   MIPS Options.       (line  290)
* mmul-bug-workaround:                   CRIS Options.       (line   32)
* mmuladd:                               FRV Options.        (line   64)
* mmulhw:                                RS/6000 and PowerPC Options.
                                                             (line  429)
* mmult:                                 MeP Options.        (line   90)
* mmult-bug:                             MN10300 Options.    (line    9)
* mmulti-cond-exec:                      FRV Options.        (line  215)
* mmulticore:                            Blackfin Options.   (line  138)
* mmultiple:                             RS/6000 and PowerPC Options.
                                                             (line  379)
* mmvcle:                                S/390 and zSeries Options.
                                                             (line  104)
* mmvme:                                 RS/6000 and PowerPC Options.
                                                             (line  620)
* mn:                                    H8/300 Options.     (line   20)
* mnested-cond-exec:                     FRV Options.        (line  230)
* mnew-mnemonics:                        RS/6000 and PowerPC Options.
                                                             (line  104)
* mnhwloop:                              Score Options.      (line   15)
* mno-3dnow:                             i386 and x86-64 Options.
                                                             (line  444)
* mno-4byte-functions:                   MCore Options.      (line   27)
* mno-abicalls:                          MIPS Options.       (line  154)
* 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:                      i386 and x86-64 Options.
                                                             (line  235)
* mno-align-int:                         M680x0 Options.     (line  262)
* mno-align-loops:                       M32R/D Options.     (line   76)
* mno-align-stringops:                   i386 and x86-64 Options.
                                                             (line  596)
* mno-altivec:                           RS/6000 and PowerPC Options.
                                                             (line  191)
* mno-am33:                              MN10300 Options.    (line   20)
* mno-app-regs:                          SPARC Options.      (line   10)
* mno-app-regs <1>:                      V850 Options.       (line   61)
* mno-as100-syntax:                      RX Options.         (line   74)
* mno-atomic-updates:                    SPU Options.        (line   83)
* mno-avoid-indexed-addresses:           RS/6000 and PowerPC Options.
                                                             (line  411)
* 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  443)
* mno-bitfield:                          M680x0 Options.     (line  226)
* mno-branch-likely:                     MIPS Options.       (line  610)
* mno-branch-predict:                    MMIX Options.       (line   48)
* mno-bwx:                               DEC Alpha Options.  (line  171)
* mno-callgraph-data:                    MCore Options.      (line   31)
* mno-check-zero-division:               MIPS Options.       (line  425)
* mno-cirrus-fix-invalid-insns:          ARM Options.        (line  202)
* mno-cix:                               DEC Alpha Options.  (line  171)
* mno-clearbss:                          MicroBlaze Options. (line   16)
* mno-cmpb:                              RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-cond-exec:                         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   44)
* mno-csync-anomaly:                     Blackfin Options.   (line   62)
* mno-data-align:                        CRIS Options.       (line   55)
* mno-debug:                             S/390 and zSeries Options.
                                                             (line  110)
* mno-div:                               M680x0 Options.     (line  205)
* mno-div <1>:                           MCore Options.      (line   15)
* mno-dlmzb:                             RS/6000 and PowerPC Options.
                                                             (line  436)
* mno-double:                            FRV Options.        (line   52)
* mno-dsp:                               MIPS Options.       (line  256)
* mno-dspr2:                             MIPS Options.       (line  262)
* mno-dwarf2-asm:                        IA-64 Options.      (line   94)
* mno-dword:                             FRV Options.        (line   44)
* mno-eabi:                              RS/6000 and PowerPC Options.
                                                             (line  644)
* mno-early-stop-bits:                   IA-64 Options.      (line  100)
* mno-eflags:                            FRV Options.        (line  155)
* mno-embedded-data:                     MIPS Options.       (line  372)
* mno-ep:                                V850 Options.       (line   16)
* mno-epsilon:                           MMIX Options.       (line   15)
* mno-explicit-relocs:                   DEC Alpha Options.  (line  184)
* mno-explicit-relocs <1>:               MIPS Options.       (line  416)
* mno-extern-sdata:                      MIPS Options.       (line  335)
* mno-fancy-math-387:                    i386 and x86-64 Options.
                                                             (line  224)
* mno-faster-structs:                    SPARC Options.      (line   71)
* mno-fix:                               DEC Alpha Options.  (line  171)
* mno-fix-r10000:                        MIPS Options.       (line  496)
* mno-fix-r4000:                         MIPS Options.       (line  480)
* mno-fix-r4400:                         MIPS Options.       (line  490)
* mno-float32:                           PDP-11 Options.     (line   48)
* mno-float64:                           PDP-11 Options.     (line   52)
* mno-flush-func:                        M32R/D Options.     (line   99)
* mno-flush-trap:                        M32R/D Options.     (line   91)
* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
                                                             (line  277)
* mno-fp-regs:                           DEC Alpha Options.  (line   25)
* mno-fp-ret-in-387:                     i386 and x86-64 Options.
                                                             (line  214)
* mno-fprnd:                             RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-fpu:                               SPARC Options.      (line   25)
* mno-fused-madd:                        i386 and x86-64 Options.
                                                             (line  468)
* mno-fused-madd <1>:                    IA-64 Options.      (line   88)
* mno-fused-madd <2>:                    MIPS Options.       (line  465)
* mno-fused-madd <3>:                    RS/6000 and PowerPC Options.
                                                             (line  420)
* mno-fused-madd <4>:                    S/390 and zSeries Options.
                                                             (line  135)
* 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   80)
* mno-gpopt:                             MIPS Options.       (line  357)
* mno-hard-dfp:                          RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-hard-dfp <1>:                      S/390 and zSeries Options.
                                                             (line   20)
* mno-hardlit:                           MCore Options.      (line   10)
* mno-id-shared-library:                 Blackfin Options.   (line   84)
* mno-ieee-fp:                           i386 and x86-64 Options.
                                                             (line  197)
* 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-mips16:                  MIPS Options.       (line  117)
* mno-interrupts:                        AVR Options.        (line   32)
* mno-isel:                              RS/6000 and PowerPC Options.
                                                             (line  220)
* mno-knuthdiv:                          MMIX Options.       (line   32)
* mno-leaf-id-shared-library:            Blackfin Options.   (line   94)
* mno-libfuncs:                          MMIX Options.       (line   10)
* mno-llsc:                              MIPS Options.       (line  242)
* mno-local-sdata:                       MIPS Options.       (line  323)
* mno-long-calls:                        ARM Options.        (line  167)
* mno-long-calls <1>:                    Blackfin Options.   (line  117)
* mno-long-calls <2>:                    HPPA Options.       (line  136)
* mno-long-calls <3>:                    M68hc1x Options.    (line   35)
* mno-long-calls <4>:                    MIPS Options.       (line  451)
* mno-long-calls <5>:                    V850 Options.       (line   10)
* mno-longcall:                          RS/6000 and PowerPC Options.
                                                             (line  715)
* mno-longcalls:                         Xtensa Options.     (line   72)
* mno-low-64k:                           Blackfin Options.   (line   70)
* mno-lsim:                              FR30 Options.       (line   14)
* mno-lsim <1>:                          MCore Options.      (line   46)
* mno-mad:                               MIPS Options.       (line  460)
* mno-max:                               DEC Alpha Options.  (line  171)
* mno-mcount-ra-address:                 MIPS Options.       (line  670)
* mno-mdmx:                              MIPS Options.       (line  279)
* mno-media:                             FRV Options.        (line   60)
* mno-memcpy:                            MIPS Options.       (line  445)
* mno-mfcrf:                             RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-mfpgpr:                            RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-mips16:                            MIPS Options.       (line  102)
* mno-mips3d:                            MIPS Options.       (line  285)
* mno-mmx:                               i386 and x86-64 Options.
                                                             (line  444)
* mno-mt:                                MIPS Options.       (line  290)
* mno-mul-bug-workaround:                CRIS Options.       (line   32)
* mno-muladd:                            FRV Options.        (line   68)
* mno-mulhw:                             RS/6000 and PowerPC Options.
                                                             (line  429)
* mno-mult-bug:                          MN10300 Options.    (line   13)
* mno-multi-cond-exec:                   FRV Options.        (line  223)
* mno-multiple:                          RS/6000 and PowerPC Options.
                                                             (line  379)
* mno-mvcle:                             S/390 and zSeries Options.
                                                             (line  104)
* mno-nested-cond-exec:                  FRV Options.        (line  237)
* 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  234)
* mno-paired-single:                     MIPS Options.       (line  273)
* mno-pic:                               IA-64 Options.      (line   26)
* mno-plt:                               MIPS Options.       (line  181)
* mno-popcntb:                           RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-popcntd:                           RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-power:                             RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-power2:                            RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-powerpc:                           RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-powerpc64:                         RS/6000 and PowerPC Options.
                                                             (line   33)
* mno-prolog-function:                   V850 Options.       (line   23)
* mno-prologue-epilogue:                 CRIS Options.       (line   71)
* mno-prototype:                         RS/6000 and PowerPC Options.
                                                             (line  604)
* mno-push-args:                         i386 and x86-64 Options.
                                                             (line  573)
* mno-red-zone:                          i386 and x86-64 Options.
                                                             (line  672)
* mno-register-names:                    IA-64 Options.      (line   37)
* mno-regnames:                          RS/6000 and PowerPC Options.
                                                             (line  709)
* mno-relax-immediate:                   MCore Options.      (line   19)
* mno-relocatable:                       RS/6000 and PowerPC Options.
                                                             (line  460)
* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
                                                             (line  471)
* mno-rtd:                               M680x0 Options.     (line  257)
* 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  154)
* mno-sched-br-data-spec:                IA-64 Options.      (line  128)
* mno-sched-br-in-data-spec:             IA-64 Options.      (line  147)
* mno-sched-control-spec:                IA-64 Options.      (line  140)
* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  181)
* mno-sched-in-control-spec:             IA-64 Options.      (line  161)
* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  174)
* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  167)
* mno-sched-prolog:                      ARM Options.        (line   32)
* mno-sdata:                             IA-64 Options.      (line   42)
* mno-sdata <1>:                         RS/6000 and PowerPC Options.
                                                             (line  690)
* mno-sep-data:                          Blackfin Options.   (line  112)
* mno-serialize-volatile:                Xtensa Options.     (line   35)
* mno-short:                             M680x0 Options.     (line  221)
* mno-side-effects:                      CRIS Options.       (line   46)
* mno-sim:                               RX Options.         (line   69)
* 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  269)
* mno-soft-float:                        DEC Alpha Options.  (line   10)
* mno-space-regs:                        HPPA Options.       (line   45)
* mno-spe:                               RS/6000 and PowerPC Options.
                                                             (line  229)
* mno-specld-anomaly:                    Blackfin Options.   (line   52)
* mno-split-addresses:                   MIPS Options.       (line  410)
* mno-sse:                               i386 and x86-64 Options.
                                                             (line  444)
* mno-stack-align:                       CRIS Options.       (line   55)
* mno-stack-bias:                        SPARC Options.      (line  211)
* mno-strict-align:                      M680x0 Options.     (line  282)
* mno-strict-align <1>:                  RS/6000 and PowerPC Options.
                                                             (line  455)
* mno-string:                            RS/6000 and PowerPC Options.
                                                             (line  390)
* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
                                                             (line  277)
* mno-sym32:                             MIPS Options.       (line  308)
* mno-target-align:                      Xtensa Options.     (line   59)
* mno-text-section-literals:             Xtensa Options.     (line   47)
* mno-tls-markers:                       RS/6000 and PowerPC Options.
                                                             (line  748)
* mno-toc:                               RS/6000 and PowerPC Options.
                                                             (line  480)
* mno-toplevel-symbols:                  MMIX Options.       (line   39)
* mno-tpf-trace:                         S/390 and zSeries Options.
                                                             (line  129)
* mno-unaligned-doubles:                 SPARC Options.      (line   59)
* mno-uninit-const-in-rodata:            MIPS Options.       (line  380)
* mno-update:                            RS/6000 and PowerPC Options.
                                                             (line  401)
* mno-v8plus:                            SPARC Options.      (line  155)
* mno-vis:                               SPARC Options.      (line  162)
* mno-vliw-branch:                       FRV Options.        (line  208)
* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
* mno-vrsave:                            RS/6000 and PowerPC Options.
                                                             (line  199)
* mno-vsx:                               RS/6000 and PowerPC Options.
                                                             (line  243)
* mno-wide-bitfields:                    MCore Options.      (line   23)
* mno-xgot:                              M680x0 Options.     (line  314)
* mno-xgot <1>:                          MIPS Options.       (line  191)
* mno-xl-compat:                         RS/6000 and PowerPC Options.
                                                             (line  312)
* mno-zero-extend:                       MMIX Options.       (line   26)
* mnobitfield:                           M680x0 Options.     (line  226)
* mnoieee:                               SH Options.         (line  117)
* mnoliw:                                MN10300 Options.    (line   60)
* mnomacsave:                            SH Options.         (line  112)
* mnominmax:                             M68hc1x Options.    (line   31)
* mnop-fun-dllimport:                    i386 and x86-64 Windows Options.
                                                             (line   22)
* mold-mnemonics:                        RS/6000 and PowerPC Options.
                                                             (line  104)
* momit-leaf-frame-pointer:              Blackfin Options.   (line   40)
* momit-leaf-frame-pointer <1>:          i386 and x86-64 Options.
                                                             (line  619)
* mone-byte-bool:                        Darwin Options.     (line   91)
* moptimize-membar:                      FRV Options.        (line  244)
* MP:                                    Preprocessor Options.
                                                             (line  227)
* 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  141)
* mpaired:                               RS/6000 and PowerPC Options.
                                                             (line  234)
* mpaired-single:                        MIPS Options.       (line  273)
* mpc32:                                 i386 and x86-64 Options.
                                                             (line  339)
* mpc64:                                 i386 and x86-64 Options.
                                                             (line  339)
* mpc80:                                 i386 and x86-64 Options.
                                                             (line  339)
* mpcrel:                                M680x0 Options.     (line  274)
* mpdebug:                               CRIS Options.       (line   36)
* mpe:                                   RS/6000 and PowerPC Options.
                                                             (line  331)
* mpe-aligned-commons:                   i386 and x86-64 Windows Options.
                                                             (line   53)
* mpic-register:                         ARM Options.        (line  198)
* mplt:                                  MIPS Options.       (line  181)
* mpoke-function-name:                   ARM Options.        (line  212)
* mpopcntb:                              RS/6000 and PowerPC Options.
                                                             (line   33)
* mpopcntd:                              RS/6000 and PowerPC Options.
                                                             (line   33)
* mportable-runtime:                     HPPA Options.       (line   71)
* mpower:                                RS/6000 and PowerPC Options.
                                                             (line   33)
* mpower2:                               RS/6000 and PowerPC Options.
                                                             (line   33)
* mpowerpc:                              RS/6000 and PowerPC Options.
                                                             (line   33)
* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
                                                             (line   33)
* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
                                                             (line   33)
* mpowerpc64:                            RS/6000 and PowerPC Options.
                                                             (line   33)
* mprefer-avx128:                        i386 and x86-64 Options.
                                                             (line  493)
* mprefergot:                            SH Options.         (line  148)
* mpreferred-stack-boundary:             i386 and x86-64 Options.
                                                             (line  369)
* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
                                                             (line  509)
* mprolog-function:                      V850 Options.       (line   23)
* mprologue-epilogue:                    CRIS Options.       (line   71)
* mprototype:                            RS/6000 and PowerPC Options.
                                                             (line  604)
* mpt-fixed:                             SH Options.         (line  241)
* mpush-args:                            CRX Options.        (line   13)
* mpush-args <1>:                        i386 and x86-64 Options.
                                                             (line  573)
* MQ:                                    Preprocessor Options.
                                                             (line  254)
* mr10k-cache-barrier:                   MIPS Options.       (line  532)
* mrecip:                                i386 and x86-64 Options.
                                                             (line  525)
* mrecip <1>:                            RS/6000 and PowerPC Options.
                                                             (line  760)
* mrecip-precision:                      RS/6000 and PowerPC Options.
                                                             (line  796)
* mrecip=opt:                            RS/6000 and PowerPC Options.
                                                             (line  773)
* mregister-names:                       IA-64 Options.      (line   37)
* mregnames:                             RS/6000 and PowerPC Options.
                                                             (line  709)
* mregparm:                              i386 and x86-64 Options.
                                                             (line  306)
* mrelax:                                H8/300 Options.     (line    9)
* mrelax <1>:                            MN10300 Options.    (line   47)
* mrelax <2>:                            RX Options.         (line   93)
* mrelax <3>:                            SH Options.         (line   86)
* mrelax-immediate:                      MCore Options.      (line   19)
* mrelax-pic-calls:                      MIPS Options.       (line  657)
* mrelocatable:                          RS/6000 and PowerPC Options.
                                                             (line  460)
* mrelocatable-lib:                      RS/6000 and PowerPC Options.
                                                             (line  471)
* mrepeat:                               MeP Options.        (line   96)
* mreturn-pointer-on-d0:                 MN10300 Options.    (line   37)
* mrodata:                               ARC Options.        (line   30)
* mrtd:                                  i386 and x86-64 Options.
                                                             (line  282)
* mrtd <1>:                              M680x0 Options.     (line  235)
* mrtd <2>:                              Function Attributes.
                                                             (line  176)
* mrtp:                                  VxWorks Options.    (line   11)
* 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:                                 i386 and x86-64 Options.
                                                             (line  505)
* msatur:                                MeP Options.        (line  105)
* msave-acc-in-interrupts:               RX Options.         (line  107)
* mscc:                                  FRV Options.        (line  173)
* msched-ar-data-spec:                   IA-64 Options.      (line  134)
* msched-ar-in-data-spec:                IA-64 Options.      (line  154)
* msched-br-data-spec:                   IA-64 Options.      (line  128)
* msched-br-in-data-spec:                IA-64 Options.      (line  147)
* msched-control-spec:                   IA-64 Options.      (line  140)
* msched-costly-dep:                     RS/6000 and PowerPC Options.
                                                             (line  516)
* msched-count-spec-in-critical-path:    IA-64 Options.      (line  181)
* msched-fp-mem-deps-zero-cost:          IA-64 Options.      (line  198)
* msched-in-control-spec:                IA-64 Options.      (line  161)
* 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  174)
* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  167)
* 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   78)
* 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  677)
* msdata=data:                           RS/6000 and PowerPC Options.
                                                             (line  682)
* msdata=default:                        RS/6000 and PowerPC Options.
                                                             (line  677)
* msdata=eabi:                           RS/6000 and PowerPC Options.
                                                             (line  658)
* msdata=none:                           M32R/D Options.     (line   40)
* msdata=none <1>:                       RS/6000 and PowerPC Options.
                                                             (line  690)
* msdata=sdata:                          M32R/D Options.     (line   49)
* msdata=sysv:                           RS/6000 and PowerPC Options.
                                                             (line  668)
* msdata=use:                            M32R/D Options.     (line   53)
* msdram:                                Blackfin Options.   (line  163)
* msdram <1>:                            MeP Options.        (line  110)
* msecure-plt:                           RS/6000 and PowerPC Options.
                                                             (line  209)
* msel-sched-dont-check-control-spec:    IA-64 Options.      (line  203)
* msep-data:                             Blackfin Options.   (line  106)
* mserialize-volatile:                   Xtensa Options.     (line   35)
* mshared-library-id:                    Blackfin Options.   (line   99)
* mshort:                                M680x0 Options.     (line  215)
* mshort <1>:                            M68hc1x Options.    (line   40)
* msign-extend-enabled:                  LM32 Options.       (line   18)
* msim:                                  Blackfin Options.   (line   33)
* msim <1>:                              M32C Options.       (line   13)
* msim <2>:                              MeP Options.        (line  114)
* msim <3>:                              RS/6000 and PowerPC Options.
                                                             (line  614)
* msim <4>:                              RX Options.         (line   69)
* msim <5>:                              Xstormy16 Options.  (line    9)
* msimnovec:                             MeP Options.        (line  117)
* msimple-fpu:                           RS/6000 and PowerPC Options.
                                                             (line  364)
* msingle-exit:                          MMIX Options.       (line   65)
* msingle-float:                         MIPS Options.       (line  233)
* msingle-float <1>:                     RS/6000 and PowerPC Options.
                                                             (line  360)
* msingle-pic-base:                      ARM Options.        (line  192)
* msingle-pic-base <1>:                  RS/6000 and PowerPC Options.
                                                             (line  503)
* msio:                                  HPPA Options.       (line  105)
* mslow-bytes:                           MCore Options.      (line   35)
* msmall-data:                           DEC Alpha Options.  (line  195)
* msmall-data-limit:                     RX Options.         (line   47)
* msmall-divides:                        MicroBlaze Options. (line   38)
* 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  213)
* msmartmips:                            MIPS Options.       (line  269)
* msoft-float:                           ARM Options.        (line   60)
* msoft-float <1>:                       DEC Alpha Options.  (line   10)
* msoft-float <2>:                       FRV Options.        (line   27)
* msoft-float <3>:                       HPPA Options.       (line   91)
* msoft-float <4>:                       i386 and x86-64 Options.
                                                             (line  202)
* msoft-float <5>:                       M680x0 Options.     (line  199)
* msoft-float <6>:                       MicroBlaze Options. (line    7)
* msoft-float <7>:                       MIPS Options.       (line  229)
* msoft-float <8>:                       PDP-11 Options.     (line   13)
* msoft-float <9>:                       RS/6000 and PowerPC Options.
                                                             (line  354)
* msoft-float <10>:                      S/390 and zSeries Options.
                                                             (line   11)
* msoft-float <11>:                      SPARC Options.      (line   25)
* msoft-quad-float:                      SPARC Options.      (line   45)
* msoft-reg-count:                       M68hc1x Options.    (line   43)
* mspace:                                SH Options.         (line  145)
* mspace <1>:                            V850 Options.       (line   30)
* mspe:                                  RS/6000 and PowerPC Options.
                                                             (line  229)
* mspecld-anomaly:                       Blackfin Options.   (line   47)
* msplit-addresses:                      MIPS Options.       (line  410)
* msse:                                  i386 and x86-64 Options.
                                                             (line  444)
* msse2avx:                              i386 and x86-64 Options.
                                                             (line  637)
* msseregparm:                           i386 and x86-64 Options.
                                                             (line  317)
* mstack-align:                          CRIS Options.       (line   55)
* mstack-bias:                           SPARC Options.      (line  211)
* mstack-check-l1:                       Blackfin Options.   (line   73)
* mstack-guard:                          S/390 and zSeries Options.
                                                             (line  154)
* mstack-increment:                      MCore Options.      (line   50)
* mstack-size:                           S/390 and zSeries Options.
                                                             (line  154)
* mstackrealign:                         i386 and x86-64 Options.
                                                             (line  360)
* mstdmain:                              SPU Options.        (line   44)
* mstrict-align:                         M680x0 Options.     (line  282)
* mstrict-align <1>:                     RS/6000 and PowerPC Options.
                                                             (line  455)
* mstring:                               RS/6000 and PowerPC Options.
                                                             (line  390)
* mstringop-strategy=ALG:                i386 and x86-64 Options.
                                                             (line  612)
* mstructure-size-boundary:              ARM Options.        (line  147)
* msvr4-struct-return:                   RS/6000 and PowerPC Options.
                                                             (line  578)
* msym32:                                MIPS Options.       (line  308)
* msynci:                                MIPS Options.       (line  642)
* MT:                                    Preprocessor Options.
                                                             (line  239)
* mtarget-align:                         Xtensa Options.     (line   59)
* mtda:                                  V850 Options.       (line   34)
* mtext:                                 ARC Options.        (line   30)
* mtext-section-literals:                Xtensa Options.     (line   47)
* mtf:                                   MeP Options.        (line  121)
* mthread:                               i386 and x86-64 Windows Options.
                                                             (line   26)
* mthreads:                              i386 and x86-64 Options.
                                                             (line  588)
* mthumb:                                ARM Options.        (line  233)
* mthumb-interwork:                      ARM Options.        (line   25)
* mtiny-stack:                           AVR Options.        (line   40)
* mtiny=:                                MeP Options.        (line  125)
* mTLS:                                  FRV Options.        (line   90)
* mtls:                                  FRV Options.        (line   94)
* mtls-direct-seg-refs:                  i386 and x86-64 Options.
                                                             (line  627)
* mtls-markers:                          RS/6000 and PowerPC Options.
                                                             (line  748)
* mtls-size:                             IA-64 Options.      (line  112)
* mtoc:                                  RS/6000 and PowerPC Options.
                                                             (line  480)
* mtomcat-stats:                         FRV Options.        (line  254)
* mtoplevel-symbols:                     MMIX Options.       (line   39)
* mtp:                                   ARM Options.        (line  270)
* mtpcs-frame:                           ARM Options.        (line  243)
* mtpcs-leaf-frame:                      ARM Options.        (line  249)
* mtpf-trace:                            S/390 and zSeries Options.
                                                             (line  129)
* mtrap-precision:                       DEC Alpha Options.  (line  109)
* mtune:                                 ARM Options.        (line   98)
* mtune <1>:                             CRIS Options.       (line   17)
* mtune <2>:                             DEC Alpha Options.  (line  267)
* mtune <3>:                             i386 and x86-64 Options.
                                                             (line   10)
* mtune <4>:                             IA-64 Options.      (line  116)
* mtune <5>:                             M680x0 Options.     (line   67)
* mtune <6>:                             MIPS Options.       (line   62)
* mtune <7>:                             MN10300 Options.    (line   31)
* mtune <8>:                             RS/6000 and PowerPC Options.
                                                             (line  168)
* mtune <9>:                             S/390 and zSeries Options.
                                                             (line  122)
* mtune <10>:                            SPARC Options.      (line  143)
* muclibc:                               GNU/Linux Options.  (line   13)
* muls:                                  Score Options.      (line   18)
* multcost=NUMBER:                       SH Options.         (line  158)
* multilib-library-pic:                  FRV Options.        (line  110)
* multiply-enabled:                      LM32 Options.       (line   15)
* multiply_defined:                      Darwin Options.     (line  197)
* multiply_defined_unused:               Darwin Options.     (line  197)
* multi_module:                          Darwin Options.     (line  197)
* munaligned-doubles:                    SPARC Options.      (line   59)
* municode:                              i386 and x86-64 Windows Options.
                                                             (line   30)
* muninit-const-in-rodata:               MIPS Options.       (line  380)
* 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  401)
* muser-enabled:                         LM32 Options.       (line   21)
* musermode:                             SH Options.         (line  153)
* mv850:                                 V850 Options.       (line   49)
* mv850e:                                V850 Options.       (line   81)
* mv850e1:                               V850 Options.       (line   73)
* mv850e2:                               V850 Options.       (line   69)
* mv850e2v3:                             V850 Options.       (line   64)
* mv850es:                               V850 Options.       (line   77)
* mv8plus:                               SPARC Options.      (line  155)
* mveclibabi:                            i386 and x86-64 Options.
                                                             (line  542)
* mveclibabi <1>:                        RS/6000 and PowerPC Options.
                                                             (line  805)
* mvect8-ret-in-mem:                     i386 and x86-64 Options.
                                                             (line  327)
* mvis:                                  SPARC Options.      (line  162)
* mvliw-branch:                          FRV Options.        (line  201)
* mvms-return-codes:                     DEC Alpha/VMS Options.
                                                             (line    9)
* mvms-return-codes <1>:                 IA-64/VMS Options.  (line    9)
* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
* mvr4130-align:                         MIPS Options.       (line  631)
* mvrsave:                               RS/6000 and PowerPC Options.
                                                             (line  199)
* mvsx:                                  RS/6000 and PowerPC Options.
                                                             (line  243)
* mvxworks:                              RS/6000 and PowerPC Options.
                                                             (line  635)
* mvzeroupper:                           i386 and x86-64 Options.
                                                             (line  487)
* mwarn-cell-microcode:                  RS/6000 and PowerPC Options.
                                                             (line  205)
* mwarn-dynamicstack:                    S/390 and zSeries Options.
                                                             (line  148)
* mwarn-framesize:                       S/390 and zSeries Options.
                                                             (line  140)
* mwarn-reloc:                           SPU Options.        (line   10)
* mwide-bitfields:                       MCore Options.      (line   23)
* mwin32:                                i386 and x86-64 Windows Options.
                                                             (line   35)
* mwindows:                              i386 and x86-64 Windows Options.
                                                             (line   41)
* mword-relocations:                     ARM Options.        (line  278)
* mwords-little-endian:                  ARM Options.        (line   71)
* mxgot:                                 M680x0 Options.     (line  314)
* mxgot <1>:                             MIPS Options.       (line  191)
* mxilinx-fpu:                           RS/6000 and PowerPC Options.
                                                             (line  374)
* mxl-barrel-shift:                      MicroBlaze Options. (line   32)
* mxl-compat:                            RS/6000 and PowerPC Options.
                                                             (line  312)
* mxl-float-convert:                     MicroBlaze Options. (line   50)
* mxl-float-sqrt:                        MicroBlaze Options. (line   53)
* mxl-gp-opt:                            MicroBlaze Options. (line   44)
* mxl-multiply-high:                     MicroBlaze Options. (line   47)
* mxl-pattern-compare:                   MicroBlaze Options. (line   35)
* mxl-soft-div:                          MicroBlaze Options. (line   29)
* mxl-soft-mul:                          MicroBlaze Options. (line   26)
* mxl-stack-check:                       MicroBlaze Options. (line   41)
* myellowknife:                          RS/6000 and PowerPC Options.
                                                             (line  630)
* mzarch:                                S/390 and zSeries Options.
                                                             (line   94)
* mzda:                                  V850 Options.       (line   45)
* mzero-extend:                          MMIX Options.       (line   26)
* no-canonical-prefixes:                 Overall Options.    (line  338)
* no-integrated-cpp:                     C Dialect Options.  (line  275)
* noall_load:                            Darwin Options.     (line  197)
* nocpp:                                 MIPS Options.       (line  475)
* nodefaultlibs:                         Link Options.       (line   62)
* nofixprebinding:                       Darwin Options.     (line  197)
* nofpu:                                 RX Options.         (line   17)
* nolibdld:                              HPPA Options.       (line  188)
* nomultidefs:                           Darwin Options.     (line  197)
* non-static:                            VxWorks Options.    (line   16)
* noprebind:                             Darwin Options.     (line  197)
* noseglinkedit:                         Darwin Options.     (line  197)
* nostartfiles:                          Link Options.       (line   57)
* nostdinc:                              Preprocessor Options.
                                                             (line  387)
* nostdinc++:                            C++ Dialect Options.
                                                             (line  320)
* nostdinc++ <1>:                        Preprocessor Options.
                                                             (line  392)
* nostdlib:                              Link Options.       (line   73)
* no_dead_strip_inits_and_terms:         Darwin Options.     (line  197)
* o:                                     Overall Options.    (line  192)
* O:                                     Optimize Options.   (line   39)
* o <1>:                                 Preprocessor Options.
                                                             (line   75)
* O0:                                    Optimize Options.   (line  126)
* O1:                                    Optimize Options.   (line   39)
* O2:                                    Optimize Options.   (line   82)
* O3:                                    Optimize Options.   (line  119)
* Ofast:                                 Optimize Options.   (line  140)
* Os:                                    Optimize Options.   (line  130)
* p:                                     Debugging Options.  (line  290)
* P:                                     Preprocessor Options.
                                                             (line  602)
* pagezero_size:                         Darwin Options.     (line  197)
* param:                                 Optimize Options.   (line 2152)
* pass-exit-codes:                       Overall Options.    (line  150)
* pedantic:                              Standards.          (line   16)
* pedantic <1>:                          Warning Options.    (line   70)
* pedantic <2>:                          Preprocessor Options.
                                                             (line  163)
* 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  111)
* pedantic-errors <2>:                   Preprocessor Options.
                                                             (line  168)
* pedantic-errors <3>:                   Non-bugs.           (line  216)
* pedantic-errors <4>:                   Warnings and Errors.
                                                             (line   25)
* pg:                                    Debugging Options.  (line  296)
* pie:                                   Link Options.       (line   95)
* pipe:                                  Overall Options.    (line  215)
* prebind:                               Darwin Options.     (line  197)
* prebind_all_twolevel_modules:          Darwin Options.     (line  197)
* print-file-name:                       Debugging Options.  (line 1047)
* print-libgcc-file-name:                Debugging Options.  (line 1081)
* print-multi-directory:                 Debugging Options.  (line 1053)
* print-multi-lib:                       Debugging Options.  (line 1058)
* print-multi-os-directory:              Debugging Options.  (line 1065)
* print-multiarch:                       Debugging Options.  (line 1074)
* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
                                                             (line  203)
* print-prog-name:                       Debugging Options.  (line 1078)
* print-search-dirs:                     Debugging Options.  (line 1089)
* print-sysroot:                         Debugging Options.  (line 1102)
* print-sysroot-headers-suffix:          Debugging Options.  (line 1109)
* private_bundle:                        Darwin Options.     (line  197)
* pthread:                               RS/6000 and PowerPC Options.
                                                             (line  755)
* pthread <1>:                           Solaris 2 Options.  (line   36)
* pthreads:                              Solaris 2 Options.  (line   30)
* Q:                                     Debugging Options.  (line  302)
* Qn:                                    System V Options.   (line   18)
* Qy:                                    System V Options.   (line   14)
* rdynamic:                              Link Options.       (line  101)
* read_only_relocs:                      Darwin Options.     (line  197)
* remap:                                 Preprocessor Options.
                                                             (line  649)
* S:                                     Overall Options.    (line  175)
* S <1>:                                 Link Options.       (line   20)
* s:                                     Link Options.       (line  108)
* save-temps:                            Debugging Options.  (line  955)
* save-temps=obj:                        Debugging Options.  (line  981)
* sectalign:                             Darwin Options.     (line  197)
* sectcreate:                            Darwin Options.     (line  197)
* sectobjectsymbols:                     Darwin Options.     (line  197)
* sectobjectsymbols <1>:                 Darwin Options.     (line  197)
* sectorder:                             Darwin Options.     (line  197)
* seg1addr:                              Darwin Options.     (line  197)
* segaddr:                               Darwin Options.     (line  197)
* seglinkedit:                           Darwin Options.     (line  197)
* segprot:                               Darwin Options.     (line  197)
* segs_read_only_addr:                   Darwin Options.     (line  197)
* segs_read_only_addr <1>:               Darwin Options.     (line  197)
* segs_read_write_addr:                  Darwin Options.     (line  197)
* segs_read_write_addr <1>:              Darwin Options.     (line  197)
* seg_addr_table:                        Darwin Options.     (line  197)
* seg_addr_table_filename:               Darwin Options.     (line  197)
* shared:                                Link Options.       (line  116)
* shared-libgcc:                         Link Options.       (line  124)
* sim:                                   CRIS Options.       (line   94)
* sim2:                                  CRIS Options.       (line   99)
* single_module:                         Darwin Options.     (line  197)
* specs:                                 Directory Options.  (line   86)
* static:                                Link Options.       (line  112)
* static <1>:                            Darwin Options.     (line  197)
* static <2>:                            HPPA Options.       (line  192)
* static-libgcc:                         Link Options.       (line  124)
* std:                                   Standards.          (line   16)
* std <1>:                               C Dialect Options.  (line   46)
* std <2>:                               Other Builtins.     (line   22)
* std <3>:                               Non-bugs.           (line  107)
* std=:                                  Preprocessor Options.
                                                             (line  328)
* sub_library:                           Darwin Options.     (line  197)
* sub_umbrella:                          Darwin Options.     (line  197)
* symbolic:                              Link Options.       (line  171)
* sysroot:                               Directory Options.  (line   94)
* T:                                     Link Options.       (line  177)
* target-help:                           Overall Options.    (line  230)
* target-help <1>:                       Preprocessor Options.
                                                             (line  654)
* threads:                               HPPA Options.       (line  205)
* threads <1>:                           Solaris 2 Options.  (line   24)
* time:                                  Debugging Options.  (line  996)
* tno-android-cc:                        GNU/Linux Options.  (line   31)
* tno-android-ld:                        GNU/Linux Options.  (line   35)
* traditional:                           C Dialect Options.  (line  287)
* traditional <1>:                       Incompatibilities.  (line    6)
* traditional-cpp:                       C Dialect Options.  (line  287)
* traditional-cpp <1>:                   Preprocessor Options.
                                                             (line  632)
* trigraphs:                             C Dialect Options.  (line  271)
* trigraphs <1>:                         Preprocessor Options.
                                                             (line  636)
* twolevel_namespace:                    Darwin Options.     (line  197)
* U:                                     Preprocessor Options.
                                                             (line   57)
* u:                                     Link Options.       (line  210)
* umbrella:                              Darwin Options.     (line  197)
* undef:                                 Preprocessor Options.
                                                             (line   61)
* undefined:                             Darwin Options.     (line  197)
* unexported_symbols_list:               Darwin Options.     (line  197)
* v:                                     Overall Options.    (line  203)
* v <1>:                                 Preprocessor Options.
                                                             (line  658)
* version:                               Overall Options.    (line  342)
* version <1>:                           Preprocessor Options.
                                                             (line  670)
* w:                                     Warning Options.    (line   25)
* W:                                     Warning Options.    (line  164)
* W <1>:                                 Warning Options.    (line 1150)
* W <2>:                                 Warning Options.    (line 1248)
* w <1>:                                 Preprocessor Options.
                                                             (line  159)
* W <3>:                                 Incompatibilities.  (line   64)
* Wa:                                    Assembler Options.  (line    9)
* Wabi:                                  C++ Dialect Options.
                                                             (line  334)
* Waddress:                              Warning Options.    (line 1078)
* Waggregate-return:                     Warning Options.    (line 1096)
* Wall:                                  Warning Options.    (line  115)
* Wall <1>:                              Preprocessor Options.
                                                             (line   81)
* Wall <2>:                              Standard Libraries. (line    6)
* Warray-bounds:                         Warning Options.    (line  778)
* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
                                                             (line  157)
* Wattributes:                           Warning Options.    (line 1101)
* Wbad-function-cast:                    Warning Options.    (line  968)
* Wbuiltin-macro-redefined:              Warning Options.    (line 1107)
* Wcast-align:                           Warning Options.    (line  999)
* Wcast-qual:                            Warning Options.    (line  983)
* Wchar-subscripts:                      Warning Options.    (line  203)
* Wclobbered:                            Warning Options.    (line 1019)
* Wcomment:                              Warning Options.    (line  208)
* Wcomment <1>:                          Preprocessor Options.
                                                             (line   89)
* Wcomments:                             Preprocessor Options.
                                                             (line   89)
* Wconversion:                           Warning Options.    (line 1023)
* Wconversion-null:                      Warning Options.    (line 1041)
* Wcoverage-mismatch:                    Language Independent Options.
                                                             (line   42)
* Wctor-dtor-privacy:                    C++ Dialect Options.
                                                             (line  441)
* Wdeclaration-after-statement:          Warning Options.    (line  909)
* Wdeprecated:                           Warning Options.    (line 1235)
* Wdeprecated-declarations:              Warning Options.    (line 1239)
* Wdisabled-optimization:                Warning Options.    (line 1365)
* Wdiv-by-zero:                          Warning Options.    (line  783)
* Wdouble-promotion:                     Warning Options.    (line  218)
* weak_reference_mismatches:             Darwin Options.     (line  197)
* Weffc++:                               C++ Dialect Options.
                                                             (line  474)
* Wempty-body:                           Warning Options.    (line 1045)
* Wendif-labels:                         Warning Options.    (line  919)
* Wendif-labels <1>:                     Preprocessor Options.
                                                             (line  136)
* Wenum-compare:                         Warning Options.    (line 1049)
* Werror:                                Warning Options.    (line   28)
* Werror <1>:                            Preprocessor Options.
                                                             (line  149)
* Werror=:                               Warning Options.    (line   31)
* Wextra:                                Warning Options.    (line  164)
* Wextra <1>:                            Warning Options.    (line 1150)
* Wextra <2>:                            Warning Options.    (line 1248)
* Wfatal-errors:                         Warning Options.    (line   48)
* Wfloat-equal:                          Warning Options.    (line  810)
* Wformat:                               Warning Options.    (line  236)
* Wformat <1>:                           Warning Options.    (line 1168)
* Wformat <2>:                           Function Attributes.
                                                             (line  416)
* Wformat-contains-nul:                  Warning Options.    (line  273)
* Wformat-extra-args:                    Warning Options.    (line  277)
* Wformat-nonliteral:                    Warning Options.    (line  294)
* Wformat-nonliteral <1>:                Function Attributes.
                                                             (line  480)
* Wformat-security:                      Warning Options.    (line  299)
* Wformat-y2k:                           Warning Options.    (line  269)
* Wformat-zero-length:                   Warning Options.    (line  290)
* Wformat=2:                             Warning Options.    (line  310)
* Wframe-larger-than:                    Warning Options.    (line  933)
* whatsloaded:                           Darwin Options.     (line  197)
* whyload:                               Darwin Options.     (line  197)
* Wignored-qualifiers:                   Warning Options.    (line  349)
* Wimplicit:                             Warning Options.    (line  345)
* Wimplicit-function-declaration:        Warning Options.    (line  339)
* Wimplicit-int:                         Warning Options.    (line  335)
* Winit-self:                            Warning Options.    (line  322)
* Winline:                               Warning Options.    (line 1304)
* Winline <1>:                           Inline.             (line   63)
* Wint-to-pointer-cast:                  Warning Options.    (line 1331)
* Winvalid-offsetof:                     Warning Options.    (line 1317)
* Winvalid-pch:                          Warning Options.    (line 1340)
* Wjump-misses-init:                     Warning Options.    (line 1054)
* Wl:                                    Link Options.       (line  202)
* Wlarger-than-LEN:                      Warning Options.    (line  930)
* Wlarger-than=LEN:                      Warning Options.    (line  930)
* Wlogical-op:                           Warning Options.    (line 1091)
* Wlong-long:                            Warning Options.    (line 1344)
* Wmain:                                 Warning Options.    (line  360)
* Wmissing-braces:                       Warning Options.    (line  367)
* Wmissing-declarations:                 Warning Options.    (line 1142)
* Wmissing-field-initializers:           Warning Options.    (line 1150)
* Wmissing-format-attribute:             Warning Options.    (line 1168)
* Wmissing-include-dirs:                 Warning Options.    (line  377)
* Wmissing-parameter-type:               Warning Options.    (line 1128)
* Wmissing-prototypes:                   Warning Options.    (line 1136)
* Wmultichar:                            Warning Options.    (line 1187)
* Wnested-externs:                       Warning Options.    (line 1301)
* Wno-abi:                               C++ Dialect Options.
                                                             (line  334)
* Wno-address:                           Warning Options.    (line 1078)
* Wno-aggregate-return:                  Warning Options.    (line 1096)
* Wno-all:                               Warning Options.    (line  115)
* Wno-array-bounds:                      Warning Options.    (line  778)
* Wno-assign-intercept:                  Objective-C and Objective-C++ Dialect Options.
                                                             (line  157)
* Wno-attributes:                        Warning Options.    (line 1101)
* Wno-bad-function-cast:                 Warning Options.    (line  968)
* Wno-builtin-macro-redefined:           Warning Options.    (line 1107)
* Wno-cast-align:                        Warning Options.    (line  999)
* Wno-cast-qual:                         Warning Options.    (line  983)
* Wno-char-subscripts:                   Warning Options.    (line  203)
* Wno-clobbered:                         Warning Options.    (line 1019)
* Wno-comment:                           Warning Options.    (line  208)
* Wno-conversion:                        Warning Options.    (line 1023)
* Wno-conversion-null:                   Warning Options.    (line 1041)
* Wno-ctor-dtor-privacy:                 C++ Dialect Options.
                                                             (line  441)
* Wno-declaration-after-statement:       Warning Options.    (line  909)
* Wno-deprecated:                        Warning Options.    (line 1235)
* Wno-deprecated-declarations:           Warning Options.    (line 1239)
* Wno-disabled-optimization:             Warning Options.    (line 1365)
* Wno-div-by-zero:                       Warning Options.    (line  783)
* Wno-double-promotion:                  Warning Options.    (line  218)
* Wno-effc++:                            C++ Dialect Options.
                                                             (line  474)
* Wno-empty-body:                        Warning Options.    (line 1045)
* Wno-endif-labels:                      Warning Options.    (line  919)
* Wno-enum-compare:                      Warning Options.    (line 1049)
* Wno-error:                             Warning Options.    (line   28)
* Wno-error=:                            Warning Options.    (line   31)
* Wno-extra:                             Warning Options.    (line  164)
* Wno-extra <1>:                         Warning Options.    (line 1150)
* Wno-extra <2>:                         Warning Options.    (line 1248)
* Wno-fatal-errors:                      Warning Options.    (line   48)
* Wno-float-equal:                       Warning Options.    (line  810)
* Wno-format:                            Warning Options.    (line  236)
* Wno-format <1>:                        Warning Options.    (line 1168)
* Wno-format-contains-nul:               Warning Options.    (line  273)
* Wno-format-extra-args:                 Warning Options.    (line  277)
* Wno-format-nonliteral:                 Warning Options.    (line  294)
* Wno-format-security:                   Warning Options.    (line  299)
* Wno-format-y2k:                        Warning Options.    (line  269)
* Wno-format-zero-length:                Warning Options.    (line  290)
* Wno-format=2:                          Warning Options.    (line  310)
* Wno-ignored-qualifiers:                Warning Options.    (line  349)
* Wno-implicit:                          Warning Options.    (line  345)
* Wno-implicit-function-declaration:     Warning Options.    (line  339)
* Wno-implicit-int:                      Warning Options.    (line  335)
* Wno-init-self:                         Warning Options.    (line  322)
* Wno-inline:                            Warning Options.    (line 1304)
* Wno-int-to-pointer-cast:               Warning Options.    (line 1331)
* Wno-invalid-offsetof:                  Warning Options.    (line 1317)
* Wno-invalid-pch:                       Warning Options.    (line 1340)
* Wno-jump-misses-init:                  Warning Options.    (line 1054)
* Wno-logical-op:                        Warning Options.    (line 1091)
* Wno-long-long:                         Warning Options.    (line 1344)
* Wno-main:                              Warning Options.    (line  360)
* Wno-missing-braces:                    Warning Options.    (line  367)
* Wno-missing-declarations:              Warning Options.    (line 1142)
* Wno-missing-field-initializers:        Warning Options.    (line 1150)
* Wno-missing-format-attribute:          Warning Options.    (line 1168)
* Wno-missing-include-dirs:              Warning Options.    (line  377)
* Wno-missing-parameter-type:            Warning Options.    (line 1128)
* Wno-missing-prototypes:                Warning Options.    (line 1136)
* Wno-mudflap:                           Warning Options.    (line 1385)
* Wno-multichar:                         Warning Options.    (line 1187)
* Wno-nested-externs:                    Warning Options.    (line 1301)
* Wno-noexcept:                          C++ Dialect Options.
                                                             (line  446)
* Wno-non-template-friend:               C++ Dialect Options.
                                                             (line  509)
* Wno-non-virtual-dtor:                  C++ Dialect Options.
                                                             (line  452)
* Wno-nonnull:                           Warning Options.    (line  315)
* Wno-old-style-cast:                    C++ Dialect Options.
                                                             (line  525)
* Wno-old-style-declaration:             Warning Options.    (line 1118)
* Wno-old-style-definition:              Warning Options.    (line 1124)
* Wno-overflow:                          Warning Options.    (line 1245)
* Wno-overlength-strings:                Warning Options.    (line 1389)
* Wno-overloaded-virtual:                C++ Dialect Options.
                                                             (line  531)
* Wno-override-init:                     Warning Options.    (line 1248)
* Wno-packed:                            Warning Options.    (line 1256)
* Wno-packed-bitfield-compat:            Warning Options.    (line 1273)
* Wno-padded:                            Warning Options.    (line 1290)
* Wno-parentheses:                       Warning Options.    (line  380)
* Wno-pedantic-ms-format:                Warning Options.    (line  948)
* Wno-pmf-conversions:                   C++ Dialect Options.
                                                             (line  550)
* Wno-pmf-conversions <1>:               Bound member functions.
                                                             (line   35)
* Wno-pointer-arith:                     Warning Options.    (line  954)
* Wno-pointer-sign:                      Warning Options.    (line 1374)
* Wno-pointer-to-int-cast:               Warning Options.    (line 1336)
* Wno-pragmas:                           Warning Options.    (line  664)
* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
                                                             (line  161)
* Wno-redundant-decls:                   Warning Options.    (line 1297)
* Wno-reorder:                           C++ Dialect Options.
                                                             (line  458)
* Wno-return-type:                       Warning Options.    (line  476)
* Wno-selector:                          Objective-C and Objective-C++ Dialect Options.
                                                             (line  171)
* Wno-sequence-point:                    Warning Options.    (line  430)
* Wno-shadow:                            Warning Options.    (line  923)
* Wno-sign-compare:                      Warning Options.    (line 1065)
* Wno-sign-conversion:                   Warning Options.    (line 1072)
* Wno-sign-promo:                        C++ Dialect Options.
                                                             (line  554)
* Wno-stack-protector:                   Warning Options.    (line 1380)
* Wno-strict-aliasing:                   Warning Options.    (line  669)
* Wno-strict-aliasing=n:                 Warning Options.    (line  676)
* Wno-strict-null-sentinel:              C++ Dialect Options.
                                                             (line  502)
* Wno-strict-overflow:                   Warning Options.    (line  709)
* Wno-strict-prototypes:                 Warning Options.    (line 1112)
* Wno-strict-selector-match:             Objective-C and Objective-C++ Dialect Options.
                                                             (line  183)
* Wno-suggest-attribute=:                Warning Options.    (line  759)
* Wno-suggest-attribute=const:           Warning Options.    (line  765)
* Wno-suggest-attribute=noreturn:        Warning Options.    (line  765)
* Wno-suggest-attribute=pure:            Warning Options.    (line  765)
* Wno-switch:                            Warning Options.    (line  490)
* Wno-switch-default:                    Warning Options.    (line  498)
* Wno-switch-enum:                       Warning Options.    (line  501)
* Wno-sync-nand:                         Warning Options.    (line  510)
* Wno-system-headers:                    Warning Options.    (line  788)
* Wno-traditional:                       Warning Options.    (line  824)
* Wno-traditional-conversion:            Warning Options.    (line  901)
* Wno-trampolines:                       Warning Options.    (line  799)
* Wno-trigraphs:                         Warning Options.    (line  515)
* Wno-type-limits:                       Warning Options.    (line  961)
* Wno-undeclared-selector:               Objective-C and Objective-C++ Dialect Options.
                                                             (line  191)
* Wno-undef:                             Warning Options.    (line  916)
* Wno-uninitialized:                     Warning Options.    (line  588)
* Wno-unknown-pragmas:                   Warning Options.    (line  657)
* Wno-unsafe-loop-optimizations:         Warning Options.    (line  942)
* Wno-unused:                            Warning Options.    (line  581)
* Wno-unused-but-set-parameter:          Warning Options.    (line  520)
* Wno-unused-but-set-variable:           Warning Options.    (line  529)
* Wno-unused-function:                   Warning Options.    (line  539)
* Wno-unused-label:                      Warning Options.    (line  544)
* Wno-unused-parameter:                  Warning Options.    (line  551)
* Wno-unused-result:                     Warning Options.    (line  558)
* Wno-unused-value:                      Warning Options.    (line  571)
* Wno-unused-variable:                   Warning Options.    (line  563)
* Wno-variadic-macros:                   Warning Options.    (line 1349)
* Wno-vla:                               Warning Options.    (line 1355)
* Wno-volatile-register-var:             Warning Options.    (line 1359)
* Wno-write-strings:                     Warning Options.    (line 1005)
* Wnoexcept:                             C++ Dialect Options.
                                                             (line  446)
* Wnon-template-friend:                  C++ Dialect Options.
                                                             (line  509)
* Wnon-virtual-dtor:                     C++ Dialect Options.
                                                             (line  452)
* Wnonnull:                              Warning Options.    (line  315)
* Wnormalized=:                          Warning Options.    (line 1193)
* Wold-style-cast:                       C++ Dialect Options.
                                                             (line  525)
* Wold-style-declaration:                Warning Options.    (line 1118)
* Wold-style-definition:                 Warning Options.    (line 1124)
* Woverflow:                             Warning Options.    (line 1245)
* Woverlength-strings:                   Warning Options.    (line 1389)
* Woverloaded-virtual:                   C++ Dialect Options.
                                                             (line  531)
* Woverride-init:                        Warning Options.    (line 1248)
* Wp:                                    Preprocessor Options.
                                                             (line   14)
* Wpacked:                               Warning Options.    (line 1256)
* Wpacked-bitfield-compat:               Warning Options.    (line 1273)
* Wpadded:                               Warning Options.    (line 1290)
* Wparentheses:                          Warning Options.    (line  380)
* Wpedantic-ms-format:                   Warning Options.    (line  948)
* Wpmf-conversions:                      C++ Dialect Options.
                                                             (line  550)
* Wpointer-arith:                        Warning Options.    (line  954)
* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
* Wpointer-sign:                         Warning Options.    (line 1374)
* Wpointer-to-int-cast:                  Warning Options.    (line 1336)
* Wpragmas:                              Warning Options.    (line  664)
* Wprotocol:                             Objective-C and Objective-C++ Dialect Options.
                                                             (line  161)
* wrapper:                               Overall Options.    (line  345)
* Wredundant-decls:                      Warning Options.    (line 1297)
* Wreorder:                              C++ Dialect Options.
                                                             (line  458)
* Wreturn-type:                          Warning Options.    (line  476)
* Wselector:                             Objective-C and Objective-C++ Dialect Options.
                                                             (line  171)
* Wsequence-point:                       Warning Options.    (line  430)
* Wshadow:                               Warning Options.    (line  923)
* Wsign-compare:                         Warning Options.    (line 1065)
* Wsign-conversion:                      Warning Options.    (line 1072)
* Wsign-promo:                           C++ Dialect Options.
                                                             (line  554)
* Wstack-protector:                      Warning Options.    (line 1380)
* Wstrict-aliasing:                      Warning Options.    (line  669)
* Wstrict-aliasing=n:                    Warning Options.    (line  676)
* Wstrict-null-sentinel:                 C++ Dialect Options.
                                                             (line  502)
* Wstrict-overflow:                      Warning Options.    (line  709)
* Wstrict-prototypes:                    Warning Options.    (line 1112)
* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
                                                             (line  183)
* Wsuggest-attribute=:                   Warning Options.    (line  759)
* Wsuggest-attribute=const:              Warning Options.    (line  765)
* Wsuggest-attribute=noreturn:           Warning Options.    (line  765)
* Wsuggest-attribute=pure:               Warning Options.    (line  765)
* Wswitch:                               Warning Options.    (line  490)
* Wswitch-default:                       Warning Options.    (line  498)
* Wswitch-enum:                          Warning Options.    (line  501)
* Wsync-nand:                            Warning Options.    (line  510)
* Wsystem-headers:                       Warning Options.    (line  788)
* Wsystem-headers <1>:                   Preprocessor Options.
                                                             (line  153)
* Wtraditional:                          Warning Options.    (line  824)
* Wtraditional <1>:                      Preprocessor Options.
                                                             (line  106)
* Wtraditional-conversion:               Warning Options.    (line  901)
* Wtrampolines:                          Warning Options.    (line  799)
* Wtrigraphs:                            Warning Options.    (line  515)
* Wtrigraphs <1>:                        Preprocessor Options.
                                                             (line   94)
* Wtype-limits:                          Warning Options.    (line  961)
* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
                                                             (line  191)
* Wundef:                                Warning Options.    (line  916)
* Wundef <1>:                            Preprocessor Options.
                                                             (line  112)
* Wuninitialized:                        Warning Options.    (line  588)
* Wunknown-pragmas:                      Warning Options.    (line  657)
* Wunsafe-loop-optimizations:            Warning Options.    (line  942)
* Wunsuffixed-float-constants:           Warning Options.    (line 1404)
* Wunused:                               Warning Options.    (line  581)
* Wunused-but-set-parameter:             Warning Options.    (line  520)
* Wunused-but-set-variable:              Warning Options.    (line  529)
* Wunused-function:                      Warning Options.    (line  539)
* Wunused-label:                         Warning Options.    (line  544)
* Wunused-macros:                        Preprocessor Options.
                                                             (line  117)
* Wunused-parameter:                     Warning Options.    (line  551)
* Wunused-result:                        Warning Options.    (line  558)
* Wunused-value:                         Warning Options.    (line  571)
* Wunused-variable:                      Warning Options.    (line  563)
* Wvariadic-macros:                      Warning Options.    (line 1349)
* Wvla:                                  Warning Options.    (line 1355)
* Wvolatile-register-var:                Warning Options.    (line 1359)
* Wwrite-strings:                        Warning Options.    (line 1005)
* x:                                     Overall Options.    (line  126)
* x <1>:                                 Preprocessor Options.
                                                             (line  312)
* Xassembler:                            Assembler Options.  (line   13)
* Xbind-lazy:                            VxWorks Options.    (line   26)
* Xbind-now:                             VxWorks Options.    (line   30)
* Xlinker:                               Link Options.       (line  183)
* Xpreprocessor:                         Preprocessor Options.
                                                             (line   25)
* Ym:                                    System V Options.   (line   26)
* YP:                                    System V Options.   (line   22)


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   57)
* '#pragma':                             Pragmas.            (line    6)
* #pragma implementation:                C++ Interface.      (line   39)
* '#pragma implementation', implied:     C++ Interface.      (line   46)
* #pragma interface:                     C++ Interface.      (line   20)
* '#pragma', reason for not using:       Function Attributes.
                                                             (line 1757)
* $:                                     Dollar Signs.       (line    6)
* '%' in constraint:                     Modifiers.          (line   45)
* '%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   62)
* '+' in constraint:                     Modifiers.          (line   12)
* '-lgcc', use with '-nodefaultlibs':    Link Options.       (line   82)
* '-lgcc', use with '-nostdlib':         Link Options.       (line   82)
* '-nodefaultlibs' and unresolved references: Link Options.  (line   82)
* '-nostdlib' and unresolved references: Link Options.       (line   82)
* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
                                                             (line  701)
* '//':                                  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 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)
* '_Sat' data type:                      Fixed-Point.        (line    6)
* __builtin_apply:                       Constructing Calls. (line   29)
* __builtin_apply_args:                  Constructing Calls. (line   19)
* __builtin_bswap32:                     Other Builtins.     (line  545)
* __builtin_bswap64:                     Other Builtins.     (line  550)
* __builtin_choose_expr:                 Other Builtins.     (line  155)
* __builtin_clz:                         Other Builtins.     (line  478)
* __builtin_clzl:                        Other Builtins.     (line  496)
* __builtin_clzll:                       Other Builtins.     (line  516)
* __builtin_constant_p:                  Other Builtins.     (line  196)
* __builtin_ctz:                         Other Builtins.     (line  482)
* __builtin_ctzl:                        Other Builtins.     (line  500)
* __builtin_ctzll:                       Other Builtins.     (line  520)
* __builtin_expect:                      Other Builtins.     (line  245)
* __builtin_extract_return_address:      Return Address.     (line   35)
* __builtin_ffs:                         Other Builtins.     (line  474)
* __builtin_ffsl:                        Other Builtins.     (line  492)
* __builtin_ffsll:                       Other Builtins.     (line  512)
* __builtin_fpclassify:                  Other Builtins.     (line    6)
* __builtin_fpclassify <1>:              Other Builtins.     (line  389)
* __builtin_frame_address:               Return Address.     (line   49)
* __builtin_frob_return_address:         Return Address.     (line   45)
* __builtin_huge_val:                    Other Builtins.     (line  377)
* __builtin_huge_valf:                   Other Builtins.     (line  382)
* __builtin_huge_vall:                   Other Builtins.     (line  385)
* __builtin_huge_valq:                   X86 Built-in Functions.
                                                             (line   51)
* __builtin_inf:                         Other Builtins.     (line  400)
* __builtin_infd128:                     Other Builtins.     (line  410)
* __builtin_infd32:                      Other Builtins.     (line  404)
* __builtin_infd64:                      Other Builtins.     (line  407)
* __builtin_inff:                        Other Builtins.     (line  414)
* __builtin_infl:                        Other Builtins.     (line  419)
* __builtin_infq:                        X86 Built-in Functions.
                                                             (line   48)
* __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  423)
* __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_nan:                         Other Builtins.     (line  430)
* __builtin_nand128:                     Other Builtins.     (line  452)
* __builtin_nand32:                      Other Builtins.     (line  446)
* __builtin_nand64:                      Other Builtins.     (line  449)
* __builtin_nanf:                        Other Builtins.     (line  456)
* __builtin_nanl:                        Other Builtins.     (line  459)
* __builtin_nans:                        Other Builtins.     (line  463)
* __builtin_nansf:                       Other Builtins.     (line  467)
* __builtin_nansl:                       Other Builtins.     (line  470)
* __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  489)
* __builtin_parityl:                     Other Builtins.     (line  508)
* __builtin_parityll:                    Other Builtins.     (line  528)
* __builtin_popcount:                    Other Builtins.     (line  486)
* __builtin_popcountl:                   Other Builtins.     (line  504)
* __builtin_popcountll:                  Other Builtins.     (line  524)
* __builtin_powi:                        Other Builtins.     (line    6)
* __builtin_powi <1>:                    Other Builtins.     (line  532)
* __builtin_powif:                       Other Builtins.     (line    6)
* __builtin_powif <1>:                   Other Builtins.     (line  537)
* __builtin_powil:                       Other Builtins.     (line    6)
* __builtin_powil <1>:                   Other Builtins.     (line  541)
* __builtin_prefetch:                    Other Builtins.     (line  338)
* __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_trap:                        Other Builtins.     (line  269)
* __builtin_types_compatible_p:          Other Builtins.     (line  110)
* __builtin_unreachable:                 Other Builtins.     (line  276)
* __builtin_va_arg_pack:                 Constructing Calls. (line   52)
* __builtin_va_arg_pack_len:             Constructing Calls. (line   75)
* __builtin___clear_cache:               Other Builtins.     (line  325)
* __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  258)
* '__declspec(dllimport)':               Function Attributes.
                                                             (line  291)
* __extension__:                         Alternate Keywords. (line   30)
* '__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)
* '__PRETTY_FUNCTION__' identifier:      Function Names.     (line    6)
* '__real__' keyword:                    Complex.            (line   27)
* __STDC_HOSTED__:                       Standards.          (line   13)
* __sync_add_and_fetch:                  Atomic Builtins.    (line   60)
* __sync_and_and_fetch:                  Atomic Builtins.    (line   60)
* __sync_bool_compare_and_swap:          Atomic Builtins.    (line   71)
* __sync_fetch_and_add:                  Atomic Builtins.    (line   45)
* __sync_fetch_and_and:                  Atomic Builtins.    (line   45)
* __sync_fetch_and_nand:                 Atomic Builtins.    (line   45)
* __sync_fetch_and_or:                   Atomic Builtins.    (line   45)
* __sync_fetch_and_sub:                  Atomic Builtins.    (line   45)
* __sync_fetch_and_xor:                  Atomic Builtins.    (line   45)
* __sync_lock_release:                   Atomic Builtins.    (line  100)
* __sync_lock_test_and_set:              Atomic Builtins.    (line   82)
* __sync_nand_and_fetch:                 Atomic Builtins.    (line   60)
* __sync_or_and_fetch:                   Atomic Builtins.    (line   60)
* __sync_sub_and_fetch:                  Atomic Builtins.    (line   60)
* __sync_synchronize:                    Atomic Builtins.    (line   79)
* __sync_val_compare_and_swap:           Atomic Builtins.    (line   71)
* __sync_xor_and_fetch:                  Atomic Builtins.    (line   60)
* '__thread':                            Thread-Local.       (line    6)
* ABI:                                   Compatibility.      (line    6)
* 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_operand:                       Simple Constraints. (line  156)
* 'alias' attribute:                     Function Attributes.
                                                             (line   36)
* 'aligned' attribute:                   Function Attributes.
                                                             (line   49)
* 'aligned' attribute <1>:               Variable Attributes.
                                                             (line   23)
* 'aligned' attribute <2>:               Type Attributes.    (line   31)
* alignment:                             Alignment.          (line    6)
* alloca:                                Other Builtins.     (line    6)
* 'alloca' vs variable-length arrays:    Variable Length.    (line   26)
* 'alloc_size' attribute:                Function Attributes.
                                                             (line   69)
* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
                                                             (line  886)
* alternate keywords:                    Alternate Keywords. (line    6)
* 'always_inline' function attribute:    Function Attributes.
                                                             (line   90)
* AMD x86-64 Options:                    i386 and x86-64 Options.
                                                             (line    6)
* 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  132)
* 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' constraints:                     Constraints.        (line    6)
* 'asm' expressions:                     Extended Asm.       (line    6)
* assembler instructions:                Extended Asm.       (line    6)
* assembler names for identifiers:       Asm Labels.         (line    6)
* assembly code, invalid:                Bug Criteria.       (line   12)
* 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)
* base class members:                    Name lookup.        (line    6)
* bcmp:                                  Other Builtins.     (line    6)
* 'below100' attribute:                  Variable Attributes.
                                                             (line  558)
* binary compatibility:                  Compatibility.      (line    6)
* Binary constants using the '0b' prefix: Binary constants.  (line    6)
* Blackfin Options:                      Blackfin Options.   (line    6)
* bound pointer to member function:      Bound member functions.
                                                             (line    6)
* bounds checking:                       Optimize Options.   (line  391)
* bug criteria:                          Bug Criteria.       (line    6)
* bugs:                                  Bugs.               (line    6)
* bugs, known:                           Trouble.            (line    6)
* built-in functions:                    C Dialect Options.  (line  184)
* 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  285)
* 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   66)
* C++ source file suffixes:              Invoking G++.       (line    6)
* C++ static data, declaring and defining: Static Definitions.
                                                             (line    6)
* C1X:                                   Standards.          (line   13)
* 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' attribute: Function Attributes.
                                                             (line  844)
* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes.
                                                             (line  526)
* calloc:                                Other Builtins.     (line    6)
* 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)
* 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)
* 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  509)
* character set, input:                  Preprocessor Options.
                                                             (line  522)
* character set, input normalization:    Warning Options.    (line 1193)
* character set, wide execution:         Preprocessor Options.
                                                             (line  514)
* cimag:                                 Other Builtins.     (line    6)
* cimagf:                                Other Builtins.     (line    6)
* cimagl:                                Other Builtins.     (line    6)
* 'cleanup' attribute:                   Variable Attributes.
                                                             (line   89)
* 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 1092)
* command options:                       Invoking GCC.       (line    6)
* comments, C++ style:                   C++ Comments.       (line    6)
* 'common' attribute:                    Variable Attributes.
                                                             (line  105)
* comparison of signed and unsigned values, warning: Warning Options.
                                                             (line 1065)
* 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   88)
* 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  182)
* 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  210)
* 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  124)
* CPLUS_INCLUDE_PATH:                    Environment Variables.
                                                             (line  126)
* 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)
* creal:                                 Other Builtins.     (line    6)
* crealf:                                Other Builtins.     (line    6)
* creall:                                Other Builtins.     (line    6)
* CRIS Options:                          CRIS Options.       (line    6)
* cross compiling:                       Target Options.     (line    6)
* CRX Options:                           CRX 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  125)
* 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  152)
* dependencies for make as output <1>:   Environment Variables.
                                                             (line  168)
* dependencies, 'make':                  Preprocessor Options.
                                                             (line  173)
* DEPENDENCIES_OUTPUT:                   Environment Variables.
                                                             (line  151)
* dependent name lookup:                 Name lookup.        (line    6)
* 'deprecated' attribute:                Variable Attributes.
                                                             (line  114)
* 'deprecated' attribute.:               Function Attributes.
                                                             (line  233)
* designated initializers:               Designated Inits.   (line    6)
* designator lists:                      Designated Inits.   (line   93)
* designators:                           Designated Inits.   (line   61)
* 'destructor' function attribute:       Function Attributes.
                                                             (line  210)
* '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' attribute:              Function Attributes.
                                                             (line  253)
* 'dl' integer suffix:                   Decimal Float.      (line    6)
* 'DL' integer suffix:                   Decimal Float.      (line    6)
* 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: Function Attributes.
                                                             (line  343)
* empty structures:                      Empty Structures.   (line    6)
* 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  151)
* error messages:                        Warnings and Errors.
                                                             (line    6)
* escaped newlines:                      Escaped Newlines.   (line    6)
* exception handler functions on the Blackfin processor: Function Attributes.
                                                             (line  353)
* 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' attribute.:       Function Attributes.
                                                             (line  359)
* 'F' in constraint:                     Simple Constraints. (line   92)
* fabs:                                  Other Builtins.     (line    6)
* fabsf:                                 Other Builtins.     (line    6)
* fabsl:                                 Other Builtins.     (line    6)
* 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  144)
* flexible array members:                Zero Length.        (line    6)
* 'float' as function value type:        Incompatibilities.  (line  141)
* floating point precision:              Optimize Options.   (line 1784)
* floating point precision <1>:          Disappointments.    (line   68)
* 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' attribute:   Function Attributes.
                                                             (line 1134)
* 'format' function attribute:           Function Attributes.
                                                             (line  416)
* 'format_arg' function attribute:       Function Attributes.
                                                             (line  480)
* Fortran:                               G++ and GCC.        (line    6)
* 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  802)
* function attributes:                   Function Attributes.
                                                             (line    6)
* function pointers, arithmetic:         Pointer Arith.      (line    6)
* function prototype declarations:       Function Prototypes.
                                                             (line    6)
* function without a prologue/epilogue code: Function Attributes.
                                                             (line  864)
* function, size of pointer to:          Pointer Arith.      (line    6)
* functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
                                                             (line  755)
* 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 the 386: Function Attributes.
                                                             (line    6)
* functions that are passed arguments in registers on the 386 <1>: Function Attributes.
                                                             (line 1110)
* functions that behave like malloc:     Function Attributes.
                                                             (line    6)
* functions that do not pop the argument stack on the 386: Function Attributes.
                                                             (line    6)
* functions that do pop the argument stack on the 386: Function Attributes.
                                                             (line  176)
* functions that have different compilation options on the 386: 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 the 386: Function Attributes.
                                                             (line    6)
* functions that pop the argument stack on the 386 <1>: Function Attributes.
                                                             (line  397)
* functions that pop the argument stack on the 386 <2>: Function Attributes.
                                                             (line  406)
* functions that pop the argument stack on the 386 <3>: Function Attributes.
                                                             (line 1242)
* functions that return more than once:  Function Attributes.
                                                             (line    6)
* functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
                                                             (line  876)
* functions which handle memory bank switching: Function Attributes.
                                                             (line  371)
* functions with non-null pointer arguments: Function Attributes.
                                                             (line    6)
* functions with 'printf', 'scanf', 'strftime' or 'strfmon' style arguments: Function Attributes.
                                                             (line    6)
* '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_EXEC_PREFIX:                       Environment Variables.
                                                             (line   52)
* 'gcc_struct':                          Type Attributes.    (line  318)
* 'gcc_struct' attribute:                Variable Attributes.
                                                             (line  414)
* 'gcov':                                Debugging Options.  (line  362)
* gettext:                               Other Builtins.     (line    6)
* global offset table:                   Code Gen Options.   (line  182)
* global register after 'longjmp':       Global Reg Vars.    (line   66)
* 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   95)
* Go:                                    G++ and GCC.        (line    6)
* goto with computed label:              Labels as Values.   (line    6)
* 'gprof':                               Debugging Options.  (line  295)
* 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)
* '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  218)
* hosted environment <2>:                C Dialect Options.  (line  226)
* hosted implementation:                 Standards.          (line   13)
* 'hot' function attribute:              Function Attributes.
                                                             (line 1079)
* 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)
* i386 and x86-64 Windows Options:       i386 and x86-64 Windows Options.
                                                             (line    6)
* i386 Options:                          i386 and x86-64 Options.
                                                             (line    6)
* 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' attribute:                     Function Attributes.
                                                             (line  642)
* 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   46)
* incompatibilities of GCC:              Incompatibilities.  (line    6)
* increment operators:                   Bug Criteria.       (line   17)
* index:                                 Other Builtins.     (line    6)
* indirect calls on ARM:                 Function Attributes.
                                                             (line  745)
* indirect calls on MIPS:                Function Attributes.
                                                             (line  767)
* initializations in expressions:        Compound Literals.  (line    6)
* initializers with labeled elements:    Designated Inits.   (line    6)
* initializers, non-constant:            Initializers.       (line    6)
* 'init_priority' attribute:             C++ Attributes.     (line    9)
* '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   66)
* installation trouble:                  Trouble.            (line    6)
* integrating function code:             Inline.             (line    6)
* Intel 386 Options:                     i386 and x86-64 Options.
                                                             (line    6)
* interface and implementation headers, C++: C++ Interface.  (line    6)
* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
* interrupt handler functions:           Function Attributes.
                                                             (line  139)
* interrupt handler functions <1>:       Function Attributes.
                                                             (line  391)
* interrupt handler functions <2>:       Function Attributes.
                                                             (line  587)
* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
                                                             (line  682)
* interrupt service routines on ARM:     Function Attributes.
                                                             (line  697)
* interrupt thread functions on fido:    Function Attributes.
                                                             (line  689)
* introduction:                          Top.                (line    6)
* invalid assembly code:                 Bug Criteria.       (line   12)
* invalid input:                         Bug Criteria.       (line   42)
* invoking 'g++':                        Invoking G++.       (line   22)
* 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 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)
* 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' attribute:            C++ Attributes.     (line   30)
* 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' attribute:    Function Attributes.
                                                             (line  618)
* keywords, alternate:                   Alternate Keywords. (line    6)
* known causes of trouble:               Trouble.            (line    6)
* 'l1_data' variable attribute:          Variable Attributes.
                                                             (line  327)
* 'l1_data_A' variable attribute:        Variable Attributes.
                                                             (line  327)
* 'l1_data_B' variable attribute:        Variable Attributes.
                                                             (line  327)
* 'l1_text' function attribute:          Function Attributes.
                                                             (line  706)
* 'l2' function attribute:               Function Attributes.
                                                             (line  712)
* 'l2' variable attribute:               Variable Attributes.
                                                             (line  335)
* 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  103)
* 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  718)
* 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   24)
* LIBRARY_PATH:                          Environment Variables.
                                                             (line   94)
* link options:                          Link Options.       (line    6)
* linker script:                         Link Options.       (line  177)
* '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  103)
* 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)
* longjmp:                               Global Reg Vars.    (line   66)
* 'longjmp' incompatibilities:           Incompatibilities.  (line   39)
* 'longjmp' warnings:                    Warning Options.    (line  640)
* '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)
* M68hc1x options:                       M68hc1x 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 containing 'asm':               Extended Asm.       (line  242)
* 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  173)
* malloc:                                Other Builtins.     (line    6)
* 'malloc' attribute:                    Function Attributes.
                                                             (line  777)
* matching constraint:                   Simple Constraints. (line  137)
* MCore options:                         MCore Options.      (line    6)
* 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)
* middle-operands, omitted:              Conditionals.       (line    6)
* MIPS options:                          MIPS Options.       (line    6)
* 'mips16' attribute:                    Function Attributes.
                                                             (line  787)
* misunderstandings in C++:              C++ Misunderstandings.
                                                             (line    6)
* mixed declarations and code:           Mixed Declarations. (line    6)
* 'mktemp', and constant strings:        Incompatibilities.  (line   13)
* MMIX Options:                          MMIX Options.       (line    6)
* MN10300 options:                       MN10300 Options.    (line    6)
* 'mode' attribute:                      Variable Attributes.
                                                             (line  134)
* modf:                                  Other Builtins.     (line    6)
* modff:                                 Other Builtins.     (line    6)
* modfl:                                 Other Builtins.     (line    6)
* modifiers in constraints:              Modifiers.          (line    6)
* 'ms_abi' attribute:                    Function Attributes.
                                                             (line  831)
* 'ms_hook_prologue' attribute:          Function Attributes.
                                                             (line  857)
* 'ms_struct':                           Type Attributes.    (line  318)
* 'ms_struct' attribute:                 Variable Attributes.
                                                             (line  414)
* mudflap:                               Optimize Options.   (line  391)
* multiple alternative constraints:      Multi-Alternative.  (line    6)
* multiprecision arithmetic:             Long Long.          (line    6)
* 'n' in constraint:                     Simple Constraints. (line   73)
* named address spaces:                  Named Address Spaces.
                                                             (line    6)
* names used in assembler code:          Asm Labels.         (line    6)
* naming convention, implementation headers: C++ Interface.  (line   46)
* nearbyint:                             Other Builtins.     (line    6)
* nearbyintf:                            Other Builtins.     (line    6)
* nearbyintl:                            Other Builtins.     (line    6)
* nested functions:                      Nested Functions.   (line    6)
* 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 1193)
* NFKC:                                  Warning Options.    (line 1193)
* NMI handler functions on the Blackfin processor: Function Attributes.
                                                             (line  891)
* 'noclone' function attribute:          Function Attributes.
                                                             (line  918)
* 'nocommon' attribute:                  Variable Attributes.
                                                             (line  105)
* 'noinline' function attribute:         Function Attributes.
                                                             (line  908)
* 'nomips16' attribute:                  Function Attributes.
                                                             (line  787)
* non-constant initializers:             Initializers.       (line    6)
* non-static inline function:            Inline.             (line   85)
* 'nonnull' function attribute:          Function Attributes.
                                                             (line  924)
* 'noreturn' function attribute:         Function Attributes.
                                                             (line  947)
* 'nothrow' function attribute:          Function Attributes.
                                                             (line  989)
* 'no_instrument_function' function attribute: Function Attributes.
                                                             (line  897)
* 'no_split_stack' function attribute:   Function Attributes.
                                                             (line  902)
* 'o' in constraint:                     Simple Constraints. (line   23)
* OBJC_INCLUDE_PATH:                     Environment Variables.
                                                             (line  127)
* Objective-C:                           G++ and GCC.        (line    6)
* Objective-C <1>:                       Standards.          (line  157)
* 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  157)
* 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)
* OpenMP parallel:                       C Dialect Options.  (line  237)
* operand constraints, 'asm':            Constraints.        (line    6)
* 'optimize' function attribute:         Function Attributes.
                                                             (line  997)
* 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' AVR function attribute:      Function Attributes.
                                                             (line 1014)
* 'OS_task' AVR function attribute:      Function Attributes.
                                                             (line 1014)
* other register constraints:            Simple Constraints. (line  161)
* output file option:                    Overall Options.    (line  191)
* overloaded virtual function, warning:  C++ Dialect Options.
                                                             (line  531)
* 'p' in constraint:                     Simple Constraints. (line  152)
* 'packed' attribute:                    Variable Attributes.
                                                             (line  145)
* parameter forward declaration:         Variable Length.    (line   59)
* Pascal:                                G++ and GCC.        (line   23)
* 'pcs' function attribute:              Function Attributes.
                                                             (line 1038)
* PDP-11 Options:                        PDP-11 Options.     (line    6)
* PIC:                                   Code Gen Options.   (line  182)
* picoChip options:                      picoChip Options.   (line    6)
* pmf:                                   Bound member functions.
                                                             (line    6)
* pointer arguments:                     Function Attributes.
                                                             (line  187)
* pointer to member function:            Bound member functions.
                                                             (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 optimize:                   Function Specific Option Pragmas.
                                                             (line   22)
* pragma GCC pop_options:                Function Specific Option Pragmas.
                                                             (line   36)
* pragma GCC push_options:               Function Specific Option Pragmas.
                                                             (line   36)
* pragma GCC reset_options:              Function Specific Option Pragmas.
                                                             (line   47)
* 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, extern_prefix:                 Symbol-Renaming Pragmas.
                                                             (line   21)
* 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 1757)
* pragma, redefine_extname:              Symbol-Renaming Pragmas.
                                                             (line   14)
* 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   66)
* pragmas, interface and implementation: C++ Interface.      (line    6)
* pragmas, warning of unknown:           Warning Options.    (line  657)
* 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  289)
* 'progmem' AVR variable attribute:      Variable Attributes.
                                                             (line  311)
* promotion of formal parameters:        Function Prototypes.
                                                             (line    6)
* 'pure' function attribute:             Function Attributes.
                                                             (line 1057)
* 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   42)
* question mark:                         Multi-Alternative.  (line   27)
* 'r' fixed-suffix:                      Fixed-Point.        (line    6)
* 'R' fixed-suffix:                      Fixed-Point.        (line    6)
* 'r' in constraint:                     Simple Constraints. (line   64)
* ranges in case statements:             Case Ranges.        (line    6)
* read-only strings:                     Incompatibilities.  (line    9)
* register variable after 'longjmp':     Global Reg Vars.    (line   66)
* registers:                             Extended Asm.       (line    6)
* 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' attribute:                   Function Attributes.
                                                             (line 1110)
* relocation truncated to fit (ColdFire): M680x0 Options.    (line  324)
* relocation truncated to fit (MIPS):    MIPS Options.       (line  199)
* 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)
* reordering, warning:                   C++ Dialect Options.
                                                             (line  458)
* reporting bugs:                        Bugs.               (line    6)
* 'resbank' attribute:                   Function Attributes.
                                                             (line 1142)
* 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_twice' attribute:             Function Attributes.
                                                             (line 1156)
* rindex:                                Other Builtins.     (line    6)
* rint:                                  Other Builtins.     (line    6)
* rintf:                                 Other Builtins.     (line    6)
* rintl:                                 Other Builtins.     (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 1165)
* save volatile registers on the MicroBlaze: Function Attributes.
                                                             (line 1170)
* 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 1178)
* 'section' variable attribute:          Variable Attributes.
                                                             (line  166)
* 'sentinel' function attribute:         Function Attributes.
                                                             (line 1194)
* setjmp:                                Global Reg Vars.    (line   66)
* 'setjmp' incompatibilities:            Incompatibilities.  (line   39)
* shared strings:                        Incompatibilities.  (line    9)
* 'shared' variable attribute:           Variable Attributes.
                                                             (line  211)
* side effect in '?:':                   Conditionals.       (line   20)
* side effects, macro argument:          Statement Exprs.    (line   35)
* side effects, order of evaluation:     Non-bugs.           (line  196)
* signal handler functions on the AVR processors: Function Attributes.
                                                             (line 1225)
* 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 1065)
* significand:                           Other Builtins.     (line    6)
* significandf:                          Other Builtins.     (line    6)
* significandl:                          Other Builtins.     (line    6)
* 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 (PowerPC):     RS/6000 and PowerPC Options.
                                                             (line  701)
* 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)
* 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' attribute:                Function Attributes.
                                                             (line 1127)
* statements inside expressions:         Statement Exprs.    (line    6)
* static data in C++, declaring and defining: Static Definitions.
                                                             (line    6)
* 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)
* 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  167)
* suppressing warnings:                  Warning Options.    (line    6)
* surprises in C++:                      C++ Misunderstandings.
                                                             (line    6)
* syntax checking:                       Warning Options.    (line   13)
* 'syscall_linkage' attribute:           Function Attributes.
                                                             (line 1247)
* system headers, warnings from:         Warning Options.    (line  788)
* 'sysv_abi' attribute:                  Function Attributes.
                                                             (line  831)
* 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 1254)
* target machine, specifying:            Target Options.     (line    6)
* target options:                        Target Options.     (line    6)
* 'target("abm")' attribute:             Function Attributes.
                                                             (line 1281)
* 'target("aes")' attribute:             Function Attributes.
                                                             (line 1286)
* 'target("align-stringops")' attribute: Function Attributes.
                                                             (line 1376)
* 'target("altivec")' attribute:         Function Attributes.
                                                             (line 1402)
* 'target("arch=ARCH")' attribute:       Function Attributes.
                                                             (line 1385)
* 'target("avoid-indexed-addresses")' attribute: Function Attributes.
                                                             (line 1522)
* 'target("cld")' attribute:             Function Attributes.
                                                             (line 1347)
* 'target("cmpb")' attribute:            Function Attributes.
                                                             (line 1408)
* 'target("cpu=CPU")' attribute:         Function Attributes.
                                                             (line 1537)
* 'target("dlmzb")' attribute:           Function Attributes.
                                                             (line 1414)
* 'target("fancy-math-387")' attribute:  Function Attributes.
                                                             (line 1351)
* 'target("fma4")' attribute:            Function Attributes.
                                                             (line 1331)
* 'target("fpmath=FPMATH")' attribute:   Function Attributes.
                                                             (line 1393)
* 'target("fprnd")' attribute:           Function Attributes.
                                                             (line 1421)
* 'target("friz")' attribute:            Function Attributes.
                                                             (line 1513)
* 'target("fused-madd")' attribute:      Function Attributes.
                                                             (line 1356)
* 'target("hard-dfp")' attribute:        Function Attributes.
                                                             (line 1427)
* 'target("ieee-fp")' attribute:         Function Attributes.
                                                             (line 1361)
* 'target("inline-all-stringops")' attribute: Function Attributes.
                                                             (line 1366)
* 'target("inline-stringops-dynamically")' attribute: Function Attributes.
                                                             (line 1370)
* 'target("isel")' attribute:            Function Attributes.
                                                             (line 1432)
* 'target("longcall")' attribute:        Function Attributes.
                                                             (line 1532)
* 'target("lwp")' attribute:             Function Attributes.
                                                             (line 1339)
* 'target("mfcrf")' attribute:           Function Attributes.
                                                             (line 1436)
* 'target("mfpgpr")' attribute:          Function Attributes.
                                                             (line 1443)
* 'target("mmx")' attribute:             Function Attributes.
                                                             (line 1290)
* 'target("mulhw")' attribute:           Function Attributes.
                                                             (line 1450)
* 'target("multiple")' attribute:        Function Attributes.
                                                             (line 1457)
* 'target("paired")' attribute:          Function Attributes.
                                                             (line 1527)
* 'target("pclmul")' attribute:          Function Attributes.
                                                             (line 1294)
* 'target("popcnt")' attribute:          Function Attributes.
                                                             (line 1298)
* 'target("popcntb")' attribute:         Function Attributes.
                                                             (line 1468)
* 'target("popcntd")' attribute:         Function Attributes.
                                                             (line 1475)
* 'target("powerpc-gfxopt")' attribute:  Function Attributes.
                                                             (line 1481)
* 'target("powerpc-gpopt")' attribute:   Function Attributes.
                                                             (line 1487)
* 'target("recip")' attribute:           Function Attributes.
                                                             (line 1380)
* 'target("recip-precision")' attribute: Function Attributes.
                                                             (line 1493)
* 'target("sse")' attribute:             Function Attributes.
                                                             (line 1302)
* 'target("sse2")' attribute:            Function Attributes.
                                                             (line 1306)
* 'target("sse3")' attribute:            Function Attributes.
                                                             (line 1310)
* 'target("sse4")' attribute:            Function Attributes.
                                                             (line 1314)
* 'target("sse4.1")' attribute:          Function Attributes.
                                                             (line 1319)
* 'target("sse4.2")' attribute:          Function Attributes.
                                                             (line 1323)
* 'target("sse4a")' attribute:           Function Attributes.
                                                             (line 1327)
* 'target("ssse3")' attribute:           Function Attributes.
                                                             (line 1343)
* 'target("string")' attribute:          Function Attributes.
                                                             (line 1499)
* 'target("tune=TUNE")' attribute:       Function Attributes.
                                                             (line 1389)
* 'target("tune=TUNE")' attribute <1>:   Function Attributes.
                                                             (line 1544)
* 'target("update")' attribute:          Function Attributes.
                                                             (line 1462)
* 'target("vsx")' attribute:             Function Attributes.
                                                             (line 1505)
* 'target("xop")' attribute:             Function Attributes.
                                                             (line 1335)
* 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)
* Thread-Local Storage:                  Thread-Local.       (line    6)
* thunks:                                Nested Functions.   (line    6)
* tiny data section on the H8/300H and H8S: Function Attributes.
                                                             (line 1565)
* TLS:                                   Thread-Local.       (line    6)
* 'tls_model' 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  285)
* 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  657)
* unresolved references and '-nodefaultlibs': Link Options.  (line   82)
* unresolved references and '-nostdlib': Link Options.       (line   82)
* 'unused' attribute.:                   Function Attributes.
                                                             (line 1577)
* 'ur' fixed-suffix:                     Fixed-Point.        (line    6)
* 'UR' fixed-suffix:                     Fixed-Point.        (line    6)
* 'used' attribute.:                     Function Attributes.
                                                             (line 1582)
* User stack pointer in interrupts on the Blackfin: Function Attributes.
                                                             (line  701)
* 'use_debug_exception_return' attribute: Function Attributes.
                                                             (line  623)
* 'use_shadow_register_set' attribute:   Function Attributes.
                                                             (line  614)
* '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   66)
* variable addressability on the IA-64:  Function Attributes.
                                                             (line  802)
* variable addressability on the M32R/D: Variable Attributes.
                                                             (line  345)
* variable alignment:                    Alignment.          (line    6)
* variable attributes:                   Variable Attributes.
                                                             (line    6)
* variable number of arguments:          Variadic Macros.    (line    6)
* 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)
* 'version_id' attribute:                Function Attributes.
                                                             (line 1588)
* vfprintf:                              Other Builtins.     (line    6)
* vfscanf:                               Other Builtins.     (line    6)
* 'visibility' attribute:                Function Attributes.
                                                             (line 1598)
* VLAs:                                  Variable Length.    (line    6)
* 'vliw' attribute:                      Function Attributes.
                                                             (line 1690)
* 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 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)
* warning for comparison of signed and unsigned values: Warning Options.
                                                             (line 1065)
* warning for overloaded virtual function: C++ Dialect Options.
                                                             (line  531)
* warning for reordering of member initializers: C++ Dialect Options.
                                                             (line  458)
* warning for unknown pragmas:           Warning Options.    (line  657)
* 'warning' function attribute:          Function Attributes.
                                                             (line  164)
* warning messages:                      Warning Options.    (line    6)
* warnings from system headers:          Warning Options.    (line  788)
* warnings vs errors:                    Warnings and Errors.
                                                             (line    6)
* 'warn_unused_result' attribute:        Function Attributes.
                                                             (line 1696)
* 'weak' attribute:                      Function Attributes.
                                                             (line 1713)
* 'weakref' attribute:                   Function Attributes.
                                                             (line 1722)
* whitespace:                            Incompatibilities.  (line  112)
* 'X' in constraint:                     Simple Constraints. (line  122)
* X3.159-1989:                           Standards.          (line   13)
* x86-64 Options:                        i386 and x86-64 Options.
                                                             (line    6)
* x86-64 options:                        x86-64 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2047
Node: G++ and GCC3828
Node: Standards5885
Node: Invoking GCC18058
Node: Option Summary21809
Node: Overall Options58536
Node: Invoking G++72822
Node: C Dialect Options74345
Node: C++ Dialect Options89422
Node: Objective-C and Objective-C++ Dialect Options114397
Node: Language Independent Options124935
Node: Warning Options127857
Node: Debugging Options191485
Node: Optimize Options239364
Ref: Type-punning295396
Node: Preprocessor Options367892
Ref: Wtrigraphs371991
Ref: dashMF376741
Ref: fdollars-in-identifiers387599
Node: Assembler Options396122
Node: Link Options396826
Ref: Link Options-Footnote-1407184
Node: Directory Options407520
Node: Spec Files413795
Node: Target Options435338
Node: Submodel Options435737
Node: ARC Options437356
Node: ARM Options438545
Node: AVR Options452279
Node: Blackfin Options457857
Node: CRIS Options465815
Node: CRX Options469541
Node: Darwin Options469968
Node: DEC Alpha Options477454
Node: DEC Alpha/VMS Options489398
Node: FR30 Options489972
Node: FRV Options490546
Node: GNU/Linux Options497308
Node: H8/300 Options498568
Node: HPPA Options499635
Node: i386 and x86-64 Options509135
Node: i386 and x86-64 Windows Options540410
Node: IA-64 Options542961
Node: IA-64/VMS Options550971
Node: LM32 Options551527
Node: M32C Options552055
Node: M32R/D Options553344
Node: M680x0 Options556930
Node: M68hc1x Options570924
Node: MCore Options572492
Node: MeP Options573998
Node: MicroBlaze Options577972
Node: MIPS Options580549
Node: MMIX Options608427
Node: MN10300 Options610904
Node: PDP-11 Options613111
Node: picoChip Options614805
Node: PowerPC Options617002
Node: RS/6000 and PowerPC Options617238
Node: RX Options653967
Node: S/390 and zSeries Options659531
Node: Score Options667447
Node: SH Options668282
Node: Solaris 2 Options679539
Node: SPARC Options681059
Node: SPU Options690866
Node: System V Options695871
Node: V850 Options696694
Node: VAX Options700271
Node: VxWorks Options700819
Node: x86-64 Options701974
Node: Xstormy16 Options702192
Node: Xtensa Options702481
Node: zSeries Options706815
Node: Code Gen Options707011
Node: Environment Variables733414
Node: Precompiled Headers741313
Node: C Implementation747506
Node: Translation implementation749176
Node: Environment implementation749749
Node: Identifiers implementation750298
Node: Characters implementation751351
Node: Integers implementation754157
Node: Floating point implementation755981
Node: Arrays and pointers implementation758908
Ref: Arrays and pointers implementation-Footnote-1760344
Node: Hints implementation760470
Node: Structures unions enumerations and bit-fields implementation761934
Node: Qualifiers implementation763919
Node: Declarators implementation765691
Node: Statements implementation766032
Node: Preprocessing directives implementation766358
Node: Library functions implementation768462
Node: Architecture implementation769101
Node: Locale-specific behavior implementation769803
Node: C++ Implementation770108
Node: Conditionally-supported behavior771391
Node: Exception handling771900
Node: C Extensions772308
Node: Statement Exprs777137
Node: Local Labels781650
Node: Labels as Values784629
Ref: Labels as Values-Footnote-1787040
Node: Nested Functions787225
Node: Constructing Calls791158
Node: Typeof795888
Node: Conditionals799203
Node: __int128800092
Node: Long Long800617
Node: Complex802114
Node: Floating Types804685
Node: Half-Precision805823
Node: Decimal Float808008
Node: Hex Floats809875
Node: Fixed-Point810917
Node: Named Address Spaces814189
Node: Zero Length815488
Node: Empty Structures818776
Node: Variable Length819188
Node: Variadic Macros821845
Node: Escaped Newlines824226
Node: Subscripting825065
Node: Pointer Arith825788
Node: Initializers826356
Node: Compound Literals826852
Node: Designated Inits829027
Node: Case Ranges832680
Node: Cast to Union833361
Node: Mixed Declarations834459
Node: Function Attributes834967
Node: Attribute Syntax916011
Node: Function Prototypes926455
Node: C++ Comments928235
Node: Dollar Signs928754
Node: Character Escapes929219
Node: Variable Attributes929513
Ref: MeP Variable Attributes944827
Ref: i386 Variable Attributes946783
Node: Type Attributes952478
Ref: MeP Type Attributes966220
Ref: i386 Type Attributes966494
Ref: PowerPC Type Attributes967335
Ref: SPU Type Attributes968197
Node: Alignment968488
Node: Inline969862
Node: Volatiles974849
Node: Extended Asm977743
Ref: Example of asm with clobbered asm reg983833
Ref: Extended asm with goto993600
Node: Constraints1001335
Node: Simple Constraints1002419
Node: Multi-Alternative1009729
Node: Modifiers1011446
Node: Machine Constraints1014339
Node: Asm Labels1053433
Node: Explicit Reg Vars1055109
Node: Global Reg Vars1056712
Node: Local Reg Vars1061262
Node: Alternate Keywords1063702
Node: Incomplete Enums1065188
Node: Function Names1065945
Node: Return Address1068107
Node: Vector Extensions1071660
Node: Offsetof1076068
Node: Atomic Builtins1076874
Node: Object Size Checking1082237
Node: Other Builtins1087665
Node: Target Builtins1114337
Node: Alpha Built-in Functions1115261
Node: ARM iWMMXt Built-in Functions1118260
Node: ARM NEON Intrinsics1124979
Node: Blackfin Built-in Functions1331189
Node: FR-V Built-in Functions1331803
Node: Argument Types1332664
Node: Directly-mapped Integer Functions1334420
Node: Directly-mapped Media Functions1335502
Node: Raw read/write Functions1343706
Node: Other Built-in Functions1344612
Node: X86 Built-in Functions1345801
Node: MIPS DSP Built-in Functions1390912
Node: MIPS Paired-Single Support1403358
Node: MIPS Loongson Built-in Functions1404859
Node: Paired-Single Arithmetic1411370
Node: Paired-Single Built-in Functions1412316
Node: MIPS-3D Built-in Functions1414986
Node: picoChip Built-in Functions1420362
Node: Other MIPS Built-in Functions1421721
Node: PowerPC AltiVec/VSX Built-in Functions1422251
Node: RX Built-in Functions1532911
Node: SPARC VIS Built-in Functions1536921
Node: SPU Built-in Functions1538599
Node: Target Format Checks1540382
Node: Solaris Format Checks1540814
Node: Darwin Format Checks1541240
Node: Pragmas1542067
Node: ARM Pragmas1542777
Node: M32C Pragmas1543380
Node: MeP Pragmas1544452
Node: RS/6000 and PowerPC Pragmas1546520
Node: Darwin Pragmas1547261
Node: Solaris Pragmas1548328
Node: Symbol-Renaming Pragmas1549492
Node: Structure-Packing Pragmas1552129
Node: Weak Pragmas1553774
Node: Diagnostic Pragmas1554508
Node: Visibility Pragmas1557538
Node: Push/Pop Macro Pragmas1558290
Node: Function Specific Option Pragmas1559264
Node: Unnamed Fields1561532
Node: Thread-Local1563769
Node: C99 Thread-Local Edits1565876
Node: C++98 Thread-Local Edits1567874
Node: Binary constants1571320
Node: C++ Extensions1571991
Node: C++ Volatiles1573633
Node: Restricted Pointers1575993
Node: Vague Linkage1577591
Node: C++ Interface1581247
Ref: C++ Interface-Footnote-11585546
Node: Template Instantiation1585685
Node: Bound member functions1592695
Node: C++ Attributes1594238
Node: Namespace Association1595896
Node: Type Traits1597311
Node: Java Exceptions1603661
Node: Deprecated Features1605058
Node: Backwards Compatibility1608026
Node: Objective-C1609384
Node: GNU Objective-C runtime API1609991
Node: Modern GNU Objective-C runtime API1610998
Node: Traditional GNU Objective-C runtime API1613434
Node: Executing code before main1615055
Node: What you can and what you cannot do in +load1617795
Node: Type encoding1620183
Node: Legacy type encoding1625210
Node: @encode1626300
Node: Method signatures1626841
Node: Garbage Collection1628833
Node: Constant string objects1631468
Node: compatibility_alias1633977
Node: Exceptions1634698
Node: Synchronization1637408
Node: Fast enumeration1638592
Node: Using fast enumeration1638904
Node: c99-like fast enumeration syntax1640115
Node: Fast enumeration details1640818
Node: Fast enumeration protocol1643158
Node: Messaging with the GNU Objective-C runtime1646310
Node: Dynamically registering methods1647682
Node: Forwarding hook1649373
Node: Compatibility1652412
Node: Gcov1658968
Node: Gcov Intro1659501
Node: Invoking Gcov1662219
Node: Gcov and Optimization1674149
Node: Gcov Data Files1676805
Node: Cross-profiling1677945
Node: Trouble1679799
Node: Actual Bugs1681284
Node: Cross-Compiler Problems1681740
Node: Interoperation1682154
Node: Incompatibilities1689290
Node: Fixed Headers1697442
Node: Standard Libraries1699100
Node: Disappointments1700472
Node: C++ Misunderstandings1704831
Node: Static Definitions1705642
Node: Name lookup1706695
Ref: Name lookup-Footnote-11711475
Node: Temporaries1711664
Node: Copy Assignment1713640
Node: Non-bugs1715447
Node: Warnings and Errors1725953
Node: Bugs1727717
Node: Bug Criteria1728281
Node: Bug Reporting1730491
Node: Service1730712
Node: Contributing1731531
Node: Funding1732271
Node: GNU Project1734761
Node: Copying1735407
Node: GNU Free Documentation License1772916
Node: Contributors1798034
Node: Option Index1834904
Node: Keyword Index2013523

End Tag Table
